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, username,
displayName: search.searchEntries[0].displayName as string, displayName: search.searchEntries[0].displayName as string,
domain: this.domain, domain: this.domain,
pwdLastSet: search.searchEntries[0].pwdLastSet as string pwdLastSet: search.searchEntries[0].pwdLastSet as string,
isAdmin: false
} }
} catch (error: any) { } catch (error: any) {
console.log('Error:', error) console.log('Error:', error)

View File

@ -1,5 +1,6 @@
import { PaFirewallService } from '../services/PaFirewallService' import { PaFirewallService } from '../services/PaFirewallService'
import { db } from '../prisma' import { db } from '../prisma'
import { LoginResult } from '../schemas/LoginResult'
export async function autoLogin({ export async function autoLogin({
username, username,
@ -9,12 +10,20 @@ export async function autoLogin({
username: string username: string
domain: string domain: string
ip: string ip: string
}) { }): Promise<LoginResult> {
console.log('AutoLogin?', username, domain, ip) console.log('AutoLogin?', username, domain, ip)
const paHosts = await db.paHost.findMany() const paHosts = await db.paHost.findMany()
const pa = new PaFirewallService(paHosts[0].ip, paHosts[0].key) 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 username: string
displayName: string displayName: string
domain: string domain: string
pwdLastSet: string pwdLastSet?: string
isAdmin?: boolean
} }

View File

@ -2,7 +2,8 @@ export type JwtPayload = {
username: string username: string
displayName: string displayName: string
domain: string domain: string
pwdLastSet: string pwdLastSet?: string
isAdmin?: boolean
iat?: Date // issued at iat?: Date // issued at
exp?: Date // expires at exp?: Date // expires at
} }

View File

@ -8,15 +8,20 @@ import { logout } from './lib/logout'
import { PaFirewallService } from './services/PaFirewallService' import { PaFirewallService } from './services/PaFirewallService'
import { jwtService } from './lib/jwt' import { jwtService } from './lib/jwt'
import { autoLogin } from './lib/autoLogin' import { autoLogin } from './lib/autoLogin'
import { JwtPayload } from './schemas/JwtPayload'
// Created for each request // Created for each request
function createContext({ req, res }: trpcExpress.CreateExpressContextOptions) { function createContext({ req, res }: trpcExpress.CreateExpressContextOptions) {
const ip = getIpFromRequest(req) const ip = getIpFromRequest(req)
const token = req.headers.authorization?.split(' ')[1] 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 } return { ip, user: jwtPayload }
} }
@ -51,7 +56,7 @@ export const appRouter = t.router({
const { username, domain } = ctx.user 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 addFirewall: t.procedure

View File

@ -61,6 +61,7 @@ async function onLogout() {
const success = await trpc.logout.mutate() const success = await trpc.logout.mutate()
localStorage.removeItem('token') localStorage.removeItem('token')
localStorage.removeItem('autoLogin')
if (success) { if (success) {
alert('Você foi desconectado.') alert('Você foi desconectado.')

View File

@ -61,7 +61,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, computed } from 'vue' import { ref, computed, onMounted, watch } from 'vue'
import { trpc } from '../trpc' import { trpc } from '../trpc'
import { VForm } from 'vuetify/lib/components/index.mjs' import { VForm } from 'vuetify/lib/components/index.mjs'
import LoginErrorAlert from './LoginErrorAlert.vue' import LoginErrorAlert from './LoginErrorAlert.vue'
@ -75,6 +75,31 @@ const username = ref('')
const password = ref('') const password = ref('')
const autoLogin = ref(false) 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 showPassword = ref(false)
const loading = ref(false) const loading = ref(false)