mirror of
https://github.com/UniversityOfHelsinkiCS/ohtuilmo.git
synced 2026-10-12 19:03:41 +03:00
+44
-4
@@ -2,6 +2,7 @@ const loginRouter = require('express').Router()
|
||||
const jwt = require('jsonwebtoken')
|
||||
const config = require('../utils/config')
|
||||
const axios = require('axios')
|
||||
const db = require('../models/index')
|
||||
|
||||
const getTokenFrom = (request) => {
|
||||
const authorization = request.headers.authorization
|
||||
@@ -27,20 +28,59 @@ async function authenticate(username, password) {
|
||||
|
||||
|
||||
loginRouter.post('/', async (req, res) => {
|
||||
|
||||
if (!req.body.username || !req.body.password) {
|
||||
//username or password field undefined
|
||||
return res.status(400).json({ error: 'missing username or password' })
|
||||
}
|
||||
try {
|
||||
const response = await authenticate(req.body.username, req.body.password)
|
||||
if (response.data.error) {
|
||||
//incorrect credentials response from auth server
|
||||
return res.status(401).json({ error: 'incorrect credentials' })
|
||||
}
|
||||
const user = response.data
|
||||
const token = jwt.sign({ id: user.student_number }, config.secret)
|
||||
res.status(200).json({ token, username: user.username, student_number: user.student_number, first_names: user.first_names, last_name: user.last_name })
|
||||
console.log(response.data)
|
||||
db.User.findOne({ where: { student_number: response.data.student_number } }).then(foundUser => {
|
||||
if (foundUser) {
|
||||
//user already in database, no need to add
|
||||
const token = jwt.sign({ id: response.data.student_number }, config.secret)
|
||||
return res.status(200).json({
|
||||
token,
|
||||
user: foundUser
|
||||
})
|
||||
}
|
||||
//user not in database, add user
|
||||
const newUser = {
|
||||
username: response.data.username,
|
||||
student_number: response.data.student_number,
|
||||
first_names: response.data.first_names,
|
||||
last_name: response.data.last_name,
|
||||
email: null,
|
||||
admin: false
|
||||
}
|
||||
db.User.create({
|
||||
username: newUser.username,
|
||||
student_number: newUser.student_number,
|
||||
first_names: newUser.first_names,
|
||||
last_name: newUser.last_name,
|
||||
email: newUser.email,
|
||||
admin: newUser.admin
|
||||
}).then(() => {
|
||||
const token = jwt.sign({ id: response.data.student_number }, config.secret)
|
||||
res.status(200).json({
|
||||
token,
|
||||
user: newUser
|
||||
})
|
||||
}).error((error) => {
|
||||
//error saving to database
|
||||
console.log(error)
|
||||
res.status(500).json({ error: 'database error' })
|
||||
})
|
||||
})
|
||||
} catch (error) {
|
||||
//error from auth server
|
||||
console.log(error)
|
||||
res.status(500).json({ error: 'something went wrong' })
|
||||
res.status(500).json({ error: 'authentication error' })
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ module.exports = (sequelize, Sequelize) => {
|
||||
|
||||
Membership.associate = (models) => {
|
||||
Membership.hasOne(models.User, {
|
||||
foreignKey: 'student_id',
|
||||
foreignKey: 'student_number',
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
+7
-4
@@ -1,13 +1,16 @@
|
||||
module.exports = (sequelize, Sequelize) => {
|
||||
const User = sequelize.define('user', {
|
||||
student_id: {
|
||||
student_number: {
|
||||
type: Sequelize.INTEGER,
|
||||
primaryKey: true
|
||||
},
|
||||
firstNames: {
|
||||
username: {
|
||||
type: Sequelize.STRING
|
||||
},
|
||||
lastName: {
|
||||
first_names: {
|
||||
type: Sequelize.STRING
|
||||
},
|
||||
last_name: {
|
||||
type: Sequelize.STRING
|
||||
},
|
||||
email: {
|
||||
@@ -21,7 +24,7 @@ module.exports = (sequelize, Sequelize) => {
|
||||
|
||||
User.associate = (models) => {
|
||||
User.hasMany(models.Membership, {
|
||||
foreignKey: 'student_id',
|
||||
foreignKey: 'student_number',
|
||||
as: 'memberships',
|
||||
})
|
||||
}
|
||||
|
||||
+2
-1
@@ -33,7 +33,8 @@
|
||||
"jsonwebtoken": "^8.3.0",
|
||||
"passport": "^0.4.0",
|
||||
"passport-local": "^1.0.0",
|
||||
"pg": "^7.4.3",
|
||||
"pg": "^7.5.0",
|
||||
"pg-hstore": "^2.3.2",
|
||||
"sequelize": "^4.38.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
Reference in New Issue
Block a user