chore: rewrite /login page for OAuth, write createUser for the database

This commit is contained in:
2023-01-10 20:07:25 +01:00
parent 2901a1f899
commit 9ae74fa649
9 changed files with 61 additions and 55 deletions
+27 -3
View File
@@ -1,8 +1,11 @@
import { Router } from 'express'
import { AuthorizationCode } from 'simple-oauth2'
import fetch from 'node-fetch'
import { DatabaseConnection, getUser, createUser } from './db/database'
import { UserId } from '../shared/model'
import { SessionService } from './routes'
export function setupOauth(r: Router) {
export function setupOauth(r: Router, db: DatabaseConnection, sessions: SessionService) {
const config = {
client: {
id: process.env.OAUTH_CLIENT_ID ?? '',
@@ -55,8 +58,29 @@ export function setupOauth(r: Router) {
})
).json()
// TODO: call to db && login
return res.status(200).json(userInfo)
type UserInfo = { name: string; email: string }
// Parse user info into a sensible struct
const authUser = {
id: (userInfo as UserInfo).email.split('@')[0] as UserId,
fullName: (userInfo as UserInfo).name
.split(' ')
.map(s => s.substring(0, 1) + s.substring(1).toLowerCase())
.join(' '),
}
const user = await getUser(db, authUser.id)
if (!user) {
await createUser(db, {
id: authUser.id,
fullName: authUser.fullName,
role: 'student',
})
}
res.cookie('sid', sessions.createSession(authUser.id), { maxAge: 1000 * 60 * 60 * 24 * 7 })
return res.status(200).redirect('/')
} catch (error) {
console.error('Access Token Error', error.message)
return res.status(500).redirect(`/error?message=${encodeURIComponent('Autenticazione fallita')}`)