diff --git a/.gitignore b/.gitignore index 761ac590..bc72ae59 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules .idea -config/config.json \ No newline at end of file +config/config.json +config/speechConfig.js \ No newline at end of file diff --git a/README.md b/README.md index 03d3b0dc..3ff4c8fd 100644 --- a/README.md +++ b/README.md @@ -14,13 +14,10 @@ spee.ch is a single-serving site that reads and publishes images and videos to a * start spee.ch * clone this repo * run `npm install` - * to start the server, from your command line run `node speech.js` while passing three environmental variables: - * (1) your lbry wallet address (`LBRY_CLAIM_ADDRESS`), - * (2) your mysql username (`MYSQL_USERNAME`), - * (2) your mysql password (`MYSQL_PASSWORD`), - * (3) the environment to run (`NODE_ENV`). - * i.e. `LBRY_CLAIM_ADDRESS= MYSQL_USERNAME= MYSQL_PASSWORD= NODE_ENV=development node speech.js` - * e.g. `LBRY_CLAIM_ADDRESS=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX MYSQL_USERNAME="lbry" MYSQL_PASSWORD="xxxxxx" NODE_ENV=development node speech.js` + * create your `speechConfig.js` file + * copy `speechConfig_example.js` and name it `speechConfig.js` + * replace the `null` values in the config file with the appropriate values for your environement + * to start the server, from your command line run `node speech.js` * To run hot, use `nodemon` instead of `node` * visit [localhost:3000](http://localhost:3000) diff --git a/config/custom-environment-variables.json b/config/custom-environment-variables.json deleted file mode 100644 index 78faebbf..00000000 --- a/config/custom-environment-variables.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "WalletConfig": { - "LbryClaimAddress": "LBRY_CLAIM_ADDRESS" - }, - "Database": { - "Username": "MYSQL_USERNAME", - "Password": "MYSQL_PASSWORD" - }, - "Logging": { - "SlackWebHook": "SLACK_WEB_HOOK" - }, - "Session": { - "SessionKey": "SESSION_KEY" - } -} \ No newline at end of file diff --git a/config/default-0.json b/config/default-0.json deleted file mode 100644 index 9e26dfee..00000000 --- a/config/default-0.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/config/default.json b/config/default.json deleted file mode 100644 index c5b65a20..00000000 --- a/config/default.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "WalletConfig": { - "LbryClaimAddress": null, - "DefaultChannel": null - }, - "AnalyticsConfig":{ - "GoogleId": null - }, - "Database": { - "Database": "lbry", - "Username": null, - "Password": null - }, - "Logging": { - "LogLevel": null, - "SlackWebHook": null, - "SlackErrorChannel": null, - "SlackInfoChannel": null - }, - "Session": { - "SessionKey": null - } -} \ No newline at end of file diff --git a/config/development.json b/config/development.json deleted file mode 100644 index 4beca9ff..00000000 --- a/config/development.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "WalletConfig": { - "DefaultChannel": "@speechDev" - }, - "AnalyticsConfig":{ - "GoogleId": "UA-100747990-1" - }, - "Logging": { - "LogLevel": "silly", - "SlackErrorChannel": "#staging_speech-errors", - "SlackInfoChannel": "none" - } -} \ No newline at end of file diff --git a/config/production.json b/config/production.json deleted file mode 100644 index a5bc5074..00000000 --- a/config/production.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "WalletConfig": { - "DefaultChannel": "@speech" - }, - "AnalyticsConfig":{ - "GoogleId": "UA-60403362-3" - }, - "Logging": { - "LogLevel": "verbose", - "SlackErrorChannel": "#speech-errors", - "SlackInfoChannel": "#speech-logs" - } -} diff --git a/config/slackLoggerConfig.js b/config/slackConfig.js similarity index 59% rename from config/slackLoggerConfig.js rename to config/slackConfig.js index 4bd88200..74227bbd 100644 --- a/config/slackLoggerConfig.js +++ b/config/slackConfig.js @@ -1,29 +1,26 @@ -const config = require('config'); -const SLACK_WEB_HOOK = config.get('Logging.SlackWebHook'); -const SLACK_ERROR_CHANNEL = config.get('Logging.SlackErrorChannel'); -const SLACK_INFO_CHANNEL = config.get('Logging.SlackInfoChannel'); +const config = require('./speechConfig.js'); const winstonSlackWebHook = require('winston-slack-webhook').SlackWebHook; module.exports = (winston) => { - if (SLACK_WEB_HOOK) { - // add a transport for errors to slack + if (config.logging.slackWebHook) { + // add a transport for errors to slack winston.add(winstonSlackWebHook, { name : 'slack-errors-transport', level : 'error', - webhookUrl: SLACK_WEB_HOOK, - channel : SLACK_ERROR_CHANNEL, + webhookUrl: config.logging.slackWebHook, + channel : config.logging.slackErrorChannel, username : 'spee.ch', iconEmoji : ':face_with_head_bandage:', }); winston.add(winstonSlackWebHook, { name : 'slack-info-transport', level : 'info', - webhookUrl: SLACK_WEB_HOOK, - channel : SLACK_INFO_CHANNEL, + webhookUrl: config.logging.slackWebHook, + channel : config.logging.slackInfoChannel, username : 'spee.ch', iconEmoji : ':nerd_face:', }); - // send test message + // send test message winston.error('Slack error logging is online.'); winston.info('Slack info logging is online.'); } else { diff --git a/config/speechConfig_example.js b/config/speechConfig_example.js new file mode 100644 index 00000000..d10745a3 --- /dev/null +++ b/config/speechConfig_example.js @@ -0,0 +1,22 @@ +module.exports = { + wallet: { + lbryClaimAddress: null, // choose an address from your lbry wallet + }, + analytics: { + googleId: null, // google id for analytics tracking; leave `null` if not applicable + }, + sql: { + database: null, // name of mysql database + username: null, // username for mysql + password: null, // password for mysql + }, + logging: { + logLevel : null, // options: silly, debug, verbose, info + slackWebHook : null, // enter a webhook if you wish to push logs to slack; otherwise leave as `null` + slackErrorChannel: null, // enter a slack channel (#example) for errors to be sent to; otherwise leave null + slackInfoChannel : null, // enter a slack channel (#info) for info level logs to be sent to otherwise leave null + }, + session: { + sessionKey: null, // enter a secret key to be used for session encryption + }, +}; diff --git a/controllers/publishController.js b/controllers/publishController.js index 19766c05..d832c814 100644 --- a/controllers/publishController.js +++ b/controllers/publishController.js @@ -6,13 +6,13 @@ const publishHelpers = require('../helpers/publishHelpers.js'); module.exports = { publish (publishParams, fileName, fileType) { return new Promise((resolve, reject) => { - let publishResults = {}; - // 1. publish the file + let publishResults, certificateId, channelName; + // publish the file return lbryApi.publishClaim(publishParams) - // 2. upsert File record (update is in case the claim has been published before by this daemon) .then(tx => { logger.info(`Successfully published ${fileName}`, tx); publishResults = tx; + // get the channel information if (publishParams.channel_name) { logger.debug(`this claim was published in channel: ${publishParams.channel_name}`); return db.Channel.findOne({where: {channelName: publishParams.channel_name}}); @@ -22,13 +22,17 @@ module.exports = { } }) .then(channel => { - let certificateId = null; - let channelName = null; + // set channel information + certificateId = null; + channelName = null; if (channel) { certificateId = channel.channelClaimId; channelName = channel.channelName; } logger.debug(`certificateId: ${certificateId}`); + }) + .then(() => { + // create the File record const fileRecord = { name : publishParams.name, claimId : publishResults.claim_id, @@ -42,6 +46,7 @@ module.exports = { fileType, nsfw : publishParams.metadata.nsfw, }; + // create the Claim record const claimRecord = { name : publishParams.name, claimId : publishResults.claim_id, @@ -57,11 +62,12 @@ module.exports = { certificateId, channelName, }; + // upsert criteria const upsertCriteria = { name : publishParams.name, claimId: publishResults.claim_id, }; - // create the records + // upsert the records return Promise.all([db.upsert(db.File, fileRecord, upsertCriteria, 'File'), db.upsert(db.Claim, claimRecord, upsertCriteria, 'Claim')]); }) .then(([file, claim]) => { diff --git a/controllers/statsController.js b/controllers/statsController.js index 50dcc36d..6f3d4475 100644 --- a/controllers/statsController.js +++ b/controllers/statsController.js @@ -1,8 +1,8 @@ const logger = require('winston'); const ua = require('universal-analytics'); -const config = require('config'); +const config = require('../config/speechConfig.js'); const db = require('../models'); -const googleApiKey = config.get('AnalyticsConfig.GoogleId'); +const googleApiKey = config.analytics.googleId; module.exports = { postToStats (action, url, ipAddress, name, claimId, result) { diff --git a/helpers/configVarCheck.js b/helpers/configVarCheck.js index b4b40e51..b849245f 100644 --- a/helpers/configVarCheck.js +++ b/helpers/configVarCheck.js @@ -1,15 +1,13 @@ -const config = require('config'); +const config = require('../config/speechConfig.js'); const logger = require('winston'); -const fs = require('fs'); module.exports = function () { // get the config file - const defaultConfigFile = JSON.parse(fs.readFileSync('./config/default.json')); - for (let configCategoryKey in defaultConfigFile) { - if (defaultConfigFile.hasOwnProperty(configCategoryKey)) { + for (let configCategoryKey in config) { + if (config.hasOwnProperty(configCategoryKey)) { // get the final variables for each config category - const configVariables = config.get(configCategoryKey); + const configVariables = config[configCategoryKey]; for (let configVarKey in configVariables) { if (configVariables.hasOwnProperty(configVarKey)) { // print each variable diff --git a/helpers/handlebarsHelpers.js b/helpers/handlebarsHelpers.js index b4fb3c42..33ccb49d 100644 --- a/helpers/handlebarsHelpers.js +++ b/helpers/handlebarsHelpers.js @@ -1,10 +1,10 @@ const Handlebars = require('handlebars'); -const config = require('config'); +const config = require('../config/speechConfig.js'); module.exports = { // define any extra helpers you may need googleAnalytics () { - const googleApiKey = config.get('AnalyticsConfig.GoogleId'); + const googleApiKey = config.analytics.googleId; return new Handlebars.SafeString( `