removed configs and moved logging and slack configuration to server/utils/
This commit is contained in:
parent
7ee0b14a09
commit
c1f5552e99
21 changed files with 109 additions and 178 deletions
|
@ -1,8 +0,0 @@
|
||||||
const lbryConfig = {
|
|
||||||
api: {
|
|
||||||
apiHost: 'localhost',
|
|
||||||
apiPort: '5279',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = lbryConfig;
|
|
|
@ -1,36 +0,0 @@
|
||||||
const logger = require('winston');
|
|
||||||
|
|
||||||
function LoggerConfig () {
|
|
||||||
this.logLevel = 'debug';
|
|
||||||
this.update = (config) => {
|
|
||||||
if (!config) {
|
|
||||||
return logger.warn('No logger config received.');
|
|
||||||
}
|
|
||||||
logger.info('configuring winston logger...');
|
|
||||||
// update values with local config params
|
|
||||||
const {logLevel} = config;
|
|
||||||
this.logLevel = logLevel;
|
|
||||||
// configure the winston logger
|
|
||||||
logger.configure({
|
|
||||||
transports: [
|
|
||||||
new (logger.transports.Console)({
|
|
||||||
level : this.logLevel,
|
|
||||||
timestamp : false,
|
|
||||||
colorize : true,
|
|
||||||
prettyPrint : true,
|
|
||||||
handleExceptions : true,
|
|
||||||
humanReadableUnhandledException: true,
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
});
|
|
||||||
// test all the log levels
|
|
||||||
logger.info('testing winston log levels...');
|
|
||||||
logger.warn('Testing: Log Level 1');
|
|
||||||
logger.info('Testing: Log Level 2');
|
|
||||||
logger.verbose('Testing: Log Level 3');
|
|
||||||
logger.debug('Testing: Log Level 4');
|
|
||||||
logger.silly('Testing: Log Level 5');
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = new LoggerConfig();
|
|
|
@ -1,20 +0,0 @@
|
||||||
const logger = require('winston');
|
|
||||||
|
|
||||||
function MysqlConfig () {
|
|
||||||
this.database = 'default';
|
|
||||||
this.username = 'default';
|
|
||||||
this.password = 'default';
|
|
||||||
this.update = (config) => {
|
|
||||||
if (!config) {
|
|
||||||
return logger.warn('No MySQL config received.');
|
|
||||||
}
|
|
||||||
// configure credentials
|
|
||||||
logger.info('configuring mysql...');
|
|
||||||
const { database, username, password } = config;
|
|
||||||
this.database = database;
|
|
||||||
this.username = username;
|
|
||||||
this.password = password;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = new MysqlConfig();
|
|
|
@ -1,45 +0,0 @@
|
||||||
const logger = require('winston');
|
|
||||||
|
|
||||||
function SiteConfig () {
|
|
||||||
this.analytics = {
|
|
||||||
googleId: 'default',
|
|
||||||
};
|
|
||||||
this.assetDefaults = {
|
|
||||||
description: 'An asset published on Spee.ch',
|
|
||||||
thumbnail : 'https://spee.ch/assets/img/video_thumb_default.png',
|
|
||||||
title : 'A Spee.ch Implementation',
|
|
||||||
};
|
|
||||||
this.auth = {
|
|
||||||
sessionKey: 'default',
|
|
||||||
};
|
|
||||||
this.details = {
|
|
||||||
description: 'Welcome to my decentralized image and video sharing site.',
|
|
||||||
host : 'http://localhost:3000',
|
|
||||||
port : 3000,
|
|
||||||
title : 'My Spee.ch Site',
|
|
||||||
twitter : '@exampleTwitterHandle',
|
|
||||||
};
|
|
||||||
this.publishing = {
|
|
||||||
additionalClaimAddresses: [],
|
|
||||||
disabled : false,
|
|
||||||
disabledMessage : 'Please check back soon.',
|
|
||||||
primaryClaimAddress : 'default',
|
|
||||||
thumbnailChannel : 'default',
|
|
||||||
thumbnailChannelId : 'default',
|
|
||||||
uploadDirectory : '/home/lbry/Uploads',
|
|
||||||
};
|
|
||||||
this.update = (config) => {
|
|
||||||
if (!config) {
|
|
||||||
return console.log('No site config received.');
|
|
||||||
}
|
|
||||||
const { analytics, assetDefaults, auth, details, publishing } = config;
|
|
||||||
logger.info('configuring site details...');
|
|
||||||
this.analytics = analytics;
|
|
||||||
this.assetDefaults = assetDefaults;
|
|
||||||
this.auth = auth;
|
|
||||||
this.details = details;
|
|
||||||
this.publishing = publishing;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = new SiteConfig();
|
|
|
@ -1,51 +0,0 @@
|
||||||
const winstonSlackWebHook = require('winston-slack-webhook').SlackWebHook;
|
|
||||||
const winston = require('winston');
|
|
||||||
|
|
||||||
function SlackConfig () {
|
|
||||||
this.slackWebHook = 'default';
|
|
||||||
this.slackErrorChannel = 'default';
|
|
||||||
this.slackInfoChannel = 'default';
|
|
||||||
this.update = (config) => {
|
|
||||||
if (!config) {
|
|
||||||
return winston.warn('No slack config received');
|
|
||||||
}
|
|
||||||
// update variables
|
|
||||||
winston.info('configuring slack logger...');
|
|
||||||
const {slackWebHook, slackErrorChannel, slackInfoChannel} = config;
|
|
||||||
this.slackWebHook = slackWebHook;
|
|
||||||
this.slackErrorChannel = slackErrorChannel;
|
|
||||||
this.slackInfoChannel = slackInfoChannel;
|
|
||||||
// update slack webhook settings
|
|
||||||
if (this.slackWebHook) {
|
|
||||||
// add a transport for errors to slack
|
|
||||||
if (this.slackErrorChannel) {
|
|
||||||
winston.add(winstonSlackWebHook, {
|
|
||||||
name : 'slack-errors-transport',
|
|
||||||
level : 'warn',
|
|
||||||
webhookUrl: this.slackWebHook,
|
|
||||||
channel : this.slackErrorChannel,
|
|
||||||
username : 'spee.ch',
|
|
||||||
iconEmoji : ':face_with_head_bandage:',
|
|
||||||
});
|
|
||||||
};
|
|
||||||
if (this.slackInfoChannel) {
|
|
||||||
winston.add(winstonSlackWebHook, {
|
|
||||||
name : 'slack-info-transport',
|
|
||||||
level : 'info',
|
|
||||||
webhookUrl: this.slackWebHook,
|
|
||||||
channel : this.slackInfoChannel,
|
|
||||||
username : 'spee.ch',
|
|
||||||
iconEmoji : ':nerd_face:',
|
|
||||||
});
|
|
||||||
};
|
|
||||||
// send test messages
|
|
||||||
winston.info('testing slack logger...');
|
|
||||||
winston.error('Slack "error" logging is online.');
|
|
||||||
winston.info('Slack "info" logging is online.');
|
|
||||||
} else {
|
|
||||||
winston.warn('Slack logging is not enabled because no slackWebHook config var provided.');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = new SlackConfig();
|
|
25
index.js
25
index.js
|
@ -12,30 +12,45 @@ const Path = require('path');
|
||||||
// load local modules
|
// load local modules
|
||||||
const requestLogger = require('./server/middleware/requestLogger.js');
|
const requestLogger = require('./server/middleware/requestLogger.js');
|
||||||
const siteConfig = require('@config/siteConfig.js');
|
const siteConfig = require('@config/siteConfig.js');
|
||||||
|
const PORT = siteConfig.details.port;
|
||||||
const createDatabaseIfNotExists = require('./server/models/utils/createDatabaseIfNotExists.js');
|
const createDatabaseIfNotExists = require('./server/models/utils/createDatabaseIfNotExists.js');
|
||||||
const { getWalletBalance } = require('./server/lbrynet/index');
|
const { getWalletBalance } = require('./server/lbrynet');
|
||||||
|
const db = require('./server/models');
|
||||||
|
|
||||||
|
// configure logging
|
||||||
|
const configureLogging = require('./server/utils/configureLogging.js');
|
||||||
|
configureLogging();
|
||||||
|
|
||||||
|
// configure slack logging
|
||||||
|
const configureSlack = require('./server/utils/configureSlack.js');
|
||||||
|
configureSlack();
|
||||||
|
|
||||||
/* create app */
|
/* create app */
|
||||||
// create an Express application
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
// trust the proxy to get ip address for us
|
// trust the proxy to get ip address for us
|
||||||
app.enable('trust proxy');
|
app.enable('trust proxy');
|
||||||
|
|
||||||
/* add middleware */
|
|
||||||
// set HTTP headers to protect against well-known web vulnerabilties
|
// set HTTP headers to protect against well-known web vulnerabilties
|
||||||
app.use(helmet());
|
app.use(helmet());
|
||||||
|
|
||||||
// 'express.static' to serve static files from public directory
|
// 'express.static' to serve static files from public directory
|
||||||
const publicPath = Path.resolve(process.cwd(), 'public');
|
const publicPath = Path.resolve(process.cwd(), 'public');
|
||||||
app.use(express.static(publicPath));
|
app.use(express.static(publicPath));
|
||||||
logger.info(`serving static files from default static path at ${publicPath}.`);
|
logger.info(`serving static files from default static path at ${publicPath}.`);
|
||||||
|
|
||||||
// 'body parser' for parsing application/json
|
// 'body parser' for parsing application/json
|
||||||
app.use(bodyParser.json());
|
app.use(bodyParser.json());
|
||||||
|
|
||||||
// 'body parser' for parsing application/x-www-form-urlencoded
|
// 'body parser' for parsing application/x-www-form-urlencoded
|
||||||
app.use(bodyParser.urlencoded({ extended: true }));
|
app.use(bodyParser.urlencoded({ extended: true }));
|
||||||
|
|
||||||
// add custom middleware (note: build out to accept dynamically use what is in server/middleware/
|
// add custom middleware (note: build out to accept dynamically use what is in server/middleware/
|
||||||
app.use(requestLogger);
|
app.use(requestLogger);
|
||||||
|
|
||||||
// configure passport
|
// configure passport
|
||||||
const speechPassport = require('./server/speechPassport/index');
|
const speechPassport = require('./server/speechPassport/index');
|
||||||
|
|
||||||
// initialize passport
|
// initialize passport
|
||||||
const sessionKey = siteConfig.auth.sessionKey;
|
const sessionKey = siteConfig.auth.sessionKey;
|
||||||
app.use(cookieSession({
|
app.use(cookieSession({
|
||||||
|
@ -44,6 +59,7 @@ app.use(cookieSession({
|
||||||
}));
|
}));
|
||||||
app.use(speechPassport.initialize());
|
app.use(speechPassport.initialize());
|
||||||
app.use(speechPassport.session());
|
app.use(speechPassport.session());
|
||||||
|
|
||||||
// configure handlebars & register it with express app
|
// configure handlebars & register it with express app
|
||||||
const hbs = expressHandlebars.create({
|
const hbs = expressHandlebars.create({
|
||||||
defaultLayout: 'embed',
|
defaultLayout: 'embed',
|
||||||
|
@ -51,6 +67,7 @@ const hbs = expressHandlebars.create({
|
||||||
});
|
});
|
||||||
app.engine('handlebars', hbs.engine);
|
app.engine('handlebars', hbs.engine);
|
||||||
app.set('view engine', 'handlebars');
|
app.set('view engine', 'handlebars');
|
||||||
|
|
||||||
// set the routes on the app
|
// set the routes on the app
|
||||||
require('./server/routes/auth/index')(app);
|
require('./server/routes/auth/index')(app);
|
||||||
require('./server/routes/api/index')(app);
|
require('./server/routes/api/index')(app);
|
||||||
|
@ -62,8 +79,6 @@ require('./server/routes/fallback/index')(app);
|
||||||
const server = http.Server(app);
|
const server = http.Server(app);
|
||||||
|
|
||||||
/* start the server */
|
/* start the server */
|
||||||
const db = require('./server/models/index');
|
|
||||||
const PORT = siteConfig.details.port;
|
|
||||||
|
|
||||||
const startServer = () => {
|
const startServer = () => {
|
||||||
return createDatabaseIfNotExists()
|
return createDatabaseIfNotExists()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
const db = require('../../../../models');
|
const db = require('../../../../models');
|
||||||
const { publishing: { primaryClaimAddress, additionalClaimAddresses } } = require('../../../../../config/siteConfig.js');
|
const { publishing: { primaryClaimAddress, additionalClaimAddresses } } = require('@config/siteConfig.js');
|
||||||
const Sequelize = require('sequelize');
|
const Sequelize = require('sequelize');
|
||||||
const Op = Sequelize.Op;
|
const Op = Sequelize.Op;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
const logger = require('winston');
|
const logger = require('winston');
|
||||||
const { details, publishing } = require('../../../../../config/siteConfig.js');
|
const { details, publishing } = require('@config/siteConfig.js');
|
||||||
|
|
||||||
const createBasicPublishParams = (filePath, name, title, description, license, nsfw, thumbnail) => {
|
const createBasicPublishParams = (filePath, name, title, description, license, nsfw, thumbnail) => {
|
||||||
logger.debug(`Creating Publish Parameters`);
|
logger.debug(`Creating Publish Parameters`);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
const logger = require('winston');
|
const logger = require('winston');
|
||||||
const { details, publishing } = require('../../../../../config/siteConfig.js');
|
const { details, publishing } = require('@config/siteConfig.js');
|
||||||
|
|
||||||
const createThumbnailPublishParams = (thumbnailFilePath, claimName, license, nsfw) => {
|
const createThumbnailPublishParams = (thumbnailFilePath, claimName, license, nsfw) => {
|
||||||
if (!thumbnailFilePath) {
|
if (!thumbnailFilePath) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const { details: { host } } = require('../../../../../config/siteConfig.js');
|
const { details: { host } } = require('@config/siteConfig.js');
|
||||||
|
|
||||||
const { sendGATimingEvent } = require('../../../../utils/googleAnalytics.js');
|
const { sendGATimingEvent } = require('../../../../utils/googleAnalytics.js');
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const { details: { host } } = require('../../../config/siteConfig.js');
|
const { details: { host } } = require('@config/siteConfig.js');
|
||||||
|
|
||||||
const sendEmbedPage = ({ params }, res) => {
|
const sendEmbedPage = ({ params }, res) => {
|
||||||
const claimId = params.claimId;
|
const claimId = params.claimId;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
const axios = require('axios');
|
const axios = require('axios');
|
||||||
const logger = require('winston');
|
const logger = require('winston');
|
||||||
const { api: { apiHost, apiPort } } = require('../../config/lbryConfig.js');
|
const { api: { apiHost, apiPort } } = require('@config/lbryConfig.js');
|
||||||
const lbrynetUri = 'http://' + apiHost + ':' + apiPort;
|
const lbrynetUri = 'http://' + apiHost + ':' + apiPort;
|
||||||
const { chooseGaLbrynetPublishLabel, sendGATimingEvent } = require('../utils/googleAnalytics.js');
|
const { chooseGaLbrynetPublishLabel, sendGATimingEvent } = require('../utils/googleAnalytics.js');
|
||||||
const handleLbrynetResponse = require('./utils/handleLbrynetResponse.js');
|
const handleLbrynetResponse = require('./utils/handleLbrynetResponse.js');
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
const logger = require('winston');
|
const logger = require('winston');
|
||||||
const returnShortId = require('./utils/returnShortId.js');
|
const returnShortId = require('./utils/returnShortId.js');
|
||||||
const { assetDefaults: { thumbnail: defaultThumbnail }, details: { host } } = require('../../config/siteConfig.js');
|
const { assetDefaults: { thumbnail: defaultThumbnail }, details: { host } } = require('@config/siteConfig.js');
|
||||||
|
|
||||||
const NO_CLAIM = 'NO_CLAIM';
|
const NO_CLAIM = 'NO_CLAIM';
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ const Blocked = require('./blocked.js');
|
||||||
const Sequelize = require('sequelize');
|
const Sequelize = require('sequelize');
|
||||||
const logger = require('winston');
|
const logger = require('winston');
|
||||||
|
|
||||||
const {database, username, password} = require('../../config/mysqlConfig.js');
|
const {database, username, password} = require('@config/mysqlConfig.js');
|
||||||
|
|
||||||
// set sequelize options
|
// set sequelize options
|
||||||
const sequelize = new Sequelize(database, username, password, {
|
const sequelize = new Sequelize(database, username, password, {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
const Sequelize = require('sequelize');
|
const Sequelize = require('sequelize');
|
||||||
|
|
||||||
const createDatabaseIfNotExists = () => {
|
const createDatabaseIfNotExists = () => {
|
||||||
const {database, username, password} = require('../../../config/mysqlConfig.js');
|
const {database, username, password} = require('@config/mysqlConfig.js');
|
||||||
const sequelize = new Sequelize('', username, password, {
|
const sequelize = new Sequelize('', username, password, {
|
||||||
dialect : 'mysql',
|
dialect : 'mysql',
|
||||||
logging : false,
|
logging : false,
|
||||||
|
|
|
@ -9,7 +9,7 @@ import App from '@app';
|
||||||
import renderFullPage from '../renderFullPage.js';
|
import renderFullPage from '../renderFullPage.js';
|
||||||
import Helmet from 'react-helmet';
|
import Helmet from 'react-helmet';
|
||||||
|
|
||||||
const siteConfig = require('../../../config/siteConfig.js');
|
const siteConfig = require('@config/siteConfig.js');
|
||||||
|
|
||||||
module.exports = (req, res) => {
|
module.exports = (req, res) => {
|
||||||
let context = {};
|
let context = {};
|
||||||
|
|
|
@ -13,7 +13,7 @@ import Sagas from '@sagas';
|
||||||
import Actions from '@actions';
|
import Actions from '@actions';
|
||||||
import Helmet from 'react-helmet';
|
import Helmet from 'react-helmet';
|
||||||
|
|
||||||
const siteConfig = require('../../../config/siteConfig.js');
|
const siteConfig = require('@config/siteConfig.js');
|
||||||
|
|
||||||
const returnSagaWithParams = (saga, params) => {
|
const returnSagaWithParams = (saga, params) => {
|
||||||
return function * () {
|
return function * () {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
const multipart = require('connect-multiparty');
|
const multipart = require('connect-multiparty');
|
||||||
const { publishing: { uploadDirectory } } = require('../../../config/siteConfig.js');
|
const { publishing: { uploadDirectory } } = require('@config/siteConfig.js');
|
||||||
const multipartMiddleware = multipart({uploadDir: uploadDirectory});
|
const multipartMiddleware = multipart({uploadDir: uploadDirectory});
|
||||||
|
|
||||||
module.exports = multipartMiddleware;
|
module.exports = multipartMiddleware;
|
||||||
|
|
32
server/utils/configureLogging.js
Normal file
32
server/utils/configureLogging.js
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
const logger = require('winston');
|
||||||
|
|
||||||
|
const { logLevel } = require('@config/loggerConfig');
|
||||||
|
|
||||||
|
function configureLogging () {
|
||||||
|
if (!logLevel) {
|
||||||
|
return logger.warn('No logLevel config received.');
|
||||||
|
}
|
||||||
|
logger.info('configuring winston logger...');
|
||||||
|
// configure the winston logger
|
||||||
|
logger.configure({
|
||||||
|
transports: [
|
||||||
|
new (logger.transports.Console)({
|
||||||
|
level : this.logLevel,
|
||||||
|
timestamp : false,
|
||||||
|
colorize : true,
|
||||||
|
prettyPrint : true,
|
||||||
|
handleExceptions : true,
|
||||||
|
humanReadableUnhandledException: true,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
// test all the log levels
|
||||||
|
logger.info('testing winston log levels...');
|
||||||
|
logger.warn('Testing: Log Level 1');
|
||||||
|
logger.info('Testing: Log Level 2');
|
||||||
|
logger.verbose('Testing: Log Level 3');
|
||||||
|
logger.debug('Testing: Log Level 4');
|
||||||
|
logger.silly('Testing: Log Level 5');
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = configureLogging;
|
44
server/utils/configureSlack.js
Normal file
44
server/utils/configureSlack.js
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
const winstonSlackWebHook = require('winston-slack-webhook').SlackWebHook;
|
||||||
|
const logger = require('winston');
|
||||||
|
|
||||||
|
const config = require('@config/loggerConfig');
|
||||||
|
|
||||||
|
function configureSlack () {
|
||||||
|
if (!config) {
|
||||||
|
return logger.warn('No slack config found');
|
||||||
|
}
|
||||||
|
const {slackWebHook, slackErrorChannel, slackInfoChannel} = config;
|
||||||
|
// update variables
|
||||||
|
logger.info('configuring slack logger...');
|
||||||
|
|
||||||
|
// update slack webhook settings
|
||||||
|
if (!slackWebHook) {
|
||||||
|
return logger.warn('Slack logging is not enabled because no slackWebHook config var provided.');
|
||||||
|
}
|
||||||
|
// add a transport for errors to slack
|
||||||
|
if (slackErrorChannel) {
|
||||||
|
logger.add(winstonSlackWebHook, {
|
||||||
|
name : 'slack-errors-transport',
|
||||||
|
level : 'warn',
|
||||||
|
webhookUrl: slackWebHook,
|
||||||
|
channel : slackErrorChannel,
|
||||||
|
username : 'spee.ch',
|
||||||
|
iconEmoji : ':face_with_head_bandage:',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// add a transport for info in slack
|
||||||
|
if (slackInfoChannel) {
|
||||||
|
logger.add(winstonSlackWebHook, {
|
||||||
|
name : 'slack-info-transport',
|
||||||
|
level : 'info',
|
||||||
|
webhookUrl: slackWebHook,
|
||||||
|
channel : slackInfoChannel,
|
||||||
|
username : 'spee.ch',
|
||||||
|
iconEmoji : ':nerd_face:',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// send test messages
|
||||||
|
logger.info('Slack logging is online.');
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = configureSlack;
|
|
@ -1,6 +1,6 @@
|
||||||
const logger = require('winston');
|
const logger = require('winston');
|
||||||
const ua = require('universal-analytics');
|
const ua = require('universal-analytics');
|
||||||
const { analytics : { googleId }, details: { title } } = require('../../config/siteConfig.js');
|
const { analytics : { googleId }, details: { title } } = require('@config/siteConfig.js');
|
||||||
|
|
||||||
const createServeEventParams = (headers, ip, originalUrl) => {
|
const createServeEventParams = (headers, ip, originalUrl) => {
|
||||||
return {
|
return {
|
||||||
|
|
Loading…
Add table
Reference in a new issue