Skip to content

Commit

Permalink
API setup async-labs#20
Browse files Browse the repository at this point in the history
  • Loading branch information
delgermurun committed May 9, 2019
1 parent 96deabf commit 0de26ee
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 4 deletions.
2 changes: 2 additions & 0 deletions api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@
"mongoose": "5.4.19",
"passport": "0.4.0",
"passport-google-oauth": "2.0.0",
"passwordless": "^1.1.3",
"passwordless-mongostore-bcrypt-node": "^0.1.1",
"qs": "6.7.0",
"request": "2.88.0",
"socket.io": "^2.2.0",
Expand Down
8 changes: 5 additions & 3 deletions api/server/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import * as mongoose from 'mongoose';
import * as path from 'path';

import api from './api';
import { setupGoogle, setupPasswordless } from './auth';
import { signRequestForLoad } from './aws-s3';
import auth from './google';
import { setup as realtime } from './realtime';
import { stripeWebHooks } from './stripe';

Expand Down Expand Up @@ -73,15 +73,17 @@ if (!dev) {
const sessionMiddleware = session(sessionOptions);
server.use(sessionMiddleware);

auth({ server, ROOT_URL });
setupGoogle({ server, ROOT_URL });
setupPasswordless({ server, ROOT_URL, MONGO_URL });

api(server);

const http = new httpModule.Server(server);
realtime({ http, origin: dev ? 'http://localhost:3000' : PRODUCTION_URL_APP, sessionMiddleware });

server.get('/uploaded-file', async (req, res) => {
if (!req.user) {
res.redirect(dev ? 'http://localhost:3000/login' : `${PRODUCTION_URL_APP}/login`);
res.redirect(dev ? 'http://localhost:3000/login' : `${PRODUCTION_URL_APP};/login`);
return;
}

Expand Down
44 changes: 43 additions & 1 deletion api/server/google.ts → api/server/auth.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import * as passport from 'passport';
import { OAuth2Strategy as Strategy } from 'passport-google-oauth';
import * as passwordless from 'passwordless';
import * as PasswordlessMongoStore from 'passwordless-mongostore-bcrypt-node';

import logger from './logs';
import Invitation from './models/Invitation';
Expand All @@ -9,7 +11,45 @@ const dev = process.env.NODE_ENV !== 'production';
const { PRODUCTION_URL_APP } = process.env;
const URL_APP = dev ? 'http://localhost:3000' : PRODUCTION_URL_APP;

export default function auth({ ROOT_URL, server }) {
function setupPasswordless({ server, ROOT_URL, MONGO_URL }) {
passwordless.init(new PasswordlessMongoStore(MONGO_URL));
passwordless.addDelivery((tokenToSend, uidToSend, recipient, callback, req) => {
const text = `Hello!\nAccess your account here:
http://${ROOT_URL}/logged_in?$token=${tokenToSend}&uid=${encodeURIComponent(uidToSend)}`;

logger.debug(text, recipient, req.body);
callback(null);
});

server.use(passwordless.sessionSupport());
server.use(passwordless.acceptToken({ successRedirect: '/' }));

server.get('/logged_in', passwordless.acceptToken(), (__, res) => {
res.redirect('/');
});

server.post(
'/sendtoken',
passwordless.requestToken(
(user, __, callback, req) => {
logger.debug(req.body);

User.find({ email: user }, ret => {
if (ret) {
callback(null, ret.id);
} else {
callback(null, null);
}
});
},
(__, res) => {
res.json({ done: 1 });
},
),
);
}

function setupGoogle({ ROOT_URL, server }) {
const clientID = process.env.Google_clientID;
const clientSecret = process.env.Google_clientSecret;

Expand Down Expand Up @@ -119,3 +159,5 @@ export default function auth({ ROOT_URL, server }) {
res.redirect(`${URL_APP}/login`);
});
}

export { setupPasswordless, setupGoogle };
78 changes: 78 additions & 0 deletions api/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -843,6 +843,13 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=

base-x@^3.0.2:
version "3.0.5"
resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.5.tgz#d3ada59afed05b921ab581ec3112e6444ba0795a"
integrity sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==
dependencies:
safe-buffer "^5.0.1"

[email protected]:
version "0.1.5"
resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
Expand Down Expand Up @@ -876,6 +883,11 @@ base@^0.11.1:
mixin-deep "^1.2.0"
pascalcase "^0.1.1"

[email protected]:
version "0.0.3"
resolved "https://registry.yarnpkg.com/bcrypt-nodejs/-/bcrypt-nodejs-0.0.3.tgz#c60917f26dc235661566c681061c303c2b28842b"
integrity sha1-xgkX8m3CNWYVZsaBBhwwPCsohCs=

bcrypt-pbkdf@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
Expand Down Expand Up @@ -975,6 +987,13 @@ browser-resolve@^1.11.3:
dependencies:
resolve "1.1.7"

bs58@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo=
dependencies:
base-x "^3.0.2"

bser@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
Expand All @@ -987,6 +1006,13 @@ bson@^1.1.0, bson@~1.1.0:
resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.1.tgz#4330f5e99104c4e751e7351859e2d408279f2f13"
integrity sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==

bson@~0.2:
version "0.2.22"
resolved "https://registry.yarnpkg.com/bson/-/bson-0.2.22.tgz#fcda103f26d0c074d5a52d50927db80fd02b4b39"
integrity sha1-/NoQPybQwHTVpS1Qkn24D9ArSzk=
dependencies:
nan "~1.8"

bson@~1.0.4:
version "1.0.9"
resolved "https://registry.yarnpkg.com/bson/-/bson-1.0.9.tgz#12319f8323b1254739b7c6bef8d3e89ae05a2f57"
Expand Down Expand Up @@ -3452,6 +3478,13 @@ [email protected]:
resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.0.tgz#ef33c42e9024dce511eeaf440cd684f3af1fc769"
integrity sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg==

[email protected]:
version "0.0.11"
resolved "https://registry.yarnpkg.com/kerberos/-/kerberos-0.0.11.tgz#cb29891c21c22ac195f3140b97dd12204fea7dc2"
integrity sha1-yymJHCHCKsGV8xQLl90SIE/qfcI=
dependencies:
nan "~1.8"

kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
Expand Down Expand Up @@ -3807,6 +3840,16 @@ [email protected]:
mongodb-core "3.1.11"
safe-buffer "^5.1.2"

mongodb@^1.4.5:
version "1.4.40"
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-1.4.40.tgz#cfd80b74fdf0fa053f2ccfb5f49c47ca32a38efb"
integrity sha1-z9gLdP3w+gU/LM+19JxHyjKjjvs=
dependencies:
bson "~0.2"
optionalDependencies:
kerberos "0.0.11"
readable-stream latest

mongodb@^2.0.36:
version "2.2.36"
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.2.36.tgz#1c573680b2849fb0f47acbba3dc5fa228de975f5"
Expand Down Expand Up @@ -3870,6 +3913,11 @@ nan@^2.9.2:
resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7"
integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==

nan@~1.8:
version "1.8.4"
resolved "https://registry.yarnpkg.com/nan/-/nan-1.8.4.tgz#3c76b5382eab33e44b758d2813ca9d92e9342f34"
integrity sha1-PHa1OC6rM+RLdY0oE8qdkuk0LzQ=

nanomatch@^1.2.9:
version "1.2.13"
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
Expand Down Expand Up @@ -4341,6 +4389,27 @@ [email protected]:
passport-strategy "1.x.x"
pause "0.0.1"

passwordless-mongostore-bcrypt-node@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/passwordless-mongostore-bcrypt-node/-/passwordless-mongostore-bcrypt-node-0.1.1.tgz#88d0adb844507b54a0bea2d0565647038b75c3fb"
integrity sha1-iNCtuERQe1SgvqLQVlZHA4t1w/s=
dependencies:
bcrypt-nodejs "0.0.3"
mongodb "^1.4.5"
passwordless-tokenstore "0.0.10"

[email protected]:
version "0.0.10"
resolved "https://registry.yarnpkg.com/passwordless-tokenstore/-/passwordless-tokenstore-0.0.10.tgz#829c4c0b792ac2c55de54c05c118d79e946b9b2e"
integrity sha1-gpxMC3kqwsVd5UwFwRjXnpRrmy4=

passwordless@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/passwordless/-/passwordless-1.1.3.tgz#fca25954dd6eeb4ffde2020d1418eab337f7e862"
integrity sha512-Qwq7D/gc1kYwcFtpe5M0BvKeNb8wDh3QQVpWkEfI9+86v80HsGJpbmw4AvJc378u2tVjCzoD8UR6EjXVeZcjeA==
dependencies:
bs58 "^4.0.1"

path-dirname@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
Expand Down Expand Up @@ -4634,6 +4703,15 @@ readable-stream@^3.1.1:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"

readable-stream@latest:
version "3.3.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.3.0.tgz#cb8011aad002eb717bf040291feba8569c986fb9"
integrity sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
util-deprecate "^1.0.1"

readdirp@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
Expand Down

0 comments on commit 0de26ee

Please sign in to comment.