summaryrefslogtreecommitdiff
path: root/bucky
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2021-10-16 13:09:32 +0200
committerJules Laplace <julescarbon@gmail.com>2021-10-16 13:09:32 +0200
commitb3d8c90e85d2122d06804c802967ae054359ef22 (patch)
treeab0c0b3cb39e42a5c11ab9a9289e5d770a51a4d0 /bucky
parent6f9c66754d49f418ea64a2699a155d60f2be781f (diff)
make bdb optional
Diffstat (limited to 'bucky')
-rw-r--r--bucky/app/site.js130
-rw-r--r--bucky/search/bdb.js107
2 files changed, 144 insertions, 93 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;