diff --git a/app/express.js b/app/express.js index 2824691c..736fc38f 100644 --- a/app/express.js +++ b/app/express.js @@ -1,6 +1,7 @@ import express from 'express' import expressHandlebars from 'express-handlebars' import sassMiddleware from 'node-sass-middleware' +import useragent from 'express-useragent' import { PORT } from './config' import log from '../lib/logger' @@ -12,6 +13,8 @@ import '../helpers/utils' const app = express() +app.use(useragent.express()) + app.use(sassMiddleware({ src: 'styles', dest: 'public', diff --git a/app/router.js b/app/router.js index 0d5843bd..b79c2c19 100644 --- a/app/router.js +++ b/app/router.js @@ -2,6 +2,8 @@ import app from './express' import log from '../lib/logger' import sendMail from '../lib/mail' +import _ from 'lodash' + import { Sequelize } from '../db/sequelize' import { promiseGallerySort } from '../models/promise' import { Promises, Users } from '../models' @@ -36,12 +38,14 @@ app.get('/_s/:user/:urtext(*)', (req, res, next) => { const { ip, originalUrl: urtext, user: { username } = {} } = req let parsedPromise = parsePromise({ username, urtext }) + let foundPromise = undefined return Promises.find({ where: { id: parsedPromise.id }, - }).then(async(foundPromise) => { + }).then(async(p) => { + foundPromise = p let toLog = { level: 'debug', state: 'exists' } if (!foundPromise) { @@ -52,7 +56,9 @@ app.get('/_s/:user/:urtext(*)', (req, res, next) => { }) if (parsedPromise) { - foundPromise = await Promises.create({ ...parsedPromise }) + const useragent = JSON.stringify(_.pickBy(req.useragent)) + foundPromise = await Promises + .create({ ...parsedPromise, ip, useragent }) .catch((reason) => { // creating promise failed log.error('promise creation error', reason) return res.render('404') // FIXME? @@ -76,7 +82,7 @@ app.get('/_s/:user/:urtext(*)', (req, res, next) => { return next() }) - .catch((reason) => { // couldn't handle this promise + .catch((...reason) => { // couldn't handle this promise log.error('promise finding error', reason) return res.render('404') // FIXME? }) diff --git a/lib/parse/promise.js b/lib/parse/promise.js index 3d5318df..c59dcdc3 100644 --- a/lib/parse/promise.js +++ b/lib/parse/promise.js @@ -76,6 +76,7 @@ export const parsePromise = ({ ...promise, id, slug, + timezone, what, urtext, cred: parseCredit({ dueDate: tdue, finishDate: tfin }), diff --git a/models/promise.js b/models/promise.js index 6799bf1a..b2937ed3 100644 --- a/models/promise.js +++ b/models/promise.js @@ -38,6 +38,10 @@ export default sequelize.define('promises', { // sequelize needs the doublequote clix: { type: Sequelize.INTEGER, defaultValue: 1 }, // number of clicks a promise has gotten note: { type: Sequelize.STRING }, // optional additional notes or context for the promise + + ip: { type: Sequelize.STRING, defaultValue: null }, // + timezone: { type: Sequelize.STRING }, // + useragent: { type: Sequelize.JSON }, // }, { indexes: [ { diff --git a/package-lock.json b/package-lock.json index 4ba512f4..ef6a4ac9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2636,6 +2636,11 @@ "resolved": "https://registry.npmjs.org/express-subdomain-handler/-/express-subdomain-handler-0.1.0.tgz", "integrity": "sha1-1+M63qsJeKOX2m6knxm5JmnvblM=" }, + "express-useragent": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/express-useragent/-/express-useragent-1.0.12.tgz", + "integrity": "sha1-W64BCakl7Js1QX8xpOitE/GRJTo=" + }, "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", diff --git a/package.json b/package.json index b41f33d9..b9e2a7e7 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "express": "^4.16.3", "express-handlebars": "^3.0.0", "express-subdomain-handler": "^0.1.0", + "express-useragent": "^1.0.12", "ipapi.co": "^0.2.3", "lodash": "^4.17.5", "mailgun-js": "^0.16.0",