Basic autologin OK
This commit is contained in:
parent
0bf1be5c40
commit
aa43842601
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.')
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user