From d33ae2a50ae9af1c220f82e8da0fee896aa70d83 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 6 Dec 2020 17:51:18 +1300 Subject: [PATCH 01/53] Update server.js Eliminate requirement to CD into project directory prior to running `npm start` or `node server.js`. --- server.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server.js b/server.js index 57b5b71f9..8f04edd30 100644 --- a/server.js +++ b/server.js @@ -14,6 +14,8 @@ app.use('/', expressStaticGzip(`${__dirname}/build`, { index : false })); +process.chdir(__dirname); + //app.use(express.static(`${__dirname}/build`)); app.use(require('body-parser').json({ limit: '25mb' })); app.use(require('cookie-parser')()); From 99656357b10cd4d103c21bb944a96ee86b411c76 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 6 Dec 2020 18:01:39 +1300 Subject: [PATCH 02/53] Add rc.d daemon script Adds a RC.d daemon script to control the HomeBrewery status. Based on Andrew Pearson's Node-RED script for the same purpose. --- freebsd/rc.d/homebrewery | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 freebsd/rc.d/homebrewery diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery new file mode 100644 index 000000000..6521804a2 --- /dev/null +++ b/freebsd/rc.d/homebrewery @@ -0,0 +1,51 @@ +#!/bin/sh +# +# PROVIDE: homebrewery +# REQUIRE: NETWORKING +# KEYWORD: shutdown + +# Author: S Robertson +# Version: 1.0.0 + +# Description: +# This script runs HomeBrewery as a service under the supplied user on boot + +# How to use: +# Place this file in /usr/local/etc/rc.d/ +# Add homebrewery_enable="YES" to /etc/rc.config +# (Optional) To run as non-root, add homebrewery_runAs="homebrewery" to /etc/rc.config +# (Optional) To pass HomeBrewery args, add homebrewery_args="" to /etc/rc.config + +# Freebsd rc library +. /etc/rc.subr + +# General Info +name="homebrewery" # Safe name of program +program_name="homebrewery" # Name of exec +title="HomeBrewery" # Title to display in top/htop + +# RC.config vars +load_rc_config $name # Loading rc config vars +: ${homebrewery_enable="NO"} # Default: Do not enable HomeBrewery +: ${homebrewery_runAs="root"} # Default: Run HomeBrewery as root + +# Freebsd Setup +rcvar=homebrewery_enable # Enables the rc.conf YES/NO flag +pidfile="/var/run/${program_name}.pid" # File that allows the system to keep track of HomeBrewery status + +# Env Setup +export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user +export NODE_ENV="local" +export PORT=8001 + +# Command Setup +exec_cmd="/homebrewery/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally +output_file="/var/log/${program_name}.log" # Path to HomeBrewery output file + +# Command +command="/usr/sbin/daemon" +command_args="-r -t ${title} -u ${homebrewery_runAs} -o ${output_file} -P ${pidfile} /usr/local/bin/node ${exec_cmd} ${homebrewery_args}" + +# Loading Config +load_rc_config ${name} +run_rc_command "$1" From 65f4094b5aaf08a61f2329fc061744a9f14f4f06 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 6 Dec 2020 18:06:23 +1300 Subject: [PATCH 03/53] Create install.sh --- freebsd/install.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 freebsd/install.sh diff --git a/freebsd/install.sh b/freebsd/install.sh new file mode 100644 index 000000000..261213047 --- /dev/null +++ b/freebsd/install.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +pkg install -y git nano node npm mongodb36-3.6.20 + +sysrc mongod_enable=YES +service mongod start + +cd / +git clone https://github.com/G-Ambatte/homebrewery.git + +cd homebrewery +npm install +npm audit fix -force +npm run postinstall + +cp freebsd/rc.d/homebrewery /etc/rc.d/ +chmod +x /etc/rc.d/homebrewery + +sysrc homebrewery=YES +service homebrewery start \ No newline at end of file From 88631ed7a82bae93feae4530ebffeef23426d34f Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 6 Dec 2020 18:35:24 +1300 Subject: [PATCH 04/53] Update install.sh --- freebsd/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freebsd/install.sh b/freebsd/install.sh index 261213047..64d88b4ed 100644 --- a/freebsd/install.sh +++ b/freebsd/install.sh @@ -16,5 +16,5 @@ npm run postinstall cp freebsd/rc.d/homebrewery /etc/rc.d/ chmod +x /etc/rc.d/homebrewery -sysrc homebrewery=YES +sysrc homebrewery_enable=YES service homebrewery start \ No newline at end of file From 897e7dccc6639607670506e59f4ba6939474ccb7 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 6 Dec 2020 18:43:01 +1300 Subject: [PATCH 05/53] Update install.sh Switch to latest version of MongoDB --- freebsd/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freebsd/install.sh b/freebsd/install.sh index 64d88b4ed..2da579e42 100644 --- a/freebsd/install.sh +++ b/freebsd/install.sh @@ -1,6 +1,6 @@ #!/bin/sh -pkg install -y git nano node npm mongodb36-3.6.20 +pkg install -y git nano node npm mongodb44-4.4.1 sysrc mongod_enable=YES service mongod start From 1224a54884e01edd9e9cff2e02e5e67f1470fca8 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 6 Dec 2020 20:39:43 +1300 Subject: [PATCH 06/53] Add config items Add config items and default values: - web_port (8001) - environment (local) --- config/default.json | 6 ++++-- server.js | 7 ++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/config/default.json b/config/default.json index 1dc3dcb86..ff148ca32 100644 --- a/config/default.json +++ b/config/default.json @@ -1,5 +1,7 @@ { "host" : "homebrewery.local.naturalcrit.com:8000", "naturalcrit_url" : "local.naturalcrit.com:8010", - "secret" : "secret" -} \ No newline at end of file + "secret" : "secret", + "web_port" : 8001, + "environment" : "local" +} diff --git a/server.js b/server.js index 8f04edd30..58f29884a 100644 --- a/server.js +++ b/server.js @@ -27,6 +27,11 @@ const config = require('nconf') .file('environment', { file: `config/${process.env.NODE_ENV}.json` }) .file('defaults', { file: 'config/default.json' }); +if ( !process.env.NODE_ENV && config.get('environment') ) { + process.env.NODE_ENV = config.get('environment'); + console.log('NODE_ENV set from config') +} + //DB const mongoose = require('mongoose'); mongoose.connect(config.get('mongodb_uri') || config.get('mongolab_uri') || 'mongodb://localhost/naturalcrit', @@ -232,6 +237,6 @@ app.use((req, res)=>{ }); -const PORT = process.env.PORT || 8000; +const PORT = process.env.PORT || config.get('web_port') || 8000; app.listen(PORT); console.log(`server on port:${PORT}`); From e727f1749f8fe823e31b042efee85b2a52d90a9f Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 6 Dec 2020 20:41:48 +1300 Subject: [PATCH 07/53] Remove environment variables from rc.d Remove environment variables from rc.d as they are now in config/default.json. --- freebsd/rc.d/homebrewery | 2 -- 1 file changed, 2 deletions(-) diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery index 6521804a2..e318f23f8 100644 --- a/freebsd/rc.d/homebrewery +++ b/freebsd/rc.d/homebrewery @@ -35,8 +35,6 @@ pidfile="/var/run/${program_name}.pid" # File that allows the system to keep # Env Setup export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user -export NODE_ENV="local" -export PORT=8001 # Command Setup exec_cmd="/homebrewery/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally From 443094d28251891b236d8dcdb1e055ab4fb11189 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 6 Dec 2020 21:54:20 +1300 Subject: [PATCH 08/53] Update server.js Change to setting NODE_ENV; default to 'local' if not set via environment variable or in the config file. --- server.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/server.js b/server.js index 58f29884a..39e703d23 100644 --- a/server.js +++ b/server.js @@ -27,9 +27,14 @@ const config = require('nconf') .file('environment', { file: `config/${process.env.NODE_ENV}.json` }) .file('defaults', { file: 'config/default.json' }); -if ( !process.env.NODE_ENV && config.get('environment') ) { - process.env.NODE_ENV = config.get('environment'); - console.log('NODE_ENV set from config') +if ( !process.env.NODE_ENV) { + if ( config.get('environment') ) { + process.env.NODE_ENV = config.get('environment'); + console.log('NODE_ENV set from config'); + } else { + process.env.NODE_ENV = 'local'; + console.log('NODE_ENV set to "local" as no other values were set'); + } } //DB From d3fa8a54ae13ba3efc5300215e7dd6c09267126c Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 28 Dec 2020 12:56:17 +1300 Subject: [PATCH 09/53] Remove --force option Remove --force option from `npm audit fix`. While this has not caused any issues to date, there is no guarantee that it will continue to be the case. --- freebsd/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freebsd/install.sh b/freebsd/install.sh index 2da579e42..b26ad2e62 100644 --- a/freebsd/install.sh +++ b/freebsd/install.sh @@ -10,7 +10,7 @@ git clone https://github.com/G-Ambatte/homebrewery.git cd homebrewery npm install -npm audit fix -force +npm audit fix npm run postinstall cp freebsd/rc.d/homebrewery /etc/rc.d/ From 38e098f6c43103bcae0b10c51f325f3394543b73 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 28 Dec 2020 14:28:49 +1300 Subject: [PATCH 10/53] Create README.FREEBSD.md Initial write up of install instructions. Includes instruction to `wget` from the `naturalcrit/homebrewery` project rather than the FreeBSD fork, on the assumption that the PR will be merged at some point. --- README.FREEBSD.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 README.FREEBSD.md diff --git a/README.FREEBSD.md b/README.FREEBSD.md new file mode 100644 index 000000000..92f9064d0 --- /dev/null +++ b/README.FREEBSD.md @@ -0,0 +1,35 @@ +# FreeBSD/FreeNAS Installation Instructions + +## Before Installing + +These instructions assume that you are installing to a completely new, fresh FreeBSD/FreeNAS jail. As such, some steps will not be necessary if you are installing to an existing FreeBSD/FreeNAS install. + +## Installation instructions + +1. Create a new jail, with the appropriate network settings to access the internet. + +2. Install wget (`pkg install -y wget`). On a fresh jail, you will be prompted to press 'Y' to set up `pkg`. + +3. Download the installation script (`wget --no-check-certificate https://raw.githubusercontent.com/naturalcrit/homebrewery/master/freebsd/install.sh`). The parameter `--no-check-certificate` is required as we haven't set up any trusted certificates/authorities yet. + +4. Make the downloaded file executable (`chmod +x install.sh`). + +5. Run the script (`./install.sh`). This will automatically download all of the required packages, install both them and HomeBrewery, configure the system and finally start HomeBrewery. + +**NOTE:** At this time, the script **ONLY** installs HomeBrewery. It does **NOT** install the NaturalCrit login system, as that is currently a completely separate project. + +--- + +### Testing + +These installation instructions have been tested on the following FreeBSD/FreeNAS platforms: + +* FreeNAS-11.3-U5; Jail 11.4-RELEASE-p2 + +## Final Notes + +While this installation process works successfully at the time of writing (December 28, 2020), it relies on all of the Node.JS packages used in the HomeBrewery project retaining their cross-platform capabilities to continue to function under FreeBSD. This is one of the inherent advantages of Node.JS, but it is by no means guaranteed and as such, functionality or even installation under FreeBSD may fail without warning at some point in the future. + +Regards, +G +December 28, 2020 From 5d126ff14df8bc5296de2f51322687bfa51f5348 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 28 Dec 2020 15:12:51 +1300 Subject: [PATCH 11/53] Update install.sh Change to main project repo, on assumption that the PR will be merged at some point --- freebsd/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freebsd/install.sh b/freebsd/install.sh index b26ad2e62..c1e2250d9 100644 --- a/freebsd/install.sh +++ b/freebsd/install.sh @@ -6,7 +6,7 @@ sysrc mongod_enable=YES service mongod start cd / -git clone https://github.com/G-Ambatte/homebrewery.git +git clone https://github.com/naturalcrit/homebrewery.git cd homebrewery npm install From 90fdc71279cef199b80261a011241553ae8e08cf Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 28 Dec 2020 15:24:29 +1300 Subject: [PATCH 12/53] Change install directory Change of install directory to `/usr/local/homebrewery` --- freebsd/install.sh | 2 +- freebsd/rc.d/homebrewery | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/freebsd/install.sh b/freebsd/install.sh index c1e2250d9..cfb851b9c 100644 --- a/freebsd/install.sh +++ b/freebsd/install.sh @@ -5,7 +5,7 @@ pkg install -y git nano node npm mongodb44-4.4.1 sysrc mongod_enable=YES service mongod start -cd / +cd /usr/local/ git clone https://github.com/naturalcrit/homebrewery.git cd homebrewery diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery index e318f23f8..bac844c2c 100644 --- a/freebsd/rc.d/homebrewery +++ b/freebsd/rc.d/homebrewery @@ -37,8 +37,8 @@ pidfile="/var/run/${program_name}.pid" # File that allows the system to keep export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user # Command Setup -exec_cmd="/homebrewery/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally -output_file="/var/log/${program_name}.log" # Path to HomeBrewery output file +exec_cmd="/usr/local/homebrewery/server.js" # Path to the HomeBrewery server.js +output_file="/var/log/${program_name}.log" # Path to HomeBrewery output file # Command command="/usr/sbin/daemon" From ac8988ad41a31f99a8a5a0ae92b9ecf6280c0752 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 28 Dec 2020 21:31:00 +1300 Subject: [PATCH 13/53] Update homebrewery Add `dev_mode` to the HomeBrewery service, which starts the HomeBrewery project in live rebuild mode. --- freebsd/rc.d/homebrewery | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery index bac844c2c..aff7670ff 100644 --- a/freebsd/rc.d/homebrewery +++ b/freebsd/rc.d/homebrewery @@ -21,6 +21,7 @@ # General Info name="homebrewery" # Safe name of program +location="/usr/local/" # Install location program_name="homebrewery" # Name of exec title="HomeBrewery" # Title to display in top/htop @@ -37,13 +38,24 @@ pidfile="/var/run/${program_name}.pid" # File that allows the system to keep export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user # Command Setup -exec_cmd="/usr/local/homebrewery/server.js" # Path to the HomeBrewery server.js -output_file="/var/log/${program_name}.log" # Path to HomeBrewery output file +exec_cmd="${location}/${program_name}/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally +output_file="/var/log/${program_name}.log" # Path to HomeBrewery output file # Command command="/usr/sbin/daemon" command_args="-r -t ${title} -u ${homebrewery_runAs} -o ${output_file} -P ${pidfile} /usr/local/bin/node ${exec_cmd} ${homebrewery_args}" +# Extra Commands +extra_commands="dev_mode" + +dev_mode_cmd="homebrewery_dev_mode" + +homebrewery_dev_mode() { +echo "Starting HomeBrewery in live rebuild Developer mode..." +cd ${location}/${program_name}/ +/usr/local/bin/node ${location}/${program_name}/scripts/buildHomebrew.js --dev +} + # Loading Config load_rc_config ${name} run_rc_command "$1" From 7ca9d601a05e94b48394da836d4fdb25c9a4c88a Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Tue, 29 Dec 2020 17:55:15 +1300 Subject: [PATCH 14/53] Update server.js Eliminating unnecessary debugging code, reducing line count and making lint happy :) --- server.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/server.js b/server.js index 39e703d23..e56137b3d 100644 --- a/server.js +++ b/server.js @@ -27,15 +27,7 @@ const config = require('nconf') .file('environment', { file: `config/${process.env.NODE_ENV}.json` }) .file('defaults', { file: 'config/default.json' }); -if ( !process.env.NODE_ENV) { - if ( config.get('environment') ) { - process.env.NODE_ENV = config.get('environment'); - console.log('NODE_ENV set from config'); - } else { - process.env.NODE_ENV = 'local'; - console.log('NODE_ENV set to "local" as no other values were set'); - } -} +if(!process.env.NODE_ENV) { process.env.NODE_ENV = ( config.get('environment') || 'local' ); } //DB const mongoose = require('mongoose'); From bd416233ebf876a0d8b46202af1c0b730afc65f2 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Tue, 29 Dec 2020 17:57:33 +1300 Subject: [PATCH 15/53] Update server.js Lint is happy, now attempting to pacify CircleCI --- server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.js b/server.js index e56137b3d..fdca3193a 100644 --- a/server.js +++ b/server.js @@ -27,7 +27,7 @@ const config = require('nconf') .file('environment', { file: `config/${process.env.NODE_ENV}.json` }) .file('defaults', { file: 'config/default.json' }); -if(!process.env.NODE_ENV) { process.env.NODE_ENV = ( config.get('environment') || 'local' ); } +if(!process.env.NODE_ENV) {process.env.NODE_ENV = (config.get('environment') || 'local');} //DB const mongoose = require('mongoose'); From e394539742a177476106b2d59fc9cb332ccc2bad Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 3 Jan 2021 23:57:43 +1300 Subject: [PATCH 16/53] Move NODE_ENV to service file; remove from server.js and config/default.json --- config/default.json | 1 - freebsd/rc.d/homebrewery | 2 ++ server.js | 2 -- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/config/default.json b/config/default.json index ff148ca32..d7b5fc31d 100644 --- a/config/default.json +++ b/config/default.json @@ -3,5 +3,4 @@ "naturalcrit_url" : "local.naturalcrit.com:8010", "secret" : "secret", "web_port" : 8001, - "environment" : "local" } diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery index aff7670ff..2f921b9f6 100644 --- a/freebsd/rc.d/homebrewery +++ b/freebsd/rc.d/homebrewery @@ -36,6 +36,8 @@ pidfile="/var/run/${program_name}.pid" # File that allows the system to keep # Env Setup export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user +export NODE_ENV="local" +export PORT=8001 # Command Setup exec_cmd="${location}/${program_name}/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally diff --git a/server.js b/server.js index fdca3193a..5528a3762 100644 --- a/server.js +++ b/server.js @@ -27,8 +27,6 @@ const config = require('nconf') .file('environment', { file: `config/${process.env.NODE_ENV}.json` }) .file('defaults', { file: 'config/default.json' }); -if(!process.env.NODE_ENV) {process.env.NODE_ENV = (config.get('environment') || 'local');} - //DB const mongoose = require('mongoose'); mongoose.connect(config.get('mongodb_uri') || config.get('mongolab_uri') || 'mongodb://localhost/naturalcrit', From 3af43164f40b551c0ccfc7f26a9e7078d425726e Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sat, 9 Jan 2021 23:03:39 +1300 Subject: [PATCH 17/53] Remove hanging comma in config.json Change default port assignment from 8000 to 8001 in config.json and FreeBSD service config --- config/default.json | 2 +- freebsd/rc.d/homebrewery | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/default.json b/config/default.json index d7b5fc31d..daf77e82e 100644 --- a/config/default.json +++ b/config/default.json @@ -2,5 +2,5 @@ "host" : "homebrewery.local.naturalcrit.com:8000", "naturalcrit_url" : "local.naturalcrit.com:8010", "secret" : "secret", - "web_port" : 8001, + "web_port" : 8000 } diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery index 2f921b9f6..2d8ea2bfb 100644 --- a/freebsd/rc.d/homebrewery +++ b/freebsd/rc.d/homebrewery @@ -37,7 +37,7 @@ pidfile="/var/run/${program_name}.pid" # File that allows the system to keep # Env Setup export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user export NODE_ENV="local" -export PORT=8001 +export PORT=8000 # Command Setup exec_cmd="${location}/${program_name}/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally From b0c1a5a6b1fe490bc0b4b4a781fc42d697b67e40 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 10 Jan 2021 15:27:04 +1300 Subject: [PATCH 18/53] Add link to FreeBSD install documenation in the main README.md file --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index ccc5ad094..4e26bdcca 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,10 @@ You should now be able to go to [http://localhost:8000](http://localhost:8000) i Please see the docs here: [README.DOCKER.md](./README.DOCKER.md) +### Running the application on FreeBSD or FreeNAS + +Please see the docs here: [README.FreeBSD.md](./README.FREEBSD.md) + ### Standalone PHB Stylesheet If you just want the stylesheet that is generated to make pages look like they are from the Player's Handbook, you will find it in the [phb.standalone.css](./phb.standalone.css) file. From 03e74afe80f8b3198c3e2620a7c524be0c915fbb Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 10 Jan 2021 17:23:14 +1300 Subject: [PATCH 19/53] Fix for MongoDB package update breaking install script Change to enable use of rcvars for NODE_ENV and PORT --- freebsd/install.sh | 6 +++--- freebsd/rc.d/homebrewery | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/freebsd/install.sh b/freebsd/install.sh index cfb851b9c..0b3bb7fdc 100644 --- a/freebsd/install.sh +++ b/freebsd/install.sh @@ -1,6 +1,6 @@ #!/bin/sh -pkg install -y git nano node npm mongodb44-4.4.1 +pkg install -y git nano node npm mongodb44 sysrc mongod_enable=YES service mongod start @@ -13,8 +13,8 @@ npm install npm audit fix npm run postinstall -cp freebsd/rc.d/homebrewery /etc/rc.d/ -chmod +x /etc/rc.d/homebrewery +cp freebsd/rc.d/homebrewery /usr/local/etc/rc.d/ +chmod +x /usr/local/etc/rc.d/homebrewery sysrc homebrewery_enable=YES service homebrewery start \ No newline at end of file diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery index 2d8ea2bfb..20f2bc7e6 100644 --- a/freebsd/rc.d/homebrewery +++ b/freebsd/rc.d/homebrewery @@ -29,6 +29,8 @@ title="HomeBrewery" # Title to display in top/htop load_rc_config $name # Loading rc config vars : ${homebrewery_enable="NO"} # Default: Do not enable HomeBrewery : ${homebrewery_runAs="root"} # Default: Run HomeBrewery as root +: ${homebrewery_port=8000} # Default: Run HomeBrewery on port 8000 +: ${homebrewery_NODE_ENV="local"} # Default: Run HomeBrewery in local mode # Freebsd Setup rcvar=homebrewery_enable # Enables the rc.conf YES/NO flag @@ -36,8 +38,8 @@ pidfile="/var/run/${program_name}.pid" # File that allows the system to keep # Env Setup export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user -export NODE_ENV="local" -export PORT=8000 +export NODE_ENV=${homebrewery_NODE_ENV} +export PORT=${homebrewery_port} # Command Setup exec_cmd="${location}/${program_name}/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally From 1b9d46f834fca68e9f839e01f3edefc78c27641c Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 6 Dec 2020 18:06:23 +1300 Subject: [PATCH 20/53] Create install.sh --- freebsd/install.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/freebsd/install.sh b/freebsd/install.sh index 0b3bb7fdc..261213047 100644 --- a/freebsd/install.sh +++ b/freebsd/install.sh @@ -1,20 +1,20 @@ #!/bin/sh -pkg install -y git nano node npm mongodb44 +pkg install -y git nano node npm mongodb36-3.6.20 sysrc mongod_enable=YES service mongod start -cd /usr/local/ -git clone https://github.com/naturalcrit/homebrewery.git +cd / +git clone https://github.com/G-Ambatte/homebrewery.git cd homebrewery npm install -npm audit fix +npm audit fix -force npm run postinstall -cp freebsd/rc.d/homebrewery /usr/local/etc/rc.d/ -chmod +x /usr/local/etc/rc.d/homebrewery +cp freebsd/rc.d/homebrewery /etc/rc.d/ +chmod +x /etc/rc.d/homebrewery -sysrc homebrewery_enable=YES +sysrc homebrewery=YES service homebrewery start \ No newline at end of file From 96b976fd4ac95d23c4cc88826fd57a2dad21e660 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 6 Dec 2020 18:35:24 +1300 Subject: [PATCH 21/53] Update install.sh --- freebsd/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freebsd/install.sh b/freebsd/install.sh index 261213047..64d88b4ed 100644 --- a/freebsd/install.sh +++ b/freebsd/install.sh @@ -16,5 +16,5 @@ npm run postinstall cp freebsd/rc.d/homebrewery /etc/rc.d/ chmod +x /etc/rc.d/homebrewery -sysrc homebrewery=YES +sysrc homebrewery_enable=YES service homebrewery start \ No newline at end of file From 4ee891a3ba85e5ffea347421d1960d144891a7f7 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 6 Dec 2020 18:43:01 +1300 Subject: [PATCH 22/53] Update install.sh Switch to latest version of MongoDB --- freebsd/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freebsd/install.sh b/freebsd/install.sh index 64d88b4ed..2da579e42 100644 --- a/freebsd/install.sh +++ b/freebsd/install.sh @@ -1,6 +1,6 @@ #!/bin/sh -pkg install -y git nano node npm mongodb36-3.6.20 +pkg install -y git nano node npm mongodb44-4.4.1 sysrc mongod_enable=YES service mongod start From 8887961d09e9e646f1b0cd9f737293bd6df86063 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 6 Dec 2020 20:39:43 +1300 Subject: [PATCH 23/53] Add config items Add config items and default values: - web_port (8001) - environment (local) --- config/default.json | 3 ++- server.js | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/config/default.json b/config/default.json index daf77e82e..ff148ca32 100644 --- a/config/default.json +++ b/config/default.json @@ -2,5 +2,6 @@ "host" : "homebrewery.local.naturalcrit.com:8000", "naturalcrit_url" : "local.naturalcrit.com:8010", "secret" : "secret", - "web_port" : 8000 + "web_port" : 8001, + "environment" : "local" } diff --git a/server.js b/server.js index 5528a3762..58f29884a 100644 --- a/server.js +++ b/server.js @@ -27,6 +27,11 @@ const config = require('nconf') .file('environment', { file: `config/${process.env.NODE_ENV}.json` }) .file('defaults', { file: 'config/default.json' }); +if ( !process.env.NODE_ENV && config.get('environment') ) { + process.env.NODE_ENV = config.get('environment'); + console.log('NODE_ENV set from config') +} + //DB const mongoose = require('mongoose'); mongoose.connect(config.get('mongodb_uri') || config.get('mongolab_uri') || 'mongodb://localhost/naturalcrit', From 6423d909d75362d4bc99b0ad86242db32a774ead Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 6 Dec 2020 20:41:48 +1300 Subject: [PATCH 24/53] Remove environment variables from rc.d Remove environment variables from rc.d as they are now in config/default.json. --- freebsd/rc.d/homebrewery | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery index 20f2bc7e6..e318f23f8 100644 --- a/freebsd/rc.d/homebrewery +++ b/freebsd/rc.d/homebrewery @@ -21,7 +21,6 @@ # General Info name="homebrewery" # Safe name of program -location="/usr/local/" # Install location program_name="homebrewery" # Name of exec title="HomeBrewery" # Title to display in top/htop @@ -29,8 +28,6 @@ title="HomeBrewery" # Title to display in top/htop load_rc_config $name # Loading rc config vars : ${homebrewery_enable="NO"} # Default: Do not enable HomeBrewery : ${homebrewery_runAs="root"} # Default: Run HomeBrewery as root -: ${homebrewery_port=8000} # Default: Run HomeBrewery on port 8000 -: ${homebrewery_NODE_ENV="local"} # Default: Run HomeBrewery in local mode # Freebsd Setup rcvar=homebrewery_enable # Enables the rc.conf YES/NO flag @@ -38,28 +35,15 @@ pidfile="/var/run/${program_name}.pid" # File that allows the system to keep # Env Setup export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user -export NODE_ENV=${homebrewery_NODE_ENV} -export PORT=${homebrewery_port} # Command Setup -exec_cmd="${location}/${program_name}/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally -output_file="/var/log/${program_name}.log" # Path to HomeBrewery output file +exec_cmd="/homebrewery/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally +output_file="/var/log/${program_name}.log" # Path to HomeBrewery output file # Command command="/usr/sbin/daemon" command_args="-r -t ${title} -u ${homebrewery_runAs} -o ${output_file} -P ${pidfile} /usr/local/bin/node ${exec_cmd} ${homebrewery_args}" -# Extra Commands -extra_commands="dev_mode" - -dev_mode_cmd="homebrewery_dev_mode" - -homebrewery_dev_mode() { -echo "Starting HomeBrewery in live rebuild Developer mode..." -cd ${location}/${program_name}/ -/usr/local/bin/node ${location}/${program_name}/scripts/buildHomebrew.js --dev -} - # Loading Config load_rc_config ${name} run_rc_command "$1" From e140b656a650f0a63b6382594aed50f79a084ee9 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 6 Dec 2020 21:54:20 +1300 Subject: [PATCH 25/53] Update server.js Change to setting NODE_ENV; default to 'local' if not set via environment variable or in the config file. --- server.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/server.js b/server.js index 58f29884a..39e703d23 100644 --- a/server.js +++ b/server.js @@ -27,9 +27,14 @@ const config = require('nconf') .file('environment', { file: `config/${process.env.NODE_ENV}.json` }) .file('defaults', { file: 'config/default.json' }); -if ( !process.env.NODE_ENV && config.get('environment') ) { - process.env.NODE_ENV = config.get('environment'); - console.log('NODE_ENV set from config') +if ( !process.env.NODE_ENV) { + if ( config.get('environment') ) { + process.env.NODE_ENV = config.get('environment'); + console.log('NODE_ENV set from config'); + } else { + process.env.NODE_ENV = 'local'; + console.log('NODE_ENV set to "local" as no other values were set'); + } } //DB From ea555eb410dee819e17df9690bf050022a2ecaaa Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 28 Dec 2020 12:56:17 +1300 Subject: [PATCH 26/53] Remove --force option Remove --force option from `npm audit fix`. While this has not caused any issues to date, there is no guarantee that it will continue to be the case. --- freebsd/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freebsd/install.sh b/freebsd/install.sh index 2da579e42..b26ad2e62 100644 --- a/freebsd/install.sh +++ b/freebsd/install.sh @@ -10,7 +10,7 @@ git clone https://github.com/G-Ambatte/homebrewery.git cd homebrewery npm install -npm audit fix -force +npm audit fix npm run postinstall cp freebsd/rc.d/homebrewery /etc/rc.d/ From 8677994fb7bf0092eba4198e597440c0bc8e406e Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 28 Dec 2020 15:12:51 +1300 Subject: [PATCH 27/53] Update install.sh Change to main project repo, on assumption that the PR will be merged at some point --- freebsd/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freebsd/install.sh b/freebsd/install.sh index b26ad2e62..c1e2250d9 100644 --- a/freebsd/install.sh +++ b/freebsd/install.sh @@ -6,7 +6,7 @@ sysrc mongod_enable=YES service mongod start cd / -git clone https://github.com/G-Ambatte/homebrewery.git +git clone https://github.com/naturalcrit/homebrewery.git cd homebrewery npm install From 4484cc7d16bd679c22f3cfae5d675e379d7ecab4 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 28 Dec 2020 15:24:29 +1300 Subject: [PATCH 28/53] Change install directory Change of install directory to `/usr/local/homebrewery` --- freebsd/install.sh | 2 +- freebsd/rc.d/homebrewery | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/freebsd/install.sh b/freebsd/install.sh index c1e2250d9..cfb851b9c 100644 --- a/freebsd/install.sh +++ b/freebsd/install.sh @@ -5,7 +5,7 @@ pkg install -y git nano node npm mongodb44-4.4.1 sysrc mongod_enable=YES service mongod start -cd / +cd /usr/local/ git clone https://github.com/naturalcrit/homebrewery.git cd homebrewery diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery index e318f23f8..bac844c2c 100644 --- a/freebsd/rc.d/homebrewery +++ b/freebsd/rc.d/homebrewery @@ -37,8 +37,8 @@ pidfile="/var/run/${program_name}.pid" # File that allows the system to keep export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user # Command Setup -exec_cmd="/homebrewery/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally -output_file="/var/log/${program_name}.log" # Path to HomeBrewery output file +exec_cmd="/usr/local/homebrewery/server.js" # Path to the HomeBrewery server.js +output_file="/var/log/${program_name}.log" # Path to HomeBrewery output file # Command command="/usr/sbin/daemon" From ed34b65dbd297d65ba8eadd370bc6055026d2e6a Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 28 Dec 2020 21:31:00 +1300 Subject: [PATCH 29/53] Update homebrewery Add `dev_mode` to the HomeBrewery service, which starts the HomeBrewery project in live rebuild mode. --- freebsd/rc.d/homebrewery | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery index bac844c2c..aff7670ff 100644 --- a/freebsd/rc.d/homebrewery +++ b/freebsd/rc.d/homebrewery @@ -21,6 +21,7 @@ # General Info name="homebrewery" # Safe name of program +location="/usr/local/" # Install location program_name="homebrewery" # Name of exec title="HomeBrewery" # Title to display in top/htop @@ -37,13 +38,24 @@ pidfile="/var/run/${program_name}.pid" # File that allows the system to keep export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user # Command Setup -exec_cmd="/usr/local/homebrewery/server.js" # Path to the HomeBrewery server.js -output_file="/var/log/${program_name}.log" # Path to HomeBrewery output file +exec_cmd="${location}/${program_name}/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally +output_file="/var/log/${program_name}.log" # Path to HomeBrewery output file # Command command="/usr/sbin/daemon" command_args="-r -t ${title} -u ${homebrewery_runAs} -o ${output_file} -P ${pidfile} /usr/local/bin/node ${exec_cmd} ${homebrewery_args}" +# Extra Commands +extra_commands="dev_mode" + +dev_mode_cmd="homebrewery_dev_mode" + +homebrewery_dev_mode() { +echo "Starting HomeBrewery in live rebuild Developer mode..." +cd ${location}/${program_name}/ +/usr/local/bin/node ${location}/${program_name}/scripts/buildHomebrew.js --dev +} + # Loading Config load_rc_config ${name} run_rc_command "$1" From 9cccd2d74ed27e35dc25864e56af23b35d12c0f9 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Tue, 29 Dec 2020 17:55:15 +1300 Subject: [PATCH 30/53] Update server.js Eliminating unnecessary debugging code, reducing line count and making lint happy :) --- server.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/server.js b/server.js index 39e703d23..e56137b3d 100644 --- a/server.js +++ b/server.js @@ -27,15 +27,7 @@ const config = require('nconf') .file('environment', { file: `config/${process.env.NODE_ENV}.json` }) .file('defaults', { file: 'config/default.json' }); -if ( !process.env.NODE_ENV) { - if ( config.get('environment') ) { - process.env.NODE_ENV = config.get('environment'); - console.log('NODE_ENV set from config'); - } else { - process.env.NODE_ENV = 'local'; - console.log('NODE_ENV set to "local" as no other values were set'); - } -} +if(!process.env.NODE_ENV) { process.env.NODE_ENV = ( config.get('environment') || 'local' ); } //DB const mongoose = require('mongoose'); From 8f6270723e2c4cb8a8c715d343359ea14994123b Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Tue, 29 Dec 2020 17:57:33 +1300 Subject: [PATCH 31/53] Update server.js Lint is happy, now attempting to pacify CircleCI --- server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.js b/server.js index e56137b3d..fdca3193a 100644 --- a/server.js +++ b/server.js @@ -27,7 +27,7 @@ const config = require('nconf') .file('environment', { file: `config/${process.env.NODE_ENV}.json` }) .file('defaults', { file: 'config/default.json' }); -if(!process.env.NODE_ENV) { process.env.NODE_ENV = ( config.get('environment') || 'local' ); } +if(!process.env.NODE_ENV) {process.env.NODE_ENV = (config.get('environment') || 'local');} //DB const mongoose = require('mongoose'); From 24f5fcb5a0f3e1f6bcb91a035c9a76385deac353 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 3 Jan 2021 23:57:43 +1300 Subject: [PATCH 32/53] Move NODE_ENV to service file; remove from server.js and config/default.json --- config/default.json | 1 - freebsd/rc.d/homebrewery | 2 ++ server.js | 2 -- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/config/default.json b/config/default.json index ff148ca32..d7b5fc31d 100644 --- a/config/default.json +++ b/config/default.json @@ -3,5 +3,4 @@ "naturalcrit_url" : "local.naturalcrit.com:8010", "secret" : "secret", "web_port" : 8001, - "environment" : "local" } diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery index aff7670ff..2f921b9f6 100644 --- a/freebsd/rc.d/homebrewery +++ b/freebsd/rc.d/homebrewery @@ -36,6 +36,8 @@ pidfile="/var/run/${program_name}.pid" # File that allows the system to keep # Env Setup export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user +export NODE_ENV="local" +export PORT=8001 # Command Setup exec_cmd="${location}/${program_name}/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally diff --git a/server.js b/server.js index fdca3193a..5528a3762 100644 --- a/server.js +++ b/server.js @@ -27,8 +27,6 @@ const config = require('nconf') .file('environment', { file: `config/${process.env.NODE_ENV}.json` }) .file('defaults', { file: 'config/default.json' }); -if(!process.env.NODE_ENV) {process.env.NODE_ENV = (config.get('environment') || 'local');} - //DB const mongoose = require('mongoose'); mongoose.connect(config.get('mongodb_uri') || config.get('mongolab_uri') || 'mongodb://localhost/naturalcrit', From edd902397e505ac76f9bfc6c5335581faf955eed Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sat, 9 Jan 2021 23:03:39 +1300 Subject: [PATCH 33/53] Remove hanging comma in config.json Change default port assignment from 8000 to 8001 in config.json and FreeBSD service config --- config/default.json | 2 +- freebsd/rc.d/homebrewery | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/default.json b/config/default.json index d7b5fc31d..daf77e82e 100644 --- a/config/default.json +++ b/config/default.json @@ -2,5 +2,5 @@ "host" : "homebrewery.local.naturalcrit.com:8000", "naturalcrit_url" : "local.naturalcrit.com:8010", "secret" : "secret", - "web_port" : 8001, + "web_port" : 8000 } diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery index 2f921b9f6..2d8ea2bfb 100644 --- a/freebsd/rc.d/homebrewery +++ b/freebsd/rc.d/homebrewery @@ -37,7 +37,7 @@ pidfile="/var/run/${program_name}.pid" # File that allows the system to keep # Env Setup export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user export NODE_ENV="local" -export PORT=8001 +export PORT=8000 # Command Setup exec_cmd="${location}/${program_name}/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally From 407232c7087ceb3cbac908237cfcdbe63dccb436 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 10 Jan 2021 17:23:14 +1300 Subject: [PATCH 34/53] Fix for MongoDB package update breaking install script Change to enable use of rcvars for NODE_ENV and PORT --- freebsd/install.sh | 6 +++--- freebsd/rc.d/homebrewery | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/freebsd/install.sh b/freebsd/install.sh index cfb851b9c..0b3bb7fdc 100644 --- a/freebsd/install.sh +++ b/freebsd/install.sh @@ -1,6 +1,6 @@ #!/bin/sh -pkg install -y git nano node npm mongodb44-4.4.1 +pkg install -y git nano node npm mongodb44 sysrc mongod_enable=YES service mongod start @@ -13,8 +13,8 @@ npm install npm audit fix npm run postinstall -cp freebsd/rc.d/homebrewery /etc/rc.d/ -chmod +x /etc/rc.d/homebrewery +cp freebsd/rc.d/homebrewery /usr/local/etc/rc.d/ +chmod +x /usr/local/etc/rc.d/homebrewery sysrc homebrewery_enable=YES service homebrewery start \ No newline at end of file diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery index 2d8ea2bfb..20f2bc7e6 100644 --- a/freebsd/rc.d/homebrewery +++ b/freebsd/rc.d/homebrewery @@ -29,6 +29,8 @@ title="HomeBrewery" # Title to display in top/htop load_rc_config $name # Loading rc config vars : ${homebrewery_enable="NO"} # Default: Do not enable HomeBrewery : ${homebrewery_runAs="root"} # Default: Run HomeBrewery as root +: ${homebrewery_port=8000} # Default: Run HomeBrewery on port 8000 +: ${homebrewery_NODE_ENV="local"} # Default: Run HomeBrewery in local mode # Freebsd Setup rcvar=homebrewery_enable # Enables the rc.conf YES/NO flag @@ -36,8 +38,8 @@ pidfile="/var/run/${program_name}.pid" # File that allows the system to keep # Env Setup export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user -export NODE_ENV="local" -export PORT=8000 +export NODE_ENV=${homebrewery_NODE_ENV} +export PORT=${homebrewery_port} # Command Setup exec_cmd="${location}/${program_name}/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally From 715ddf2b8c9088d9f02bcab575f97055ce4f7796 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 17 Jan 2021 18:52:56 +1300 Subject: [PATCH 35/53] Initial commit --- client/homebrew/pages/sharePage/sharePage.jsx | 5 +- server.js | 49 ++++++++++++++++++- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index c94473b1d..01145ec4c 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -60,7 +60,10 @@ const SharePage = createClass({ - source + view source + + + download source diff --git a/server.js b/server.js index 5528a3762..d2de44ae5 100644 --- a/server.js +++ b/server.js @@ -76,7 +76,7 @@ app.get('/source/:id', (req, res)=>{ GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') .then((brew)=>{ const text = brew.text.replaceAll('<', '<').replaceAll('>', '>'); - return res.send(`
${text}
`); + return res.status(200).send(`
${text}
`); }) .catch((err)=>{ console.log(err); @@ -86,7 +86,52 @@ app.get('/source/:id', (req, res)=>{ HomebrewModel.get({ shareId: req.params.id }) .then((brew)=>{ const text = brew.text.replaceAll('<', '<').replaceAll('>', '>'); - return res.send(`
${text}
`); + return res.status(200).send(`
${text}
`); + }) + .catch((err)=>{ + console.log(err); + return res.status(404).send('Could not find Homebrew with that id'); + }); + } +}); + +//Source download page +app.get('/source_dl/:id', (req, res)=>{ + if(req.params.id.length > 12) { + const googleId = req.params.id.slice(0, -12); + const shareId = req.params.id.slice(-12); + GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') + .then((brew)=>{ + const text = brew.text.replaceAll('<', '<').replaceAll('>', '>'); + const fileName = brew.title.replaceAll(' ', '-'); + + res.status(200); + res.set({ + 'Cache-Control' : 'no-cache', + 'Content-Type' : 'text/plain', + 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` + }); + + return res.send(text); + }) + .catch((err)=>{ + console.log(err); + return res.status(400).send('Can\'t get brew from Google'); + }); + } else { + HomebrewModel.get({ shareId: req.params.id }) + .then((brew)=>{ + const text = brew.text.replaceAll('<', '<').replaceAll('>', '>'); + const fileName = brew.title.replaceAll(' ', '-'); + + res.status(200); + res.set({ + 'Cache-Control' : 'no-cache', + 'Content-Type' : 'text/plain', + 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` + }); + + return res.send(text); }) .catch((err)=>{ console.log(err); From 7fccb7e03ebbdc5e124a50c9a26bcb790be26f78 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 17 Jan 2021 22:07:26 +1300 Subject: [PATCH 36/53] Shift functionality to new file in attempt to reduce code duplication in server.js --- client/homebrew/pages/sharePage/sharePage.jsx | 2 +- client/homebrew/pages/sharePage/source_dl.jsx | 14 +++++++ server.js | 39 ++++++------------- 3 files changed, 26 insertions(+), 29 deletions(-) create mode 100644 client/homebrew/pages/sharePage/source_dl.jsx diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 01145ec4c..9867e9dc3 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -62,7 +62,7 @@ const SharePage = createClass({ view source - + download source diff --git a/client/homebrew/pages/sharePage/source_dl.jsx b/client/homebrew/pages/sharePage/source_dl.jsx new file mode 100644 index 000000000..e37ed9be4 --- /dev/null +++ b/client/homebrew/pages/sharePage/source_dl.jsx @@ -0,0 +1,14 @@ +const sourceDL = function(res, brew) { + const fileName = brew.title.replaceAll(' ', '-').replaceAll(':', '').replaceAll('/', ''); + + res.status(200); + res.set({ + 'Cache-Control' : 'no-cache', + 'Content-Type' : 'text/plain', + 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` + }); + + return res; +}; + +module.exports = sourceDL; \ No newline at end of file diff --git a/server.js b/server.js index d2de44ae5..dfd14580c 100644 --- a/server.js +++ b/server.js @@ -97,22 +97,14 @@ app.get('/source/:id', (req, res)=>{ //Source download page app.get('/source_dl/:id', (req, res)=>{ + const sourceDL = require ('./client/homebrew/pages/sharePage/source_dl.jsx'); if(req.params.id.length > 12) { const googleId = req.params.id.slice(0, -12); const shareId = req.params.id.slice(-12); GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') .then((brew)=>{ - const text = brew.text.replaceAll('<', '<').replaceAll('>', '>'); - const fileName = brew.title.replaceAll(' ', '-'); - - res.status(200); - res.set({ - 'Cache-Control' : 'no-cache', - 'Content-Type' : 'text/plain', - 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` - }); - - return res.send(text); + res = sourceDL(res, brew); + return res.send(brew.text); }) .catch((err)=>{ console.log(err); @@ -120,23 +112,14 @@ app.get('/source_dl/:id', (req, res)=>{ }); } else { HomebrewModel.get({ shareId: req.params.id }) - .then((brew)=>{ - const text = brew.text.replaceAll('<', '<').replaceAll('>', '>'); - const fileName = brew.title.replaceAll(' ', '-'); - - res.status(200); - res.set({ - 'Cache-Control' : 'no-cache', - 'Content-Type' : 'text/plain', - 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` - }); - - return res.send(text); - }) - .catch((err)=>{ - console.log(err); - return res.status(404).send('Could not find Homebrew with that id'); - }); + .then((brew)=>{ + res = sourceDL(res, brew); + return res.send(brew.text); + }) + .catch((err)=>{ + console.log(err); + return res.status(404).send('Could not find Homebrew with that id'); + }); } }); From e8135fcbb4ea5b1a04c7a2dc3e5089ca75388929 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Thu, 21 Jan 2021 00:02:15 +1300 Subject: [PATCH 37/53] Added `sanitizeHtml` function to Homebrew model to generate HTML from the brew for the source page. Moved `source` page generation function to a new function module. Added option to function to create plain text download with a sanitized filename and made it accessible from a new page: `download`. Added the `download` item to the BrewItem so it appears on each brew on the User page. Added `sanitize-filename` dependency to `package.json`. --- client/homebrew/pages/sharePage/sharePage.jsx | 2 +- .../pages/sharePage/sourceFunctions.jsx | 56 +++++++++++++++++++ client/homebrew/pages/sharePage/source_dl.jsx | 14 ----- .../pages/userPage/brewItem/brewItem.jsx | 9 +-- package.json | 1 + server.js | 53 ++---------------- server/homebrew.model.js | 11 ++++ 7 files changed, 79 insertions(+), 67 deletions(-) create mode 100644 client/homebrew/pages/sharePage/sourceFunctions.jsx delete mode 100644 client/homebrew/pages/sharePage/source_dl.jsx diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 9867e9dc3..863cc2aa2 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -62,7 +62,7 @@ const SharePage = createClass({ view source - + download source diff --git a/client/homebrew/pages/sharePage/sourceFunctions.jsx b/client/homebrew/pages/sharePage/sourceFunctions.jsx new file mode 100644 index 000000000..a52b08d19 --- /dev/null +++ b/client/homebrew/pages/sharePage/sourceFunctions.jsx @@ -0,0 +1,56 @@ +const HomebrewModel = require.main.require('./server/homebrew.model.js').model; +const sanitizeFilename = require('sanitize-filename'); + +const shareFunction = function(req, res, type) { + if(req.params.id.length > 12) { + const googleId = req.params.id.slice(0, -12); + const shareId = req.params.id.slice(-12); + GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') + .then((brew)=>{ + if(type == 'source') { + return res.status(200).send(brew.sanitizeHtml()); + } else if(type == 'download') { + let fileName = sanitizeFilename(brew.title); + fileName = fileName.replaceAll(' ', '-'); + res.status(200); + res.set({ + 'Cache-Control' : 'no-cache', + 'Content-Type' : 'text/plain', + 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` + }); + return res.send(brew.text); + } else { + console.log('Unhandled source share type'); + } + }) + .catch((err)=>{ + console.log(err); + return res.status(400).send('Can\'t get brew from Google'); + }); + } else { + HomebrewModel.get({ shareId: req.params.id }) + .then((brew)=>{ + if(type == 'source') { + return res.status(200).send(brew.sanitizeHtml()); + } else if(type == 'download') { + let fileName = sanitizeFilename(brew.title); + fileName = fileName.replaceAll(' ', '-'); + res.status(200); + res.set({ + 'Cache-Control' : 'no-cache', + 'Content-Type' : 'text/plain', + 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` + }); + return res.send(brew.text); + } else { + console.log('Unhandled share type'); + } + }) + .catch((err)=>{ + console.log(err); + return res.status(404).send('Could not find Homebrew with that id'); + }); + } +}; + +module.exports = shareFunction; \ No newline at end of file diff --git a/client/homebrew/pages/sharePage/source_dl.jsx b/client/homebrew/pages/sharePage/source_dl.jsx deleted file mode 100644 index e37ed9be4..000000000 --- a/client/homebrew/pages/sharePage/source_dl.jsx +++ /dev/null @@ -1,14 +0,0 @@ -const sourceDL = function(res, brew) { - const fileName = brew.title.replaceAll(' ', '-').replaceAll(':', '').replaceAll('/', ''); - - res.status(200); - res.set({ - 'Cache-Control' : 'no-cache', - 'Content-Type' : 'text/plain', - 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` - }); - - return res; -}; - -module.exports = sourceDL; \ No newline at end of file diff --git a/client/homebrew/pages/userPage/brewItem/brewItem.jsx b/client/homebrew/pages/userPage/brewItem/brewItem.jsx index bddf246bf..24d3e890e 100644 --- a/client/homebrew/pages/userPage/brewItem/brewItem.jsx +++ b/client/homebrew/pages/userPage/brewItem/brewItem.jsx @@ -65,7 +65,7 @@ const BrewItem = createClass({ ; }, - renderShareLink : function(){ + renderSourceLink : function(path, icon){ if(!this.props.brew.shareId) return; let shareLink = this.props.brew.shareId; @@ -73,8 +73,8 @@ const BrewItem = createClass({ shareLink = this.props.brew.googleId + shareLink; } - return - + return + ; }, @@ -107,8 +107,9 @@ const BrewItem = createClass({
- {this.renderShareLink()} + {this.renderSourceLink('share', 'fa-share-alt')} {this.renderEditLink()} + {this.renderSourceLink('download', 'fa-download')} {this.renderDeleteBrewLink()}
; diff --git a/package.json b/package.json index f5b7aff26..887c97715 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "react-dom": "^16.14.0", "react-frame-component": "4.1.3", "react-router-dom": "5.2.0", + "sanitize-filename": "1.6.3", "superagent": "^6.1.0", "vitreum": "github:calculuschild/vitreum#21a8e1c9421f1d3a3b474c12f480feb2fbd28c5b" }, diff --git a/server.js b/server.js index dfd14580c..c0ea06c96 100644 --- a/server.js +++ b/server.js @@ -7,6 +7,8 @@ const app = express(); const homebrewApi = require('./server/homebrew.api.js'); const GoogleActions = require('./server/googleActions.js'); +const shareFunction = require ('./client/homebrew/pages/sharePage/sourceFunctions.jsx'); + // Serve brotli-compressed static files if available app.use('/', expressStaticGzip(`${__dirname}/build`, { enableBrotli : true, @@ -70,57 +72,12 @@ app.get('/robots.txt', (req, res)=>{ //Source page app.get('/source/:id', (req, res)=>{ - if(req.params.id.length > 12) { - const googleId = req.params.id.slice(0, -12); - const shareId = req.params.id.slice(-12); - GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') - .then((brew)=>{ - const text = brew.text.replaceAll('<', '<').replaceAll('>', '>'); - return res.status(200).send(`
${text}
`); - }) - .catch((err)=>{ - console.log(err); - return res.status(400).send('Can\'t get brew from Google'); - }); - } else { - HomebrewModel.get({ shareId: req.params.id }) - .then((brew)=>{ - const text = brew.text.replaceAll('<', '<').replaceAll('>', '>'); - return res.status(200).send(`
${text}
`); - }) - .catch((err)=>{ - console.log(err); - return res.status(404).send('Could not find Homebrew with that id'); - }); - } + return shareFunction(req, res, 'source'); }); //Source download page -app.get('/source_dl/:id', (req, res)=>{ - const sourceDL = require ('./client/homebrew/pages/sharePage/source_dl.jsx'); - if(req.params.id.length > 12) { - const googleId = req.params.id.slice(0, -12); - const shareId = req.params.id.slice(-12); - GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') - .then((brew)=>{ - res = sourceDL(res, brew); - return res.send(brew.text); - }) - .catch((err)=>{ - console.log(err); - return res.status(400).send('Can\'t get brew from Google'); - }); - } else { - HomebrewModel.get({ shareId: req.params.id }) - .then((brew)=>{ - res = sourceDL(res, brew); - return res.send(brew.text); - }) - .catch((err)=>{ - console.log(err); - return res.status(404).send('Could not find Homebrew with that id'); - }); - } +app.get('/download/:id', (req, res)=>{ + return shareFunction(req, res, 'download'); }); //User Page diff --git a/server/homebrew.model.js b/server/homebrew.model.js index 05a9ab673..05b94663a 100644 --- a/server/homebrew.model.js +++ b/server/homebrew.model.js @@ -34,6 +34,17 @@ HomebrewSchema.methods.sanatize = function(full=false){ return brew; }; +HomebrewSchema.methods.sanitizeHtml = function(){ + const brew = this.toJSON(); + const replaceStrings = { '&': '&', '<': '<', '>': '>' }; + text = brew.text; + for (const replaceStr in replaceStrings) { + text = text.replaceAll(replaceStr, replaceStrings[replaceStr]); + } + text = `
${text}
`; + return text; +}; + HomebrewSchema.methods.increaseView = async function(){ this.lastViewed = new Date(); this.views = this.views + 1; From 8060ed5f8e6acbfb990269e90ce7f84a4040bb99 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Thu, 21 Jan 2021 07:37:50 +1300 Subject: [PATCH 38/53] Rename `sanitizeHtml` function to `escapeTextForHtmlDisplay` which better describes it's actual function --- server/homebrew.model.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server/homebrew.model.js b/server/homebrew.model.js index 05b94663a..3d417f9e8 100644 --- a/server/homebrew.model.js +++ b/server/homebrew.model.js @@ -34,10 +34,9 @@ HomebrewSchema.methods.sanatize = function(full=false){ return brew; }; -HomebrewSchema.methods.sanitizeHtml = function(){ - const brew = this.toJSON(); +HomebrewSchema.methods.escapeTextForHtmlDisplay = function(){ const replaceStrings = { '&': '&', '<': '<', '>': '>' }; - text = brew.text; + text = this.text; for (const replaceStr in replaceStrings) { text = text.replaceAll(replaceStr, replaceStrings[replaceStr]); } From 0e8348f36030bc9d909653af30e3f771213abd89 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Thu, 21 Jan 2021 07:39:08 +1300 Subject: [PATCH 39/53] Catch zero length filenames --- client/homebrew/pages/sharePage/sourceFunctions.jsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/client/homebrew/pages/sharePage/sourceFunctions.jsx b/client/homebrew/pages/sharePage/sourceFunctions.jsx index a52b08d19..2491c56a3 100644 --- a/client/homebrew/pages/sharePage/sourceFunctions.jsx +++ b/client/homebrew/pages/sharePage/sourceFunctions.jsx @@ -8,10 +8,13 @@ const shareFunction = function(req, res, type) { GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') .then((brew)=>{ if(type == 'source') { - return res.status(200).send(brew.sanitizeHtml()); + return res.status(200).send(brew.escapeTextForHtmlDisplay()); } else if(type == 'download') { let fileName = sanitizeFilename(brew.title); fileName = fileName.replaceAll(' ', '-'); + if(!fileName || !fileName.length) { + fileName = 'Untitled-Brew'; + } res.status(200); res.set({ 'Cache-Control' : 'no-cache', @@ -31,7 +34,7 @@ const shareFunction = function(req, res, type) { HomebrewModel.get({ shareId: req.params.id }) .then((brew)=>{ if(type == 'source') { - return res.status(200).send(brew.sanitizeHtml()); + return res.status(200).send(brew.escapeTextForHtmlDisplay()); } else if(type == 'download') { let fileName = sanitizeFilename(brew.title); fileName = fileName.replaceAll(' ', '-'); From 5c7a9c92d1546f673d86969541ea22f9e1603f08 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Thu, 21 Jan 2021 20:27:46 +1300 Subject: [PATCH 40/53] Integrated `download` function into `server.js` Remove new function from `Homebrew.Model.js` Remove `sourceFunctions.jsx` module --- .../pages/sharePage/sourceFunctions.jsx | 59 ------------------- server.js | 53 ++++++++++++++++- server/homebrew.model.js | 10 ---- 3 files changed, 52 insertions(+), 70 deletions(-) delete mode 100644 client/homebrew/pages/sharePage/sourceFunctions.jsx diff --git a/client/homebrew/pages/sharePage/sourceFunctions.jsx b/client/homebrew/pages/sharePage/sourceFunctions.jsx deleted file mode 100644 index 2491c56a3..000000000 --- a/client/homebrew/pages/sharePage/sourceFunctions.jsx +++ /dev/null @@ -1,59 +0,0 @@ -const HomebrewModel = require.main.require('./server/homebrew.model.js').model; -const sanitizeFilename = require('sanitize-filename'); - -const shareFunction = function(req, res, type) { - if(req.params.id.length > 12) { - const googleId = req.params.id.slice(0, -12); - const shareId = req.params.id.slice(-12); - GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') - .then((brew)=>{ - if(type == 'source') { - return res.status(200).send(brew.escapeTextForHtmlDisplay()); - } else if(type == 'download') { - let fileName = sanitizeFilename(brew.title); - fileName = fileName.replaceAll(' ', '-'); - if(!fileName || !fileName.length) { - fileName = 'Untitled-Brew'; - } - res.status(200); - res.set({ - 'Cache-Control' : 'no-cache', - 'Content-Type' : 'text/plain', - 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` - }); - return res.send(brew.text); - } else { - console.log('Unhandled source share type'); - } - }) - .catch((err)=>{ - console.log(err); - return res.status(400).send('Can\'t get brew from Google'); - }); - } else { - HomebrewModel.get({ shareId: req.params.id }) - .then((brew)=>{ - if(type == 'source') { - return res.status(200).send(brew.escapeTextForHtmlDisplay()); - } else if(type == 'download') { - let fileName = sanitizeFilename(brew.title); - fileName = fileName.replaceAll(' ', '-'); - res.status(200); - res.set({ - 'Cache-Control' : 'no-cache', - 'Content-Type' : 'text/plain', - 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` - }); - return res.send(brew.text); - } else { - console.log('Unhandled share type'); - } - }) - .catch((err)=>{ - console.log(err); - return res.status(404).send('Could not find Homebrew with that id'); - }); - } -}; - -module.exports = shareFunction; \ No newline at end of file diff --git a/server.js b/server.js index c0ea06c96..d596cc769 100644 --- a/server.js +++ b/server.js @@ -1,3 +1,4 @@ +/* eslint-disable max-lines */ const _ = require('lodash'); const jwt = require('jwt-simple'); const expressStaticGzip = require('express-static-gzip'); @@ -7,7 +8,7 @@ const app = express(); const homebrewApi = require('./server/homebrew.api.js'); const GoogleActions = require('./server/googleActions.js'); -const shareFunction = require ('./client/homebrew/pages/sharePage/sourceFunctions.jsx'); +const sanitizeFilename = require('sanitize-filename'); // Serve brotli-compressed static files if available app.use('/', expressStaticGzip(`${__dirname}/build`, { @@ -70,6 +71,56 @@ app.get('/robots.txt', (req, res)=>{ return res.sendFile(`${__dirname}/robots.txt`); }); +const shareFunction = function(req, res, type) { + if(req.params.id.length > 12) { + const googleId = req.params.id.slice(0, -12); + const shareId = req.params.id.slice(-12); + GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') + .then((brew)=>{ + setSourceHeaders(res, brew.title, type); + res.send(getSourceText(brew.text, type)); + }) + .catch((err)=>{ + console.log(err); + return res.status(400).send('Can\'t get brew from Google'); + }); + } else { + HomebrewModel.get({ shareId: req.params.id }) + .then((brew)=>{ + setSourceHeaders(res, brew.title, type); + res.send(getSourceText(brew.text, type)); + }) + .catch((err)=>{ + console.log(err); + return res.status(404).send('Could not find Homebrew with that id'); + }); + } +}; + +const setSourceHeaders = function (res, title, type) { + res.status(200); + if (type == 'download') { + let fileName = sanitizeFilename(title).replaceAll(' ', '-'); + + res.set({ + 'Cache-Control' : 'no-cache', + 'Content-Type' : 'text/plain', + 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` + }); + } +} + +const getSourceText = function (brewText, type) { + if(type == 'source') { + return `
${brewText.replaceAll('&', '&').replaceAll('<','<').replaceAll('>', '>')}
`; + } else if(type == 'download') { + return brewText; + } else { + console.log('Unhandled source share type'); + return; + } +} + //Source page app.get('/source/:id', (req, res)=>{ return shareFunction(req, res, 'source'); diff --git a/server/homebrew.model.js b/server/homebrew.model.js index 3d417f9e8..05a9ab673 100644 --- a/server/homebrew.model.js +++ b/server/homebrew.model.js @@ -34,16 +34,6 @@ HomebrewSchema.methods.sanatize = function(full=false){ return brew; }; -HomebrewSchema.methods.escapeTextForHtmlDisplay = function(){ - const replaceStrings = { '&': '&', '<': '<', '>': '>' }; - text = this.text; - for (const replaceStr in replaceStrings) { - text = text.replaceAll(replaceStr, replaceStrings[replaceStr]); - } - text = `
${text}
`; - return text; -}; - HomebrewSchema.methods.increaseView = async function(){ this.lastViewed = new Date(); this.views = this.views + 1; From 06223d576de29f2b288655db50dc14636a84b471 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Thu, 21 Jan 2021 20:32:23 +1300 Subject: [PATCH 41/53] Fixes from Linter --- server.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server.js b/server.js index d596cc769..b8b0a28f3 100644 --- a/server.js +++ b/server.js @@ -99,8 +99,8 @@ const shareFunction = function(req, res, type) { const setSourceHeaders = function (res, title, type) { res.status(200); - if (type == 'download') { - let fileName = sanitizeFilename(title).replaceAll(' ', '-'); + if(type == 'download') { + const fileName = sanitizeFilename(title).replaceAll(' ', '-'); res.set({ 'Cache-Control' : 'no-cache', @@ -108,18 +108,18 @@ const setSourceHeaders = function (res, title, type) { 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` }); } -} +}; const getSourceText = function (brewText, type) { if(type == 'source') { - return `
${brewText.replaceAll('&', '&').replaceAll('<','<').replaceAll('>', '>')}
`; + return `
${brewText.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>')}
`; } else if(type == 'download') { return brewText; } else { console.log('Unhandled source share type'); return; } -} +}; //Source page app.get('/source/:id', (req, res)=>{ From 21f08c97a1740a3c0150e0cdc9d8bf105bc4dc25 Mon Sep 17 00:00:00 2001 From: Sean Robertson Date: Fri, 22 Jan 2021 13:56:29 +1300 Subject: [PATCH 42/53] Expand `source` text escaping/processing for improved readability --- server.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/server.js b/server.js index b8b0a28f3..fd55ee296 100644 --- a/server.js +++ b/server.js @@ -112,7 +112,12 @@ const setSourceHeaders = function (res, title, type) { const getSourceText = function (brewText, type) { if(type == 'source') { - return `
${brewText.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>')}
`; + const replaceStrings = { '&': '&', '<': '<', '>': '>' }; + const text = brewText; + for (const replaceStr in replaceStrings) { + text = text.replaceAll(replaceStr, replaceStrings[replaceStr]); + } + return `
${text}
`; } else if(type == 'download') { return brewText; } else { From 4073536d962339e1685773e566b766c1baaf11e5 Mon Sep 17 00:00:00 2001 From: Sean Robertson Date: Fri, 22 Jan 2021 13:59:15 +1300 Subject: [PATCH 43/53] (WIP) Remove `target=_blank` and `rel=noopener noreferrer` from brewItem.jsx to eliminate white flash on User page when clicking link to download source of a brew. --- client/homebrew/pages/userPage/brewItem/brewItem.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/homebrew/pages/userPage/brewItem/brewItem.jsx b/client/homebrew/pages/userPage/brewItem/brewItem.jsx index 24d3e890e..4a519cd4d 100644 --- a/client/homebrew/pages/userPage/brewItem/brewItem.jsx +++ b/client/homebrew/pages/userPage/brewItem/brewItem.jsx @@ -73,7 +73,7 @@ const BrewItem = createClass({ shareLink = this.props.brew.googleId + shareLink; } - return + return ; }, From da32845dd15d41441f8ce0f2f7db19f8ecfe0a1d Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Fri, 22 Jan 2021 16:44:34 +1300 Subject: [PATCH 44/53] (WIP) Unwinding refactoring to improve clarity and readability of new functions --- .../pages/userPage/brewItem/brewItem.jsx | 23 +++- server.js | 100 ++++++++++-------- 2 files changed, 71 insertions(+), 52 deletions(-) diff --git a/client/homebrew/pages/userPage/brewItem/brewItem.jsx b/client/homebrew/pages/userPage/brewItem/brewItem.jsx index 4a519cd4d..abf3c392c 100644 --- a/client/homebrew/pages/userPage/brewItem/brewItem.jsx +++ b/client/homebrew/pages/userPage/brewItem/brewItem.jsx @@ -65,7 +65,7 @@ const BrewItem = createClass({ ; }, - renderSourceLink : function(path, icon){ + renderSourceLink : function(){ if(!this.props.brew.shareId) return; let shareLink = this.props.brew.shareId; @@ -73,8 +73,21 @@ const BrewItem = createClass({ shareLink = this.props.brew.googleId + shareLink; } - return - + return + + ; + }, + + renderDownloadLink : function(){ + if(!this.props.brew.shareId) return; + + let shareLink = this.props.brew.shareId; + if(this.props.brew.googleId) { + shareLink = this.props.brew.googleId + shareLink; + } + + return + ; }, @@ -107,9 +120,9 @@ const BrewItem = createClass({
- {this.renderSourceLink('share', 'fa-share-alt')} + {this.renderShareLink()} {this.renderEditLink()} - {this.renderSourceLink('download', 'fa-download')} + {this.renderDownloadLink()} {this.renderDeleteBrewLink()}
; diff --git a/server.js b/server.js index fd55ee296..80f74eea5 100644 --- a/server.js +++ b/server.js @@ -71,14 +71,21 @@ app.get('/robots.txt', (req, res)=>{ return res.sendFile(`${__dirname}/robots.txt`); }); -const shareFunction = function(req, res, type) { + +//Source page +app.get('/source/:id', (req, res)=>{ if(req.params.id.length > 12) { const googleId = req.params.id.slice(0, -12); const shareId = req.params.id.slice(-12); GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') - .then((brew)=>{ - setSourceHeaders(res, brew.title, type); - res.send(getSourceText(brew.text, type)); + .then((brew)=>{ + const replaceStrings = { '&': '&', '<': '<', '>': '>' }; + const text = brew.text; + for (const replaceStr in replaceStrings) { + text = text.replaceAll(replaceStr, replaceStrings[replaceStr]); + } + text = `
${text}
`; + res.status(200).send(text); }) .catch((err)=>{ console.log(err); @@ -86,54 +93,53 @@ const shareFunction = function(req, res, type) { }); } else { HomebrewModel.get({ shareId: req.params.id }) - .then((brew)=>{ - setSourceHeaders(res, brew.title, type); - res.send(getSourceText(brew.text, type)); - }) - .catch((err)=>{ - console.log(err); - return res.status(404).send('Could not find Homebrew with that id'); - }); - } -}; - -const setSourceHeaders = function (res, title, type) { - res.status(200); - if(type == 'download') { - const fileName = sanitizeFilename(title).replaceAll(' ', '-'); - - res.set({ - 'Cache-Control' : 'no-cache', - 'Content-Type' : 'text/plain', - 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` + .then((brew)=>{ + const replaceStrings = { '&': '&', '<': '<', '>': '>' }; + const text = brew.text; + for (const replaceStr in replaceStrings) { + text = text.replaceAll(replaceStr, replaceStrings[replaceStr]); + } + text = `
${text}
`; + res.status(200).send(text); + }) + .catch((err)=>{ + console.log(err); + return res.status(404).send('Could not find Homebrew with that id'); }); } -}; - -const getSourceText = function (brewText, type) { - if(type == 'source') { - const replaceStrings = { '&': '&', '<': '<', '>': '>' }; - const text = brewText; - for (const replaceStr in replaceStrings) { - text = text.replaceAll(replaceStr, replaceStrings[replaceStr]); - } - return `
${text}
`; - } else if(type == 'download') { - return brewText; - } else { - console.log('Unhandled source share type'); - return; - } -}; - -//Source page -app.get('/source/:id', (req, res)=>{ - return shareFunction(req, res, 'source'); }); -//Source download page +//Download brew source page app.get('/download/:id', (req, res)=>{ - return shareFunction(req, res, 'download'); + if(req.params.id.length > 12) { + const googleId = req.params.id.slice(0, -12); + const shareId = req.params.id.slice(-12); + GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') + .then((brew)=>{ + const fileName = sanitizeFilename(title).replaceAll(' ', '-'); + if (!fileName || !fileName.length) { fileName = 'Untitled-Brew'; }; + res.set({ + 'Cache-Control' : 'no-cache', + 'Content-Type' : 'text/plain', + 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` + }); + res.status(200).send(getSourceText(brew.text, type)); + }) + .catch((err)=>{ + console.log(err); + return res.status(400).send('Can\'t get brew from Google'); + }); + } else { + HomebrewModel.get({ shareId: req.params.id }) + .then((brew)=>{ + setSourceHeaders(res, brew.title, type); + res.send(getSourceText(brew.text, type)); + }) + .catch((err)=>{ + console.log(err); + return res.status(404).send('Could not find Homebrew with that id'); + }); + } }); //User Page From 6d219aa701101d5f4b026e07cea8e0eff9c5240c Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Fri, 22 Jan 2021 17:29:26 +1300 Subject: [PATCH 45/53] Unwinding refactored code + corrections. --- .../pages/userPage/brewItem/brewItem.jsx | 6 ++--- server.js | 22 ++++++++++++------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/client/homebrew/pages/userPage/brewItem/brewItem.jsx b/client/homebrew/pages/userPage/brewItem/brewItem.jsx index abf3c392c..1ca358ce9 100644 --- a/client/homebrew/pages/userPage/brewItem/brewItem.jsx +++ b/client/homebrew/pages/userPage/brewItem/brewItem.jsx @@ -65,7 +65,7 @@ const BrewItem = createClass({ ; }, - renderSourceLink : function(){ + renderShareLink : function(){ if(!this.props.brew.shareId) return; let shareLink = this.props.brew.shareId; @@ -74,7 +74,7 @@ const BrewItem = createClass({ } return - + ; }, @@ -87,7 +87,7 @@ const BrewItem = createClass({ } return - + ; }, diff --git a/server.js b/server.js index 80f74eea5..daef00baa 100644 --- a/server.js +++ b/server.js @@ -78,9 +78,9 @@ app.get('/source/:id', (req, res)=>{ const googleId = req.params.id.slice(0, -12); const shareId = req.params.id.slice(-12); GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') - .then((brew)=>{ + .then((brew)=>{ const replaceStrings = { '&': '&', '<': '<', '>': '>' }; - const text = brew.text; + var text = brew.text; for (const replaceStr in replaceStrings) { text = text.replaceAll(replaceStr, replaceStrings[replaceStr]); } @@ -95,7 +95,7 @@ app.get('/source/:id', (req, res)=>{ HomebrewModel.get({ shareId: req.params.id }) .then((brew)=>{ const replaceStrings = { '&': '&', '<': '<', '>': '>' }; - const text = brew.text; + var text = brew.text; for (const replaceStr in replaceStrings) { text = text.replaceAll(replaceStr, replaceStrings[replaceStr]); } @@ -116,14 +116,14 @@ app.get('/download/:id', (req, res)=>{ const shareId = req.params.id.slice(-12); GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') .then((brew)=>{ - const fileName = sanitizeFilename(title).replaceAll(' ', '-'); - if (!fileName || !fileName.length) { fileName = 'Untitled-Brew'; }; + var fileName = sanitizeFilename(title).replaceAll(' ', '-'); + if(!fileName || !fileName.length) { fileName = 'Untitled-Brew'; }; res.set({ 'Cache-Control' : 'no-cache', 'Content-Type' : 'text/plain', 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` }); - res.status(200).send(getSourceText(brew.text, type)); + res.status(200).send(brew.text); }) .catch((err)=>{ console.log(err); @@ -132,8 +132,14 @@ app.get('/download/:id', (req, res)=>{ } else { HomebrewModel.get({ shareId: req.params.id }) .then((brew)=>{ - setSourceHeaders(res, brew.title, type); - res.send(getSourceText(brew.text, type)); + var fileName = sanitizeFilename(title).replaceAll(' ', '-'); + if(!fileName || !fileName.length) { fileName = 'Untitled-Brew'; }; + res.set({ + 'Cache-Control' : 'no-cache', + 'Content-Type' : 'text/plain', + 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` + }); + res.status(200).send(brew.text); }) .catch((err)=>{ console.log(err); From d88b04783d538569f60f75a9532eccba3331204d Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Fri, 22 Jan 2021 17:31:01 +1300 Subject: [PATCH 46/53] Lint corrections --- server.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server.js b/server.js index daef00baa..4eb1bdc1a 100644 --- a/server.js +++ b/server.js @@ -80,7 +80,7 @@ app.get('/source/:id', (req, res)=>{ GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') .then((brew)=>{ const replaceStrings = { '&': '&', '<': '<', '>': '>' }; - var text = brew.text; + let text = brew.text; for (const replaceStr in replaceStrings) { text = text.replaceAll(replaceStr, replaceStrings[replaceStr]); } @@ -95,7 +95,7 @@ app.get('/source/:id', (req, res)=>{ HomebrewModel.get({ shareId: req.params.id }) .then((brew)=>{ const replaceStrings = { '&': '&', '<': '<', '>': '>' }; - var text = brew.text; + let text = brew.text; for (const replaceStr in replaceStrings) { text = text.replaceAll(replaceStr, replaceStrings[replaceStr]); } @@ -116,7 +116,7 @@ app.get('/download/:id', (req, res)=>{ const shareId = req.params.id.slice(-12); GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') .then((brew)=>{ - var fileName = sanitizeFilename(title).replaceAll(' ', '-'); + let fileName = sanitizeFilename(title).replaceAll(' ', '-'); if(!fileName || !fileName.length) { fileName = 'Untitled-Brew'; }; res.set({ 'Cache-Control' : 'no-cache', @@ -132,7 +132,7 @@ app.get('/download/:id', (req, res)=>{ } else { HomebrewModel.get({ shareId: req.params.id }) .then((brew)=>{ - var fileName = sanitizeFilename(title).replaceAll(' ', '-'); + let fileName = sanitizeFilename(title).replaceAll(' ', '-'); if(!fileName || !fileName.length) { fileName = 'Untitled-Brew'; }; res.set({ 'Cache-Control' : 'no-cache', From bcbf596aa8ca3d3abb44b231b725649dbbf46cd4 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Fri, 22 Jan 2021 21:24:22 +1300 Subject: [PATCH 47/53] Increase minimum height of `brewItem` in CSS so all four items are always visible. Adjust eslint line in `server.js` to re-enable the test with a slightly higher maximum value. --- client/homebrew/pages/userPage/brewItem/brewItem.less | 2 +- server.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/homebrew/pages/userPage/brewItem/brewItem.less b/client/homebrew/pages/userPage/brewItem/brewItem.less index 9338ff23d..68191281c 100644 --- a/client/homebrew/pages/userPage/brewItem/brewItem.less +++ b/client/homebrew/pages/userPage/brewItem/brewItem.less @@ -7,7 +7,7 @@ box-sizing : border-box; overflow : hidden; width : 48%; - min-height : 80px; + min-height : 105px; margin-right : 15px; margin-bottom : 15px; padding : 5px 15px 5px 8px; diff --git a/server.js b/server.js index 4eb1bdc1a..e97346b86 100644 --- a/server.js +++ b/server.js @@ -1,4 +1,4 @@ -/* eslint-disable max-lines */ +/*eslint max-lines: ["warn", {"max": 250, "skipBlankLines": true, "skipComments": true}]*/ const _ = require('lodash'); const jwt = require('jwt-simple'); const expressStaticGzip = require('express-static-gzip'); From 051773a084c05be7a969180d85a5f89efbbb6be5 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Thu, 28 Jan 2021 23:13:01 +1300 Subject: [PATCH 48/53] Move filename prefix to configurable item in `config/default.json` --- server.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/server.js b/server.js index e97346b86..0bb5e55a7 100644 --- a/server.js +++ b/server.js @@ -111,17 +111,18 @@ app.get('/source/:id', (req, res)=>{ //Download brew source page app.get('/download/:id', (req, res)=>{ + const prefix = config.get('filename-prefix'); if(req.params.id.length > 12) { const googleId = req.params.id.slice(0, -12); const shareId = req.params.id.slice(-12); GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') .then((brew)=>{ - let fileName = sanitizeFilename(title).replaceAll(' ', '-'); - if(!fileName || !fileName.length) { fileName = 'Untitled-Brew'; }; + let fileName = sanitizeFilename(prefix + title).replaceAll(' ', '-'); + if(!title || !title.length) { fileName = prefix + 'Untitled-Brew'; }; res.set({ 'Cache-Control' : 'no-cache', 'Content-Type' : 'text/plain', - 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` + 'Content-Disposition' : `attachment; filename="${fileName}.txt"` }); res.status(200).send(brew.text); }) @@ -132,12 +133,13 @@ app.get('/download/:id', (req, res)=>{ } else { HomebrewModel.get({ shareId: req.params.id }) .then((brew)=>{ - let fileName = sanitizeFilename(title).replaceAll(' ', '-'); - if(!fileName || !fileName.length) { fileName = 'Untitled-Brew'; }; + let fileName = sanitizeFilename(prefix + title).replaceAll(' ', '-'); + console.log(title); + if(!title || !title.length) { fileName = prefix + 'Untitled-Brew'; }; res.set({ 'Cache-Control' : 'no-cache', 'Content-Type' : 'text/plain', - 'Content-Disposition' : `attachment; filename="HomeBrewery-${fileName}.txt"` + 'Content-Disposition' : `attachment; filename="${fileName}.txt"` }); res.status(200).send(brew.text); }) From c3bfd1e8bf801f0de88acdabe9c3fcf6867d1518 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Fri, 29 Jan 2021 22:53:58 +1300 Subject: [PATCH 49/53] Prefix loading successfully from `config/local.json` for both Homebrewery and Google brews. Concats switched to string literals to make Linter happy. --- server.js | 12 ++++++------ server/googleActions.js | 7 ++++++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/server.js b/server.js index 0bb5e55a7..ac3f160e2 100644 --- a/server.js +++ b/server.js @@ -111,14 +111,15 @@ app.get('/source/:id', (req, res)=>{ //Download brew source page app.get('/download/:id', (req, res)=>{ - const prefix = config.get('filename-prefix'); + const prefix = config.get('name_prefix'); + if(req.params.id.length > 12) { const googleId = req.params.id.slice(0, -12); const shareId = req.params.id.slice(-12); GoogleActions.readFileMetadata(config.get('google_api_key'), googleId, shareId, 'share') .then((brew)=>{ - let fileName = sanitizeFilename(prefix + title).replaceAll(' ', '-'); - if(!title || !title.length) { fileName = prefix + 'Untitled-Brew'; }; + let fileName = sanitizeFilename(`${prefix}${brew.title}`).replaceAll(' ', ''); + if(!fileName || !fileName.length) { fileName = `${prefix}-Untitled-Brew`; }; res.set({ 'Cache-Control' : 'no-cache', 'Content-Type' : 'text/plain', @@ -133,9 +134,8 @@ app.get('/download/:id', (req, res)=>{ } else { HomebrewModel.get({ shareId: req.params.id }) .then((brew)=>{ - let fileName = sanitizeFilename(prefix + title).replaceAll(' ', '-'); - console.log(title); - if(!title || !title.length) { fileName = prefix + 'Untitled-Brew'; }; + let fileName = sanitizeFilename(`${prefix}${brew.title}`).replaceAll(' ', ''); + if(!fileName || !fileName.length) { fileName = `${prefix}-Untitled-Brew`; }; res.set({ 'Cache-Control' : 'no-cache', 'Content-Type' : 'text/plain', diff --git a/server/googleActions.js b/server/googleActions.js index 1fc93a861..2473561a1 100644 --- a/server/googleActions.js +++ b/server/googleActions.js @@ -258,7 +258,12 @@ GoogleActions = { } //Access actual file with service account. Just api key is causing "automated query" errors. - const keys = JSON.parse(config.get('service_account')); + + const actionList = { + 'string' : function() { return JSON.parse(config.get('service_account')); }, + 'object' : function() { return config.get('service_account'); } + }; + const keys = actionList[typeof(config.get('service_account'))](); const serviceAuth = google.auth.fromJSON(keys); serviceAuth.scopes = ['https://www.googleapis.com/auth/drive']; From c4db94e86ff6e6da5711b3fedf880c7f976e21ec Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Sun, 7 Mar 2021 00:34:47 -0500 Subject: [PATCH 50/53] Tweaks to work with current Master --- client/homebrew/pages/sharePage/sharePage.jsx | 2 +- .../pages/userPage/brewItem/brewItem.jsx | 2 +- package-lock.json | 21 +++++++++++++++++++ server.js | 2 +- server/googleActions.js | 11 +++++----- 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index c2c3b6f88..529c0d9ee 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -63,7 +63,7 @@ const SharePage = createClass({ source - + download diff --git a/client/homebrew/pages/userPage/brewItem/brewItem.jsx b/client/homebrew/pages/userPage/brewItem/brewItem.jsx index b0198ddc6..b24bad363 100644 --- a/client/homebrew/pages/userPage/brewItem/brewItem.jsx +++ b/client/homebrew/pages/userPage/brewItem/brewItem.jsx @@ -87,7 +87,7 @@ const BrewItem = createClass({ } return - + ; }, diff --git a/package-lock.json b/package-lock.json index 9788cc675..c4e43b468 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6592,6 +6592,14 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "requires": { + "truncate-utf8-bytes": "^1.0.0" + } + }, "saslprep": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", @@ -7333,6 +7341,14 @@ "nopt": "~1.0.10" } }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "requires": { + "utf8-byte-length": "^1.0.1" + } + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -7589,6 +7605,11 @@ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, + "utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=" + }, "util": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", diff --git a/server.js b/server.js index d14514f32..96d5d677f 100644 --- a/server.js +++ b/server.js @@ -1,4 +1,4 @@ -/*eslint max-lines: ["warn", {"max": 250, "skipBlankLines": true, "skipComments": true}]*/ +/*eslint max-lines: ["warn", {"max": 300, "skipBlankLines": true, "skipComments": true}]*/ const _ = require('lodash'); const jwt = require('jwt-simple'); const express = require('express'); diff --git a/server/googleActions.js b/server/googleActions.js index 802ac3343..bd288ceea 100644 --- a/server/googleActions.js +++ b/server/googleActions.js @@ -259,13 +259,12 @@ GoogleActions = { throw ('Share ID does not match'); } - //Access actual file with service account. Just api key is causing "automated query" errors. + //Access file using service account. Using API key only causes "automated query" lockouts after a while. + + const keys = typeof(config.get('service_account')) == 'string' ? + JSON.parse(config.get('service_account')) : + config.get('service_account'); - const actionList = { - 'string' : function() { return JSON.parse(config.get('service_account')); }, - 'object' : function() { return config.get('service_account'); } - }; - const keys = actionList[typeof(config.get('service_account'))](); const serviceAuth = google.auth.fromJSON(keys); serviceAuth.scopes = ['https://www.googleapis.com/auth/drive']; From 7612702d737ff6b5e564276ddc41c001079b9783 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 9 Mar 2021 07:08:03 +0000 Subject: [PATCH 51/53] Bump @babel/core from 7.13.8 to 7.13.10 Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.13.8 to 7.13.10. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.13.10/packages/babel-core) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 71 ++++++++++++++++++----------------------------- package.json | 2 +- 2 files changed, 28 insertions(+), 45 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9788cc675..79308c1c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,16 +58,16 @@ "integrity": "sha512-VhgqKOWYVm7lQXlvbJnWOzwfAQATd2nV52koT0HZ/LdDH0m4DUDwkKYsH+IwpXb+bKPyBJzawA4I6nBKqZcpQw==" }, "@babel/core": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.8.tgz", - "integrity": "sha512-oYapIySGw1zGhEFRd6lzWNLWFX2s5dA/jm+Pw/+59ZdXtjyIuwlXbrId22Md0rgZVop+aVoqow2riXhBLNyuQg==", + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.10.tgz", + "integrity": "sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw==", "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.0", - "@babel/helper-compilation-targets": "^7.13.8", + "@babel/generator": "^7.13.9", + "@babel/helper-compilation-targets": "^7.13.10", "@babel/helper-module-transforms": "^7.13.0", - "@babel/helpers": "^7.13.0", - "@babel/parser": "^7.13.4", + "@babel/helpers": "^7.13.10", + "@babel/parser": "^7.13.10", "@babel/template": "^7.12.13", "@babel/traverse": "^7.13.0", "@babel/types": "^7.13.0", @@ -85,10 +85,20 @@ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.8.tgz", "integrity": "sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog==" }, + "@babel/generator": { + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "requires": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, "@babel/helper-compilation-targets": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.8.tgz", - "integrity": "sha512-pBljUGC1y3xKLn1nrx2eAhurLMA8OqBtBP/JwG4U8skN7kf8/aqwwxpV1N6T0e7r6+7uNitIa/fUxPFagSXp3A==", + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz", + "integrity": "sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA==", "requires": { "@babel/compat-data": "^7.13.8", "@babel/helper-validator-option": "^7.12.17", @@ -96,20 +106,10 @@ "semver": "^6.3.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - }, - "@babel/types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz", - "integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } + "@babel/parser": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.10.tgz", + "integrity": "sha512-0s7Mlrw9uTWkYua7xWr99Wpk2bnGa0ANleKfksYAES8LpWH4gW1OUr42vqKNf0us5UQNfru2wPqMqRITzq/SIQ==" }, "convert-source-map": { "version": "1.7.0", @@ -580,30 +580,13 @@ } }, "@babel/helpers": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.0.tgz", - "integrity": "sha512-aan1MeFPxFacZeSz6Ld7YZo5aPuqnKlD7+HZY75xQsueczFccP9A7V05+oe0XpLwHK3oLorPe9eaAUljL7WEaQ==", + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", + "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", "requires": { "@babel/template": "^7.12.13", "@babel/traverse": "^7.13.0", "@babel/types": "^7.13.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - }, - "@babel/types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz", - "integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/highlight": { diff --git a/package.json b/package.json index 5690fe334..397627948 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ ] }, "dependencies": { - "@babel/core": "^7.13.8", + "@babel/core": "^7.13.10", "@babel/preset-env": "^7.13.9", "@babel/preset-react": "^7.12.13", "body-parser": "^1.19.0", From 318e2924ca8ce2152cf968f818d6634aa96ff798 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 12 Mar 2021 06:55:20 +0000 Subject: [PATCH 52/53] Bump mongoose from 5.11.18 to 5.12.0 Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.11.18 to 5.12.0. - [Release notes](https://github.com/Automattic/mongoose/releases) - [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md) - [Commits](https://github.com/Automattic/mongoose/compare/5.11.18...5.12.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 18 +++++++++--------- package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9788cc675..958620259 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1888,18 +1888,18 @@ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, "@types/mongodb": { - "version": "3.6.8", - "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.8.tgz", - "integrity": "sha512-8qNbL5/GFrljXc/QijcuQcUMYZ1iWNcqnJ6tneROwbfU0LsAjQ9bmq3aHi5lWXM4cyBPd2F/n9INAk/pZZttHw==", + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.9.tgz", + "integrity": "sha512-2XSGr/+IOKeFQ5tU9ATcIiIr7bpHqWyOXNGLOOhp0kg2NnfEvoKZF1SZ25j4zvJRqM2WeSUjfWSvymFJ3HBGJQ==", "requires": { "@types/bson": "*", "@types/node": "*" } }, "@types/node": { - "version": "14.14.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", - "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==" + "version": "14.14.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.33.tgz", + "integrity": "sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g==" }, "JSONStream": { "version": "1.3.5", @@ -5478,9 +5478,9 @@ } }, "mongoose": { - "version": "5.11.18", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.11.18.tgz", - "integrity": "sha512-RsrPR9nhkXZbO3ml0DcmdbfeMvFNhgFrP81S6o1P+lFnDTNEKYnGNRCIL+ojD69wj7H5jJaAdZ0SJ5IlKxCHqw==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.12.0.tgz", + "integrity": "sha512-s0Qpgf5lOk3AXtKnE+FA0HZhFKa2hesGVcTmx1wfTQ+7Q7ph0E79B6KUp1ZQERQyCwuE8WQ4wWllEhd7VPkxOg==", "requires": { "@types/mongodb": "^3.5.27", "bson": "^1.1.4", diff --git a/package.json b/package.json index 5690fe334..49b0da51b 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "less": "^3.13.1", "lodash": "^4.17.21", "moment": "^2.29.1", - "mongoose": "^5.11.18", + "mongoose": "^5.12.0", "nanoid": "3.1.20", "markedLegacy": "npm:marked@^0.3.19", "marked": "2.0.1", From 6a12518ac1683ceaca86b253b6fe30a225513c52 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Fri, 12 Mar 2021 22:24:36 -0500 Subject: [PATCH 53/53] Hardcode prefix --- server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.js b/server.js index 96d5d677f..2b460ccf2 100644 --- a/server.js +++ b/server.js @@ -105,7 +105,7 @@ app.get('/source/:id', (req, res)=>{ //Download brew source page app.get('/download/:id', (req, res)=>{ - const prefix = config.get('name_prefix'); + const prefix = 'HB - '; if(req.params.id.length > 12) { const googleId = req.params.id.slice(0, -12);