Added base config manager

This commit is contained in:
Jonathan Barrow 2022-10-08 09:24:03 -04:00
parent 20e593832b
commit 3dceb422c5
No known key found for this signature in database
GPG Key ID: E86E9FE9049C741F
9 changed files with 65 additions and 10 deletions

View File

@ -1,6 +1,6 @@
const fs = require('fs-extra');
const redis = require('redis');
const config = require('../config.json');
const { config } = require('./config-manager');
let client;
const SERVICE_CERTS_BASE = `${__dirname}/../certs/service`;

52
src/config-manager.js Normal file
View File

@ -0,0 +1,52 @@
const fs = require('fs-extra');
const logger = require('../logger');
/**
* @typedef {Object} Config
* @property {object} http HTTP server settings
* @property {number} http.port HTTP port the server will listen on
* @property {object} mongoose Mongose connection settings
* @property {string} mongoose.uri URI Mongoose will connect to
* @property {string} mongoose.database MongoDB database name
* @property {object} mongoose.options MongoDB connection options
* @property {object} redis redis settings
* @property {string} redis.client redis client settings
* @property {string} redis.client.url redis server URL
* @property {object} email node-mailer client settings
* @property {string} email.host SMTP server address
* @property {number} email.port SMTP server port
* @property {boolean} email.secure Secure SMTP
* @property {string} email.from Email "from" name/address
* @property {object} email.auth Email authentication settings
* @property {string} email.auth.user Email username
* @property {string} email.auth.pass Email password
* @property {object} aws s3 client settings
* @property {object} aws.spaces Digital Ocean Spaces settings
* @property {string} aws.spaces.key s3 access key
* @property {string} aws.spaces.secret s3 access secret
* @property {object} hcaptcha hCaptcha settings
* @property {string} hcaptcha.secret hCaptcha secret
* @property {string} cdn_base Base URL for CDN location
* @property {string} website_base Base URL for service website (used with emails)
*/
/**
* @type {Config}
*/
let config = {};
function configure() {
if (!fs.pathExistsSync(`${__dirname}/../config.json`)) {
logger.error('Failed to locate config.json file');
process.exit(0);
}
config = require(`${__dirname}/../config.json`);
module.exports.config = config;
}
module.exports = {
configure,
config
};

View File

@ -5,7 +5,7 @@ const util = require('./util');
const { PNID } = require('./models/pnid');
const { Server } = require('./models/server');
const logger = require('../logger');
const config = require('../config.json');
const { config } = require('./config-manager');
const { uri, database, options } = config.mongoose;
// TODO: Extend this later with more settings

View File

@ -1,5 +1,5 @@
const nodemailer = require('nodemailer');
const config = require('../config.json');
const { config } = require('./config-manager');
const transporter = nodemailer.createTransport(config.email);

View File

@ -1,5 +1,9 @@
process.title = 'Pretendo - Account';
const configManager = require('./config-manager');
configManager.configure();
const express = require('express');
const morgan = require('morgan');
const xmlparser = require('./middleware/xml-parser');
@ -7,7 +11,8 @@ const cache = require('./cache');
const database = require('./database');
const util = require('./util');
const logger = require('../logger');
const config = require('../config.json');
const { config } = configManager;
const { http: { port } } = config;
const app = express();
@ -19,8 +24,6 @@ const datastore = require('./services/datastore');
const api = require('./services/api');
// START APPLICATION
app.set('etag', false);
app.disable('x-powered-by');
// Create router
logger.info('Setting up Middleware');

View File

@ -12,7 +12,7 @@ const database = require('../../../../database');
const cache = require('../../../../cache');
const util = require('../../../../util');
const logger = require('../../../../../logger');
const config = require('../../../../../config.json');
const { config } = require('../../../../config-manager');
const PNID_VALID_CHARACTERS_REGEX = /^[\w\-\.]*$/gm;
const PNID_PUNCTUATION_START_REGEX = /^[\_\-\.]/gm;

View File

@ -1,7 +1,7 @@
const router = require('express').Router();
const joi = require('joi');
const { PNID } = require('../../../../models/pnid');
const config = require('../../../../../config.json');
const { config } = require('../../../../config-manager');
// TODO: Extend this later with more settings
const userSchema = joi.object({

View File

@ -1,7 +1,7 @@
const router = require('express').Router();
const xmlbuilder = require('xmlbuilder');
const { PNID } = require('../../../models/pnid');
const config = require('../../../../config.json');
const { config } = require('../../../config-manager');
/**
* [GET]

View File

@ -3,7 +3,7 @@ const NodeRSA = require('node-rsa');
const aws = require('aws-sdk');
const mailer = require('./mailer');
const cache = require('./cache');
const config = require('../config.json');
const { config } = require('./config-manager');
const spacesEndpoint = new aws.Endpoint('nyc3.digitaloceanspaces.com');
const s3 = new aws.S3({