summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bucky/app/site.js130
-rw-r--r--bucky/search/bdb.js107
-rw-r--r--env-sample (renamed from .env-sample)1
-rw-r--r--package.json4
-rw-r--r--yarn.lock42
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;
diff --git a/.env-sample b/env-sample
index 69a98b6..f9e6bbc 100644
--- a/.env-sample
+++ b/env-sample
@@ -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",
diff --git a/yarn.lock b/yarn.lock
index 8d98f35..f8ac566 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -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"