183 lines
5.5 KiB
JavaScript
183 lines
5.5 KiB
JavaScript
require("dotenv").config();
|
|
|
|
const createError = require("http-errors");
|
|
const express = require("express");
|
|
const path = require("path");
|
|
const cookieParser = require("cookie-parser");
|
|
const session = require("express-session");
|
|
const SqliteStore = require("better-sqlite3-session-store")(session)
|
|
var sqlite = require("better-sqlite3");
|
|
const { generateToken } = require('./middlewares/csrf');
|
|
const passport = require("passport");
|
|
const logger = require("morgan");
|
|
const bodyParser = require("body-parser");
|
|
global.XMLHttpRequest = require("xhr2");
|
|
// const teamsnap = require("./public/js/teamsnap");
|
|
const teamsnap = require("teamsnap.js/lib/teamsnap")
|
|
// import {teamsnap} from "teamsnap.js"
|
|
const indexRouter = require("./routes/index").router;
|
|
const authRouter = require("./routes/auth").router;
|
|
var hbs = require('hbs');
|
|
const { embeddedSvgFromPath } = require("./lib/utils");
|
|
const cors = require('cors');
|
|
const corsOptions = {
|
|
origin: false
|
|
}
|
|
|
|
|
|
// teamsnap.init(process.env["TEAMSNAP_CLIENT_ID"])
|
|
// console.log(teamsnap)
|
|
// teamsnap.teamsnap.init
|
|
var app = express();
|
|
|
|
// view engine setup
|
|
app.set("views", path.join(__dirname, "views"));
|
|
hbs.registerPartials(require("./routes/index").partials)
|
|
hbs.registerPartials(require("./controllers/event").partials)
|
|
hbs.registerPartials(require("./controllers/eventlineup").partials)
|
|
hbs.registerPartials(require("./controllers/eventsheet").partials)
|
|
|
|
hbs.registerHelper('dateFormat', require('handlebars-dateformat'));
|
|
hbs.registerHelper('section', (name, options) => {
|
|
if(!this._sections) this._sections = {};
|
|
this._sections[name] = options.fn(this);
|
|
return null;
|
|
})
|
|
hbs.registerHelper('script_tags', (scripts, options) => {
|
|
if(!scripts) {
|
|
return null;
|
|
}
|
|
var result = [];
|
|
scripts.forEach((script)=>{
|
|
result.push(`<script src="${script}"></script>`)
|
|
})
|
|
return result.join('\n');
|
|
})
|
|
hbs.registerHelper("embeddedSvgFromPath", require('./lib/utils').embeddedSvgFromPath)
|
|
hbs.registerHelper(require("./controllers/event").helpers)
|
|
hbs.registerHelper(require("./controllers/eventlineup").helpers)
|
|
hbs.registerHelper(require("./helpers/eventsheet"))
|
|
|
|
app.set("view engine", "hbs");
|
|
app.locals.pluralize = require("pluralize");
|
|
|
|
if (process.env.NODE_ENV === "development") {
|
|
console.log('adding connectLiveReload')
|
|
var connectLiveReload = require("connect-livereload");
|
|
app.use("/scss", express.static(path.join(__dirname, "scss")));
|
|
app.use(connectLiveReload({port: 35729, src:"http://localhost:35729/livereload.js?snipver=1"}));
|
|
}
|
|
|
|
app.use(bodyParser.json());
|
|
app.use(bodyParser.urlencoded({extended: true }));
|
|
app.use(logger("dev"));
|
|
app.use(cors(corsOptions))
|
|
app.use(cookieParser());
|
|
app.use(express.static(path.join(__dirname, "public")));
|
|
app.use(
|
|
"/css",
|
|
express.static(path.join(__dirname, "../node_modules/bootstrap/dist/css"))
|
|
);
|
|
app.use(
|
|
"/css",
|
|
express.static(
|
|
path.join(__dirname, "../node_modules/@teamsnap/teamsnap-ui/dist/css")
|
|
)
|
|
);
|
|
app.use(
|
|
"/teamsnap-ui/assets",
|
|
express.static(
|
|
path.join(__dirname, "../node_modules/@teamsnap/teamsnap-ui/src/assets")
|
|
)
|
|
);
|
|
app.use(
|
|
"/font",
|
|
express.static(path.join(__dirname, "../node_modules/bootstrap-icons/font"))
|
|
);
|
|
app.use(
|
|
"/bootstrap-icons",
|
|
express.static(path.join(__dirname, "../node_modules/bootstrap-icons/icons"))
|
|
);
|
|
app.use(
|
|
"/js",
|
|
express.static(path.join(__dirname, "../node_modules/sortablejs"))
|
|
);
|
|
app.use(
|
|
"/js",
|
|
express.static(path.join(__dirname, "../node_modules/tinymce"))
|
|
);
|
|
app.use(
|
|
"/js",
|
|
express.static(path.join(__dirname, "../node_modules/teamsnap.js/lib/"))
|
|
);
|
|
const db = new sqlite("./var/db/sessions.db");
|
|
app.use(
|
|
session({
|
|
store: new SqliteStore({
|
|
client: db,
|
|
expired: {
|
|
clear: true,
|
|
intervalMs: 900000 //ms = 15min
|
|
}
|
|
}),
|
|
cookie: { maxAge: 86400000 }, // value of maxAge is defined in milliseconds.
|
|
teamsnap_token: "",
|
|
current_team: "",
|
|
csrfToken:"",
|
|
secret: process.env['SECRET'],
|
|
resave: false, // don't save session if unmodified
|
|
saveUninitialized: false, // don't create session until something stored
|
|
})
|
|
);
|
|
app.use(function (req, res, next) {
|
|
res.locals.csrfToken = generateToken;
|
|
next();
|
|
});
|
|
app.use(passport.authenticate("session", { failureRedirect: '/login', failureMessage: true }));
|
|
app.use(function (req, res, next) {
|
|
var msgs = req.session.messages || [];
|
|
res.locals.messages = msgs;
|
|
res.locals.hasMessages = !!msgs.length;
|
|
req.session.messages = [];
|
|
next();
|
|
});
|
|
|
|
app.use('/', require('./routes/meta').router);
|
|
app.use("/", authRouter);
|
|
app.use("/", indexRouter);
|
|
app.use(require("./routes/team").router)
|
|
app.use(require("./routes/opponent").router)
|
|
app.use(require("./routes/event").router)
|
|
app.use(require("./routes/eventlineup").router)
|
|
app.use(require("./routes/eventsheet").router)
|
|
// app.use("/", indexRouter.team_router);
|
|
|
|
// error handler
|
|
app.use(function (err, req, res, next) {
|
|
// set locals, only providing error in development
|
|
if (err) {
|
|
res.locals.message = req.app.get("env") === "development" ? err.message : "An error has occurred";
|
|
res.locals.error = req.app.get("env") === "development" ? err : {};
|
|
if (typeof err === 'string' || err instanceof String) {
|
|
err = {
|
|
message: err
|
|
}
|
|
}
|
|
console.log("error:", err);
|
|
// render the error page
|
|
res.status(err.status || 500).render("error", { title:"Error", layout: req.layout, message: err.message });
|
|
}
|
|
else {
|
|
next();
|
|
}
|
|
});
|
|
|
|
// catch 404 and forward to error handler
|
|
app.use(function (req, res, next) {
|
|
// next(createError(404));
|
|
res.status(404).send('not found')
|
|
});
|
|
|
|
app.set('trust proxy')
|
|
|
|
module.exports = {app}; |