Hash: {{ user?.hash || 'N/A' }}
@@ -30,7 +30,7 @@
- Atenção: Esta ação não pode ser desfeita!
+ Warning: This action cannot be undone!
@@ -42,7 +42,7 @@
variant="text"
@click="$emit('update:modelValue', false)"
>
- Cancelar
+ Cancel
- Deletar
+ Delete
diff --git a/src/main/resources/META-INF/resources/admin/src/router/index.js b/src/main/resources/META-INF/resources/admin/src/router/index.js
index 57d5c31..50299ce 100644
--- a/src/main/resources/META-INF/resources/admin/src/router/index.js
+++ b/src/main/resources/META-INF/resources/admin/src/router/index.js
@@ -2,7 +2,7 @@ import { createRouter, createWebHistory } from 'vue-router'
import { useUsersStore } from '../stores/users'
const router = createRouter({
- history: createWebHistory('/console/'),
+ history: createWebHistory('/dashboard'),
routes: [
{
path: '/',
@@ -84,13 +84,13 @@ router.beforeEach((to, from, next) => {
if (!groups.includes('admin')) {
// User is not admin, redirect to login
usersStore.logout()
- next({ name: 'Login', query: { error: 'Acesso negado. Apenas administradores podem acessar esta área.' } })
+ next({ name: 'Login', query: { error: 'Access denied. Only administrators can access this area.' } })
return
}
} catch (e) {
// Invalid token, logout and redirect to login
usersStore.logout()
- next({ name: 'Login', query: { error: 'Token inválido.' } })
+ next({ name: 'Login', query: { error: 'Invalid token.' } })
return
}
} else {
diff --git a/src/main/resources/META-INF/resources/admin/src/services/api.js b/src/main/resources/META-INF/resources/admin/src/services/api.js
index abb2834..0711dde 100644
--- a/src/main/resources/META-INF/resources/admin/src/services/api.js
+++ b/src/main/resources/META-INF/resources/admin/src/services/api.js
@@ -33,8 +33,8 @@ api.interceptors.response.use(
localStorage.removeItem('auth_token')
localStorage.removeItem('user')
// Redirect to login if not already there
- if (window.location.pathname !== '/console/login') {
- window.location.href = '/console/login'
+ if (window.location.pathname !== '/dashboard/login') {
+ window.location.href = '/dashboard/login'
}
}
return Promise.reject(error)
diff --git a/src/main/resources/META-INF/resources/admin/src/stores/users.js b/src/main/resources/META-INF/resources/admin/src/stores/users.js
index d99c83c..46ef791 100644
--- a/src/main/resources/META-INF/resources/admin/src/stores/users.js
+++ b/src/main/resources/META-INF/resources/admin/src/stores/users.js
@@ -65,7 +65,7 @@ export const useUsersStore = defineStore('users', {
const response = await userApi.listUsers()
this.users = response.data || []
} catch (error) {
- this.error = error.response?.data?.message || error.message || 'Erro ao carregar usuários'
+ this.error = error.response?.data?.message || error.message || 'Failed to load users'
throw error
} finally {
this.loading = false
@@ -80,7 +80,7 @@ export const useUsersStore = defineStore('users', {
this.currentUser = response.data
return response.data
} catch (error) {
- this.error = error.response?.data?.message || error.message || 'Erro ao carregar usuário'
+ this.error = error.response?.data?.message || error.message || 'Failed to load user'
throw error
} finally {
this.loading = false
@@ -100,7 +100,7 @@ export const useUsersStore = defineStore('users', {
await this.fetchUsers()
return response.data
} catch (error) {
- this.error = error.response?.data?.message || error.message || 'Erro ao criar usuário'
+ this.error = error.response?.data?.message || error.message || 'Failed to create user'
throw error
} finally {
this.loading = false
@@ -128,7 +128,7 @@ export const useUsersStore = defineStore('users', {
await this.fetchUsers()
return response.data
} catch (error) {
- this.error = error.response?.data?.message || error.message || 'Erro ao atualizar usuário'
+ this.error = error.response?.data?.message || error.message || 'Failed to update user'
throw error
} finally {
this.loading = false
@@ -143,7 +143,7 @@ export const useUsersStore = defineStore('users', {
// Refresh users list
await this.fetchUsers()
} catch (error) {
- this.error = error.response?.data?.message || error.message || 'Erro ao deletar usuário'
+ this.error = error.response?.data?.message || error.message || 'Failed to delete user'
throw error
} finally {
this.loading = false
@@ -163,12 +163,12 @@ export const useUsersStore = defineStore('users', {
return authData
} else if (response.data?.requires2FA) {
// Handle 2FA requirement
- throw new Error('2FA é necessário para este usuário')
+ throw new Error('2FA is required for this user')
} else {
- throw new Error('Resposta de autenticação inválida')
+ throw new Error('Invalid authentication response')
}
} catch (error) {
- this.error = error.response?.data?.message || error.message || 'Erro ao fazer login'
+ this.error = error.response?.data?.message || error.message || 'Sign-in failed'
throw error
} finally {
this.loading = false
diff --git a/src/main/resources/META-INF/resources/admin/src/views/CreateUserView.vue b/src/main/resources/META-INF/resources/admin/src/views/CreateUserView.vue
index 01a3f95..6164def 100644
--- a/src/main/resources/META-INF/resources/admin/src/views/CreateUserView.vue
+++ b/src/main/resources/META-INF/resources/admin/src/views/CreateUserView.vue
@@ -5,7 +5,7 @@
mdi-account-plus
- Criar Novo Usuário
+ Create new user
mdi-arrow-left
- Voltar
+ Back
@@ -23,7 +23,7 @@
- Informação: O usuário receberá um e-mail com o código de validação após a criação.
+ Note: The user will receive an email with the validation code after creation.
- Criar Usuário
+ Create user
@@ -97,7 +97,7 @@
variant="text"
@click="snackbar.show = false"
>
- Fechar
+ Close
@@ -130,23 +130,23 @@ const snackbar = ref({
})
const nameRules = [
- v => !!v || 'Nome é obrigatório',
- v => (v && v.trim().length > 0) || 'Nome não pode estar vazio'
+ v => !!v || 'Name is required',
+ v => (v && v.trim().length > 0) || 'Name cannot be empty'
]
const emailRules = [
- v => !!v || 'E-mail é obrigatório',
- v => /.+@.+\..+/.test(v) || 'E-mail deve ser válido'
+ v => !!v || 'Email is required',
+ v => /.+@.+\..+/.test(v) || 'Email must be valid'
]
const passwordRules = [
- v => !!v || 'Senha é obrigatória',
- v => (v && v.length >= 8) || 'Senha deve ter pelo menos 8 caracteres'
+ v => !!v || 'Password is required',
+ v => (v && v.length >= 8) || 'Password must be at least 8 characters'
]
const confirmPasswordRules = [
- v => !!v || 'Confirmação de senha é obrigatória',
- v => v === formData.value.password || 'As senhas não coincidem'
+ v => !!v || 'Password confirmation is required',
+ v => v === formData.value.password || 'Passwords do not match'
]
const handleSubmit = async () => {
@@ -161,7 +161,7 @@ const handleSubmit = async () => {
password: formData.value.password
})
- showMessage('Usuário criado com sucesso!', 'success')
+ showMessage('User created successfully.', 'success')
// Reset form
formData.value = {
@@ -177,7 +177,7 @@ const handleSubmit = async () => {
router.push({ name: 'UsersList' })
}, 1500)
} catch (error) {
- showMessage(error.message || 'Erro ao criar usuário', 'error')
+ showMessage(error.message || 'Failed to create user', 'error')
} finally {
loading.value = false
}
diff --git a/src/main/resources/META-INF/resources/admin/src/views/EditUserView.vue b/src/main/resources/META-INF/resources/admin/src/views/EditUserView.vue
index e8b68dd..d847c68 100644
--- a/src/main/resources/META-INF/resources/admin/src/views/EditUserView.vue
+++ b/src/main/resources/META-INF/resources/admin/src/views/EditUserView.vue
@@ -5,7 +5,7 @@
mdi-account-edit
- Editar Usuário
+ Edit user
mdi-arrow-left
- Voltar
+ Back
@@ -30,7 +30,7 @@
- Para alterar a senha, preencha ambos os campos abaixo. Caso contrário, deixe em branco.
+ To change your password, fill in both fields below. Otherwise leave them blank.
- Atualizar Usuário
+ Update user
@@ -129,7 +129,7 @@
variant="text"
@click="snackbar.show = false"
>
- Fechar
+ Close
@@ -166,18 +166,18 @@ const snackbar = ref({
})
const nameRules = [
- v => !!v || 'Nome é obrigatório',
- v => (v && v.trim().length > 0) || 'Nome não pode estar vazio'
+ v => !!v || 'Name is required',
+ v => (v && v.trim().length > 0) || 'Name cannot be empty'
]
const newEmailRules = [
- v => !v || /.+@.+\..+/.test(v) || 'E-mail deve ser válido'
+ v => !v || /.+@.+\..+/.test(v) || 'Email must be valid'
]
const passwordRules = [
v => {
if (formData.value.newPassword && !v) {
- return 'Senha atual é obrigatória quando alterar senha'
+ return 'Current password is required when changing password'
}
return true
}
@@ -186,7 +186,7 @@ const passwordRules = [
const newPasswordRules = [
v => {
if (!v) return true // Optional
- if (v.length < 8) return 'Senha deve ter pelo menos 8 caracteres'
+ if (v.length < 8) return 'Password must be at least 8 characters'
return true
}
]
@@ -194,8 +194,8 @@ const newPasswordRules = [
const confirmPasswordRules = [
v => {
if (!formData.value.newPassword) return true
- if (!v) return 'Confirmação de senha é obrigatória'
- if (v !== formData.value.newPassword) return 'As senhas não coincidem'
+ if (!v) return 'Password confirmation is required'
+ if (v !== formData.value.newPassword) return 'Passwords do not match'
return true
}
]
@@ -205,7 +205,7 @@ const handleSubmit = async () => {
// Validate that if newPassword is provided, password must also be provided
if (formData.value.newPassword && !formData.value.password) {
- showMessage('A senha atual é obrigatória quando alterar a senha', 'error')
+ showMessage('Current password is required when changing password', 'error')
return
}
@@ -220,14 +220,14 @@ const handleSubmit = async () => {
newPassword: formData.value.newPassword || null
})
- showMessage('Usuário atualizado com sucesso!', 'success')
+ showMessage('User updated successfully.', 'success')
// Redirect to users list after a short delay
setTimeout(() => {
router.push({ name: 'UsersList' })
}, 1500)
} catch (error) {
- showMessage(error.message || 'Erro ao atualizar usuário', 'error')
+ showMessage(error.message || 'Failed to update user', 'error')
} finally {
loading.value = false
}
@@ -250,7 +250,7 @@ onMounted(async () => {
formData.value.name = user.name || ''
formData.value.currentEmail = user.email || email
} catch (error) {
- showMessage(error.message || 'Erro ao carregar usuário', 'error')
+ showMessage(error.message || 'Failed to load user', 'error')
setTimeout(() => {
router.push({ name: 'UsersList' })
}, 2000)
diff --git a/src/main/resources/META-INF/resources/admin/src/views/LoginView.vue b/src/main/resources/META-INF/resources/admin/src/views/LoginView.vue
index a1f76b0..7e76282 100644
--- a/src/main/resources/META-INF/resources/admin/src/views/LoginView.vue
+++ b/src/main/resources/META-INF/resources/admin/src/views/LoginView.vue
@@ -4,7 +4,7 @@
mdi-shield-account
- Orion Users Console
+ Orion Users
@@ -23,7 +23,7 @@
- Entrar
+ Sign in
- Atenção: Apenas usuários com role "admin" podem acessar esta área.
+ Notice: Only users with the "admin" role can access this area.
@@ -81,13 +81,13 @@ const loading = ref(false)
const errorMessage = ref('')
const emailRules = [
- v => !!v || 'E-mail é obrigatório',
- v => /.+@.+\..+/.test(v) || 'E-mail deve ser válido'
+ v => !!v || 'Email is required',
+ v => /.+@.+\..+/.test(v) || 'Email must be valid'
]
const passwordRules = [
- v => !!v || 'Senha é obrigatória',
- v => (v && v.length >= 8) || 'Senha deve ter pelo menos 8 caracteres'
+ v => !!v || 'Password is required',
+ v => (v && v.length >= 8) || 'Password must be at least 8 characters'
]
const handleLogin = async () => {
@@ -102,7 +102,7 @@ const handleLogin = async () => {
// Verifica se recebemos o token com sucesso
if (!authData || !authData.token) {
- errorMessage.value = 'Erro ao fazer login. Token não recebido.'
+ errorMessage.value = 'Sign-in failed. No token received.'
loading.value = false
return
}
@@ -115,32 +115,28 @@ const handleLogin = async () => {
if (!groups.includes('admin')) {
// Usuário não é admin, faz logout e mostra erro
usersStore.logout()
- errorMessage.value = 'Acesso negado. Apenas administradores podem acessar esta área.'
+ errorMessage.value = 'Access denied. Only administrators can access this area.'
loading.value = false
return
}
- // Login bem-sucedido e usuário é admin - redireciona para /console
- // Força o redirecionamento usando window.location para garantir que funcione
- // mesmo se o router guard estiver bloqueando
const redirectPath = route.query.redirect
? decodeURIComponent(route.query.redirect)
- : '/console'
+ : '/dashboard'
- // Usa window.location para garantir o redirecionamento
- window.location.href = redirectPath.startsWith('/console')
+ window.location.href = redirectPath.startsWith('/dashboard')
? redirectPath
- : `/console${redirectPath}`
+ : `/dashboard${redirectPath}`
} catch (e) {
// Erro ao decodificar token
- console.error('Erro ao decodificar token:', e)
+ console.error('Failed to decode token:', e)
usersStore.logout()
- errorMessage.value = 'Token inválido. Tente fazer login novamente.'
+ errorMessage.value = 'Invalid token. Please sign in again.'
loading.value = false
}
} catch (error) {
// Erro no login (credenciais inválidas, etc)
- errorMessage.value = error.response?.data?.message || error.message || 'Erro ao fazer login. Verifique suas credenciais.'
+ errorMessage.value = error.response?.data?.message || error.message || 'Sign-in failed. Check your credentials.'
loading.value = false
}
}
diff --git a/src/main/resources/META-INF/resources/admin/src/views/UserDetailView.vue b/src/main/resources/META-INF/resources/admin/src/views/UserDetailView.vue
index 2b3ff49..768af20 100644
--- a/src/main/resources/META-INF/resources/admin/src/views/UserDetailView.vue
+++ b/src/main/resources/META-INF/resources/admin/src/views/UserDetailView.vue
@@ -5,7 +5,7 @@
mdi-account-details
- Detalhes do Usuário
+ User details
mdi-arrow-left
- Voltar
+ Back
@@ -32,18 +32,18 @@
mdi-information
- Informações Básicas
+ Basic information
- Nome: {{ user.name || 'N/A' }}
+ Name: {{ user.name || 'N/A' }}
- E-mail: {{ user.email || 'N/A' }}
+ Email: {{ user.email || 'N/A' }}
@@ -54,13 +54,13 @@
- E-mail Validado:
+ Email validated:
- {{ user.emailValid ? 'Sim' : 'Não' }}
+ {{ user.emailValid ? 'Yes' : 'No' }}
@@ -72,43 +72,43 @@
mdi-shield-lock
- Autenticação de Dois Fatores (2FA)
+ Two-factor authentication (2FA)
- 2FA Ativado:
+ 2FA enabled:
- {{ user.using2FA ? 'Sim' : 'Não' }}
+ {{ user.using2FA ? 'Yes' : 'No' }}
- Requer 2FA para Login Básico:
+ Require 2FA for basic login:
- {{ user.require2FAForBasicLogin ? 'Sim' : 'Não' }}
+ {{ user.require2FAForBasicLogin ? 'Yes' : 'No' }}
- Requer 2FA para Login Social:
+ Require 2FA for social login:
- {{ user.require2FAForSocialLogin ? 'Sim' : 'Não' }}
+ {{ user.require2FAForSocialLogin ? 'Yes' : 'No' }}
@@ -140,7 +140,7 @@
mdi-cog
- Ações
+ Actions
- Editar Usuário
+ Edit user
- Deletar Usuário
+ Delete user