<commit_before>/**
 * Module dependencies.
 */
const express = require("express");
const compression = require("compression");
const session = require("express-session");
const bodyParser = require("body-parser");
const logger = require("morgan");
const chalk = require("chalk");
const errorHandler = require("errorhandler");
const lusca = require("lusca");
const dotenv = require("dotenv");
const MongoStore = require("connect-mongo")(session);
const flash = require("express-flash");
const path = require("path");
const mongoose = require("mongoose");
const passport = require("passport");
const expressValidator = require("express-validator");
const expressStatusMonitor = require("express-status-monitor");
const sass = require("node-sass-middleware");
const multer = require("multer");

const upload = multer({ dest: path.join(__dirname, "uploads") });

/**
 * Load environment variables from .env file, where API keys and passwords are configured.
 */
dotenv.load({ path: ".env" });

/**
 * Controllers (route handlers).
 */
const homeController = require("./controllers/home");
const userController = require("./controllers/user");
const apiController = require("./controllers/api");
const contactController = require("./controllers/contact");
const wordController = require("./controllers/word");
const quizController = require("./controllers/quiz");
const removeBestWord = require("./controllers/removebestword");
const quizAnalysis = require("./controllers/quizAnalysis");
const reportController = require("./controllers/report");
const comingSoon = require("./controllers/comingSoon");
const profilesOverview = require("./controllers/profilesOverview");

/**
 * API keys and Passport configuration.
 */
const passportConfig = require("./config/passport");

/**
 * Create Express server.
 */
const app = express();

/**
 * Connect to MongoDB.
 */
mongoose.Promise = global.Promise;
mongoose.connect(process.env.MONGODB_URI || process.env.MONGOLAB_URI);
mongoose.connection.on("error", err => {
  console.error(err);
  console.log(
    "%s MongoDB connection error. Please make sure MongoDB is running.",
    chalk.red("✗")
  );
  process.exit();
});

/**
 * Populate the Mongo Database with initial data
 * TODO: Make this dependant on the dev environment
 */
const db = require("./util/db");
console.log("Pre populate the database");
db();
console.log("Done pre-populating the database");

/**
 * Express configuration.
 */
app.set("port", process.env.PORT || 3000);
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "pug");
app.use(expressStatusMonitor());
app.use(compression());
app.use(
  sass({
    src: path.join(__dirname, "public"),
    dest: path.join(__dirname, "public")
  })
);
app.use(logger("dev"));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(expressValidator());
app.use(
  session({
    resave: true,
    saveUninitialized: true,
    secret: process.env.SESSION_SECRET,
    store: new MongoStore({
      url: process.env.MONGODB_URI || process.env.MONGOLAB_URI,
      autoReconnect: true,
      clear_interval: 3600
    })
  })
);
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use((req, res, next) => {
  next();
  // if (req.path === '/api/upload') {
  //   next();
  // } else {
  //   lusca.csrf()(req, res, next);
  // }
});
app.use(lusca.xframe("SAMEORIGIN"));
app.use(lusca.xssProtection(true));
app.use((req, res, next) => {
  res.locals.user = req.user;
  next();
});
app.use((req, res, next) => {
  // After successful login, redirect back to the intended page
  if (
    !req.user &&
    req.path !== "/login" &&
    req.path !== "/signup" &&
    !req.path.match(/^\/auth/) &&
    !req.path.match(/\./)
  ) {
    req.session.returnTo = req.path;
  } else if (req.user && req.path === "/account") {
    req.session.returnTo = req.path;
  }
  next();
});
app.use(
  express.static(path.join(__dirname, "public"), { maxAge: 31557600000 })
);

/**
 * Primary app routes.
 */
