- Cloudflare e configurazione dominio DNS (host, host_test, host_ip, ecc...)
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user