aboutsummaryrefslogtreecommitdiffstats
path: root/login-service/src/index.js
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/src/index.js
parent449ebe5164ad9d2ba1e7d61bbae8e4101b703490 (diff)
Get user&pass and google auth working
Diffstat (limited to 'login-service/src/index.js')
-rw-r--r--login-service/src/index.js35
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}`));