diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2021-10-16 13:09:32 +0200 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2021-10-16 13:09:32 +0200 |
| commit | b3d8c90e85d2122d06804c802967ae054359ef22 (patch) | |
| tree | ab0c0b3cb39e42a5c11ab9a9289e5d770a51a4d0 /bucky | |
| parent | 6f9c66754d49f418ea64a2699a155d60f2be781f (diff) | |
make bdb optional
Diffstat (limited to 'bucky')
| -rw-r--r-- | bucky/app/site.js | 130 | ||||
| -rw-r--r-- | bucky/search/bdb.js | 107 |
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; |
