From aa438426011f96861a56066e4a25f240c714089d Mon Sep 17 00:00:00 2001 From: Douglas Barone Date: Thu, 26 Oct 2023 13:00:34 -0400 Subject: [PATCH] Basic autologin OK --- src/server/auth/LdapAuth.ts | 3 ++- src/server/lib/autoLogin.ts | 13 +++++++++++-- src/server/schemas/AuthResult.ts | 3 ++- src/server/schemas/JwtPayload.ts | 3 ++- src/server/trpc.ts | 11 ++++++++--- src/web/components/LoggedCard.vue | 1 + src/web/components/LoginForm.vue | 27 ++++++++++++++++++++++++++- 7 files changed, 52 insertions(+), 9 deletions(-) diff --git a/src/server/auth/LdapAuth.ts b/src/server/auth/LdapAuth.ts index 1931653..f526cec 100644 --- a/src/server/auth/LdapAuth.ts +++ b/src/server/auth/LdapAuth.ts @@ -29,7 +29,8 @@ export class LdapAuth implements Auth { username, displayName: search.searchEntries[0].displayName as string, domain: this.domain, - pwdLastSet: search.searchEntries[0].pwdLastSet as string + pwdLastSet: search.searchEntries[0].pwdLastSet as string, + isAdmin: false } } catch (error: any) { console.log('Error:', error) diff --git a/src/server/lib/autoLogin.ts b/src/server/lib/autoLogin.ts index 35c5c9f..4904466 100644 --- a/src/server/lib/autoLogin.ts +++ b/src/server/lib/autoLogin.ts @@ -1,5 +1,6 @@ import { PaFirewallService } from '../services/PaFirewallService' import { db } from '../prisma' +import { LoginResult } from '../schemas/LoginResult' export async function autoLogin({ username, @@ -9,12 +10,20 @@ export async function autoLogin({ username: string domain: string ip: string -}) { +}): Promise { console.log('AutoLogin?', username, domain, ip) const paHosts = await db.paHost.findMany() const pa = new PaFirewallService(paHosts[0].ip, paHosts[0].key) - return await pa.login({ username, ip, domain }) + await pa.login({ username, ip, domain }) + + return { + username, + displayName: username, + domain, + pwdLastSet: '', + isAdmin: false + } } diff --git a/src/server/schemas/AuthResult.ts b/src/server/schemas/AuthResult.ts index 9204af9..5bd66e5 100644 --- a/src/server/schemas/AuthResult.ts +++ b/src/server/schemas/AuthResult.ts @@ -2,5 +2,6 @@ export type AuthResult = { username: string displayName: string domain: string - pwdLastSet: string + pwdLastSet?: string + isAdmin?: boolean } diff --git a/src/server/schemas/JwtPayload.ts b/src/server/schemas/JwtPayload.ts index bb5b20e..57cc799 100644 --- a/src/server/schemas/JwtPayload.ts +++ b/src/server/schemas/JwtPayload.ts @@ -2,7 +2,8 @@ export type JwtPayload = { username: string displayName: string domain: string - pwdLastSet: string + pwdLastSet?: string + isAdmin?: boolean iat?: Date // issued at exp?: Date // expires at } diff --git a/src/server/trpc.ts b/src/server/trpc.ts index 486a0a3..6668576 100644 --- a/src/server/trpc.ts +++ b/src/server/trpc.ts @@ -8,15 +8,20 @@ import { logout } from './lib/logout' import { PaFirewallService } from './services/PaFirewallService' import { jwtService } from './lib/jwt' import { autoLogin } from './lib/autoLogin' +import { JwtPayload } from './schemas/JwtPayload' // Created for each request function createContext({ req, res }: trpcExpress.CreateExpressContextOptions) { const ip = getIpFromRequest(req) const token = req.headers.authorization?.split(' ')[1] - const jwtPayload = token ? jwtService.verifyToken(token) : null + let jwtPayload: JwtPayload | null = null - console.log(jwtPayload) + try { + jwtPayload = token ? jwtService.verifyToken(token) : null + } catch (error) { + console.log(error) + } return { ip, user: jwtPayload } } @@ -51,7 +56,7 @@ export const appRouter = t.router({ const { username, domain } = ctx.user - return await autoLogin({ username, domain: ctx.ip, ip: domain }) + return await autoLogin({ username, domain: domain, ip: ctx.ip }) }), addFirewall: t.procedure diff --git a/src/web/components/LoggedCard.vue b/src/web/components/LoggedCard.vue index c68193c..395f71b 100644 --- a/src/web/components/LoggedCard.vue +++ b/src/web/components/LoggedCard.vue @@ -61,6 +61,7 @@ async function onLogout() { const success = await trpc.logout.mutate() localStorage.removeItem('token') + localStorage.removeItem('autoLogin') if (success) { alert('VocĂȘ foi desconectado.') diff --git a/src/web/components/LoginForm.vue b/src/web/components/LoginForm.vue index 63831b2..c58837a 100644 --- a/src/web/components/LoginForm.vue +++ b/src/web/components/LoginForm.vue @@ -61,7 +61,7 @@