diff options
| author | Jan Tuomi <jan.tuomi@eficode.com> | 2020-04-26 19:24:57 +0300 |
|---|---|---|
| committer | Jan Tuomi <jan.tuomi@eficode.com> | 2020-04-26 19:24:57 +0300 |
| commit | 7e057c8a56b51bdd7e95b3919d013ac0edd481e9 (patch) | |
| tree | afaeed8947e201102b80547f5105725a6fe383ce /login-service | |
| parent | 449ebe5164ad9d2ba1e7d61bbae8e4101b703490 (diff) | |
Get user&pass and google auth working
Diffstat (limited to 'login-service')
| -rw-r--r-- | login-service/package-lock.json | 31 | ||||
| -rw-r--r-- | login-service/package.json | 1 | ||||
| -rw-r--r-- | login-service/src/index.js | 35 |
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}`)); |
