Add custom URL support to vue frontend

This commit is contained in:
2025-08-20 22:50:38 +02:00
parent 864f0a5a45
commit 8c0f8c6b44
8 changed files with 281 additions and 22 deletions

View File

@@ -4,27 +4,58 @@ import { get, set } from 'idb-keyval'
export const useAuthStore = defineStore('auth', () => {
const token = ref<string | null>(null)
const serverUrl = ref<string | null>(null)
const isAuthenticated = ref(false)
const setToken = async (newToken: string) => {
// Get default server URL based on environment
const getDefaultServerUrl = () => {
return import.meta.env.DEV ? 'http://localhost:3000' : ''
}
const setToken = async (newToken: string, customServerUrl?: string) => {
token.value = newToken
isAuthenticated.value = true
await set('auth_token', newToken)
// Set server URL or use default
const urlToUse = customServerUrl || getDefaultServerUrl()
serverUrl.value = urlToUse
// Save both token and server URL
await Promise.all([
set('auth_token', newToken),
set('server_url', urlToUse)
])
}
const setServerUrl = async (url: string) => {
serverUrl.value = url
await set('server_url', url)
}
const clearAuth = async () => {
token.value = null
serverUrl.value = null
isAuthenticated.value = false
await set('auth_token', null)
await Promise.all([
set('auth_token', null),
set('server_url', null)
])
}
const checkAuth = async () => {
try {
const storedToken = await get('auth_token')
const [storedToken, storedServerUrl] = await Promise.all([
get('auth_token'),
get('server_url')
])
if (storedToken) {
// Set server URL or use default
const urlToUse = storedServerUrl || getDefaultServerUrl()
serverUrl.value = urlToUse
// Verify token with backend
const baseUrl = import.meta.env.DEV ? 'http://localhost:3000' : ''
const response = await fetch(`${baseUrl}/check-token`, {
const response = await fetch(`${urlToUse}/check-token`, {
headers: { Authorization: storedToken }
})
@@ -42,15 +73,15 @@ export const useAuthStore = defineStore('auth', () => {
}
}
const authenticate = async (authToken: string): Promise<boolean> => {
const authenticate = async (authToken: string, customServerUrl?: string): Promise<boolean> => {
try {
const baseUrl = import.meta.env.DEV ? 'http://localhost:3000' : ''
const response = await fetch(`${baseUrl}/check-token`, {
const urlToUse = customServerUrl || getDefaultServerUrl()
const response = await fetch(`${urlToUse}/check-token`, {
headers: { Authorization: authToken }
})
if (response.ok) {
await setToken(authToken)
await setToken(authToken, urlToUse)
return true
} else {
await clearAuth()
@@ -65,10 +96,13 @@ export const useAuthStore = defineStore('auth', () => {
return {
token,
serverUrl,
isAuthenticated,
setToken,
setServerUrl,
clearAuth,
checkAuth,
authenticate
authenticate,
getDefaultServerUrl
}
})