aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package-lock.json36
-rw-r--r--package.json4
-rw-r--r--src/server/authentication/controllers/user.ts8
-rw-r--r--src/server/authentication/models/User.ts4
-rw-r--r--src/server/index.ts38
-rw-r--r--views/layout.pug4
-rw-r--r--views/signup.pug1
7 files changed, 83 insertions, 12 deletions
diff --git a/package-lock.json b/package-lock.json
index 94e478e1b..357728555 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -22,6 +22,11 @@
"resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.0.tgz",
"integrity": "sha512-7WcbyctkE8GTzogDb0ulRAEw7v8oIS54ft9mQTU7PfM0hp5e+8kpa+HeQ7IQrFbKtJXBKcZ4bh+Em9dTw5L6AQ=="
},
+ "@types/async": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@types/async/-/async-2.4.1.tgz",
+ "integrity": "sha512-C09BK/wXzbW+/JK9zckhe+FeSbg7NmvVjUWwApnw7ksRpUq3ecGLiq2Aw1LlY4Z/VmtdhSaIs7jO5/MWRYMcOA=="
+ },
"@types/babel-types": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.5.tgz",
@@ -207,6 +212,14 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.24.tgz",
"integrity": "sha512-GWWbvt+z9G5otRBW8rssOFgRY87J9N/qbhqfjMZ+gUuL6zoL+Hm6gP/8qQBG4jjimqdaNLCehcVapZ/Fs2WjCQ=="
},
+ "@types/nodemailer": {
+ "version": "4.6.6",
+ "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-4.6.6.tgz",
+ "integrity": "sha512-N2czhXs7fbQhvoquEGzmHAWttnxLfrM3+cWMRFX4hTQq4GE3VyaSE3MOOse4VoNgvtti/H5ow/Hq9KXu/UMWqA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
"@types/orderedmap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@types/orderedmap/-/orderedmap-1.0.0.tgz",
@@ -950,10 +963,12 @@
"integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk="
},
"async": {
- "version": "1.5.2",
- "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
- "dev": true
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
+ "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
+ "requires": {
+ "lodash": "^4.17.11"
+ }
},
"async-each": {
"version": "1.0.1",
@@ -5792,6 +5807,11 @@
"true-case-path": "^1.0.2"
}
},
+ "nodemailer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-5.1.1.tgz",
+ "integrity": "sha512-hKGCoeNdFL2W7S76J/Oucbw0/qRlfG815tENdhzcqTpSjKgAN91mFOqU2lQUflRRxFM7iZvCyaFcAR9noc/CqQ=="
+ },
"nodemon": {
"version": "1.18.10",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.10.tgz",
@@ -9807,6 +9827,14 @@
"async": "^1.5.2",
"debug": "^2.2.0",
"mkdirp": "0.5.x"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
}
},
"posix-character-classes": {
diff --git a/package.json b/package.json
index fbf20230d..4371df90d 100644
--- a/package.json
+++ b/package.json
@@ -33,6 +33,7 @@
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.14",
+ "@types/async": "^2.4.1",
"@types/bcrypt-nodejs": "0.0.30",
"@types/bluebird": "^3.5.25",
"@types/body-parser": "^1.17.0",
@@ -48,6 +49,7 @@
"@types/mongodb": "^3.1.19",
"@types/mongoose": "^5.3.16",
"@types/node": "^10.12.24",
+ "@types/nodemailer": "^4.6.6",
"@types/passport": "^1.0.0",
"@types/passport-local": "^1.0.33",
"@types/prosemirror-commands": "^1.0.1",
@@ -65,6 +67,7 @@
"@types/typescript": "^2.0.0",
"@types/uuid": "^3.4.4",
"@types/webpack": "^4.4.24",
+ "async": "^2.6.2",
"bcrypt-nodejs": "0.0.3",
"bluebird": "^3.5.3",
"body-parser": "^1.18.3",
@@ -87,6 +90,7 @@
"mongodb": "^3.1.13",
"mongoose": "^5.4.12",
"node-sass": "^4.11.0",
+ "nodemailer": "^5.1.1",
"nodemon": "^1.18.10",
"normalize.css": "^8.0.1",
"npm": "^6.7.0",
diff --git a/src/server/authentication/controllers/user.ts b/src/server/authentication/controllers/user.ts
index 93986adf8..a496959d1 100644
--- a/src/server/authentication/controllers/user.ts
+++ b/src/server/authentication/controllers/user.ts
@@ -12,6 +12,8 @@ import * as pug from 'pug';
* GET /
* Whenever a user navigates to the root of Dash
* (doesn't specify a sub-route), redirect to login.
+ * If the user is already signed in, it will effectively
+ * automatically redirect them to /home instead
*/
export let getEntry = (req: Request, res: Response) => {
res.redirect("/login");
@@ -29,6 +31,7 @@ export let getSignup = (req: Request, res: Response) => {
}
res.render("signup.pug", {
title: "Sign Up",
+ user: req.user,
errors: req.flash("Unable to facilitate sign up. Please try again.")
});
};
@@ -61,7 +64,9 @@ export let postSignup = (req: Request, res: Response, next: NextFunction) => {
const user = new User({
email,
password,
+ userDoc: "document here"
});
+
User.findOne({ email }, (err, existingUser) => {
if (err) { return next(err); }
if (existingUser) {
@@ -94,7 +99,8 @@ export let getLogin = (req: Request, res: Response) => {
return res.redirect("/home");
}
res.render("login.pug", {
- title: "Log In"
+ title: "Log In",
+ user: req.user
});
};
diff --git a/src/server/authentication/models/User.ts b/src/server/authentication/models/User.ts
index ed2952e48..9e6c525c3 100644
--- a/src/server/authentication/models/User.ts
+++ b/src/server/authentication/models/User.ts
@@ -1,6 +1,5 @@
//@ts-ignore
import * as bcrypt from "bcrypt-nodejs";
-import * as crypto from "crypto";
//@ts-ignore
import * as mongoose from "mongoose";
var url = 'mongodb://localhost:27017/Dash'
@@ -46,8 +45,7 @@ const userSchema = new mongoose.Schema({
password: String,
passwordResetToken: String,
passwordResetExpires: Date,
-
- workspaces: Array,
+ userDoc: String,
facebook: String,
twitter: String,
diff --git a/src/server/index.ts b/src/server/index.ts
index 7189b32a0..039d7f56a 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -13,6 +13,7 @@ import { FIELD_ID, Field } from '../fields/Field';
import { Database } from './database';
import { ServerUtils } from './ServerUtil';
import { ObjectID } from 'mongodb';
+import * as bcrypt from "bcrypt-nodejs";
import { Document } from '../fields/Document';
import * as io from 'socket.io'
import * as passportConfig from './authentication/config/passport';
@@ -27,12 +28,15 @@ import flash = require('express-flash');
import * as bodyParser from 'body-parser';
import * as session from 'express-session';
import * as cookieParser from 'cookie-parser';
+import * as nodemailer from 'nodemailer';
import c = require("crypto");
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');
+import * as async from 'async';
const bluebird = require('bluebird');
import { performance } from 'perf_hooks'
import * as path from 'path'
+import User from './authentication/models/User';
const mongoUrl = 'mongodb://localhost:27017/Dash';
// mongoose.Promise = bluebird;
@@ -106,6 +110,40 @@ app.get('/logout', getLogout);
// ***
+// FORGOT PASSWORD EMAIL HANDLING
+app.post('/forgot', function (req, res, next) {
+ const email = req.body.email;
+ async.waterfall([
+ function (done: any) {
+ const seed = new Uint16Array();
+ seed.set([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+ let token = crypto.getRandomValues(seed);
+ done(token);
+ },
+ function (token: Uint16Array, done: any) {
+ User.findOne({ email }, function (err, user: User) {
+ if (!user) {
+ // NO ACCOUNT WITH SUBMITTED EMAIL
+ return res.redirect('/forgot');
+ }
+ user.resetPasswordToken = token;
+ user.resetPasswordExpires = Date.now() + 3600000; // 1 HOUR
+ user.save(function (err: any) {
+ done(err, token, user);
+ });
+ });
+ },
+ function (token: Uint16Array, user: User, done: any) {
+ const transport = nodemailer.createTransport('SMTP', {
+ auth: {
+ user: 'test.nodemailer@gmail.com',
+ pass: 'placeholder'
+ }
+ });
+ }
+ ])
+})
+
let FieldStore: ObservableMap<FIELD_ID, Field> = new ObservableMap();
app.get("/hello", (req, res) => {
diff --git a/views/layout.pug b/views/layout.pug
index fb22ae770..95a5a391f 100644
--- a/views/layout.pug
+++ b/views/layout.pug
@@ -12,6 +12,4 @@ html(lang='')
link(rel='stylesheet', href='/css/main.css')
body
-
- .container
- block content \ No newline at end of file
+ block content \ No newline at end of file
diff --git a/views/signup.pug b/views/signup.pug
index 9863b453e..374710e6f 100644
--- a/views/signup.pug
+++ b/views/signup.pug
@@ -4,7 +4,6 @@ extends ./layout
block content
style
include ./stylesheets/authentication.css
- .page-header
form.form-horizontal(id='signup-form', method='POST')
input(type='hidden', name='_csrf', value=_csrf)
.overlay(id='overlay_signup')