mirror of
https://github.com/miniflux/v2.git
synced 2025-09-10 18:51:01 +00:00
Refactor user validation
Validate each user field for creation/modification via API and web UI
This commit is contained in:
parent
291bf96d15
commit
e45cc2d2aa
40 changed files with 567 additions and 400 deletions
|
@ -244,6 +244,10 @@ var translations = map[string]string{
|
|||
"error.user_mandatory_fields": "Der Benutzername ist obligatorisch.",
|
||||
"error.api_key_already_exists": "Dieser API-Schlüssel ist bereits vorhanden.",
|
||||
"error.unable_to_create_api_key": "Dieser API-Schlüssel kann nicht erstellt werden.",
|
||||
"error.invalid_theme": "Ungültiges Thema.",
|
||||
"error.invalid_language": "Ungültige Sprache.",
|
||||
"error.invalid_timezone": "Ungültige Zeitzone.",
|
||||
"error.invalid_entry_direction": "Ungültige Sortierreihenfolge.",
|
||||
"form.feed.label.title": "Titel",
|
||||
"form.feed.label.site_url": "Webseite-URL",
|
||||
"form.feed.label.feed_url": "Abonnement-URL",
|
||||
|
@ -582,6 +586,10 @@ var translations = map[string]string{
|
|||
"error.unable_to_update_user": "Unable to update this user.",
|
||||
"error.unable_to_update_feed": "Unable to update this feed.",
|
||||
"error.subscription_not_found": "Unable to find any subscription.",
|
||||
"error.invalid_theme": "Invalid theme.",
|
||||
"error.invalid_language": "Invalid language.",
|
||||
"error.invalid_timezone": "Invalid timezone.",
|
||||
"error.invalid_entry_direction": "Invalid entry direction.",
|
||||
"error.empty_file": "This file is empty.",
|
||||
"error.bad_credentials": "Invalid username or password.",
|
||||
"error.fields_mandatory": "All fields are mandatory.",
|
||||
|
@ -924,6 +932,10 @@ var translations = map[string]string{
|
|||
"error.user_mandatory_fields": "El nombre de usuario es obligatorio.",
|
||||
"error.api_key_already_exists": "Esta clave API ya existe.",
|
||||
"error.unable_to_create_api_key": "No se puede crear esta clave API.",
|
||||
"error.invalid_theme": "Tema no válido.",
|
||||
"error.invalid_language": "Idioma no válido.",
|
||||
"error.invalid_timezone": "Zona horaria no válida.",
|
||||
"error.invalid_entry_direction": "Dirección de entrada no válida.",
|
||||
"form.feed.label.title": "Título",
|
||||
"form.feed.label.site_url": "URL del sitio",
|
||||
"form.feed.label.feed_url": "URL de la fuente",
|
||||
|
@ -936,7 +948,6 @@ var translations = map[string]string{
|
|||
"form.feed.label.rewrite_rules": "Reglas de reescribir",
|
||||
"form.feed.label.blocklist_rules": "Reglas de Filtrado(Bloquear)",
|
||||
"form.feed.label.keeplist_rules": "Reglas de Filtrado(Permitir)",
|
||||
"form.feed.label.blocklist_rules": "Reglas de Blacklist",
|
||||
"form.feed.label.ignore_http_cache": "Ignorar caché HTTP",
|
||||
"form.feed.label.fetch_via_proxy": "Buscar a través de proxy",
|
||||
"form.feed.label.disabled": "No actualice este feed",
|
||||
|
@ -1255,6 +1266,10 @@ var translations = map[string]string{
|
|||
"error.user_mandatory_fields": "Le nom d'utilisateur est obligatoire.",
|
||||
"error.api_key_already_exists": "Cette clé d'API existe déjà.",
|
||||
"error.unable_to_create_api_key": "Impossible de créer cette clé d'API.",
|
||||
"error.invalid_theme": "Thème non valide.",
|
||||
"error.invalid_language": "Langue non valide.",
|
||||
"error.invalid_timezone": "Fuseau horaire non valide.",
|
||||
"error.invalid_entry_direction": "Ordre de trie non valide.",
|
||||
"form.feed.label.title": "Titre",
|
||||
"form.feed.label.site_url": "URL du site web",
|
||||
"form.feed.label.feed_url": "URL du flux",
|
||||
|
@ -1605,6 +1620,10 @@ var translations = map[string]string{
|
|||
"error.user_mandatory_fields": "Il nome utente è obbligatorio.",
|
||||
"error.api_key_already_exists": "Questa chiave API esiste già.",
|
||||
"error.unable_to_create_api_key": "Impossibile creare questa chiave API.",
|
||||
"error.invalid_theme": "Tema non valido.",
|
||||
"error.invalid_language": "Lingua non valida.",
|
||||
"error.invalid_timezone": "Fuso orario non valido.",
|
||||
"error.invalid_entry_direction": "Ordinamento non valido.",
|
||||
"form.feed.label.title": "Titolo",
|
||||
"form.feed.label.site_url": "URL del sito",
|
||||
"form.feed.label.feed_url": "URL del feed",
|
||||
|
@ -1935,6 +1954,10 @@ var translations = map[string]string{
|
|||
"error.user_mandatory_fields": "ユーザー名が必要です。",
|
||||
"error.api_key_already_exists": "このAPIキーは既に存在します。",
|
||||
"error.unable_to_create_api_key": "このAPIキーを作成できません。",
|
||||
"error.invalid_theme": "テーマが無効です。",
|
||||
"error.invalid_language": "言語が無効です。",
|
||||
"error.invalid_timezone": "タイムゾーンが無効です。",
|
||||
"error.invalid_entry_direction": "ソート順が無効です。",
|
||||
"form.feed.label.title": "タイトル",
|
||||
"form.feed.label.site_url": "サイト URL",
|
||||
"form.feed.label.feed_url": "フィード URL",
|
||||
|
@ -2265,6 +2288,10 @@ var translations = map[string]string{
|
|||
"error.user_mandatory_fields": "Gebruikersnaam is verplicht",
|
||||
"error.api_key_already_exists": "This API Key already exists.",
|
||||
"error.unable_to_create_api_key": "Kan deze API-sleutel niet maken.",
|
||||
"error.invalid_theme": "Ongeldig thema.",
|
||||
"error.invalid_language": "Ongeldige taal.",
|
||||
"error.invalid_timezone": "Ongeldige tijdzone.",
|
||||
"error.invalid_entry_direction": "Ongeldige sorteervolgorde.",
|
||||
"form.feed.label.title": "Naam",
|
||||
"form.feed.label.site_url": "Website URL",
|
||||
"form.feed.label.feed_url": "Feed URL",
|
||||
|
@ -2615,6 +2642,10 @@ var translations = map[string]string{
|
|||
"error.user_mandatory_fields": "Nazwa użytkownika jest obowiązkowa.",
|
||||
"error.api_key_already_exists": "Deze API-sleutel bestaat al.",
|
||||
"error.unable_to_create_api_key": "Nie można utworzyć tego klucza API.",
|
||||
"error.invalid_theme": "Nieprawidłowy motyw.",
|
||||
"error.invalid_language": "Nieprawidłowy język.",
|
||||
"error.invalid_timezone": "Nieprawidłowa strefa czasowa.",
|
||||
"error.invalid_entry_direction": "Nieprawidłowa kolejność sortowania.",
|
||||
"form.feed.label.title": "Tytuł",
|
||||
"form.feed.label.site_url": "URL strony",
|
||||
"form.feed.label.feed_url": "URL kanału",
|
||||
|
@ -2969,6 +3000,10 @@ var translations = map[string]string{
|
|||
"error.user_mandatory_fields": "O nome de usuário é obrigatório.",
|
||||
"error.api_key_already_exists": "Essa chave de API já existe.",
|
||||
"error.unable_to_create_api_key": "Não foi possível criar uma chave de API.",
|
||||
"error.invalid_theme": "Tema inválido.",
|
||||
"error.invalid_language": "Idioma inválido.",
|
||||
"error.invalid_timezone": "Fuso horário inválido.",
|
||||
"error.invalid_entry_direction": "Direção de entrada inválida.",
|
||||
"form.feed.label.title": "Título",
|
||||
"form.feed.label.site_url": "URL do site",
|
||||
"form.feed.label.feed_url": "URL da fonte",
|
||||
|
@ -3301,6 +3336,10 @@ var translations = map[string]string{
|
|||
"error.user_mandatory_fields": "Имя пользователя обязательно.",
|
||||
"error.api_key_already_exists": "Этот ключ API уже существует.",
|
||||
"error.unable_to_create_api_key": "Невозможно создать этот ключ API.",
|
||||
"error.invalid_theme": "Неверная тема.",
|
||||
"error.invalid_language": "Неверный язык.",
|
||||
"error.invalid_timezone": "Неверный часовой пояс.",
|
||||
"error.invalid_entry_direction": "Неверное направление входа.",
|
||||
"form.feed.label.title": "Название",
|
||||
"form.feed.label.site_url": "URL сайта",
|
||||
"form.feed.label.feed_url": "URL подписки",
|
||||
|
@ -3635,6 +3674,10 @@ var translations = map[string]string{
|
|||
"error.user_mandatory_fields": "必须填写用户名",
|
||||
"error.api_key_already_exists": "此API密钥已存在。",
|
||||
"error.unable_to_create_api_key": "无法创建此API密钥。",
|
||||
"error.invalid_theme": "无效的主题。",
|
||||
"error.invalid_language": "语言无效。",
|
||||
"error.invalid_timezone": "无效的时区。",
|
||||
"error.invalid_entry_direction": "无效的输入方向。",
|
||||
"form.feed.label.title": "标题",
|
||||
"form.feed.label.site_url": "站点 URL",
|
||||
"form.feed.label.feed_url": "源 URL",
|
||||
|
@ -3740,15 +3783,15 @@ var translations = map[string]string{
|
|||
}
|
||||
|
||||
var translationsChecksums = map[string]string{
|
||||
"de_DE": "66d6feafa5f92c35b10f8c07aa693afe1ea7dca73708cdebfc4cf3edb0478512",
|
||||
"en_US": "fa1771f155b439b46f282069a1628dc95d4170a5d7db14c1b90fa753936e7856",
|
||||
"es_ES": "5b65c97c14e4b1f833ce6047be4b8b29bcb777d7a7a21420d1fb619584746649",
|
||||
"fr_FR": "b58d74f73de2e775cc3f883f2fb19451e306ff32772f2fa8cb3c630d9df395d3",
|
||||
"it_IT": "a488f947b4e0cd8149c4cf7aaa71a8c59976a06559046fbc5b36aa167caaa84c",
|
||||
"ja_JP": "9a3d1484c46be56286f9abf06b596576a3ae44f571d72a40d2eba5bfb02dd921",
|
||||
"nl_NL": "3b91987a9f6640e827c73ca11bb0f9bc58ff79359e792038746e273cd7ae546d",
|
||||
"pl_PL": "ff1dab97559d16331c374c63a91000b0c27f796bd96595e34ca324eb68a7c06e",
|
||||
"pt_BR": "524c0f0dcd81988acd286900481e1a2e0ca9cf789d752e22da8bd5fe31b6acf3",
|
||||
"ru_RU": "805c698b8a053860f737a145acc3616c67c8d80bf1de89bf6bb27fee40e885f2",
|
||||
"zh_CN": "0c6be862c7bd997337696161a1c1d3d2ec5c7adab9c33f29c09d906fcc015a79",
|
||||
"de_DE": "c8d6021599cfda4f853bd5ec1e1b065f03633ada9211ee22879ea778ba464572",
|
||||
"en_US": "781a7a6b54f439d76fe56fca7cb07412a04e71edebf53563f5cca27a0cd2533a",
|
||||
"es_ES": "4d602461f5ed9c4aaf59e8828d2b09d0cc45d06ba77d89ba0ef9662b580aebc0",
|
||||
"fr_FR": "3a0a008d0857fa5eb8a018ce5e348d7ccabe08a67849c72c6e7611e6b5b49aa7",
|
||||
"it_IT": "7222e3610ad3741aa7aff957f70524b63ffe3f6729198899231765335861a108",
|
||||
"ja_JP": "f0ab6dd77c78717d25d88baad39c487c913720be4b3473a3f0aa3aa538318deb",
|
||||
"nl_NL": "1e0872b89fb78a6de2ae989d054963226146c3eeff4b2883cf2bf8df96c13846",
|
||||
"pl_PL": "2513808a13925549c9ba27c52a20916d18a5222dd8ba6a14520798766889b076",
|
||||
"pt_BR": "b5fc4d9e0dedc554579154f2fff772b108baf317c9a952d688db0df260674b3b",
|
||||
"ru_RU": "d9bedead0757deae57da909c7d5297853c2186acb8ebf7cf91d0eef7c1a17d19",
|
||||
"zh_CN": "2526d0139ca0a2004f2db0864cbc9c3da55c3c7f45e1a244fea3c39d5d39e0f9",
|
||||
}
|
||||
|
|
|
@ -239,6 +239,10 @@
|
|||
"error.user_mandatory_fields": "Der Benutzername ist obligatorisch.",
|
||||
"error.api_key_already_exists": "Dieser API-Schlüssel ist bereits vorhanden.",
|
||||
"error.unable_to_create_api_key": "Dieser API-Schlüssel kann nicht erstellt werden.",
|
||||
"error.invalid_theme": "Ungültiges Thema.",
|
||||
"error.invalid_language": "Ungültige Sprache.",
|
||||
"error.invalid_timezone": "Ungültige Zeitzone.",
|
||||
"error.invalid_entry_direction": "Ungültige Sortierreihenfolge.",
|
||||
"form.feed.label.title": "Titel",
|
||||
"form.feed.label.site_url": "Webseite-URL",
|
||||
"form.feed.label.feed_url": "Abonnement-URL",
|
||||
|
|
|
@ -227,6 +227,10 @@
|
|||
"error.unable_to_update_user": "Unable to update this user.",
|
||||
"error.unable_to_update_feed": "Unable to update this feed.",
|
||||
"error.subscription_not_found": "Unable to find any subscription.",
|
||||
"error.invalid_theme": "Invalid theme.",
|
||||
"error.invalid_language": "Invalid language.",
|
||||
"error.invalid_timezone": "Invalid timezone.",
|
||||
"error.invalid_entry_direction": "Invalid entry direction.",
|
||||
"error.empty_file": "This file is empty.",
|
||||
"error.bad_credentials": "Invalid username or password.",
|
||||
"error.fields_mandatory": "All fields are mandatory.",
|
||||
|
|
|
@ -239,6 +239,10 @@
|
|||
"error.user_mandatory_fields": "El nombre de usuario es obligatorio.",
|
||||
"error.api_key_already_exists": "Esta clave API ya existe.",
|
||||
"error.unable_to_create_api_key": "No se puede crear esta clave API.",
|
||||
"error.invalid_theme": "Tema no válido.",
|
||||
"error.invalid_language": "Idioma no válido.",
|
||||
"error.invalid_timezone": "Zona horaria no válida.",
|
||||
"error.invalid_entry_direction": "Dirección de entrada no válida.",
|
||||
"form.feed.label.title": "Título",
|
||||
"form.feed.label.site_url": "URL del sitio",
|
||||
"form.feed.label.feed_url": "URL de la fuente",
|
||||
|
@ -251,7 +255,6 @@
|
|||
"form.feed.label.rewrite_rules": "Reglas de reescribir",
|
||||
"form.feed.label.blocklist_rules": "Reglas de Filtrado(Bloquear)",
|
||||
"form.feed.label.keeplist_rules": "Reglas de Filtrado(Permitir)",
|
||||
"form.feed.label.blocklist_rules": "Reglas de Blacklist",
|
||||
"form.feed.label.ignore_http_cache": "Ignorar caché HTTP",
|
||||
"form.feed.label.fetch_via_proxy": "Buscar a través de proxy",
|
||||
"form.feed.label.disabled": "No actualice este feed",
|
||||
|
|
|
@ -239,6 +239,10 @@
|
|||
"error.user_mandatory_fields": "Le nom d'utilisateur est obligatoire.",
|
||||
"error.api_key_already_exists": "Cette clé d'API existe déjà.",
|
||||
"error.unable_to_create_api_key": "Impossible de créer cette clé d'API.",
|
||||
"error.invalid_theme": "Thème non valide.",
|
||||
"error.invalid_language": "Langue non valide.",
|
||||
"error.invalid_timezone": "Fuseau horaire non valide.",
|
||||
"error.invalid_entry_direction": "Ordre de trie non valide.",
|
||||
"form.feed.label.title": "Titre",
|
||||
"form.feed.label.site_url": "URL du site web",
|
||||
"form.feed.label.feed_url": "URL du flux",
|
||||
|
|
|
@ -239,6 +239,10 @@
|
|||
"error.user_mandatory_fields": "Il nome utente è obbligatorio.",
|
||||
"error.api_key_already_exists": "Questa chiave API esiste già.",
|
||||
"error.unable_to_create_api_key": "Impossibile creare questa chiave API.",
|
||||
"error.invalid_theme": "Tema non valido.",
|
||||
"error.invalid_language": "Lingua non valida.",
|
||||
"error.invalid_timezone": "Fuso orario non valido.",
|
||||
"error.invalid_entry_direction": "Ordinamento non valido.",
|
||||
"form.feed.label.title": "Titolo",
|
||||
"form.feed.label.site_url": "URL del sito",
|
||||
"form.feed.label.feed_url": "URL del feed",
|
||||
|
|
|
@ -239,6 +239,10 @@
|
|||
"error.user_mandatory_fields": "ユーザー名が必要です。",
|
||||
"error.api_key_already_exists": "このAPIキーは既に存在します。",
|
||||
"error.unable_to_create_api_key": "このAPIキーを作成できません。",
|
||||
"error.invalid_theme": "テーマが無効です。",
|
||||
"error.invalid_language": "言語が無効です。",
|
||||
"error.invalid_timezone": "タイムゾーンが無効です。",
|
||||
"error.invalid_entry_direction": "ソート順が無効です。",
|
||||
"form.feed.label.title": "タイトル",
|
||||
"form.feed.label.site_url": "サイト URL",
|
||||
"form.feed.label.feed_url": "フィード URL",
|
||||
|
|
|
@ -239,6 +239,10 @@
|
|||
"error.user_mandatory_fields": "Gebruikersnaam is verplicht",
|
||||
"error.api_key_already_exists": "This API Key already exists.",
|
||||
"error.unable_to_create_api_key": "Kan deze API-sleutel niet maken.",
|
||||
"error.invalid_theme": "Ongeldig thema.",
|
||||
"error.invalid_language": "Ongeldige taal.",
|
||||
"error.invalid_timezone": "Ongeldige tijdzone.",
|
||||
"error.invalid_entry_direction": "Ongeldige sorteervolgorde.",
|
||||
"form.feed.label.title": "Naam",
|
||||
"form.feed.label.site_url": "Website URL",
|
||||
"form.feed.label.feed_url": "Feed URL",
|
||||
|
|
|
@ -241,6 +241,10 @@
|
|||
"error.user_mandatory_fields": "Nazwa użytkownika jest obowiązkowa.",
|
||||
"error.api_key_already_exists": "Deze API-sleutel bestaat al.",
|
||||
"error.unable_to_create_api_key": "Nie można utworzyć tego klucza API.",
|
||||
"error.invalid_theme": "Nieprawidłowy motyw.",
|
||||
"error.invalid_language": "Nieprawidłowy język.",
|
||||
"error.invalid_timezone": "Nieprawidłowa strefa czasowa.",
|
||||
"error.invalid_entry_direction": "Nieprawidłowa kolejność sortowania.",
|
||||
"form.feed.label.title": "Tytuł",
|
||||
"form.feed.label.site_url": "URL strony",
|
||||
"form.feed.label.feed_url": "URL kanału",
|
||||
|
|
|
@ -239,6 +239,10 @@
|
|||
"error.user_mandatory_fields": "O nome de usuário é obrigatório.",
|
||||
"error.api_key_already_exists": "Essa chave de API já existe.",
|
||||
"error.unable_to_create_api_key": "Não foi possível criar uma chave de API.",
|
||||
"error.invalid_theme": "Tema inválido.",
|
||||
"error.invalid_language": "Idioma inválido.",
|
||||
"error.invalid_timezone": "Fuso horário inválido.",
|
||||
"error.invalid_entry_direction": "Direção de entrada inválida.",
|
||||
"form.feed.label.title": "Título",
|
||||
"form.feed.label.site_url": "URL do site",
|
||||
"form.feed.label.feed_url": "URL da fonte",
|
||||
|
|
|
@ -241,6 +241,10 @@
|
|||
"error.user_mandatory_fields": "Имя пользователя обязательно.",
|
||||
"error.api_key_already_exists": "Этот ключ API уже существует.",
|
||||
"error.unable_to_create_api_key": "Невозможно создать этот ключ API.",
|
||||
"error.invalid_theme": "Неверная тема.",
|
||||
"error.invalid_language": "Неверный язык.",
|
||||
"error.invalid_timezone": "Неверный часовой пояс.",
|
||||
"error.invalid_entry_direction": "Неверное направление входа.",
|
||||
"form.feed.label.title": "Название",
|
||||
"form.feed.label.site_url": "URL сайта",
|
||||
"form.feed.label.feed_url": "URL подписки",
|
||||
|
|
|
@ -237,6 +237,10 @@
|
|||
"error.user_mandatory_fields": "必须填写用户名",
|
||||
"error.api_key_already_exists": "此API密钥已存在。",
|
||||
"error.unable_to_create_api_key": "无法创建此API密钥。",
|
||||
"error.invalid_theme": "无效的主题。",
|
||||
"error.invalid_language": "语言无效。",
|
||||
"error.invalid_timezone": "无效的时区。",
|
||||
"error.invalid_entry_direction": "无效的输入方向。",
|
||||
"form.feed.label.title": "标题",
|
||||
"form.feed.label.site_url": "站点 URL",
|
||||
"form.feed.label.feed_url": "源 URL",
|
||||
|
|
|
@ -29,11 +29,11 @@ func TestAllKeysHaveValue(t *testing.T) {
|
|||
switch value := v.(type) {
|
||||
case string:
|
||||
if value == "" {
|
||||
t.Fatalf(`The key %q for the language %q have an empty string as value`, k, language)
|
||||
t.Errorf(`The key %q for the language %q have an empty string as value`, k, language)
|
||||
}
|
||||
case []string:
|
||||
if len(value) == 0 {
|
||||
t.Fatalf(`The key %q for the language %q have an empty list as value`, k, language)
|
||||
t.Errorf(`The key %q for the language %q have an empty list as value`, k, language)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue