chore: rewrite /login page for OAuth, write createUser for the database
This commit is contained in:
+27
-3
@@ -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')}`)
|
||||
|
||||
Reference in New Issue
Block a user