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