summaryrefslogtreecommitdiff
path: root/bucky/app/site.js
blob: 69f01579bb02725c76d7b345630b8c5866698c6a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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 upload = require("../util/upload");

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 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",
    proxy: true,
    key: "bucky.sid",
    cookie: {
      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 MongoStore({
      url: process.env.MONGODB_URL || 'mongodb://127.0.0.1:27107/buckySessionDb'
      // type: 'mongodb',
      // host: 'localhost',
      // port: 27017,
      // dbName: 'buckySessionDb',
      // collectionName: 'sessions',
      // timeout: 10000,
    })
    */
  }
  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");

  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
    );
  });

  app.all("*", middleware.ensureLocals);

  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")));

  // rebuild javascript after restarting server
  if (process.env.NODE_ENV === "production") {
    require("../bin/build-scripts");
  }
};
site.api = require("./api");
site.pages = require("./pages");