app.get("/", homeController.index);
app.get("/login", userController.getLogin);
app.post("/login", userController.postLogin);
app.get("/logout", userController.logout);
app.get("/forgot", userController.getForgot);
app.post("/forgot", userController.postForgot);
app.get("/reset/:token", userController.getReset);
app.post("/reset/:token", userController.postReset);
app.get("/signup", userController.getSignup);
app.post("/signup", userController.postSignup);
app.get("/contact", contactController.getContact);
app.post("/contact", contactController.postContact);
app.get("/account", passportConfig.isAuthenticated, userController.getAccount);
app.post(
  "/account/profile",
  passportConfig.isAuthenticated,
  userController.postUpdateProfile
);
app.post(
  "/account/password",
  passportConfig.isAuthenticated,
  userController.postUpdatePassword
);
app.post(
  "/account/delete",
  passportConfig.isAuthenticated,
  userController.postDeleteAccount
);
app.get(
  "/account/unlink/:provider",
  passportConfig.isAuthenticated,
  userController.getOauthUnlink
);

/**
 * API examples routes.
 */
app.get("/api", apiController.getApi);
app.get("/api/lastfm", apiController.getLastfm);
app.get("/api/nyt", apiController.getNewYorkTimes);
app.get("/api/aviary", apiController.getAviary);
app.get(
  "/api/steam",
  passportConfig.isAuthenticated,
  passportConfig.isAuthorized,
  apiController.getSteam
);
app.get("/api/stripe", apiController.getStripe);
app.post("/api/stripe", apiController.postStripe);
app.get("/api/scraping", apiController.getScraping);
//app.get("/api/twilio", apiController.getTwilio);
//app.post("/api/twilio", apiController.postTwilio);
//app.get("/api/clockwork", apiController.getClockwork);
//app.post("/api/clockwork", apiController.postClockwork);
//app.get(
//   "/api/foursquare",
//   passportConfig.isAuthenticated,
//   passportConfig.isAuthorized,
//   apiController.getFoursquare
// );
// app.get(
//   "/api/tumblr",
//   passportConfig.isAuthenticated,
//   passportConfig.isAuthorized,
//   apiController.getTumblr
// );
app.get(
  "/api/facebook",
  passportConfig.isAuthenticated,
  passportConfig.isAuthorized,
  apiController.getFacebook
);
app.get(
  "/api/github",
  passportConfig.isAuthenticated,
  passportConfig.isAuthorized,
  apiController.getGithub
);
app.get(
  "/api/twitter",
  passportConfig.isAuthenticated,
  passportConfig.isAuthorized,
  apiController.getTwitter
);
app.post(
  "/api/twitter",
  passportConfig.isAuthenticated,
  passportConfig.isAuthorized,
  apiController.postTwitter
);
// app.get(
//   "/api/linkedin",
//   passportConfig.isAuthenticated,
//   passportConfig.isAuthorized,
//   apiController.getLinkedin
// );
// app.get(
//   "/api/instagram",
//   passportConfig.isAuthenticated,
//   passportConfig.isAuthorized,
//   apiController.getInstagram
// );
app.get("/api/paypal", apiController.getPayPal);
app.get("/api/paypal/success", apiController.getPayPalSuccess);
app.get("/api/paypal/cancel", apiController.getPayPalCancel);
app.get("/api/lob", apiController.getLob);
app.get("/api/upload", apiController.getFileUpload);
app.post("/api/upload", upload.single("myFile"), apiController.postFileUpload);
// app.get(
//   "/api/pinterest",
//   passportConfig.isAuthenticated,
//   passportConfig.isAuthorized,
//   apiController.getPinterest
// );
// app.post(
//   "/api/pinterest",
//   passportConfig.isAuthenticated,
//   passportConfig.isAuthorized,
//   apiController.postPinterest
// );
app.get("/api/google-maps", apiController.getGoogleMaps);

/**
 * OAuth authentication routes. (Sign in)
 */<commit_msg>removed upload commands from app.js<commit_after>/**
 * Module dependencies.
 */
