diff options
Diffstat (limited to 'login-service/src')
| -rw-r--r-- | login-service/src/index.js | 35 |
1 files changed, 32 insertions, 3 deletions
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}`)); |
