Files
freeplanet_serverside/src/server/modules/Mailinabox.js
2024-09-17 17:38:47 +02:00

222 lines
6.6 KiB
JavaScript

const axios = require('axios');
const apiUrl = 'https://api.cloudflare.com/client/v4'; // Endpoint
class Mailinabox {
constructor(config) {
this.config = config ? config : {};
if (!this.config.miabHost) {
this.config.miabHost = process.env.MIAB_HOST;
this.config.adminEmail = process.env.MIAB_ADMIN_EMAIL;
this.config.adminPassword = process.env.MIAB_ADMIN_PASSWORD;
}
}
init() {
if (this.config.arrTokens) {
this.zones = [];
}
}
checkIfParamOk() {
if (!this.config.miabHost || !this.config.adminEmail || !this.config.adminPassword) {
console.error('Configurazione mancante per il recupero del record DKIM.');
return false;
}
return true;
}
// Funzione per ottenere il record DKIM
async getDKIMRecord(domain) {
if (!this.checkIfParamOk()) {
return '';
}
const url = `https://${this.config.miabHost}/admin/dns/zonefile/${domain}`;
const auth = Buffer.from(`${this.config.adminEmail}:${this.config.adminPassword}`).toString('base64');
try {
const response = await axios.get(url, {
headers: {
'Authorization': `Basic ${auth}`
}
});
// console.log(`Record DNS esterni per ${config.domain}:`);
// Analizza la risposta per estrarre i record DNS
const records = response.data.split('\n')
.filter(line => line.trim() !== '' && !line.startsWith(';'))
.map(line => line.trim());
// Trova e stampa il record DKIM
const dkimRecord = records.find(record => record.includes('mail._domainkey'));
if (dkimRecord) {
const pattern = /p=([A-Za-z0-9+/=]+)(?:"\s*"([A-Za-z0-9+/=]+))?/;
// Esegui la ricerca
const match = dkimRecord.match(pattern);
if (match) {
// Concatena le due parti trovate di 'p', la seconda parte è facoltativa
return match[1] + (match[2] || '');
} else {
console.log('Record DKIM non trovato.');
}
}
return '';
} catch (error) {
console.error('Errore nel recupero del record DKIM:', error.message);
if (error.response) {
console.error('Dettagli errore:', error.response.data);
}
}
return '';
}
async MIAB_getEmails(myrec) {
if (!this.checkIfParamOk() || !myrec.domain) {
return;
}
const url = `https://${this.config.miabHost}/admin/mail/users?format=text`;
const auth = Buffer.from(`${this.config.adminEmail}:${this.config.adminPassword}`).toString('base64');
try {
const response = await axios.get(url, {
headers: {
'Authorization': `Basic ${auth}`
}
});
const records = response.data.split('\n')
.filter(line => line.trim() !== '' && line.indexOf(myrec.domain) > -1)
.map(line => line.trim());
return records;
} catch (error) {
console.error('Errore nel recupero delle Email ', error.message);
if (error.response) {
console.error('Dettagli errore:', error.response.data);
}
}
return '';
}
async removeEmail(myrec) {
if (!this.checkIfParamOk() || !myrec.email) {
return;
}
const url = `https://${this.config.miabHost}/admin/mail/users/remove`;
const auth = Buffer.from(`${this.config.adminEmail}:${this.config.adminPassword}`).toString('base64');
try {
const myrecout = `email=${myrec.email}`;
const response = await axios.post(url, myrecout, {
headers: {
'Authorization': `Basic ${auth}`
}
});
const ris = response.data;
return ris;
} catch (error) {
console.error('Errore nella cancellazione della Email ' + record.email, error.message);
if (error.response) {
console.error('Dettagli errore:', error.response.data);
}
}
return '';
}
async addEmail(myrec) {
if (!this.checkIfParamOk() || !myrec.email) {
return;
}
const url = `https://${this.config.miabHost}/admin/mail/users/add`;
const auth = Buffer.from(`${this.config.adminEmail}:${this.config.adminPassword}`).toString('base64');
try {
let privileges = myrec.privileges ? 'admin' : ''
const myrecout = `email=${myrec.email}&password=${myrec.pwd}&privileges="${privileges}"`;
const response = await axios.post(url, myrecout, {
headers: {
'Authorization': `Basic ${auth}`
}
});
const ris = response.data;
return ris;
} catch (error) {
console.error('Errore nella creazione della Email ' + record.email, error.message);
if (error.response) {
console.error('Dettagli errore:', error.response.data);
}
}
return '';
}
async setMailUserPassword(myrec) {
if (!this.checkIfParamOk() || !myrec.email) {
return;
}
const url = `https://${this.config.miabHost}/admin/mail/users/password`;
const auth = Buffer.from(`${this.config.adminEmail}:${this.config.adminPassword}`).toString('base64');
try {
let data = `email=${myrec.email}&password=${myrec.pwd}`;
const response = await axios.post(url,
data,
{
headers: {
'Authorization': `Basic ${auth}`,
'Content-Type': 'application/x-www-form-urlencoded',
}
});
let ris = '';
if (response.status === 200) {
ris = `Password cambiata con successo per ${myrec.email}`;
} else {
ris = `Errore nel cambio password per ${myrec.email}`;
}
return ris;
} catch (error) {
console.error('Errore nella creazione della Email ' + record.email, error.message);
if (error.response) {
console.error('Dettagli errore:', error.response.data);
}
}
return '';
}
}
module.exports = Mailinabox