diff options
| -rw-r--r-- | bucky/app/site.js | 130 | ||||
| -rw-r--r-- | bucky/search/bdb.js | 107 | ||||
| -rw-r--r-- | env-sample (renamed from .env-sample) | 1 | ||||
| -rw-r--r-- | package.json | 4 | ||||
| -rw-r--r-- | yarn.lock | 42 |
5 files changed, 150 insertions, 134 deletions
diff --git a/bucky/app/site.js b/bucky/app/site.js index 3e41fcd..69f0157 100644 --- a/bucky/app/site.js +++ b/bucky/app/site.js @@ -1,56 +1,55 @@ -require('dotenv').load(); -var fs = require('fs') -var app, express = require('express'); -var http = require('http'); -var https = require('https'); -var bodyParser = require('body-parser') -var cookieParser = require('cookie-parser') -var csurf = require('csurf') -var path = require('path') -var multiparty = require('multiparty') -var ejs = require('ejs') -var favicon = require('serve-favicon') -var passport = require('passport') -var sessionstore = require('sessionstore') -var session = require('express-session') -var redis = require('redis') -var RedisStore = require('connect-redis')(session) -var redisClient = redis.createClient() +require("dotenv").load(); +var fs = require("fs"); +var app, + express = require("express"); +var http = require("http"); +var https = require("https"); +var bodyParser = require("body-parser"); +var cookieParser = require("cookie-parser"); +var csurf = require("csurf"); +var path = require("path"); +var multiparty = require("multiparty"); +var ejs = require("ejs"); +var favicon = require("serve-favicon"); +var passport = require("passport"); +var sessionstore = require("sessionstore"); +var session = require("express-session"); +var redis = require("redis"); +var RedisStore = require("connect-redis")(session); +var redisClient = redis.createClient(); -var MongoStore = require('connect-mongo')(session); -var upload = require('../util/upload') +var upload = require("../util/upload"); -var app, server +var app, server; -var federate = require('../util/federate') -var auth = require('../util/auth.js') -var middleware = require('../util/middleware.js') -var api = require('./api.js') -var pages = require('./pages.js') +var federate = require("../util/federate"); +var auth = require("../util/auth.js"); +var middleware = require("../util/middleware.js"); +var api = require("./api.js"); +var pages = require("./pages.js"); -var site = module.exports = {} -site.init = function(){ - app = express() - app.enable('trust proxy'); - app.set('port', process.env.PORT || 5000) - app.use(favicon(__dirname + '../../../public/favicon.ico')) - app.use(bodyParser.json({limit: '50mb'})) - app.use(cookieParser()) +var site = (module.exports = {}); +site.init = function () { + app = express(); + app.enable("trust proxy"); + app.set("port", process.env.PORT || 5000); + app.use(favicon(__dirname + "../../../public/favicon.ico")); + app.use(bodyParser.json({ limit: "50mb" })); + app.use(cookieParser()); var sessionSettings = { - secret: 'argonauts', + secret: "argonauts", proxy: true, - key: 'bucky.sid', + key: "bucky.sid", cookie: { - secure: process.env.NODE_ENV === 'production', - domain: '.' + process.env.HOST_NAME, + secure: process.env.NODE_ENV === "production", + domain: "." + process.env.HOST_NAME, maxAge: 43200000000, }, resave: true, saveUninitialized: false, - } + }; if (!process.env.SESSIONS_IN_MEMORY) { - sessionSettings.store = - new RedisStore({ client: redisClient }) + sessionSettings.store = new RedisStore({ client: redisClient }); /* sessionSettings.store = new MongoStore({ url: process.env.MONGODB_URL || 'mongodb://127.0.0.1:27107/buckySessionDb' @@ -63,39 +62,42 @@ site.init = function(){ }) */ } - app.use(session(sessionSettings)) - upload.init() - federate.route(app) + app.use(session(sessionSettings)); + upload.init(); + federate.route(app); // app.use(csurf({ // cookie: true, // value: (req) => { req.headers['csrf-token'] } // })) - app.disable('x-powered-by') + app.disable("x-powered-by"); - auth.init() - app.use(express.query()) - app.use(passport.initialize()) - app.use(passport.session()) + auth.init(); + app.use(express.query()); + app.use(passport.initialize()); + app.use(passport.session()); server = http.createServer(app).listen(process.env.PORT || 5000, function () { - console.log('Bucky listening at http://' + process.env.HOST_NAME + ':%s', server.address().port) - }) + console.log( + "Bucky listening at http://" + process.env.HOST_NAME + ":%s", + server.address().port + ); + }); + + app.all("*", middleware.ensureLocals); - app.all('*', middleware.ensureLocals) + api.route(app); + pages.route(app); + auth.route(app); - api.route(app) - pages.route(app) - auth.route(app) + app.set("view engine", "ejs"); + app.set("views", path.join(__dirname, "../../views")); + app.use(express.static(path.join(__dirname, "../../public"))); - app.set('view engine', 'ejs') - app.set('views', path.join(__dirname, '../../views')) - app.use(express.static(path.join(__dirname, '../../public'))) - // rebuild javascript after restarting server - if (process.env.NODE_ENV === 'production') { - require('../bin/build-scripts') + if (process.env.NODE_ENV === "production") { + require("../bin/build-scripts"); } -} -site.api = require('./api') -site.pages = require('./pages') +}; +site.api = require("./api"); +site.pages = require("./pages"); diff --git a/bucky/search/bdb.js b/bucky/search/bdb.js index 6f1fd98..cb5ebbd 100644 --- a/bucky/search/bdb.js +++ b/bucky/search/bdb.js @@ -1,55 +1,104 @@ -var bdb_lib = require('berkeleydb') -var dbenv = new bdb_lib.DbEnv(); -var bdb_status = dbenv.open('./search/db/env') -if (bdb_status) { - console.log('open dbenv failed:', bdb_status) - process.exit() -} +var fs = require("fs"); + +function berkeleydb(fn) { + var db; + var bdb_lib = require("berkeleydb"); + var dbenv = new bdb_lib.DbEnv(); + var bdb_status = dbenv.open("./search/db/env"); + if (bdb_status) { + console.log("open dbenv failed:", bdb_status); + process.exit(); + } -function db(fn){ - var db - fn = "./" + fn + ".db" + fn = "./" + fn + ".db"; function exitHandler(options, err) { - if (db) db.close() + if (db) db.close(); // if (options.cleanup) console.log('clean'); if (err) console.log(err.stack); if (options.exit) process.exit(); } // do something when app is closing - process.on('exit', exitHandler.bind(null, {cleanup: true})); + process.on("exit", exitHandler.bind(null, { cleanup: true })); // catches ctrl+c event - process.on('SIGINT', exitHandler.bind(null, {exit: true})); + process.on("SIGINT", exitHandler.bind(null, { exit: true })); // catches "kill pid" (for example: nodemon restart) - process.on('SIGUSR1', exitHandler.bind(null, {exit: true})); - process.on('SIGUSR2', exitHandler.bind(null, {exit: true})); + process.on("SIGUSR1", exitHandler.bind(null, { exit: true })); + process.on("SIGUSR2", exitHandler.bind(null, { exit: true })); //catches uncaught exceptions - process.on('uncaughtException', exitHandler.bind(null, {exit:true})); + process.on("uncaughtException", exitHandler.bind(null, { exit: true })); - function open(fn){ - if (db) db.close() + function open(fn) { + if (db) db.close(); var _db = new bdb_lib.Db(dbenv); - var bdb_status = _db.open(fn) + var bdb_status = _db.open(fn); if (bdb_status) { - console.log('openĀ ' + fn + ' failed:', bdb_status) - process.exit() + console.log("openĀ " + fn + " failed:", bdb_status); + process.exit(); } - db = _db + db = _db; } - open(fn) - + open(fn); + return { - put: function(term, serialized){ - db.put(term, serialized) + put: function (term, serialized) { + db.put(term, serialized); }, - get: function(term){ - return db.get(term) + get: function (term) { + return db.get(term); }, + }; +} +function jsondb(fn) { + let db; + + fn = "./" + fn + ".db"; + + function exitHandler(options, err) { + if (db) { + fs.writeFileSync(fn, JSON.stringify(db, false, 0)); + } + // if (options.cleanup) console.log('clean'); + if (err) console.log(err.stack); + if (options.exit) process.exit(); } + + // do something when app is closing + process.on("exit", exitHandler.bind(null, { cleanup: true })); + + // catches ctrl+c event + process.on("SIGINT", exitHandler.bind(null, { exit: true })); + + // catches "kill pid" (for example: nodemon restart) + process.on("SIGUSR1", exitHandler.bind(null, { exit: true })); + process.on("SIGUSR2", exitHandler.bind(null, { exit: true })); + + //catches uncaught exceptions + process.on("uncaughtException", exitHandler.bind(null, { exit: true })); + + if (fs.existsSync(fn)) { + try { + db = JSON.parse(fs.readFileSync(fn)); + } catch (err) { + console.error("couldn't read " + fn); + process.exit(); + } + } else { + db = {}; + } + + return { + put: function (term, serialized) { + db[term] = serialized; + }, + get: function (term) { + db[term]; + }, + }; } -module.exports = db +module.exports = process.env.USE_BDB === "true" ? berkeleydb : jsondb; @@ -9,5 +9,4 @@ S3_BUCKET= S3_PATH=/bucky SESSIONS_IN_MEMORY=yes NODE_ENV=development -MONGODB_URL=mongodb://127.0.0.1:27107/buckySessionDb diff --git a/package.json b/package.json index cad7d58..f51f197 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,9 @@ "author": "", "license": "LNT", "dependencies": { - "berkeleydb": "^0.2.1", "body-parser": "^1.19.0", "bookshelf": "^0.13.3", - "connect-mongo": "^2.0.3", - "connect-redis": "^5.0.0", + "connect-redis": "^6.0.0", "cookie-parser": "^1.4.4", "csurf": "^1.10.0", "dotenv": "^1.2.0", @@ -117,21 +117,6 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -berkeleydb@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/berkeleydb/-/berkeleydb-0.2.2.tgz#937419645852602eada8cab5b25eeb1987829a61" - integrity sha512-/dkK7/ZP+n3RWb3OouxVmebSZgQhgHfWmx9FPpAj8+0aWo7rBEvF39twq5agXNfyFUCahV3LX+5sSJAWXjrAHg== - dependencies: - bindings "1.x.x" - nan "^2.6.2" - -bindings@1.x.x: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - bluebird@^3.4.3, bluebird@^3.5.1: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -350,17 +335,10 @@ concat-stream@^1.5.2: readable-stream "^2.2.2" typedarray "^0.0.6" -connect-mongo@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/connect-mongo/-/connect-mongo-2.0.3.tgz#db6cabe1e3add5acc9ef9c486681027675a58ee5" - integrity sha512-Vs+QZ/6X6gbCrP1Ls7Oh/wlyY6pgpbPSrUKF5yRT+zd+4GZPNbjNquxquZ+Clv2+03HBXE7T4lVM0PUcaBhihg== - dependencies: - mongodb "^2.0.36" - -connect-redis@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/connect-redis/-/connect-redis-5.1.0.tgz#bcef59e6fa882377a66398f46f674051a96bcc0b" - integrity sha512-Cosy8gGUdkBPEYG84svgkzIGzspKBb98NUX4Nfc5eTJOF0A++41ZV15rPwWW0n5nU/FusNgNzuMeXhLVEQF80Q== +connect-redis@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/connect-redis/-/connect-redis-6.0.0.tgz#7e443fc7028eca43302bee59f51a315f65cd56b5" + integrity sha512-6eGEAAPHYvcfbRNCMmPzBIjrqRWLw7at9lCUH4G6NQ8gwWDJelaUmFNOqPIhehbw941euVmIuqWsaWiKXfb+5g== content-disposition@0.5.3: version "0.5.3" @@ -695,11 +673,6 @@ fd-slicer@~1.0.1: dependencies: pend "~1.2.0" -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -1396,7 +1369,7 @@ mongodb-core@2.1.20: bson "~1.0.4" require_optional "~1.0.0" -mongodb@^2.0.36, mongodb@^2.2.36: +mongodb@^2.2.36: version "2.2.36" resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.2.36.tgz#1c573680b2849fb0f47acbba3dc5fa228de975f5" integrity sha512-P2SBLQ8Z0PVx71ngoXwo12+FiSfbNfGOClAao03/bant5DgLNkOPAck5IaJcEk4gKlQhDEURzfR3xuBG1/B+IA== @@ -1463,11 +1436,6 @@ named-placeholders@0.1.3: dependencies: lru-cache "2.5.0" -nan@^2.6.2: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== - nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" |
