Basic autologin OK

This commit is contained in:
Douglas Barone 2023-10-26 13:00:34 -04:00
parent 0bf1be5c40
commit aa43842601
7 changed files with 52 additions and 9 deletions

View File

@ -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)

View File

@ -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<LoginResult> {
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
}
}

View File

@ -2,5 +2,6 @@ export type AuthResult = {
username: string
displayName: string
domain: string
pwdLastSet: string
pwdLastSet?: string
isAdmin?: boolean
}

View File

@ -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
}

View File

@ -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

View File

@ -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.')

View File

@ -61,7 +61,7 @@
</template>
<script lang="ts" setup>
import { ref, computed } from 'vue'
import { ref, computed, onMounted, watch } from 'vue'
import { trpc } from '../trpc'
import { VForm } from 'vuetify/lib/components/index.mjs'
import LoginErrorAlert from './LoginErrorAlert.vue'
@ -75,6 +75,31 @@ const username = ref('')
const password = ref('')
const autoLogin = ref(false)
watch(autoLogin, value => {
localStorage.setItem('autoLogin', value ? 'true' : 'false')
})
onMounted(async () => {
autoLogin.value = localStorage.getItem('autoLogin') === 'true'
if (autoLogin.value && token.value) {
try {
loading.value = true
const result = await trpc.autoLogin.mutate()
console.log(result)
emit('login', result)
} catch (e) {
console.log(e)
} finally {
loading.value = false
}
}
})
const showPassword = ref(false)
const loading = ref(false)