fix: add Azure provider validation for onboarding workflow

- Add azureApiKey to SECRET_STATE_KEYS for proper configuration detection
- Add Azure validation case in validateModelsAndKeysProvided
- Add validation translations for azureResourceName and azureDeploymentName across all 18 locales

This fixes the issue where the Finish button does nothing when setting up Azure provider in the onboarding workflow.
This commit is contained in:
Hannes Rudolph 2026-02-03 15:41:44 -07:00
parent 1a73f4e9ef
commit 7ac28ac712
20 changed files with 66 additions and 18 deletions

View file

@ -295,6 +295,7 @@ export const SECRET_STATE_KEYS = [
"ioIntelligenceApiKey",
"vercelAiGatewayApiKey",
"basetenApiKey",
"azureApiKey",
] as const
// Global secrets that are part of GlobalSettings (not ProviderSettings)

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "El proveïdor '{{provider}}' no està permès per la vostra organització",
"modelNotAllowed": "El model '{{model}}' no està permès per al proveïdor '{{provider}}' per la vostra organització",
"profileInvalid": "Aquest perfil conté un proveïdor o model que no està permès per la vostra organització",
"qwenCodeOauthPath": "Has de proporcionar una ruta vàlida de credencials OAuth"
"qwenCodeOauthPath": "Has de proporcionar una ruta vàlida de credencials OAuth",
"azureResourceName": "Has de proporcionar un nom de recurs d'Azure.",
"azureDeploymentName": "Has de proporcionar un nom de desplegament d'Azure."
},
"placeholders": {
"apiKey": "Introduïu la clau API...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "Anbieter '{{provider}}' ist von deiner Organisation nicht erlaubt",
"modelNotAllowed": "Modell '{{model}}' ist für Anbieter '{{provider}}' von deiner Organisation nicht erlaubt",
"profileInvalid": "Dieses Profil enthält einen Anbieter oder ein Modell, das von deiner Organisation nicht erlaubt ist",
"qwenCodeOauthPath": "Du musst einen gültigen OAuth-Anmeldedaten-Pfad angeben"
"qwenCodeOauthPath": "Du musst einen gültigen OAuth-Anmeldedaten-Pfad angeben",
"azureResourceName": "Du musst einen Azure-Ressourcennamen angeben.",
"azureDeploymentName": "Du musst einen Azure-Bereitstellungsnamen angeben."
},
"placeholders": {
"apiKey": "API-Schlüssel eingeben...",

View file

@ -1021,7 +1021,9 @@
"providerNotAllowed": "Provider '{{provider}}' is not allowed by your organization",
"modelNotAllowed": "Model '{{model}}' is not allowed for provider '{{provider}}' by your organization",
"profileInvalid": "This profile contains a provider or model that is not allowed by your organization",
"qwenCodeOauthPath": "You must provide a valid OAuth credentials path."
"qwenCodeOauthPath": "You must provide a valid OAuth credentials path.",
"azureResourceName": "You must provide an Azure resource name.",
"azureDeploymentName": "You must provide an Azure deployment name."
},
"placeholders": {
"apiKey": "Enter API Key...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "El proveedor '{{provider}}' no está permitido por su organización",
"modelNotAllowed": "El modelo '{{model}}' no está permitido para el proveedor '{{provider}}' por su organización",
"profileInvalid": "Este perfil contiene un proveedor o modelo que no está permitido por su organización",
"qwenCodeOauthPath": "Debes proporcionar una ruta válida de credenciales OAuth"
"qwenCodeOauthPath": "Debes proporcionar una ruta válida de credenciales OAuth",
"azureResourceName": "Debes proporcionar un nombre de recurso de Azure.",
"azureDeploymentName": "Debes proporcionar un nombre de despliegue de Azure."
},
"placeholders": {
"apiKey": "Ingrese clave API...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "Le fournisseur '{{provider}}' n'est pas autorisé par votre organisation",
"modelNotAllowed": "Le modèle '{{model}}' n'est pas autorisé pour le fournisseur '{{provider}}' par votre organisation",
"profileInvalid": "Ce profil contient un fournisseur ou un modèle qui n'est pas autorisé par votre organisation",
"qwenCodeOauthPath": "Tu dois fournir un chemin valide pour les identifiants OAuth"
"qwenCodeOauthPath": "Tu dois fournir un chemin valide pour les identifiants OAuth",
"azureResourceName": "Tu dois fournir un nom de ressource Azure.",
"azureDeploymentName": "Tu dois fournir un nom de déploiement Azure."
},
"placeholders": {
"apiKey": "Saisissez la clé API...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "प्रदाता '{{provider}}' आपके संगठन द्वारा अनुमत नहीं है",
"modelNotAllowed": "मॉडल '{{model}}' प्रदाता '{{provider}}' के लिए आपके संगठन द्वारा अनुमत नहीं है",
"profileInvalid": "इस प्रोफ़ाइल में एक प्रदाता या मॉडल शामिल है जो आपके संगठन द्वारा अनुमत नहीं है",
"qwenCodeOauthPath": "आपको एक वैध OAuth क्रेडेंशियल पथ प्रदान करना होगा"
"qwenCodeOauthPath": "आपको एक वैध OAuth क्रेडेंशियल पथ प्रदान करना होगा",
"azureResourceName": "आपको एक Azure संसाधन नाम प्रदान करना होगा।",
"azureDeploymentName": "आपको एक Azure परिनियोजन नाम प्रदान करना होगा।"
},
"placeholders": {
"apiKey": "API कुंजी दर्ज करें...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "Provider '{{provider}}' tidak diizinkan oleh organisasi kamu",
"modelNotAllowed": "Model '{{model}}' tidak diizinkan untuk provider '{{provider}}' oleh organisasi kamu",
"profileInvalid": "Profil ini berisi provider atau model yang tidak diizinkan oleh organisasi kamu",
"qwenCodeOauthPath": "Kamu harus memberikan jalur kredensial OAuth yang valid"
"qwenCodeOauthPath": "Kamu harus memberikan jalur kredensial OAuth yang valid",
"azureResourceName": "Kamu harus memberikan nama sumber daya Azure.",
"azureDeploymentName": "Kamu harus memberikan nama deployment Azure."
},
"placeholders": {
"apiKey": "Masukkan API Key...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "Il fornitore '{{provider}}' non è consentito dalla tua organizzazione",
"modelNotAllowed": "Il modello '{{model}}' non è consentito per il fornitore '{{provider}}' dalla tua organizzazione.",
"profileInvalid": "Questo profilo contiene un fornitore o un modello non consentito dalla tua organizzazione.",
"qwenCodeOauthPath": "Devi fornire un percorso valido per le credenziali OAuth"
"qwenCodeOauthPath": "Devi fornire un percorso valido per le credenziali OAuth",
"azureResourceName": "Devi fornire un nome risorsa Azure.",
"azureDeploymentName": "Devi fornire un nome distribuzione Azure."
},
"placeholders": {
"apiKey": "Inserisci chiave API...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "プロバイダー「{{provider}}」は組織によって許可されていません",
"modelNotAllowed": "モデル「{{model}}」はプロバイダー「{{provider}}」に対して組織によって許可されていません",
"profileInvalid": "このプロファイルには、組織によって許可されていないプロバイダーまたはモデルが含まれています",
"qwenCodeOauthPath": "有効なOAuth認証情報のパスを提供する必要があります"
"qwenCodeOauthPath": "有効なOAuth認証情報のパスを提供する必要があります",
"azureResourceName": "Azureリソース名を入力してください。",
"azureDeploymentName": "Azureデプロイメント名を入力してください。"
},
"placeholders": {
"apiKey": "API キーを入力...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "제공자 '{{provider}}'는 조직에서 허용되지 않습니다",
"modelNotAllowed": "모델 '{{model}}'은 제공자 '{{provider}}'에 대해 조직에서 허용되지 않습니다",
"profileInvalid": "이 프로필에는 조직에서 허용되지 않는 제공자 또는 모델이 포함되어 있습니다",
"qwenCodeOauthPath": "유효한 OAuth 자격 증명 경로를 제공해야 합니다"
"qwenCodeOauthPath": "유효한 OAuth 자격 증명 경로를 제공해야 합니다",
"azureResourceName": "Azure 리소스 이름을 입력해야 합니다.",
"azureDeploymentName": "Azure 배포 이름을 입력해야 합니다."
},
"placeholders": {
"apiKey": "API 키 입력...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "Provider '{{provider}}' is niet toegestaan door je organisatie",
"modelNotAllowed": "Model '{{model}}' is niet toegestaan voor provider '{{provider}}' door je organisatie",
"profileInvalid": "Dit profiel bevat een provider of model dat niet is toegestaan door je organisatie",
"qwenCodeOauthPath": "Je moet een geldig OAuth-referentiepad opgeven"
"qwenCodeOauthPath": "Je moet een geldig OAuth-referentiepad opgeven",
"azureResourceName": "Je moet een Azure-resourcenaam opgeven.",
"azureDeploymentName": "Je moet een Azure-implementatienaam opgeven."
},
"placeholders": {
"apiKey": "Voer API-sleutel in...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "Dostawca '{{provider}}' nie jest dozwolony przez Twoją organizację",
"modelNotAllowed": "Model '{{model}}' nie jest dozwolony dla dostawcy '{{provider}}' przez Twoją organizację",
"profileInvalid": "Ten profil zawiera dostawcę lub model, który nie jest dozwolony przez Twoją organizację",
"qwenCodeOauthPath": "Musisz podać prawidłową ścieżkę do poświadczeń OAuth"
"qwenCodeOauthPath": "Musisz podać prawidłową ścieżkę do poświadczeń OAuth",
"azureResourceName": "Musisz podać nazwę zasobu Azure.",
"azureDeploymentName": "Musisz podać nazwę wdrożenia Azure."
},
"placeholders": {
"apiKey": "Wprowadź klucz API...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "O provedor '{{provider}}' não é permitido pela sua organização",
"modelNotAllowed": "O modelo '{{model}}' não é permitido para o provedor '{{provider}}' pela sua organização",
"profileInvalid": "Este perfil contém um provedor ou modelo que não é permitido pela sua organização",
"qwenCodeOauthPath": "Você deve fornecer um caminho válido de credenciais OAuth"
"qwenCodeOauthPath": "Você deve fornecer um caminho válido de credenciais OAuth",
"azureResourceName": "Você deve fornecer um nome de recurso do Azure.",
"azureDeploymentName": "Você deve fornecer um nome de implantação do Azure."
},
"placeholders": {
"apiKey": "Digite a chave API...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "Провайдер '{{provider}}' не разрешен вашей организацией",
"modelNotAllowed": "Модель '{{model}}' не разрешена для провайдера '{{provider}}' вашей организацией",
"profileInvalid": "Этот профиль содержит провайдера или модель, которые не разрешены вашей организацией",
"qwenCodeOauthPath": "Вы должны указать допустимый путь к учетным данным OAuth"
"qwenCodeOauthPath": "Вы должны указать допустимый путь к учетным данным OAuth",
"azureResourceName": "Вы должны указать имя ресурса Azure.",
"azureDeploymentName": "Вы должны указать имя развёртывания Azure."
},
"placeholders": {
"apiKey": "Введите API-ключ...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "Sağlayıcı '{{provider}}' kuruluşunuz tarafından izin verilmiyor",
"modelNotAllowed": "Model '{{model}}' sağlayıcı '{{provider}}' için kuruluşunuz tarafından izin verilmiyor",
"profileInvalid": "Bu profil, kuruluşunuz tarafından izin verilmeyen bir sağlayıcı veya model içeriyor",
"qwenCodeOauthPath": "Geçerli bir OAuth kimlik bilgileri yolu sağlamalısın"
"qwenCodeOauthPath": "Geçerli bir OAuth kimlik bilgileri yolu sağlamalısın",
"azureResourceName": "Bir Azure kaynak adı sağlamalısın.",
"azureDeploymentName": "Bir Azure dağıtım adı sağlamalısın."
},
"placeholders": {
"apiKey": "API anahtarını girin...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "Nhà cung cấp '{{provider}}' không được phép bởi tổ chức của bạn",
"modelNotAllowed": "Mô hình '{{model}}' không được phép cho nhà cung cấp '{{provider}}' bởi tổ chức của bạn",
"profileInvalid": "Hồ sơ này chứa một nhà cung cấp hoặc mô hình không được phép bởi tổ chức của bạn",
"qwenCodeOauthPath": "Bạn phải cung cấp đường dẫn thông tin xác thực OAuth hợp lệ"
"qwenCodeOauthPath": "Bạn phải cung cấp đường dẫn thông tin xác thực OAuth hợp lệ",
"azureResourceName": "Bạn phải cung cấp tên tài nguyên Azure.",
"azureDeploymentName": "Bạn phải cung cấp tên triển khai Azure."
},
"placeholders": {
"apiKey": "Nhập khóa API...",

View file

@ -958,7 +958,9 @@
"providerNotAllowed": "提供商 '{{provider}}' 不允许用于您的组织",
"modelNotAllowed": "模型 '{{model}}' 不允许用于提供商 '{{provider}}',您的组织不允许",
"profileInvalid": "此配置文件包含您的组织不允许的提供商或模型",
"qwenCodeOauthPath": "您必须提供有效的 OAuth 凭证路径"
"qwenCodeOauthPath": "您必须提供有效的 OAuth 凭证路径",
"azureResourceName": "您必须提供 Azure 资源名称。",
"azureDeploymentName": "您必须提供 Azure 部署名称。"
},
"placeholders": {
"apiKey": "请输入 API 密钥...",

View file

@ -968,7 +968,9 @@
"providerNotAllowed": "供應商 '{{provider}}' 不允許用於您的組織。",
"modelNotAllowed": "模型 '{{model}}' 不允許用於供應商 '{{provider}}',此設定已被組織禁止",
"profileInvalid": "此設定檔包含您的組織不允許的供應商或模型",
"qwenCodeOauthPath": "您必須提供有效的 OAuth 憑證路徑"
"qwenCodeOauthPath": "您必須提供有效的 OAuth 憑證路徑",
"azureResourceName": "您必須提供 Azure 資源名稱。",
"azureDeploymentName": "您必須提供 Azure 部署名稱。"
},
"placeholders": {
"apiKey": "請輸入 API 金鑰...",

View file

@ -155,6 +155,17 @@ function validateModelsAndKeysProvided(apiConfiguration: ProviderSettings): stri
return i18next.t("settings:validation.apiKey")
}
break
case "azure":
if (!apiConfiguration.azureApiKey) {
return i18next.t("settings:validation.apiKey")
}
if (!apiConfiguration.azureResourceName) {
return i18next.t("settings:validation.azureResourceName")
}
if (!apiConfiguration.azureDeploymentName) {
return i18next.t("settings:validation.azureDeploymentName")
}
break
}
return undefined