aboutsummaryrefslogtreecommitdiffstats
path: root/login-service
diff options
context:
space:
mode:
authorJan Tuomi <jan.tuomi@eficode.com>2020-04-26 19:24:57 +0300
committerJan Tuomi <jan.tuomi@eficode.com>2020-04-26 19:24:57 +0300
commit7e057c8a56b51bdd7e95b3919d013ac0edd481e9 (patch)
treeafaeed8947e201102b80547f5105725a6fe383ce /login-service
parent449ebe5164ad9d2ba1e7d61bbae8e4101b703490 (diff)
Get user&pass and google auth working
Diffstat (limited to 'login-service')
-rw-r--r--login-service/package-lock.json31
-rw-r--r--login-service/package.json1
-rw-r--r--login-service/src/index.js35
3 files changed, 64 insertions, 3 deletions
diff --git a/login-service/package-lock.json b/login-service/package-lock.json
index 0cc44b6..7af7e7d 100644
--- a/login-service/package-lock.json
+++ b/login-service/package-lock.json
@@ -93,6 +93,14 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
+ "axios": {
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
+ "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
+ "requires": {
+ "follow-redirects": "1.5.10"
+ }
+ },
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -542,6 +550,29 @@
}
}
},
+ "follow-redirects": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
+ "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
+ "requires": {
+ "debug": "=3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
diff --git a/login-service/package.json b/login-service/package.json
index 87f5bb6..0815794 100644
--- a/login-service/package.json
+++ b/login-service/package.json
@@ -15,6 +15,7 @@
"nodemon": "^2.0.3"
},
"dependencies": {
+ "axios": "^0.19.2",
"express": "^4.17.1",
"jsonwebtoken": "^8.5.1"
}
diff --git a/login-service/src/index.js b/login-service/src/index.js
index 0de5931..248c269 100644
--- a/login-service/src/index.js
+++ b/login-service/src/index.js
@@ -1,4 +1,5 @@
const express = require('express');
+const axios = require('axios');
var jwt = require('jsonwebtoken');
const app = express();
@@ -13,7 +14,17 @@ const port = 4000;
const JWT_SECRET = process.env.JWT_SECRET;
-const loginWithUsernameAndPassword = (username, password) => {
+const authorizeUserNamePassword = (username, password) => {
+ // TODO
+ const now = Math.round(new Date().getTime() / 1000);
+
+ return {
+ role: 'todo_user',
+ exp: now + 30 * 60, // 30 minutes
+ };
+};
+
+const authorizeGoogle = googleUser => {
// TODO
const now = Math.round(new Date().getTime() / 1000);
@@ -24,12 +35,30 @@ const loginWithUsernameAndPassword = (username, password) => {
};
app.get('/', (req, res) => res.send('Login service API'));
-app.post('/login', (req, res) => {
+
+// Username + Password login
+app.post('/login/userpass', (req, res) => {
const payload = req.body;
const { username, password } = payload;
const claims = loginWithUsernameAndPassword(username, password);
const signedJWT = jwt.sign(claims, JWT_SECRET);
- res.json({ jwt: signedJWT });
+ res.json({ jwt: signedJWT, displayName: username });
+});
+
+// Google access token login
+app.post('/login/google', async (req, res) => {
+ const payload = req.body;
+ const { accessToken } = payload;
+ try {
+ const resp = await axios.get(`https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=${accessToken}`);
+ const payload = resp.data;
+ const { email } = payload;
+ const claims = authorizeGoogle(payload);
+ const signedJWT = jwt.sign(claims, JWT_SECRET);
+ res.json({ jwt: signedJWT, displayName: email });
+ } catch (err) {
+ console.error(err);
+ }
});
app.listen(port, () => console.log(`Listening at http://localhost:${port}`));