mirror of
https://github.com/zitadel/zitadel.git
synced 2024-12-12 02:54:20 +00:00
fix: meaningful error messages for domain validation (#6677)
* feat: meaningful error messages for domain validation * fix: duplicated error code and fix some org codes * fix: add @peintnermax i18n suggestions --------- Co-authored-by: Elio Bischof <elio@zitadel.com>
This commit is contained in:
parent
89fffd6bd6
commit
e66d476c47
@ -1,6 +1,7 @@
|
||||
package http
|
||||
|
||||
import (
|
||||
errorsAs "errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net"
|
||||
@ -36,6 +37,9 @@ func ValidateDomainHTTP(domain, token, verifier string) error {
|
||||
return errors.ThrowInternal(err, "HTTP-BH42h", "Errors.Internal")
|
||||
}
|
||||
if resp.StatusCode != 200 {
|
||||
if resp.StatusCode == 404 {
|
||||
return errors.ThrowNotFound(err, "ORG-F4zhw", "Errors.Org.DomainVerificationHTTPNotFound")
|
||||
}
|
||||
return errors.ThrowInternal(err, "HTTP-G2zsw", "Errors.Internal")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
@ -46,12 +50,21 @@ func ValidateDomainHTTP(domain, token, verifier string) error {
|
||||
if string(body) == verifier {
|
||||
return nil
|
||||
}
|
||||
return errors.ThrowInvalidArgument(err, "HTTP-GH422", "Errors.Internal")
|
||||
return errors.ThrowNotFound(err, "ORG-GH422", "Errors.Org.DomainVerificationHTTPNoMatch")
|
||||
}
|
||||
|
||||
func ValidateDomainDNS(domain, verifier string) error {
|
||||
txtRecords, err := net.LookupTXT(tokenUrlDNS(domain))
|
||||
if err != nil {
|
||||
var dnsError *net.DNSError
|
||||
if errorsAs.As(err, &dnsError) {
|
||||
if dnsError.IsNotFound {
|
||||
return errors.ThrowNotFound(err, "ORG-G241f", "Errors.Org.DomainVerificationTXTNotFound")
|
||||
}
|
||||
if dnsError.IsTimeout {
|
||||
return errors.ThrowNotFound(err, "ORG-K563l", "Errors.Org.DomainVerificationTimeout")
|
||||
}
|
||||
}
|
||||
return errors.ThrowInternal(err, "HTTP-Hwsw2", "Errors.Internal")
|
||||
}
|
||||
|
||||
@ -60,7 +73,7 @@ func ValidateDomainDNS(domain, verifier string) error {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return errors.ThrowInvalidArgument(err, "HTTP-G241f", "Errors.Internal")
|
||||
return errors.ThrowNotFound(err, "ORG-G28if", "Errors.Org.DomainVerificationTXTNoMatch")
|
||||
}
|
||||
|
||||
func TokenUrl(domain, token string, checkType CheckType) (string, error) {
|
||||
|
@ -213,9 +213,11 @@ func (c *Commands) ValidateOrgDomain(ctx context.Context, orgDomain *domain.OrgD
|
||||
return writeModelToObjectDetails(&domainWriteModel.WriteModel), nil
|
||||
}
|
||||
events = append(events, org.NewDomainVerificationFailedEvent(ctx, orgAgg, orgDomain.Domain))
|
||||
_, err = c.eventstore.Push(ctx, events...)
|
||||
logging.LogWithFields("ORG-dhTE", "orgID", orgAgg.ID, "domain", orgDomain.Domain).OnError(err).Error("NewDomainVerificationFailedEvent push failed")
|
||||
return nil, errors.ThrowInvalidArgument(err, "ORG-GH3s", "Errors.Org.DomainVerificationFailed")
|
||||
|
||||
_, errPush := c.eventstore.Push(ctx, events...)
|
||||
logging.LogWithFields("ORG-dhTE", "orgID", orgAgg.ID, "domain", orgDomain.Domain).OnError(errPush).Error("NewDomainVerificationFailedEvent push failed")
|
||||
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func (c *Commands) SetPrimaryOrgDomain(ctx context.Context, orgDomain *domain.OrgDomain) (*domain.ObjectDetails, error) {
|
||||
|
@ -62,7 +62,7 @@ Errors:
|
||||
DomainNotAllowedAsUsername: Домейнът вече е резервиран и не може да се използва
|
||||
AlreadyInactive: Потребителят вече е неактивен
|
||||
NotInactive: Потребителят не е неактивен
|
||||
CantDeactivateInitial: 'Потребител с начално състояние може да бъде изтрит, но не и деактивиран'
|
||||
CantDeactivateInitial: "Потребител с начално състояние може да бъде изтрит, но не и деактивиран"
|
||||
ShouldBeActiveOrInitial: Потребителят не е активен или начален
|
||||
AlreadyInitialised: Потребителят вече е инициализиран
|
||||
NotInitialised: Потребителят все още не е инициализиран
|
||||
@ -184,6 +184,11 @@ Errors:
|
||||
DomainVerificationTypeInvalid: Типът проверка на домейна е невалиден
|
||||
DomainVerificationMissing: Проверката на домейна все още не е започнала
|
||||
DomainVerificationFailed: Неуспешна проверка на домейна
|
||||
DomainVerificationTXTNotFound: TXT записът _zitadel-challenge не беше намерен за вашия домейн. Проверете дали сте го добавили към вашия DNS сървър или изчакайте, докато новият запис бъде разпространен
|
||||
DomainVerificationTXTNoMatch: TXT записът _zitadel-challenge е намерен за вашия домейн, но не съдържа правилния текст на токена. Проверете дали сте добавили правилния токен към вашия DNS сървър или изчакайте, докато новият запис бъде разпространен
|
||||
DomainVerificationHTTPNotFound: Файлът, съдържащ предизвикателството, не е намерен в очаквания URL адрес. Проверете дали сте качили файла на правилното място с разрешения за четене
|
||||
DomainVerificationHTTPNoMatch: Файлът, съдържащ предизвикателството, е намерен в очаквания URL адрес, но не съдържа правилния текст на токена. Проверете съдържанието му
|
||||
DomainVerificationTimeout: Имаше изчакване при запитване до DNS сървъра
|
||||
PrimaryDomainNotDeletable: Основният домейн не трябва да се изтрива
|
||||
DomainNotFound: Домейнът не е намерен
|
||||
MemberIDMissing: Липсва ID на член
|
||||
@ -198,7 +203,7 @@ Errors:
|
||||
IdpIsNotOIDC: IDP конфигурацията не е от тип oidc
|
||||
Domain:
|
||||
AlreadyExists: Домейнът вече съществува
|
||||
InvalidCharacter: 'Само буквено-цифрови знаци, . '
|
||||
InvalidCharacter: "Само буквено-цифрови знаци, . "
|
||||
IDP:
|
||||
InvalidSearchQuery: Невалидна заявка за търсене
|
||||
ClientIDMissing: Липсва ClientID
|
||||
@ -838,7 +843,7 @@ EventTypes:
|
||||
added: Вторият фактор е добавен към правилата за влизане
|
||||
removed: Вторият фактор е премахнат от правилата за влизане
|
||||
multifactor:
|
||||
added: 'Много фактор, добавен към правилата за влизане'
|
||||
added: "Много фактор, добавен към правилата за влизане"
|
||||
removed: Мултифакторът е премахнат от правилата за влизане
|
||||
password:
|
||||
complexity:
|
||||
|
@ -182,6 +182,11 @@ Errors:
|
||||
DomainVerificationTypeInvalid: Verifikationstyp der Domäne ist ungültig
|
||||
DomainVerificationMissing: Verifikation der Domäne noch nicht erstellt
|
||||
DomainVerificationFailed: Verifikation der Domäne ist fehlgeschlagen
|
||||
DomainVerificationTXTNotFound: Der TXT-Eintrag _zitadel-challenge wurde für Ihre Domain nicht gefunden. Überprüfen Sie, ob Sie ihn zu Ihrem DNS-Server hinzugefügt haben, oder warten Sie, bis der neue Eintrag verbreitet wird
|
||||
DomainVerificationTXTNoMatch: Der TXT-Eintrag _zitadel-challenge wurde für Ihre Domain gefunden, enthält jedoch nicht den richtigen Token-Text. Überprüfen Sie, ob Sie das richtige Token zu Ihrem DNS-Server hinzugefügt haben, oder warten Sie, bis der neue Eintrag verbreitet wird
|
||||
DomainVerificationHTTPNotFound: Das File der Challenge wurde unter der erwarteten URL nicht gefunden. Überprüfen Sie, ob Sie die Datei mit Leseberechtigungen an der richtigen Stelle hochgeladen haben
|
||||
DomainVerificationHTTPNoMatch: Das File der Challenge wurde in der erwarteten URL gefunden, enthält jedoch nicht den richtigen Token-Text. Überprüfen Sie den Inhalt
|
||||
DomainVerificationTimeout: There was a timeout querying the DNS server.
|
||||
PrimaryDomainNotDeletable: Primäre Domäne kann nicht gelöscht werden
|
||||
DomainNotFound: Domäne konnte nicht gefunden werden
|
||||
MemberIDMissing: Member ID fehlt
|
||||
@ -527,7 +532,7 @@ EventTypes:
|
||||
user:
|
||||
added: Benutzer hinzugefügt
|
||||
selfregistered: Benutzer hat sich selbst registriert
|
||||
initialization:
|
||||
initialization:
|
||||
code:
|
||||
added: Initialisierungscode generiert
|
||||
sent: Initialisierungscode versendet
|
||||
@ -569,7 +574,7 @@ EventTypes:
|
||||
avatar:
|
||||
added: Avatar hinzugefügt
|
||||
removed: Avatar entfernt
|
||||
initialization:
|
||||
initialization:
|
||||
code:
|
||||
added: Initialisierungscode generiert
|
||||
sent: Initialisierungscode versendet
|
||||
@ -1225,9 +1230,9 @@ Action:
|
||||
Flow:
|
||||
Type:
|
||||
Unspecified: Unspezifiziert
|
||||
ExternalAuthentication: Externe Authentifizierung
|
||||
ExternalAuthentication: Externe Authentifizierung
|
||||
CustomiseToken: Token ergänzen
|
||||
InternalAuthentication: Interne Authentifizierung
|
||||
InternalAuthentication: Interne Authentifizierung
|
||||
CustomizeSAMLResponse: SAMLResponse ergänzen
|
||||
TriggerType:
|
||||
Unspecified: Unspezifiziert
|
||||
|
@ -182,6 +182,11 @@ Errors:
|
||||
DomainVerificationTypeInvalid: Domain verification type is invalid
|
||||
DomainVerificationMissing: Domain verification not yet started
|
||||
DomainVerificationFailed: Domain verification failed
|
||||
DomainVerificationTXTNotFound: The _zitadel-challenge TXT record was not found for your domain. Check that you've added it to your DNS server or wait till the new record is propagated
|
||||
DomainVerificationTXTNoMatch: The _zitadel-challenge TXT record has been found for your domain but it doesn't contain the right token text. Check that you've added the right token to your DNS server or wait till the new record is propagated
|
||||
DomainVerificationHTTPNotFound: The file containing the challenge was not found in the expected URL. Check that you've uploaded the file in the right place with read permissions
|
||||
DomainVerificationHTTPNoMatch: The file containing the challenge has been found in the expected URL but it doesn't contain the right token text. Check its content
|
||||
DomainVerificationTimeout: There was a timeout querying the DNS server
|
||||
PrimaryDomainNotDeletable: Primary domain must not be deleted
|
||||
DomainNotFound: Domain not found
|
||||
MemberIDMissing: Member ID missing
|
||||
|
@ -182,6 +182,11 @@ Errors:
|
||||
DomainVerificationTypeInvalid: El tipo verificación del dominio no es válido
|
||||
DomainVerificationMissing: La verificación del dominio no ha comenzado
|
||||
DomainVerificationFailed: La verificación del dominio falló
|
||||
DomainVerificationTXTNotFound: No se encontró el registro TXT _zitadel-challenge para su dominio. Verifique que lo haya agregado a su servidor DNS o espere hasta que se propague el nuevo registro
|
||||
DomainVerificationTXTNoMatch: Se encontró el registro TXT _zitadel-challenge para su dominio, pero no contiene el texto del token correcto. Verifique que haya agregado el token correcto a su servidor DNS o espere hasta que se propague el nuevo registro
|
||||
DomainVerificationHTTPNotFound: El archivo que contiene el desafío no se encontró en la URL esperada. Comprueba que has subido el archivo en el lugar correcto con permisos de lectura.
|
||||
DomainVerificationHTTPNoMatch: El archivo que contiene el desafío se encontró en la URL esperada, pero no contiene el texto del token correcto. Consulta su contenido
|
||||
DomainVerificationTimeout: Se superó el tiempo de espera al consultar el servidor DNS.
|
||||
PrimaryDomainNotDeletable: El dominio primario no debe borrarse
|
||||
DomainNotFound: Dominio no encontrado
|
||||
MemberIDMissing: Falta el ID del miembro
|
||||
|
@ -182,6 +182,11 @@ Errors:
|
||||
DomainVerificationTypeInvalid: Le type de vérification du domaine n'est pas valide
|
||||
DomainVerificationMissing: La vérification du domaine n'a pas encore commencé
|
||||
DomainVerificationFailed: La vérification du domaine a échoué
|
||||
DomainVerificationTXTNotFound: L'enregistrement TXT _zitadel-challenge est introuvable pour votre domaine. Vérifiez que vous l'avez ajouté à votre serveur DNS ou attendez que le nouvel enregistrement se propage
|
||||
DomainVerificationTXTNoMatch: L'enregistrement TXT _zitadel-challenge a été trouvé pour votre domaine mais il ne contient pas le bon texte de jeton. Vérifiez que vous avez ajouté le bon token à votre serveur DNS ou attendez que le nouvel enregistrement se propage
|
||||
DomainVerificationHTTPNotFound: Le fichier contenant le défi n'a pas été trouvé dans l'URL attendue. Vérifiez que vous avez téléchargé le fichier au bon endroit avec les autorisations de lecture
|
||||
DomainVerificationHTTPNoMatch: Le fichier contenant le défi a été trouvé dans l'URL attendue mais il ne contient pas le bon texte de token. Vérifiez son contenu
|
||||
DomainVerificationTimeout: Il y a eu un délai d'attente lors de l'interrogation du serveur DNS
|
||||
PrimaryDomainNotDeletable: Le domaine primaire ne doit pas être supprimé
|
||||
DomainNotFound: Domaine non trouvé
|
||||
MemberIDMissing: ID du membre manquant
|
||||
|
@ -182,6 +182,11 @@ Errors:
|
||||
DomainVerificationTypeInvalid: Il tipo di verifica del dominio non è valido
|
||||
DomainVerificationMissing: La verifica del dominio non è ancora iniziata
|
||||
DomainVerificationFailed: Verifica del dominio fallita
|
||||
DomainVerificationTXTNotFound: Il record TXT _zitadel-challenge non è stato trovato per il tuo dominio. Verifica di averlo aggiunto al tuo server DNS o attendi la propagazione del nuovo record
|
||||
DomainVerificationTXTNoMatch: È stato trovato il record TXT _zitadel-challenge per il tuo dominio ma non contiene il testo del token corretto. Verifica di aver aggiunto il token corretto al tuo server DNS o attendi la propagazione del nuovo record
|
||||
DomainVerificationHTTPNotFound: Il file della challenge non è stato trovato nell'URL previsto. Verifica di aver caricato il file nel posto giusto con permessi di lettura
|
||||
DomainVerificationHTTPNoMatch: Il file della challenge è stato trovato nell'URL previsto ma non contiene il testo del token corretto. Controlla il suo contenuto
|
||||
DomainVerificationTimeout: Si è verificato un timeout nella richiesta del server DNS
|
||||
PrimaryDomainNotDeletable: Il dominio primario non deve essere cancellato
|
||||
DomainNotFound: Dominio non trovato
|
||||
MemberIDMissing: ID membro mancante
|
||||
|
@ -174,6 +174,11 @@ Errors:
|
||||
DomainVerificationTypeInvalid: ドメイン認証タイプが無効です
|
||||
DomainVerificationMissing: ドメイン認証はまだ開始されていません
|
||||
DomainVerificationFailed: ドメイン認証に失敗しました
|
||||
DomainVerificationTXTNotFound: _zitadel-challenge TXT レコードがドメインで見つかりませんでした。 DNS サーバーに追加したことを確認するか、新しいレコードが伝播されるまで待ちます
|
||||
DomainVerificationTXTNoMatch: ドメインの _zitadel-challenge TXT レコードが見つかりましたが、正しいトークン テキストが含まれていません。 DNS サーバーに正しいトークンを追加したかどうかを確認するか、新しいレコードが伝播されるまで待ちます
|
||||
DomainVerificationHTTPNotFound: チャレンジを含むファイルが予期された URL に見つかりませんでした。読み取り権限のある適切な場所にファイルがアップロードされていることを確認してください
|
||||
DomainVerificationHTTPNoMatch: チャレンジを含むファイルが予期された URL で見つかりましたが、正しいトークン テキストが含まれていません。内容を確認してください
|
||||
DomainVerificationTimeout: DNSサーバーへのクエリでタイムアウトが発生しました
|
||||
PrimaryDomainNotDeletable: プライマリドメインは削除できません
|
||||
DomainNotFound: ドメインが見つかりません
|
||||
MemberIDMissing: メンバーIDがありません
|
||||
|
@ -182,6 +182,11 @@ Errors:
|
||||
DomainVerificationTypeInvalid: Типот на верификација на доменот е невалиден
|
||||
DomainVerificationMissing: Верификацијата на доменот сè уште не е започната
|
||||
DomainVerificationFailed: Верификацијата на доменот не успеа
|
||||
DomainVerificationTXTNotFound: Записот _zitadel-challenge TXT не беше пронајден за вашиот домен. Проверете дали сте го додале на вашиот DNS сервер или почекајте додека не се пропагира новиот запис
|
||||
DomainVerificationTXTNoMatch: Записот _zitadel-challenge TXT е пронајден за вашиот домен, но не го содржи вистинскиот токен текст. Проверете дали сте го додале вистинскиот токен на вашиот DNS сервер или почекајте додека не се пропагира новиот запис
|
||||
DomainVerificationHTTPNotFound: Датотеката што го содржи предизвикот не беше пронајдена во очекуваната URL-адреса. Проверете дали сте ја подигнале датотеката на вистинското место со дозволи за читање
|
||||
DomainVerificationHTTPNoMatch: Датотеката што го содржи предизвикот е пронајдена во очекуваната URL-адреса, но не го содржи вистинскиот токен текст. Проверете ја неговата содржина
|
||||
DomainVerificationTimeout: Имаше истек на барање на DNS-серверот
|
||||
PrimaryDomainNotDeletable: Примарниот домен не смее да биде избришан
|
||||
DomainNotFound: Доменот не е пронајден
|
||||
MemberIDMissing: Недостасува ID на членот
|
||||
|
@ -182,6 +182,11 @@ Errors:
|
||||
DomainVerificationTypeInvalid: Typ weryfikacji domeny jest nieprawidłowy
|
||||
DomainVerificationMissing: Weryfikacja domeny nie została jeszcze rozpoczęta
|
||||
DomainVerificationFailed: Weryfikacja domeny nie powiodła się
|
||||
DomainVerificationTXTNotFound: Nie znaleziono rekordu TXT _zitadel-challenge dla Twojej domeny. Sprawdź, czy dodałeś go do swojego serwera DNS lub poczekaj, aż nowy rekord zostanie rozpropagowany
|
||||
DomainVerificationTXTNoMatch: Znaleziono rekord TXT _zitadel-challenge dla Twojej domeny, ale nie zawiera on prawidłowego tekstu tokena. Sprawdź, czy dodałeś właściwy token do swojego serwera DNS lub poczekaj, aż nowy rekord zostanie rozpropagowany
|
||||
DomainVerificationHTTPNotFound: Pod oczekiwanym adresem URL nie znaleziono pliku zawierającego wyzwanie. Sprawdź, czy przesłałeś plik we właściwe miejsce z uprawnieniami do odczytu
|
||||
DomainVerificationHTTPNoMatch: Znaleziono plik zawierający wyzwanie pod oczekiwanym adresem URL, ale nie zawiera on prawidłowego tekstu tokena. Sprawdź jego zawartość
|
||||
DomainVerificationTimeout: Upłynął limit czasu podczas wysyłania zapytania do serwera DNS
|
||||
PrimaryDomainNotDeletable: Domena główna nie może być usunięta
|
||||
DomainNotFound: Domena nie znaleziona
|
||||
MemberIDMissing: Brak identyfikatora członka
|
||||
|
@ -180,6 +180,11 @@ Errors:
|
||||
DomainVerificationTypeInvalid: O tipo de verificação do domínio é inválido
|
||||
DomainVerificationMissing: A verificação do domínio ainda não foi iniciada
|
||||
DomainVerificationFailed: Falha na verificação do domínio
|
||||
DomainVerificationTXTNotFound: O registro TXT _zitadel-challenge não foi encontrado para seu domínio. Verifique se você o adicionou ao seu servidor DNS ou espere até que o novo registro seja propagado
|
||||
DomainVerificationTXTNoMatch: O registro TXT _zitadel-challenge foi encontrado para seu domínio, mas não contém o texto do token correto. Verifique se você adicionou o token correto ao seu servidor DNS ou espere até que o novo registro seja propagado
|
||||
DomainVerificationHTTPNotFound: O arquivo que contém o desafio não foi encontrado na URL esperada. Verifique se você carregou o arquivo no lugar certo com permissões de leitura
|
||||
DomainVerificationHTTPNoMatch: O arquivo que contém o desafio foi encontrado na URL esperada, mas não contém o texto do token correto. Verifique seu conteúdo
|
||||
DomainVerificationTimeout: Houve um tempo limite na consulta do servidor DNS
|
||||
PrimaryDomainNotDeletable: O domínio principal não pode ser excluído
|
||||
DomainNotFound: Domínio não encontrado
|
||||
MemberIDMissing: ID do membro ausente
|
||||
|
@ -182,6 +182,11 @@ Errors:
|
||||
DomainVerificationTypeInvalid: 域名验证类型无效
|
||||
DomainVerificationMissing: 域名验证尚未开始
|
||||
DomainVerificationFailed: 域名验证失败
|
||||
DomainVerificationTXTNotFound: 未找到您的域的 _zitadel-challenge TXT 记录。检查您是否已将其添加到 DNS 服务器或等待新记录传播
|
||||
DomainVerificationTXTNoMatch: 已找到您的域的 _zitadel-challenge TXT 记录,但它不包含正确的令牌文本。检查您是否已将正确的令牌添加到 DNS 服务器或等待新记录传播
|
||||
DomainVerificationHTTPNotFound: 在预期的 URL 中找不到包含质询的文件。检查您是否已将文件上传到正确的位置并具有读取权限
|
||||
DomainVerificationHTTPNoMatch: 已在预期 URL 中找到包含质询的文件,但它不包含正确的标记文本。检查其内容
|
||||
DomainVerificationTimeout: 查询 DNS 服务器超时
|
||||
PrimaryDomainNotDeletable: 不得删除主域名
|
||||
DomainNotFound: 未找到域名
|
||||
MemberIDMissing: 成员 ID 丢失
|
||||
@ -623,7 +628,7 @@ EventTypes:
|
||||
removed: 删除 MFA OTP
|
||||
check:
|
||||
succeeded: 验证 MFA OTP 成功
|
||||
failed: 验证 MFA OTP 失败
|
||||
failed: 验证 MFA OTP 失败
|
||||
sms:
|
||||
added: 添加了多因素 OTP 短信
|
||||
removed: 删除了多因素 OTP 短信
|
||||
|
Loading…
Reference in New Issue
Block a user