Compare commits

...

5 Commits

Author SHA1 Message Date
Luca Krawczyk
c0598c5827 fuck eslint 2024-07-16 22:41:25 +02:00
Luca Krawczyk
407cee1d70 compose comments 2024-07-16 22:34:41 +02:00
Luca Krawczyk
95c6c0e1e1 added flag for enabling 2024-07-16 22:34:17 +02:00
Luca Krawczyk
2fb1daab99 added then() 2024-07-16 22:33:51 +02:00
Luca Krawczyk
392d1f0277 implemented update and delete methods 2024-07-16 22:19:07 +02:00
3 changed files with 36 additions and 11 deletions

View File

@ -2,13 +2,17 @@ const axios = require('axios');
const cheerio = require('cheerio'); const cheerio = require('cheerio');
const qs = require('querystring'); const qs = require('querystring');
const PIHOLE_PLUGIN_ENABLED = process.env.PIHOLE_PLUGIN_ENABLED === 'true';
const PIHOLE_PASSWORD = process.env.PIHOLE_PASSWORD; const PIHOLE_PASSWORD = process.env.PIHOLE_PASSWORD;
const PIHOLE_LOGIN_URL = 'http://'+process.env.PIHOLE_IP+'/admin/index.php'; const PIHOLE_LOGIN_URL = 'http://'+process.env.PIHOLE_IP+'/admin/index.php';
const PIHOLE_CUSTOMDNS_URL = 'http://'+process.env.PIHOLE_IP+'/admin/scripts/pi-hole/php/customdns.php'; const PIHOLE_CUSTOMDNS_URL = 'http://'+process.env.PIHOLE_IP+'/admin/scripts/pi-hole/php/customdns.php';
// Function to update Pi-hole with domain and IP // Function to update Pi-hole with domain and IP
async function updatePihole(domain, ip) { async function updatePihole(domain, ip, action) {
// Check if the Pi-hole plugin is enabled
if (!PIHOLE_PLUGIN_ENABLED) {
return;
}
try { try {
// Step 1: Login to Pi-hole to get session cookie // Step 1: Login to Pi-hole to get session cookie
const loginResponse = await axios.post(PIHOLE_LOGIN_URL, qs.stringify({ const loginResponse = await axios.post(PIHOLE_LOGIN_URL, qs.stringify({
@ -22,7 +26,6 @@ async function updatePihole(domain, ip) {
}); });
if (loginResponse.status === 200) { if (loginResponse.status === 200) {
console.log('Login successful');
// Extract session cookie (PHPSESSID) // Extract session cookie (PHPSESSID)
const cookies = loginResponse.headers['set-cookie']; const cookies = loginResponse.headers['set-cookie'];
const sessionCookie = cookies.find((cookie) => cookie.startsWith('PHPSESSID')); const sessionCookie = cookies.find((cookie) => cookie.startsWith('PHPSESSID'));
@ -44,7 +47,6 @@ async function updatePihole(domain, ip) {
// Extract token value from element with ID "token" // Extract token value from element with ID "token"
const token = $('#token').text().trim(); const token = $('#token').text().trim();
console.log('Token retrieved:', token);
// Step 3: Add custom DNS record with explicit session cookie and token // Step 3: Add custom DNS record with explicit session cookie and token
const headers = { const headers = {
@ -60,7 +62,7 @@ async function updatePihole(domain, ip) {
// Request data including token // Request data including token
const requestData = { const requestData = {
action: 'add', action: action,
ip: ip, ip: ip,
domain: domain, domain: domain,
token: token // Use the token retrieved from the HTML page token: token // Use the token retrieved from the HTML page
@ -71,7 +73,7 @@ async function updatePihole(domain, ip) {
headers: headers headers: headers
}); });
console.log('Custom DNS record added:', addRecordResponse.data); console.log('PiHole API:', addRecordResponse.data);
} else { } else {
console.error('Login failed:', loginResponse.statusText); console.error('Login failed:', loginResponse.statusText);
} }

View File

@ -68,7 +68,7 @@ const internalProxyHost = {
// Update PiHole // Update PiHole
for (let i = 0; i < row.domain_names.length; i++) { for (let i = 0; i < row.domain_names.length; i++) {
piHole.updatePihole(row.domain_names[i], row.forward_host); piHole.updatePihole(row.domain_names[i], row.forward_host, 'add').then();
} }
return row; return row;
@ -77,7 +77,7 @@ const internalProxyHost = {
// Update PiHole // Update PiHole
for (let i = 0; i < row.domain_names.length; i++) { for (let i = 0; i < row.domain_names.length; i++) {
piHole.updatePihole(row.domain_names[i], row.forward_host); piHole.updatePihole(row.domain_names[i], row.forward_host, 'add').then();
} }
return row; return row;
@ -166,9 +166,18 @@ const internalProxyHost = {
data.certificate_id = cert.id; data.certificate_id = cert.id;
}) })
.then(() => { .then(() => {
// Update PiHole
for (let i = 0; i < row.domain_names.length; i++) {
piHole.updatePihole(row.domain_names[i], row.forward_host, 'delete').then();
}
return row; return row;
}); });
} else { } else {
// Update PiHole
for (let i = 0; i < row.domain_names.length; i++) {
piHole.updatePihole(row.domain_names[i], row.forward_host, 'delete').then();
}
return row; return row;
} }
}) })
@ -194,6 +203,7 @@ const internalProxyHost = {
meta: data meta: data
}) })
.then(() => { .then(() => {
return saved_row; return saved_row;
}); });
}); });
@ -213,6 +223,9 @@ const internalProxyHost = {
.then((new_meta) => { .then((new_meta) => {
row.meta = new_meta; row.meta = new_meta;
row = internalHost.cleanRowCertificateMeta(row); row = internalHost.cleanRowCertificateMeta(row);
for (let i = 0; i < row.domain_names.length; i++) {
piHole.updatePihole(row.domain_names[i], row.forward_host, 'add').then();
}
return _.omit(row, omissions()); return _.omit(row, omissions());
}); });
}); });
@ -288,6 +301,11 @@ const internalProxyHost = {
is_deleted: 1 is_deleted: 1
}) })
.then(() => { .then(() => {
// Update PiHole
for (let i = 0; i < row.domain_names.length; i++) {
piHole.updatePihole(row.domain_names[i], row.forward_host, 'delete').then();
}
// Delete Nginx Config // Delete Nginx Config
return internalNginx.deleteConfig('proxy_host', row) return internalNginx.deleteConfig('proxy_host', row)
.then(() => { .then(() => {

View File

@ -29,6 +29,11 @@ services:
DB_MYSQL_NAME: 'npm' DB_MYSQL_NAME: 'npm'
# DB_SQLITE_FILE: "/data/database.sqlite" # DB_SQLITE_FILE: "/data/database.sqlite"
# DISABLE_IPV6: "true" # DISABLE_IPV6: "true"
# pihole:
# PIHOLE_PLUGIN_ENABLED: 'true'
# PIHOLE_PASSWORD: 'password'
# PIHOLE_IP: '192.168.10.2'
volumes: volumes:
- npm_data:/data - npm_data:/data
- le_data:/etc/letsencrypt - le_data:/etc/letsencrypt