diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json
index a664657..7bf4337 100644
--- a/frontend/src/locales/en.json
+++ b/frontend/src/locales/en.json
@@ -33,8 +33,9 @@
"sshSuccess": "SSH connection successful!",
"sshFailed": "SSH connection failed",
"proxmoxUrl": "Proxmox URL",
- "proxmoxToken": "Proxmox API token",
- "proxmoxTokenHint": "Format: PVEAPIToken=user{'@'}realm!tokenid=secret",
+ "proxmoxTokenId": "Token ID",
+ "proxmoxTokenSecret": "Token secret",
+ "proxmoxTokenHint": "Token ID: enzo{'@'}pam!panel — Secret: UUID generated by Proxmox",
"back": "Back",
"next": "Next",
"finish": "Complete installation",
@@ -115,7 +116,9 @@
"sshUsername": "SSH username",
"sshPassword": "SSH password",
"proxmoxUrl": "Proxmox URL",
- "proxmoxToken": "Proxmox API token",
+ "proxmoxTokenId": "Proxmox Token ID",
+ "proxmoxTokenIdPlaceholder": "enzo@pam!panel",
+ "proxmoxTokenSecret": "Token secret",
"secretPlaceholder": "Leave empty to keep current value",
"darkMode": "Dark mode",
"sidebarPosition": "Sidebar position",
diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json
index 13192ee..52ee547 100644
--- a/frontend/src/locales/fr.json
+++ b/frontend/src/locales/fr.json
@@ -33,8 +33,9 @@
"sshSuccess": "Connexion SSH réussie !",
"sshFailed": "Connexion SSH échouée",
"proxmoxUrl": "URL Proxmox",
- "proxmoxToken": "Token API Proxmox",
- "proxmoxTokenHint": "Format : PVEAPIToken=user{'@'}realm!tokenid=secret",
+ "proxmoxTokenId": "Token ID",
+ "proxmoxTokenSecret": "Secret du token",
+ "proxmoxTokenHint": "Token ID : enzo{'@'}pam!panel — Secret : uuid généré par Proxmox",
"back": "Retour",
"next": "Suivant",
"finish": "Terminer l'installation",
@@ -115,7 +116,9 @@
"sshUsername": "Utilisateur SSH",
"sshPassword": "Mot de passe SSH",
"proxmoxUrl": "URL Proxmox",
- "proxmoxToken": "Token API Proxmox",
+ "proxmoxTokenId": "Token ID Proxmox",
+ "proxmoxTokenIdPlaceholder": "enzo@pam!panel",
+ "proxmoxTokenSecret": "Secret du token",
"secretPlaceholder": "Laisser vide pour ne pas modifier",
"darkMode": "Mode sombre",
"sidebarPosition": "Position de la sidebar",
diff --git a/frontend/src/views/Install.vue b/frontend/src/views/Install.vue
index daf2f1d..d3111a3 100644
--- a/frontend/src/views/Install.vue
+++ b/frontend/src/views/Install.vue
@@ -98,8 +98,12 @@
-
-
+
+
+
+
+
+
{{ t('install.proxmoxTokenHint') }}
@@ -187,7 +191,8 @@ const form = ref({
sshUsername: 'enzo',
sshPassword: '',
proxmoxUrl: 'https://10.0.0.1:8006',
- proxmoxToken: '',
+ proxmoxTokenId: '',
+ proxmoxTokenSecret: '',
})
const canProceed = computed(() => {
@@ -264,7 +269,9 @@ async function finalize() {
ssh_username: form.value.sshUsername,
ssh_password: form.value.sshPassword,
proxmox_url: form.value.proxmoxUrl,
- proxmox_token: form.value.proxmoxToken,
+ proxmox_token: (form.value.proxmoxTokenId && form.value.proxmoxTokenSecret)
+ ? `PVEAPIToken=${form.value.proxmoxTokenId}=${form.value.proxmoxTokenSecret}`
+ : '',
}),
})
diff --git a/frontend/src/views/Settings.vue b/frontend/src/views/Settings.vue
index ef5ae2c..5fef691 100644
--- a/frontend/src/views/Settings.vue
+++ b/frontend/src/views/Settings.vue
@@ -64,8 +64,12 @@
-
-
+
+
+
+
+
+
@@ -184,7 +188,8 @@ const settings = ref({
// Champs sensibles — write-only, jamais retournés par l'API
const secrets = ref({
ssh_password: '',
- proxmox_token: '',
+ proxmox_token_id: '',
+ proxmox_token_secret: '',
})
onMounted(async () => {
@@ -225,13 +230,22 @@ async function saveSettings() {
saving.value = true
saveSuccess.value = false
- const allEntries: [string, string][] = [
- ...Object.entries(settings.value),
- // Secrets : envoyés seulement si non-vides (le backend ignore les valeurs vides)
- ...Object.entries(secrets.value).filter(([, v]) => v !== ''),
- ]
+ const entries: [string, string][] = [...Object.entries(settings.value)]
- for (const [key, value] of allEntries) {
+ // Mot de passe SSH — envoyé seulement si non-vide
+ if (secrets.value.ssh_password) {
+ entries.push(['ssh_password', secrets.value.ssh_password])
+ }
+
+ // Token Proxmox — assemblé si les deux champs sont remplis
+ if (secrets.value.proxmox_token_id && secrets.value.proxmox_token_secret) {
+ entries.push([
+ 'proxmox_token',
+ `PVEAPIToken=${secrets.value.proxmox_token_id}=${secrets.value.proxmox_token_secret}`,
+ ])
+ }
+
+ for (const [key, value] of entries) {
await fetch(`/api/settings/${key}`, {
method: 'PUT',
headers: {
@@ -244,7 +258,8 @@ async function saveSettings() {
// Vider les champs secrets après sauvegarde
secrets.value.ssh_password = ''
- secrets.value.proxmox_token = ''
+ secrets.value.proxmox_token_id = ''
+ secrets.value.proxmox_token_secret = ''
saving.value = false
saveSuccess.value = true