uuid generator included

This commit is contained in:
Evert Prants 2021-07-08 14:44:05 +03:00
parent 76e85ad9ec
commit 6d8a1a959c
7 changed files with 54 additions and 16 deletions

29
package-lock.json generated
View File

@ -10,12 +10,14 @@
"dependencies": {
"cors": "^2.8.5",
"express": "^4.17.1",
"express-async-errors": "^3.1.1"
"express-async-errors": "^3.1.1",
"uuid": "^8.3.2"
},
"devDependencies": {
"@types/cors": "^2.8.10",
"@types/express": "^4.17.11",
"@types/node": "^15.3.0",
"@types/uuid": "^8.3.1",
"typescript": "^4.2.4"
}
},
@ -101,6 +103,12 @@
"@types/node": "*"
}
},
"node_modules/@types/uuid": {
"version": "8.3.1",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz",
"integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==",
"dev": true
},
"node_modules/accepts": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
@ -609,6 +617,14 @@
"node": ">= 0.4.0"
}
},
"node_modules/uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@ -701,6 +717,12 @@
"@types/node": "*"
}
},
"@types/uuid": {
"version": "8.3.1",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz",
"integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==",
"dev": true
},
"accepts": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
@ -1088,6 +1110,11 @@
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",

View File

@ -15,12 +15,14 @@
"dependencies": {
"cors": "^2.8.5",
"express": "^4.17.1",
"express-async-errors": "^3.1.1"
"express-async-errors": "^3.1.1",
"uuid": "^8.3.2"
},
"devDependencies": {
"@types/cors": "^2.8.10",
"@types/express": "^4.17.11",
"@types/node": "^15.3.0",
"@types/uuid": "^8.3.1",
"typescript": "^4.2.4"
}
}

View File

@ -1,3 +1,4 @@
import { logger } from '../log/Logger';
import { CachedZone, DNSRecord, SOARecord } from '../models/interfaces';
import { readZoneFile } from './reader';
import { DNSRecordType } from './records';
@ -122,7 +123,7 @@ export class DNSCache {
try {
await this.rndc.reload(name);
} catch (e) {
console.warn('%s automatic zone reload failed:', name, e.stack);
logger.warn('%s automatic zone reload failed:', name, e.stack);
}
}
}

View File

@ -515,7 +515,7 @@ api.post('/set-ip/:domain', domainAuthorization, async (req, res) => {
message: 'Waiting for next request..',
actions
});
logger.info('set-ip (partial) from %s: %s', req.ip, actions.join('\n'));
logger.info('zone %s set-ip (partial) from %s: %s', domain, req.ip, actions.join('\n'));
return;
}
@ -526,7 +526,7 @@ api.post('/set-ip/:domain', domainAuthorization, async (req, res) => {
message: 'Successfully updated zone file.',
actions
});
logger.info('set-ip from %s: %s', req.ip, actions.join('\n'));
logger.info('zone %s set-ip from %s: %s', domain, req.ip, actions.join('\n'));
});
const errorHandler: ErrorRequestHandler = (err: any, req: Request, res: Response, next: NextFunction) => {
@ -553,4 +553,9 @@ async function load() {
app.listen(port, () => logger.info(`listening on ${port}`));
}
if (process.argv.includes('genkey')) {
console.log(Keys.generateKey());
process.exit();
}
load().catch((e) => console.error(e.stack));

View File

@ -2,19 +2,15 @@ import { Request } from "express";
import { validv4, validv6 } from "./validators";
export function fromRequest(req: Request): { v4: string | null, v6: string | null } {
let v4 = null;
let v4: null | string = null;
const qv4 = req.query.ipv4 || req.body.ipv4;
let v6 = null;
let v6: null | string = null;
const qv6 = req.query.ipv6 || req.body.ipv6;
// Lets begin our trials
// Determine Address from request headers
if (req.header('x-forwarded-for')) {
v4 = req.header('x-forwarded-for');
} else {
v4 = req.socket.remoteAddress;
}
// Determine Address from request IP
v4 = req.ip;
if (v4 && !validv4(v4)) {
v6 = v4

View File

@ -1,4 +1,5 @@
import * as fs from 'fs/promises';
import { v4 } from 'uuid';
import path from 'path';
export class Keys {
@ -27,4 +28,8 @@ export class Keys {
getKey(domain: string): string | undefined {
return Object.keys(this.keys).find((key) => this.keys[key] === domain);
}
static generateKey(): string {
return v4();
}
}

View File

@ -16,9 +16,10 @@ export class Logger {
private day = 0;
private stream?: WriteStream;
constructor(public logDir: string, public logToFile = true) {
this.day = new Date().getDate();
}
constructor(
public logDir: string,
public logToFile = true
) {}
static formatLogDate(date: Date): string {
return `${date.getFullYear()}-${p(date.getMonth() + 1)}-${p(date.getDate())}`;
@ -88,4 +89,5 @@ export class Logger {
}
}
/** Logger singleton */
export const logger = Logger.fromEnvironment();