Files
benchcoach/src/app.js

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