Skip to content

Commit

Permalink
- update local deps, format, bump version (#7)
Browse files Browse the repository at this point in the history
  • Loading branch information
nosovk authored Feb 26, 2025
1 parent 06df872 commit 1e62e5a
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 66 deletions.
108 changes: 54 additions & 54 deletions cloudflare.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict'

const fs = require('node:fs/promises');
const { request } = require('undici');
const fs = require('node:fs/promises')
const { request } = require('undici')

const CLOUDFLARE_API_URL = 'https://api.cloudflare.com/client/v4/'

Expand Down Expand Up @@ -202,26 +202,26 @@ class CloudFlare {
}
})

const response = await body.json();
const response = await body.json()

if (statusCode !== 200) {
throw new Error(`Could not get firewall rules: ${statusCode}, error: ${JSON.stringify(response)}`)
}

const { id, rules } = response;
const { id, rules } = response
if (!id) {
throw new Error(`Could not get firewall rules ruleset ID: got ${id}, received value: ${JSON.stringify(response)}`)
}

return { id, rules };
return { id, rules }
}

async createFirewallRule (rulesetId, firewallRule) {
const url = CLOUDFLARE_API_URL + `zones/${this.zoneId}/rulesets/${rulesetId}/rules`
// Spread "filter" property from deprecated rule API
const filter = firewallRule?.filter ?? {};
const rule = { ...firewallRule, ...filter };
delete rule['filter'];
const filter = firewallRule?.filter ?? {}
const rule = { ...firewallRule, ...filter }
delete rule.filter

const { statusCode, body } = await request(url, {
method: 'POST',
Expand All @@ -242,11 +242,11 @@ class CloudFlare {
}

async updateFirewallRule (rulesetId, ruleId, firewallRule) {
const url = CLOUDFLARE_API_URL + `zones/${this.zoneId}/rulesets/${rulesetId}/rules/${ruleId}`;
const url = CLOUDFLARE_API_URL + `zones/${this.zoneId}/rulesets/${rulesetId}/rules/${ruleId}`
// Spread "filter" property from deprecated rule API
const filter = firewallRule?.filter ?? {};
const rule = { ...firewallRule, ...filter };
delete rule['filter'];
const filter = firewallRule?.filter ?? {}
const rule = { ...firewallRule, ...filter }
delete rule.filter

const { statusCode, body } = await request(url, {
method: 'PATCH',
Expand Down Expand Up @@ -286,7 +286,7 @@ class CloudFlare {
}
}

async getRedirectRules() {
async getRedirectRules () {
const url = CLOUDFLARE_API_URL + `zones/${this.zoneId}/rulesets/phases/http_request_dynamic_redirect/entrypoint`

const { statusCode, body } = await request(url, {
Expand All @@ -297,18 +297,18 @@ class CloudFlare {
}
})

const response = await body.json();
const response = await body.json()

if (statusCode === 404) {
// Create http_request_dynamic_redirect ruleset if one doesn't exist
console.log('Ruleset was not found. Initializing redirect ruleset creation...');
const createRulesetUrl = CLOUDFLARE_API_URL + `zones/${this.zoneId}/rulesets`;
console.log('Ruleset was not found. Initializing redirect ruleset creation...')
const createRulesetUrl = CLOUDFLARE_API_URL + `zones/${this.zoneId}/rulesets`
const payload = {
name: 'Redirect rules ruleset',
kind: 'zone',
phase: 'http_request_dynamic_redirect',
rules: []
};
}

const { statusCode: createStatusCode, body: createBody } = await request(createRulesetUrl, {
method: 'POST',
Expand All @@ -317,35 +317,35 @@ class CloudFlare {
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});
})

const createResponse = await createBody.json();
const createResponse = await createBody.json()

if (createStatusCode !== 200) {
throw new Error(`Could not create redirect ruleset: ${statusCode}, error: ${JSON.stringify(createResponse)}`)
}

const { id, rules } = createResponse;
const { id, rules } = createResponse
if (!id) {
throw new Error(`Could not get redirect rules ruleset ID: got ${id}, received value: ${JSON.stringify(response)}`)
}

return { id, rules: rules ?? [] };
return { id, rules: rules ?? [] }
} else {
if (statusCode !== 200) {
throw new Error(`Could not get redirect rules: ${statusCode}, error: ${JSON.stringify(response)}`)
}

const { id, rules } = response;
const { id, rules } = response
if (!id) {
throw new Error(`Could not get redirect rules ruleset ID: got ${id}, received value: ${JSON.stringify(response)}`)
}

return { id, rules: rules ?? [] };
return { id, rules: rules ?? [] }
}
}

async createRedirectRule(rulesetId, redirectRule) {
async createRedirectRule (rulesetId, redirectRule) {
const url = CLOUDFLARE_API_URL + `zones/${this.zoneId}/rulesets/${rulesetId}/rules`

const { statusCode, body } = await request(url, {
Expand All @@ -366,8 +366,8 @@ class CloudFlare {
return response
}

async updateRedirectRule(rulesetId, ruleId, redirectRule) {
const url = CLOUDFLARE_API_URL + `zones/${this.zoneId}/rulesets/${rulesetId}/rules/${ruleId}`;
async updateRedirectRule (rulesetId, ruleId, redirectRule) {
const url = CLOUDFLARE_API_URL + `zones/${this.zoneId}/rulesets/${rulesetId}/rules/${ruleId}`

const { statusCode, body } = await request(url, {
method: 'PATCH',
Expand All @@ -387,7 +387,7 @@ class CloudFlare {
return response
}

async rewriteRedirectRules(redirectRules) {
async rewriteRedirectRules (redirectRules) {
const { id: rulesetId, rules: currentRedirectRules } = await this.getRedirectRules()

for (const redirectRule of redirectRules) {
Expand Down Expand Up @@ -804,30 +804,30 @@ class CloudFlare {
return response
}

async uploadTlsClientAuth({ client_key, client_cert, ca_cert }) {
async uploadTlsClientAuth ({ clientKey, clientCert, caCert }) {
try {
await fs.access(client_key, fs.constants.R_OK);
await fs.access(client_cert, fs.constants.R_OK);
await fs.access(ca_cert, fs.constants.R_OK);
await fs.access(clientKey, fs.constants.R_OK)
await fs.access(clientCert, fs.constants.R_OK)
await fs.access(caCert, fs.constants.R_OK)
} catch (e) {
throw new Error(`Cannot access file: ${e?.message}`)
}

const clientKeyContents = await fs.readFile(client_key, 'utf8');
const clientCertContents = await fs.readFile(client_cert, 'utf8');
const caCertContents = await fs.readFile(ca_cert, 'utf8');
const clientKeyContents = await fs.readFile(clientKey, 'utf8')
const clientCertContents = await fs.readFile(clientCert, 'utf8')
const caCertContents = await fs.readFile(caCert, 'utf8')

await this.uploadCertAndKey(clientCertContents, clientKeyContents);
await this.uploadCaCert(caCertContents);
await this.enableTLSClientAuth();
await this.uploadCertAndKey(clientCertContents, clientKeyContents)
await this.uploadCaCert(caCertContents)
await this.enableTLSClientAuth()
}

async uploadCertAndKey(clientCert, clientKey) {
const url = CLOUDFLARE_API_URL + `zones/${this.zoneId}/origin_tls_client_auth`;
async uploadCertAndKey (clientCert, clientKey) {
const url = CLOUDFLARE_API_URL + `zones/${this.zoneId}/origin_tls_client_auth`
const payload = {
certificate: clientCert,
private_key: clientKey
};
}

const { statusCode, body } = await request(url, {
method: 'POST',
Expand All @@ -836,20 +836,20 @@ class CloudFlare {
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});
})

const response = await body.json();
const response = await body.json()

if (statusCode !== 200) {
throw new Error(`Could not upload certificate and private key: ${statusCode}, error: ${JSON.stringify(response)}`);
throw new Error(`Could not upload certificate and private key: ${statusCode}, error: ${JSON.stringify(response)}`)
}
}

async uploadCaCert(caCert) {
const url = CLOUDFLARE_API_URL + `zones/${this.zoneId}/acm/custom_trust_store`;
async uploadCaCert (caCert) {
const url = CLOUDFLARE_API_URL + `zones/${this.zoneId}/acm/custom_trust_store`
const payload = {
certificate: caCert
};
}

const { statusCode, body } = await request(url, {
method: 'POST',
Expand All @@ -858,30 +858,30 @@ class CloudFlare {
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});
})

const response = await body.json();
const response = await body.json()

if (statusCode !== 200) {
throw new Error(`Could not upload CA certificate: ${statusCode}, error: ${JSON.stringify(response)}`);
throw new Error(`Could not upload CA certificate: ${statusCode}, error: ${JSON.stringify(response)}`)
}
}

async enableTLSClientAuth() {
const url = CLOUDFLARE_API_URL + `zones/${this.zoneId}/settings/tls_client_auth`;
async enableTLSClientAuth () {
const url = CLOUDFLARE_API_URL + `zones/${this.zoneId}/settings/tls_client_auth`
const { statusCode, body } = await request(url, {
method: 'PATCH',
headers: {
...this.authorizationHeaders,
'Content-Type': 'application/json'
},
body: JSON.stringify({ value: 'on' })
});
})

const response = await body.json();
const response = await body.json()

if (statusCode !== 200) {
throw new Error(`Could not enable TSL Client Auth setting: ${statusCode}, error: ${JSON.stringify(response)}`);
throw new Error(`Could not enable TSL Client Auth setting: ${statusCode}, error: ${JSON.stringify(response)}`)
}
}
}
Expand Down
21 changes: 11 additions & 10 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@nodeart/cloudflare-provisioning",
"version": "1.0.4",
"version": "1.0.5",
"description": "",
"main": "index.js",
"scripts": {
Expand All @@ -15,6 +15,6 @@
"standard": "^17.0.0"
},
"dependencies": {
"undici": "^5.10.0"
"undici": "^7.3.0"
}
}

0 comments on commit 1e62e5a

Please sign in to comment.