- Cloudflare e configurazione dominio DNS (host, host_test, host_ip, ecc...)

This commit is contained in:
Surya Paolo
2024-09-09 21:49:25 +02:00
parent fe4a67c9f1
commit 13322a7e0b
7 changed files with 166 additions and 26 deletions

View File

@@ -33,6 +33,16 @@ class CloudFlare {
// Estrai i dati dalla risposta
this.zones = response.data.result;
if (this.zones && this.zones.length > 0) {
for (const zone of this.zones) {
let domain = zone.name;
await this.findAndUpdateOnSite(domain, zone, apiToken);
// Cerca su Site
}
}
return this.zones;
// Stampa le zone
@@ -42,6 +52,40 @@ class CloudFlare {
}
}
async findAndUpdateOnSite(domain, zone, apiToken) {
try {
const Site = require('../models/site');
const recsite = await Site.findOne({ host: domain });
if (recsite) {
// Aggiorna i parametri token e zoneId
let modif = (recsite.cf_token !== apiToken) || (recsite.cf_zoneId !== zone.id);
if (modif) {
// update the Site
await Site.findOneAndUpdate({ _id: recsite._id }, {
$set: {
cf_token: apiToken,
cf_zoneId: zone.id
}
}, { new: true })
.then((updatedSite) => {
console.log('Site aggiornato:', updatedSite);
})
.catch((error) => {
console.error('Errore durante l\'aggiornamento del Site:', error);
});
}
}
} catch (error) {
console.error('Errore durante il recupero dei record DNS di Cloudflare:', error.message);
}
}
// Funzione per estrarre i record DNS
async fetchDNSRecords(apiToken, zoneId) {
const apiUrlDNS = apiUrl + `/zones/${zoneId}/dns_records`;
@@ -85,6 +129,48 @@ class CloudFlare {
console.error('Errore durante l\'aggiornamento del record DNS:', error.message);
}
}
async setCorrectIpsOnDNS(domainrec) {
const arrparams = [{ urladd: '', paramsite: 'host_ip' }, { urladd: 'test.', paramsite: 'host_test_ip' }, { urladd: 'api.', paramsite: 'host_api_ip' }, { urladd: 'testapi.', paramsite: 'host_testapi_ip' }]
for (let i = 0; i < arrparams.length; i++) {
this.setSingleIpsOnDNS(domainrec.name, arrparams[i])
}
// pause for 3 second
await new Promise(resolve => setTimeout(resolve, 3000));
}
async setSingleIpsOnDNS(domain, paramobj) {
try {
// get the parameters (Token and zoneId on Database)
const Site = require('../models/site');
await Site.findOne({ host: domain }).lean()
.then(async (site) => {
if (site) {
if (site.cf_token && site.cf_zoneId) {
const myarrrecdns = await this.fetchDNSRecords(site.cf_token, site.cf_zoneId);
// find
let recTypeA = await myarrrecdns.find((rec) => rec.type === 'A' && (rec.name === (paramobj.urladd + domain)));
if (recTypeA && site[paramobj.paramsite]) {
if (recTypeA.content !== site[paramobj.paramsite]) {
recTypeA.content = site[paramobj.paramsite];
return this.updateDNSRecord(site.cf_token, site.cf_zoneId, recTypeA.id, recTypeA);
}
}
}
}
});
} catch (e) {
console.error('e', e);
}
}
}
module.exports = CloudFlare