const express = require("express");
const compression = require("compression");
const session = require("express-session");
const bodyParser = require("body-parser");
const logger = require("morgan");
const chalk = require("chalk");
const errorHandler = require("errorhandler");
const lusca = require("lusca");
const dotenv = require("dotenv");
const MongoStore = require("connect-mongo")(session);
const flash = require("express-flash");
const path = require("path");
const mongoose = require("mongoose");
const passport = require("passport");
const expressValidator = require("express-validator");
const expressStatusMonitor = require("express-status-monitor");
const sass = require("node-sass-middleware");
const multer = require("multer");

// const upload = multer({ dest: path.join(__dirname, "uploads") });

/**
 * Load environment variables from .env file, where API keys and passwords are configured.
 */
dotenv.load({ path: ".env" });

/**
 * Controllers (route handlers).
 */
const homeController = require("./controllers/home");
const userController = require("./controllers/user");
const apiController = require("./controllers/api");
const contactController = require("./controllers/contact");
const wordController = require("./controllers/word");
const quizController = require("./controllers/quiz");
const removeBestWord = require("./controllers/removebestword");
const quizAnalysis = require("./controllers/quizAnalysis");
const reportController = require("./controllers/report");
const comingSoon = require("./controllers/comingSoon");
const profilesOverview = require("./controllers/profilesOverview");

/**
 * API keys and Passport configuration.
 */
const passportConfig = require("./config/passport");

/**
 * Create Express server.
 */
const app = express();

/**
 * Connect to MongoDB.
 */
mongoose.Promise = global.Promise;
mongoose.connect(process.env.MONGODB_URI || process.env.MONGOLAB_URI);
mongoose.connection.on("error", err => {
  console.error(err);
  console.log(
    "%s MongoDB connection error. Please make sure MongoDB is running.",
    chalk.red("✗")
  );
  process.exit();
});

/**
 * Populate the Mongo Database with initial data
 * TODO: Make this dependant on the dev environment
 */
const db = require("./util/db");
console.log("Pre populate the database");
db();
console.log("Done pre-populating the database");

/**
 * Express configuration.
 */
app.set("port", process.env.PORT || 3000);
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "pug");
app.use(expressStatusMonitor());
app.use(compression());
app.use(
  sass({
    src: path.join(__dirname, "public"),
    dest: path.join(__dirname, "public")
  })
);
app.use(logger("dev"));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(expressValidator());
app.use(
  session({
    resave: true,
    saveUninitialized: true,
    secret: process.env.SESSION_SECRET,
    store: new MongoStore({
      url: process.env.MONGODB_URI || process.env.MONGOLAB_URI,
      autoReconnect: true,
      clear_interval: 3600
    })
  })
);
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use((req, res, next) => {
  next();
  // if (req.path === '/api/upload') {
  //   next();
  // } else {
  //   lusca.csrf()(req, res, next);
  // }
});
app.use(lusca.xframe("SAMEORIGIN"));
app.use(lusca.xssProtection(true));
app.use((req, res, next) => {
  res.locals.user = req.user;
  next();
});
app.use((req, res, next) => {
  // After successful login, redirect back to the intended page
  if (
    !req.user &&
    req.path !== "/login" &&
    req.path !== "/signup" &&
    !req.path.match(/^\/auth/) &&
    !req.path.match(/\./)
  ) {
    req.session.returnTo = req.path;
  } else if (req.user && req.path === "/account") {
    req.session.returnTo = req.path;
  }
  next();
});
app.use(
  express.static(path.join(__dirname, "public"), { maxAge: 31557600000 })
);

/**
 * Primary app routes.
 */
app.get("/", homeController.index);
app.get("/login", userController.getLogin);
app.post("/login", userController.postLogin);
app.get("/logout", userController.logout);
app.get("/forgot", userController.getForgot);
app.post("/forgot", userController.postForgot);
app.get("/reset/:token", userController.getReset);
app.post("/reset/:token", userController.postReset);
app.get("/signup", userController.getSignup);
app.post("/signup", userController.postSignup);
app.get("/contact", contactController.getContact);
app.post("/contact", contactController.postContact);
app.get("/account", passportConfig.isAuthenticated, userController.getAccount);
app.post(
  "/account/profile",
  passportConfig.isAuthenticated,
  userController.postUpdateProfile
);
app.post(
  "/account/password",
  passportConfig.isAuthenticated,
  userController.postUpdatePassword
);
app.post(
  "/account/delete",
  passportConfig.isAuthenticated,
  userController.postDeleteAccount
);
app.get(
  "/account/unlink/:provider",
  passportConfig.isAuthenticated,
  userController.getOauthUnlink
);

/**
 * API examples routes.
 */
app.get("/api", apiController.getApi);
app.get("/api/lastfm", apiController.getLastfm);
app.get("/api/nyt", apiController.getNewYorkTimes);
app.get("/api/aviary", apiController.getAviary);
app.get(
  "/api/steam",
  passportConfig.isAuthenticated,
  passportConfig.isAuthorized,
  apiController.getSteam
);
app.get("/api/stripe", apiController.getStripe);
app.post("/api/stripe", apiController.postStripe);
app.get("/api/scraping", apiController.getScraping);
//app.get("/api/twilio", apiController.getTwilio);
//app.post("/api/twilio", apiController.postTwilio);
//app.get("/api/clockwork", apiController.getClockwork);
//app.post("/api/clockwork", apiController.postClockwork);
//app.get(
//   "/api/foursquare",
//   passportConfig.isAuthenticated,
//   passportConfig.isAuthorized,
//   apiController.getFoursquare
// );
// app.get(
//   "/api/tumblr",
//   passportConfig.isAuthenticated,
//   passportConfig.isAuthorized,
//   apiController.getTumblr
// );
app.get(
  "/api/facebook",
  passportConfig.isAuthenticated,
  passportConfig.isAuthorized,
  apiController.getFacebook
);
app.get(
  "/api/github",
  passportConfig.isAuthenticated,
  passportConfig.isAuthorized,
  apiController.getGithub
);
app.get(
  "/api/twitter",
  passportConfig.isAuthenticated,
  passportConfig.isAuthorized,
  apiController.getTwitter
);
app.post(
  "/api/twitter",
  passportConfig.isAuthenticated,
  passportConfig.isAuthorized,
  apiController.postTwitter
);
// app.get(
//   "/api/linkedin",
//   passportConfig.isAuthenticated,
//   passportConfig.isAuthorized,
//   apiController.getLinkedin
// );
// app.get(
//   "/api/instagram",
//   passportConfig.isAuthenticated,
//   passportConfig.isAuthorized,
//   apiController.getInstagram
// );
app.get("/api/paypal", apiController.getPayPal);
app.get("/api/paypal/success", apiController.getPayPalSuccess);
app.get("/api/paypal/cancel", apiController.getPayPalCancel);
app.get("/api/lob", apiController.getLob);
// app.get("/api/upload", apiController.getFileUpload);
// app.post("/api/upload", upload.single("myFile"), apiController.postFileUpload);
// app.get(
//   "/api/pinterest",
//   passportConfig.isAuthenticated,
//   passportConfig.isAuthorized,
//   apiController.getPinterest
// );
// app.post(
//   "/api/pinterest",
//   passportConfig.isAuthenticated,
//   passportConfig.isAuthorized,
//   apiController.postPinterest
// );
app.get("/api/google-maps", apiController.getGoogleMaps);

/**
 * OAuth authentication routes. (Sign in)
 */
{'fraction_non_alphanumeric': 0.17797443461160276, 'fraction_numerical': 0.002490986561783022, 'mean_word_length': 4.631598375784423, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1380644', 'n_tokens_mistral': 4972, 'n_tokens_neox': 4906, 'n_words': 860}