diff --git a/app/jobs/scheduled/auto_expire_user_api_keys.rb b/app/jobs/scheduled/auto_expire_user_api_keys.rb deleted file mode 100644 index 60bd24418d2..00000000000 --- a/app/jobs/scheduled/auto_expire_user_api_keys.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -module Jobs - class AutoExpireUserApiKeys < ::Jobs::Scheduled - every 1.day - - def execute(args) - if SiteSetting.expire_user_api_keys_days > 0 - expire_user_api_keys_days = SiteSetting.expire_user_api_keys_days.days.ago - - UserApiKey.where("last_used_at < ?", expire_user_api_keys_days).update_all( - revoked_at: Time.zone.now, - ) - end - end - end -end diff --git a/app/jobs/scheduled/clean_up_api_keys_max_life.rb b/app/jobs/scheduled/clean_up_api_keys_max_life.rb new file mode 100644 index 00000000000..a94f3e6da14 --- /dev/null +++ b/app/jobs/scheduled/clean_up_api_keys_max_life.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Jobs + class CleanUpApiKeysMaxLife < ::Jobs::Scheduled + every 1.day + + def execute(args) + ApiKey.revoke_max_life_keys! + end + end +end diff --git a/app/jobs/scheduled/clean_up_unused_user_api_keys.rb b/app/jobs/scheduled/clean_up_unused_user_api_keys.rb new file mode 100644 index 00000000000..92e673b9ff9 --- /dev/null +++ b/app/jobs/scheduled/clean_up_unused_user_api_keys.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module Jobs + class CleanUpUnusedUserApiKeys < ::Jobs::Scheduled + every 1.day + + def execute(args) + if SiteSetting.revoke_user_api_keys_unused_days > 0 + revoke_days_ago = SiteSetting.revoke_user_api_keys_unused_days.days.ago + + UserApiKey + .active + .where("last_used_at < ?", revoke_days_ago) + .update_all(revoked_at: Time.zone.now) + end + end + end +end diff --git a/app/jobs/scheduled/clean_up_user_api_keys_max_life.rb b/app/jobs/scheduled/clean_up_user_api_keys_max_life.rb new file mode 100644 index 00000000000..6495bd2e78f --- /dev/null +++ b/app/jobs/scheduled/clean_up_user_api_keys_max_life.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module Jobs + class CleanUpUserApiKeysMaxLife < ::Jobs::Scheduled + every 1.day + + def execute(args) + if SiteSetting.revoke_user_api_keys_maxlife_days > 0 + revoke_days_ago = SiteSetting.revoke_user_api_keys_maxlife_days.days.ago + + UserApiKey + .active + .where("created_at < ?", revoke_days_ago) + .update_all(revoked_at: Time.zone.now) + end + end + end +end diff --git a/app/models/api_key.rb b/app/models/api_key.rb index 5c53ea52912..c8611418b74 100644 --- a/app/models/api_key.rb +++ b/app/models/api_key.rb @@ -45,12 +45,12 @@ class ApiKey < ActiveRecord::Base end def self.revoke_unused_keys! - return if SiteSetting.revoke_api_keys_days == 0 # Never expire keys + return if SiteSetting.revoke_api_keys_unused_days == 0 # Never expire keys to_revoke = active.where( "GREATEST(last_used_at, created_at, updated_at, :epoch) < :threshold", epoch: last_used_epoch, - threshold: SiteSetting.revoke_api_keys_days.days.ago, + threshold: SiteSetting.revoke_api_keys_unused_days.days.ago, ) to_revoke.find_each do |api_key| @@ -64,7 +64,31 @@ class ApiKey < ActiveRecord::Base context: I18n.t( "staff_action_logs.api_key.automatic_revoked", - count: SiteSetting.revoke_api_keys_days, + count: SiteSetting.revoke_api_keys_unused_days, + ), + ) + end + end + end + + def self.revoke_max_life_keys! + return if SiteSetting.revoke_api_keys_maxlife_days == 0 + + revoke_days_ago = SiteSetting.revoke_api_keys_maxlife_days.days.ago + to_revoke = ApiKey.active.where("created_at < ?", revoke_days_ago) + + to_revoke.find_each do |api_key| + ApiKey.transaction do + api_key.update!(revoked_at: Time.zone.now) + + StaffActionLogger.new(Discourse.system_user).log_api_key( + api_key, + UserHistory.actions[:api_key_update], + changes: api_key.saved_changes, + context: + I18n.t( + "staff_action_logs.api_key.automatic_revoked_max_life", + count: SiteSetting.revoke_api_keys_maxlife_days, ), ) end diff --git a/config/locales/server.ar.yml b/config/locales/server.ar.yml index 1aef55f1528..d130023af42 100644 --- a/config/locales/server.ar.yml +++ b/config/locales/server.ar.yml @@ -2335,14 +2335,14 @@ ar: default_sidebar_switch_panel_position: "موضع أزرار لوحة تبديل الشريط الجانبي" retain_web_hook_events_period_days: "عدد أيام الاحتفاظ بسجلات أحداث خطافات الويب" retry_web_hook_events: "إعادة المحاولة تلقائيًا 4 مرات لأحداث خطافات الويب التي فشلت. الفجوات الزمنية بين مرات إعادة المحاولة هي 1 و5 و25 و125 دقيقة." - revoke_api_keys_days: "عدد الأيام قبل إلغاء مفتاح API غير المُستخدَم تلقائيًا (0 للتعيين على \"أبدًا\")" + revoke_api_keys_unused_days: "عدد الأيام قبل إلغاء مفتاح API غير المُستخدَم تلقائيًا (0 للتعيين على \"أبدًا\")" allow_user_api_key_scopes: "قائمة النطاقات المسموح بها لمفاتيح API للمستخدم" min_trust_level_for_user_api_key: | مستوى الثقة المطلوب لإنشاء مفاتيح واجهة برمجة تطبيقات المستخدم
تحذير: سيؤدي تغيير مستوى الثقة إلى منع المستخدمين في مستويات الثقة الأقل من تسجيل الدخول عبر Discourse Hub allowed_user_api_auth_redirects: "عنوان URL المسموح به لإعادة توجيه المصادقة لمفاتيح API للمستخدم. يمكن استخدام رمز البدل * لمطابقة أي جزء منه (على سبيل المثال،www.example.com/*)." allowed_user_api_push_urls: "عناوين URL المسموح لها بإرسال المعلومات إلى API للمستخدم قبل طلبها من الخادم" - expire_user_api_keys_days: "عدد الأيام قبل انتهاء صلاحية مفتاح API للمستخدم تلقائيًا (0 للتعيين على \"أبدًا\")" + revoke_user_api_keys_unused_days: "عدد الأيام قبل انتهاء صلاحية مفتاح API للمستخدم تلقائيًا (0 للتعيين على \"أبدًا\")" tagging_enabled: "السماح بالوسوم في الموضوعات؟" min_trust_to_create_tag: "الحد الأدنى لمستوى الثقة المطلوب لإنشاء وسم" max_tags_per_topic: "الحد الأقصى لعدد الوسوم التي يمكن تطبيقها على موضوع" diff --git a/config/locales/server.ca.yml b/config/locales/server.ca.yml index 8e7691e9594..3421dd92859 100644 --- a/config/locales/server.ca.yml +++ b/config/locales/server.ca.yml @@ -1609,11 +1609,11 @@ ca: default_title_count_mode: "Mode predeterminat per al comptador de títols de la pàgina" retain_web_hook_events_period_days: "Nombre de dies per a conservar els registres d'esdeveniments webhook." retry_web_hook_events: "Reintenta automàticament quatre vegades els esdeveniments webhook fallits. Els intervals de temps entre els reintents són 1, 5, 25 i 125 minuts." - revoke_api_keys_days: "Nombre de dies abans que una clau d’API no utilitzada sigui revocada automàticament (0 per a mai)" + revoke_api_keys_unused_days: "Nombre de dies abans que una clau d’API no utilitzada sigui revocada automàticament (0 per a mai)" allow_user_api_key_scopes: "Llista d'àmbits permesos per a les claus d'API d'usuari" allowed_user_api_auth_redirects: "URL permès per a la redirecció d'autenticació per a les claus de l'API d'usuari. El símbol de comodí * es pot utilitzar per a fer coincidir qualsevol part de l'URL (p. ex. www.example.com/*)." allowed_user_api_push_urls: "Adreces URL permeses per al 'server push' a l'API d'usuari" - expire_user_api_keys_days: "Nombre de dies abans de l'extinció automàtica d'una clau d'API d'usuari (0 vol dir mai)" + revoke_user_api_keys_unused_days: "Nombre de dies abans de l'extinció automàtica d'una clau d'API d'usuari (0 vol dir mai)" tagging_enabled: "Voleu activar les etiquetes en temes?" min_trust_to_create_tag: "Nivell mínim de confiança necessari per a crear una etiqueta." max_tags_per_topic: "Nombre màxim d'etiquetes que es poden aplicar a un tema." diff --git a/config/locales/server.da.yml b/config/locales/server.da.yml index 0e7a21ddd35..6c14b768952 100644 --- a/config/locales/server.da.yml +++ b/config/locales/server.da.yml @@ -1620,7 +1620,7 @@ da: default_tags_muted: "Liste over mærker, der er tavse som standard." default_tags_watching_first_post: "Liste over mærker, hvor første indlæg i hvert nyt emne vil blive overvåget som standard." allow_user_api_key_scopes: "Liste over tilladte anvendelsesområder for bruger-API-nøgler" - expire_user_api_keys_days: "Antal dage før en bruger API-nøgle automatisk udløber (0 for aldrig)" + revoke_user_api_keys_unused_days: "Antal dage før en bruger API-nøgle automatisk udløber (0 for aldrig)" tagging_enabled: "Aktivér mærker på emner?" max_tags_per_topic: "Det maksimale antal mærker, der kan anvendes i et emne." max_tag_search_results: "Ved søger efter mærker, skal der maksimalt vises følgende antal resultater." diff --git a/config/locales/server.de.yml b/config/locales/server.de.yml index 6404b5dd2e7..a000395d205 100644 --- a/config/locales/server.de.yml +++ b/config/locales/server.de.yml @@ -2123,14 +2123,14 @@ de: default_sidebar_switch_panel_position: "Position der Panel-Umschaltschaltflächen in der Seitenleiste" retain_web_hook_events_period_days: "Anzahl an Tagen, die Webhook-Ereigniseinträge aufbewahrt werden." retry_web_hook_events: "Fehlgeschlagene Webhook-Ereignisse automatisch 4 Mal erneut versuchen. Die Wartezeiten zwischen den Versuchen betragen eine, 5, 25 und 125 Minuten." - revoke_api_keys_days: "Anzahl der Tage, bevor ein nicht verwendeter API-Schlüssel automatisch widerrufen wird (0 für niemals)" + revoke_api_keys_unused_days: "Anzahl der Tage, bevor ein nicht verwendeter API-Schlüssel automatisch widerrufen wird (0 für niemals)" allow_user_api_key_scopes: "Liste erlaubter Bereiche für Benutzer-API-Schlüssel" min_trust_level_for_user_api_key: | Vertrauensstufe, die für die Generierung von Benutzer-API-Schlüsseln erforderlich ist.
WARNUNG: Die Änderung der Vertrauensstufe verhindert, dass sich Benutzer mit einer niedrigeren Vertrauensstufe über Discourse Hub anmelden können. allowed_user_api_auth_redirects: "Zulässige URL für Authentifizierungs-Umleitung für Benutzer-API-Schlüssel. Das Platzhaltersymbol * kann verwendet werden, um jeden Bestandteil der Adresse zu ersetzen (z. B. www.example.com/*)." allowed_user_api_push_urls: "Erlaubte URLs für Server-Push zur Benutzer-API" - expire_user_api_keys_days: "Anzahl der Tage, bevor ein Benutzer-API-Schlüssel automatisch abläuft (0 für niemals)" + revoke_user_api_keys_unused_days: "Anzahl der Tage, bevor ein Benutzer-API-Schlüssel automatisch abläuft (0 für niemals)" tagging_enabled: "Schlagwörter für Themen aktivieren?" min_trust_to_create_tag: "Minimale Vertrauensstufe, um ein Schlagwort zu erstellen." max_tags_per_topic: "Maximale Anzahl an Schlagwörtern, die einem Thema hinzugefügt werden können." diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index abbdc770e53..c86564f7c8e 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -2369,7 +2369,8 @@ en: retain_web_hook_events_period_days: "Number of days to retain web hook event records." retry_web_hook_events: "Automatically retry failed web hook events for 4 times. Time gaps between the retries are 1, 5, 25 and 125 minutes." - revoke_api_keys_days: "Number of days before an unused API key is automatically revoked (0 for never)" + revoke_api_keys_unused_days: "Number of days since an API key was last used before it is automatically revoked (0 for never)" + revoke_api_keys_maxlife_days: "Number of days before an API key is automatically revoked (0 for never)" allow_user_api_key_scopes: "List of scopes allowed for user API keys" min_trust_level_for_user_api_key: | @@ -2377,7 +2378,8 @@ en: WARNING: Changing the trust level will prevent users with a lower trust level from logging in via Discourse Hub allowed_user_api_auth_redirects: "Allowed URL for authentication redirect for user API keys. Wildcard symbol * can be used to match any part of it (e.g. www.example.com/*)." allowed_user_api_push_urls: "Allowed URLs for server push to user API" - expire_user_api_keys_days: "Number of days before a user API key automatically expires (0 for never)" + revoke_user_api_keys_unused_days: "Number of days since a user API key was last used before it is automatically revoked (0 for never)" + revoke_user_api_keys_maxlife_days: "Number of days before a user API key is automatically revoked (0 for never)" tagging_enabled: "Enable tags on topics?" min_trust_to_create_tag: "The minimum trust level required to create a tag." @@ -5130,6 +5132,9 @@ en: automatic_revoked: one: "Automatically revoked, last activity more than %{count} day ago" other: "Automatically revoked, last activity more than %{count} days ago" + automatic_revoked_max_life: + one: "Automatically revoked, created at more than %{count} day ago" + other: "Automatically revoked, created at more than %{count} days ago" revoked: Revoked restored: Restored diff --git a/config/locales/server.es.yml b/config/locales/server.es.yml index 9427520d2e7..014ae6fe642 100644 --- a/config/locales/server.es.yml +++ b/config/locales/server.es.yml @@ -2099,14 +2099,14 @@ es: default_sidebar_switch_panel_position: "Posición de los botones del panel conmutador de la barra lateral" retain_web_hook_events_period_days: "Número de días para retener registros de eventos de web hook." retry_web_hook_events: "Reintentar automáticamente 4 veces los eventos del web hook fallidos. Los intervalos de tiempo entre los reintentos son 1, 5, 25 y 125 minutos." - revoke_api_keys_days: "Número de días antes de que una clave de API sin usar sea revocada automáticamente (0 para nunca)" + revoke_api_keys_unused_days: "Número de días antes de que una clave de API sin usar sea revocada automáticamente (0 para nunca)" allow_user_api_key_scopes: "Lista de ámbitos permitidos para las claves API de usuario" min_trust_level_for_user_api_key: | Nivel de confianza requerido para la generación de claves API de usuario.
ADVERTENCIA: Cambiar el nivel de confianza impedirá a los usuarios con un nivel de confianza inferior iniciar sesión a través de Discourse Hub allowed_user_api_auth_redirects: "URL permitida para autenticar redirección para claves API de usuario. Símbolo comodín * puede ser usado para que coincida cualquier parte de la misma (por ejemplo www.ejemplo.com/*)." allowed_user_api_push_urls: "URLs permitidas para el push del servidor al API de usuario" - expire_user_api_keys_days: "Número de días antes de que la clave API del usuario caduque automáticamente (0 para nunca)" + revoke_user_api_keys_unused_days: "Número de días antes de que la clave API del usuario caduque automáticamente (0 para nunca)" tagging_enabled: "¿Activar etiquetas para los temas?" min_trust_to_create_tag: "El nivel de confianza mínimo requerido para crear una etiqueta." max_tags_per_topic: "El número máximo de etiquetas que se pueden añadir a un tema." diff --git a/config/locales/server.fi.yml b/config/locales/server.fi.yml index 2af76ec03d7..c876250c8b5 100644 --- a/config/locales/server.fi.yml +++ b/config/locales/server.fi.yml @@ -2122,14 +2122,14 @@ fi: default_sidebar_switch_panel_position: "Sivupalkin kytkinpaneelin painikkeiden sijainti" retain_web_hook_events_period_days: "Kuinka monta päivää tietoa webhook-tapahtumista säilötään." retry_web_hook_events: "Yritä uudelleen epäonnistuneita webhook-tapahtumia neljästi. Aikavälit yritysten välillä ovat 1, 5, 25 ja 125 minuuttia." - revoke_api_keys_days: "Kuinka monen päivän kuluttua käyttämätön API-avain mitätöidään automaattisesti (0 tarkoittaa ei koskaan)" + revoke_api_keys_unused_days: "Kuinka monen päivän kuluttua käyttämätön API-avain mitätöidään automaattisesti (0 tarkoittaa ei koskaan)" allow_user_api_key_scopes: "Luettelo käyttäjä-API-avaimiin liittyvistä oikeuksista" min_trust_level_for_user_api_key: | Käyttäjän API-avaimien luomiseen vaadittu luottamustaso.
VAROITUS: Luottamustason muuttaminen estää matalamman luottamustason käyttäjiä kirjautumasta sisään Discourse Hubin kautta. allowed_user_api_auth_redirects: "Sallittu URL-osoite käyttäjän API-avainten todennuksen uudelleenohjaukselle. Jokerimerkkiä * voidaan käyttää vastaamaan mitä tahansa sen osaa (esim. www.esimerkki.fi/*)." allowed_user_api_push_urls: "Sallitut URL-osoitteet palvelimen työnnöille käyttäjä-APIin" - expire_user_api_keys_days: "Kuinka monessa päivässä käyttäjä-API-avain vanhenee automaattisesti (0 tarkoittaa ei koskaan)" + revoke_user_api_keys_unused_days: "Kuinka monessa päivässä käyttäjä-API-avain vanhenee automaattisesti (0 tarkoittaa ei koskaan)" tagging_enabled: "Otetaanko ketjujen tunnisteet käyttöön?" min_trust_to_create_tag: "Vähimmäisluottamustaso, jolla voi luoda tunnisteita." max_tags_per_topic: "Suurin tunnisteiden määrä, joka voi liittyä ketjuun." diff --git a/config/locales/server.fr.yml b/config/locales/server.fr.yml index d68d6bdca6e..87870cbc266 100644 --- a/config/locales/server.fr.yml +++ b/config/locales/server.fr.yml @@ -2113,14 +2113,14 @@ fr: default_sidebar_switch_panel_position: "Position des boutons du panneau de commande de la barre latérale" retain_web_hook_events_period_days: "Nombre de jours de conservation des événements des Webhooks." retry_web_hook_events: "Réessayer jusqu'à 4 fois les événements de Webhooks qui ont échoué. Les intervalles entre chaque tentative sont de 1, 5, 25 et 125 minutes." - revoke_api_keys_days: "Nombre de jours avant qu'une clé API inutilisée soit automatiquement révoquée (0 pour jamais)" + revoke_api_keys_unused_days: "Nombre de jours avant qu'une clé API inutilisée soit automatiquement révoquée (0 pour jamais)" allow_user_api_key_scopes: "Liste des champs d'action autorisés pour les clés de l'API utilisateur" min_trust_level_for_user_api_key: | Niveau de confiance requis pour la génération de clés API utilisateur.
AVERTISSEMENT : la modification du niveau de confiance empêchera les utilisateurs dont le niveau de confiance est inférieur de se connecter via Discourse Hub allowed_user_api_auth_redirects: "URL autorisée pour la redirection d'un utilisateur lors de l'authentification via les clés d'API. Le symbole « * » peut être utilisé pour remplacer n'importe quelle partie de cette adresse (p. ex. : www.exemple.fr/*)." allowed_user_api_push_urls: "Adresses URL autorisées pour le service push du serveur vers l'API utilisateur" - expire_user_api_keys_days: "Nombre de jours avant l'expiration automatique d'une clé API utilisateur (0 pour jamais)" + revoke_user_api_keys_unused_days: "Nombre de jours avant l'expiration automatique d'une clé API utilisateur (0 pour jamais)" tagging_enabled: "Activer l'étiquetage des sujets ?" min_trust_to_create_tag: "Le niveau de confiance minimal requis pour créer une étiquette." max_tags_per_topic: "Le nombre maximal d'étiquettes pouvant être ajoutées à un sujet." diff --git a/config/locales/server.gl.yml b/config/locales/server.gl.yml index a92b6e70f9d..0a1f64cdee7 100644 --- a/config/locales/server.gl.yml +++ b/config/locales/server.gl.yml @@ -1839,11 +1839,11 @@ gl: default_title_count_mode: "Modo predefinido para a páxina do contador do título" retain_web_hook_events_period_days: "Número de días para reter rexistros de eventos de web hook." retry_web_hook_events: "Volver tentar automaticamente 4 veces os eventos de web hook frustrados. Os intervalos entre os novos intentos son de 1, 5, 25 e 125 minutos." - revoke_api_keys_days: "Número de días antes de que unha chave API sen usar sexa revogada automaticamente (0 para nunca)" + revoke_api_keys_unused_days: "Número de días antes de que unha chave API sen usar sexa revogada automaticamente (0 para nunca)" allow_user_api_key_scopes: "Listaxe de ámbitos permitidos para as chaves API de usuario" allowed_user_api_auth_redirects: "URL permitido para redireccionar a autenticación das chaves API de usuario. O símbolo do comodín pódese utilizar para que coincida calquera parte súa (ex.: www.exemplo.com/*)." allowed_user_api_push_urls: "Enderezos URL permitidos para que servidor envíe á API de usuario" - expire_user_api_keys_days: "Número de días antes de que a chave API de usuario caduque automaticamente (0 para nunca)" + revoke_user_api_keys_unused_days: "Número de días antes de que a chave API de usuario caduque automaticamente (0 para nunca)" tagging_enabled: "Activar etiquetas nos temas?" min_trust_to_create_tag: "O nivel de confianza mínimo para crear unha etiqueta." max_tags_per_topic: "O número máximo de etiquetas aplicables a un tema." diff --git a/config/locales/server.he.yml b/config/locales/server.he.yml index 6671ec7e2ce..90468a85d9d 100644 --- a/config/locales/server.he.yml +++ b/config/locales/server.he.yml @@ -2229,14 +2229,14 @@ he: default_sidebar_switch_panel_position: "מיקום כפתורי החלפת לוח בסרגל הצד" retain_web_hook_events_period_days: "מספר הימים לשמירת רשומות אירועי התלייה." retry_web_hook_events: "לנסות מחדש אירועי התליה שנכשלו במשך 4 פעמים. פרקי הזמן שבין הניסיונות החוזרים הם 1, 5, 25 ו־125 דקות." - revoke_api_keys_days: "מספר הימים בטרם שלילה אוטומטית של מפתח API שלא היה בשימוש (0 - לעולם לא)." + revoke_api_keys_unused_days: "מספר הימים בטרם שלילה אוטומטית של מפתח API שלא היה בשימוש (0 - לעולם לא)." allow_user_api_key_scopes: "רשימת אזורים מותרים למפתחות API של משתמשים" min_trust_level_for_user_api_key: | נדרשת דרגת אמון ליצירת מפתחות API למשתמש.
אזהרה: שינוי דרגת האמון ימנע ממשתמשים עם דרגת אמון נמוכה יותר להיכנס דרך Discourse Hub allowed_user_api_auth_redirects: "כתובת מורשית להפניית אימות למפתחות API של משתמש. בסימן התו־כל * ניתן להשתמש כדי ללכוד חלק ממנה (למשל: www.example.com/*‎)." allowed_user_api_push_urls: "URLים מורשים לדחיפת שרת ל API של משתמשים." - expire_user_api_keys_days: "מספר הימים בטרם פקיעת תוקף מפתח ה־API של המשתמש אוטומטית (0 - לעולם לא)." + revoke_user_api_keys_unused_days: "מספר הימים בטרם פקיעת תוקף מפתח ה־API של המשתמש אוטומטית (0 - לעולם לא)." tagging_enabled: "לאפשר תגיות על נושאים?" min_trust_to_create_tag: "דרגת האמון המזערית שנדרשת כדי ליצור תגית." max_tags_per_topic: "כמות התגיות המרבית שניתן להקצות לנושא." diff --git a/config/locales/server.it.yml b/config/locales/server.it.yml index 7f4c0b0a199..4b6a26a28df 100644 --- a/config/locales/server.it.yml +++ b/config/locales/server.it.yml @@ -2123,14 +2123,14 @@ it: default_sidebar_switch_panel_position: "Posizione dei pulsanti della barra laterale" retain_web_hook_events_period_days: "Numero di giorni per mantenere i record degli eventi di web hook." retry_web_hook_events: "Riprova automaticamente gli eventi di hook Web falliti per 4 volte. Gli intervalli di tempo tra i tentativi sono 1, 5, 25 e 125 minuti." - revoke_api_keys_days: "Numero di giorni prima che una chiave API non utilizzata sia revocata automaticamente (0 per non avere mai revoca)" + revoke_api_keys_unused_days: "Numero di giorni prima che una chiave API non utilizzata sia revocata automaticamente (0 per non avere mai revoca)" allow_user_api_key_scopes: "Elenco di ambiti consentiti per le chiavi API utente" min_trust_level_for_user_api_key: | Livello di attendibilità richiesto per la generazione di chiavi API utente.
AVVISO: la modifica del livello di attendibilità impedirà agli utenti con un livello di attendibilità inferiore di accedere tramite Discourse Hub allowed_user_api_auth_redirects: "URL consentito per il reindirizzamento dell'autenticazione per le chiavi API utente. Il simbolo jolly * può essere utilizzato per abbinare qualsiasi parte di esso (ad esempio www.example.com/*)." allowed_user_api_push_urls: "URL consentiti per il push del server alle API utente" - expire_user_api_keys_days: "Numero di giorni prima che una chiave API utente scada automaticamente (0 per non avere scadenza)" + revoke_user_api_keys_unused_days: "Numero di giorni prima che una chiave API utente scada automaticamente (0 per non avere scadenza)" tagging_enabled: "Abilitare le etichette per gli argomenti?" min_trust_to_create_tag: "Il livello di attendibilità minimo per creare un'etichetta." max_tags_per_topic: "Il numero massimo di etichette che si possono applicare ad un argomento." diff --git a/config/locales/server.ja.yml b/config/locales/server.ja.yml index fed64e32cb8..8383a825d1b 100644 --- a/config/locales/server.ja.yml +++ b/config/locales/server.ja.yml @@ -2046,14 +2046,14 @@ ja: default_sidebar_switch_panel_position: "サイドバー切り替えパネルボタンの位置" retain_web_hook_events_period_days: "Webhook イベントレコードを保持する日数。" retry_web_hook_events: "失敗した Webhook イベントを自動的に 4 回再試行する。再試行間の時間差は、1、5、25、および 125 分です。" - revoke_api_keys_days: "未使用の API キーが自動的に取り消されるまでの日数 (0 に設定すると取り消されません)" + revoke_api_keys_unused_days: "未使用の API キーが自動的に取り消されるまでの日数 (0 に設定すると取り消されません)" allow_user_api_key_scopes: "ユーザー API キーに許可されるスコープのリスト" min_trust_level_for_user_api_key: | ユーザー API キーの生成に必要な信頼レベル。
警告: 信頼レベルを変更すると、それより低い信頼レベルのユーザーは DiscourseHub からログインできなくなります。 allowed_user_api_auth_redirects: "ユーザー API キーの認証リダイレクトに許可された URL。任意の部分を照合するには、ワイルドカード記号 * を使用できます (例: www.example.com/*)。" allowed_user_api_push_urls: "ユーザー API へのサーバープッシュで許可される URL" - expire_user_api_keys_days: "ユーザー API キーが自動的に期限切れになるまでの日数 (0 に設定すると期限切れになりません)" + revoke_user_api_keys_unused_days: "ユーザー API キーが自動的に期限切れになるまでの日数 (0 に設定すると期限切れになりません)" tagging_enabled: "トピックでタグを有効にしますか?" min_trust_to_create_tag: "タグを作成するために必要な最低信頼レベル。" max_tags_per_topic: "トピックに適用できる最大タグ数。" diff --git a/config/locales/server.ko.yml b/config/locales/server.ko.yml index dadee6e19b5..797817ac84e 100644 --- a/config/locales/server.ko.yml +++ b/config/locales/server.ko.yml @@ -1884,11 +1884,11 @@ ko: default_title_count_mode: "페이지 제목 카운터의 디폴트 모드" retain_web_hook_events_period_days: "Webhook 이벤트 기록 보유 기간(일)입니다." retry_web_hook_events: "실패한 Webhook 이벤트를 4번 자동으로 재시도합니다. 재시도 간 간격은 1, 5, 25 및 125분입니다." - revoke_api_keys_days: "사용하지 않는 API 키가 자동으로 취소되기까지의 기간(일)(0은 취소 안 함)" + revoke_api_keys_unused_days: "사용하지 않는 API 키가 자동으로 취소되기까지의 기간(일)(0은 취소 안 함)" allow_user_api_key_scopes: "사용자 API 키에 허용되는 범위 목록" allowed_user_api_auth_redirects: "사용자 API 키의 인증 리디렉션을 위해 허용된 URL입니다. 와일드 카드 기호 *를 사용하면 일부를 일치시킬 수 있습니다(예 : www.example.com/*)." allowed_user_api_push_urls: "사용자 API의 서버 푸시를 위한 허용된 URL" - expire_user_api_keys_days: "사용자 API 키가 자동으로 만료되기까지의 기간(일)(0은 만료 안 함)" + revoke_user_api_keys_unused_days: "사용자 API 키가 자동으로 만료되기까지의 기간(일)(0은 만료 안 함)" tagging_enabled: "주제에 태그를 활성화할까요?" min_trust_to_create_tag: "태그를 생성하기 위한 최소 신뢰 레벨입니다." max_tags_per_topic: "주제에 적용할 수 있는 최대 태그입니다." diff --git a/config/locales/server.nl.yml b/config/locales/server.nl.yml index faa5ea24fbd..b9b7cf5cdad 100644 --- a/config/locales/server.nl.yml +++ b/config/locales/server.nl.yml @@ -2113,14 +2113,14 @@ nl: default_sidebar_switch_panel_position: "Positie van paneelschakelknop in de zijbalk" retain_web_hook_events_period_days: "Aantal dagen voor het behouden van records van webhookgebeurtenissen." retry_web_hook_events: "Mislukte webhookgebeurtenissen automatisch 4 keer opnieuw proberen. De intervallen tussen de pogingen zijn 1, 5, 25 en 125 minuten." - revoke_api_keys_days: "Aantal dagen voordat een niet-gebruikte API-sleutel van een gebruiker automatisch wordt ingetrokken (0 voor nooit)" + revoke_api_keys_unused_days: "Aantal dagen voordat een niet-gebruikte API-sleutel van een gebruiker automatisch wordt ingetrokken (0 voor nooit)" allow_user_api_key_scopes: "Lijst van toegestane scopes voor API-sleutels van gebruiker" min_trust_level_for_user_api_key: | Vereist vertrouwensniveau voor het genereren van API-sleutels voor gebruikers.
WAARSCHUWING: als je het vertrouwensniveau wijzigt, kunnen gebruikers met een lager vertrouwensniveau zich niet aanmelden via Discourse Hub allowed_user_api_auth_redirects: "Toegestane URL voor verificatie bij omleiden voor API-sleutels van gebruiker. Het jokerteken * kan worden gebruikt om een deel ervan te laten overeenkomen (bv. www.example.com/*)." allowed_user_api_push_urls: "Toegestane URL's voor server-push naar gebruikers-API" - expire_user_api_keys_days: "Aantal dagen voordat een API-sleutel van een gebruiker automatisch verloopt (0 voor nooit)" + revoke_user_api_keys_unused_days: "Aantal dagen voordat een API-sleutel van een gebruiker automatisch verloopt (0 voor nooit)" tagging_enabled: "Tags op topics inschakelen?" min_trust_to_create_tag: "Het minimale vertrouwensniveau dat nodig is om een tag te maken." max_tags_per_topic: "De maximale tags die op een topic kunnen worden toegepast." diff --git a/config/locales/server.pl_PL.yml b/config/locales/server.pl_PL.yml index ccde4890627..3303074ae40 100644 --- a/config/locales/server.pl_PL.yml +++ b/config/locales/server.pl_PL.yml @@ -2230,14 +2230,14 @@ pl_PL: default_sidebar_switch_panel_position: "Położenie przycisków panelu przełączania paska bocznego" retain_web_hook_events_period_days: "Liczba dni przechowywania rekordów zdarzeń webhooków." retry_web_hook_events: "Automatycznie ponów 4 razy nieudane zdarzenia webhooków. Luki czasowe między ponownymi próbami wynoszą 1, 5, 25 i 125 minut." - revoke_api_keys_days: "Liczba dni do automatycznego unieważnienia nieużywanego klucza API (0 oznacza brak)" + revoke_api_keys_unused_days: "Liczba dni do automatycznego unieważnienia nieużywanego klucza API (0 oznacza brak)" allow_user_api_key_scopes: "Lista zakresów dozwolona dla kluczy API użytkownika." min_trust_level_for_user_api_key: | Poziom zaufania wymagany do generowania kluczy API użytkownika.
OSTRZEŻENIE: Zmiana poziomu zaufania uniemożliwi użytkownikom o niższym poziomie zaufania logowanie się przez Discourse Hub allowed_user_api_auth_redirects: "Dozwolony adres URL do przekierowania uwierzytelniania dla kluczy interfejsu API użytkownika. Symbol wieloznaczny * może być użyty do dopasowania dowolnej jego części (np. www.example.com/*)." allowed_user_api_push_urls: "Dozwolone URLs dla serwera push do API użytkownika" - expire_user_api_keys_days: "Liczba dni do automatycznego wygaśnięcia klucza API użytkownika (0 oznacza brak)" + revoke_user_api_keys_unused_days: "Liczba dni do automatycznego wygaśnięcia klucza API użytkownika (0 oznacza brak)" tagging_enabled: "Włączyć tagi w tematach?" min_trust_to_create_tag: "Minimalny poziom zaufania potrzebny do stworzenia tagu." max_tags_per_topic: "Maksymalna liczba tagów, które mogą zostać połączone z tematem." diff --git a/config/locales/server.pt_BR.yml b/config/locales/server.pt_BR.yml index aa601619cdc..07fc7507408 100644 --- a/config/locales/server.pt_BR.yml +++ b/config/locales/server.pt_BR.yml @@ -2113,14 +2113,14 @@ pt_BR: default_sidebar_switch_panel_position: "Posição dos botões do painel de opções na barra lateral" retain_web_hook_events_period_days: "Quantidade de dias para manter registros de eventos de webhook." retry_web_hook_events: "Repita automaticamente os eventos com falha do webhook quatro vezes. Os intervalos de tempo entre as tentativas são de 1, 5, 25 e 125 minutos." - revoke_api_keys_days: "Quantidade de dias antes de uma chave de API não usada ser revogada automaticamente (0 para nunca)" + revoke_api_keys_unused_days: "Quantidade de dias antes de uma chave de API não usada ser revogada automaticamente (0 para nunca)" allow_user_api_key_scopes: "Lista de escopos permitidos para chaves de API do(a) usuário(a)" min_trust_level_for_user_api_key: | Nível de confiança necessário para geração de chaves de API do(a) usuário(a).
AVISO: alterar o nível de confiança impedirá que os(as) usuários(as) com um nível de confiança inferior façam login via Discourse Hub allowed_user_api_auth_redirects: "URL permitida para o redirecionamento de autenticação das chaves de API do(a) usuário(a). O símbolo curinga * pode ser usado para corresponder a qualquer parte dele (por exemplo, www.example.com/*)." allowed_user_api_push_urls: "URLs permitidas para push de servidor para API do(a) usuário(a)" - expire_user_api_keys_days: "Quantidade de dias antes de uma chave de API do(a) usuário(a) expirar automaticamente (0 para nunca)" + revoke_user_api_keys_unused_days: "Quantidade de dias antes de uma chave de API do(a) usuário(a) expirar automaticamente (0 para nunca)" tagging_enabled: "Ativar etiquetas em tópicos?" min_trust_to_create_tag: "O nível de confiança mínimo necessário para criar uma etiqueta." max_tags_per_topic: "As etiquetas máximas que podem ser aplicadas a um tópico." diff --git a/config/locales/server.ru.yml b/config/locales/server.ru.yml index 6be24786170..08661a6b8e5 100644 --- a/config/locales/server.ru.yml +++ b/config/locales/server.ru.yml @@ -2205,14 +2205,14 @@ ru: default_sidebar_switch_panel_position: "Положение кнопок переключения панели на боковой панели" retain_web_hook_events_period_days: "Количество дней, в течение которых сохраняются записи событий вебхука." retry_web_hook_events: "Автоматически повторять неудачные события вебхука 4 раза. Промежуток времени между повторными попытками составляет 1, 5, 25 и 125 минут." - revoke_api_keys_days: "Количество дней до автоматического отзыва неиспользованного ключа API (0 — никогда)" + revoke_api_keys_unused_days: "Количество дней до автоматического отзыва неиспользованного ключа API (0 — никогда)" allow_user_api_key_scopes: "Список областей, разрешённых для пользовательских API-ключей" min_trust_level_for_user_api_key: | Уровень доверия, необходимый для создания пользовательских API-ключей пользователей.
ВНИМАНИЕ! Изменение уровня доверия не позволит пользователям с более низким уровнем доверия входить через Discourse Hub. allowed_user_api_auth_redirects: "Разрешённый URL для перенаправления аутентификации для API-ключей пользователя. Подстановочный знак * может использоваться для соответствия любой его части (например, www.example.com/*)." allowed_user_api_push_urls: "Разрешённые URL-адреса для отправки на сервер к пользовательскому API" - expire_user_api_keys_days: "Количество дней до автоматического истечения срока действия API-ключа (0 — никогда)" + revoke_user_api_keys_unused_days: "Количество дней до автоматического истечения срока действия API-ключа (0 — никогда)" tagging_enabled: "Включить теги для тем?" min_trust_to_create_tag: "Минимальный уровень доверия для создания тега." max_tags_per_topic: "Максимальное количество тегов, которое может быть применено к теме." diff --git a/config/locales/server.sv.yml b/config/locales/server.sv.yml index 51129773d9e..97614ac9a2f 100644 --- a/config/locales/server.sv.yml +++ b/config/locales/server.sv.yml @@ -2113,14 +2113,14 @@ sv: default_sidebar_switch_panel_position: "Placering av panelknappar för sidofältsomkoppling" retain_web_hook_events_period_days: "Antal dagar för att behålla register över webhook-händelsedata." retry_web_hook_events: "Försök automatiskt igen för misslyckade händelser för webhooken 4 gånger. Tidsspannet mellan försöken är 1, 5, 25 och 125 minuter." - revoke_api_keys_days: "Antal dagar innan en oanvänd API-nyckel automatiskt återkallas (0 för aldrig)" + revoke_api_keys_unused_days: "Antal dagar innan en oanvänd API-nyckel automatiskt återkallas (0 för aldrig)" allow_user_api_key_scopes: "Lista över samtliga tillåtna användar-API-nycklar" min_trust_level_for_user_api_key: | Förtroendenivå som krävs för generering av användar-API-nycklar.
VARNING: Ändring av förtroendenivån kommer att förhindra användare med en lägre förtroendenivå från att logga in via Discourse Hub allowed_user_api_auth_redirects: "Tillåten URL för omdirigering efter verifiering av användares API-nycklar. Jokersymbol * kan användas för att matcha vilken del som helst av denna (t.ex. www.exempel.se/*)." allowed_user_api_push_urls: "Tillåtna URL:er för serverframstötning till användar-API" - expire_user_api_keys_days: "Antal dagar innan en användares API-nyckel automatiskt upphör (0 för aldrig)" + revoke_user_api_keys_unused_days: "Antal dagar innan en användares API-nyckel automatiskt upphör (0 för aldrig)" tagging_enabled: "Vill du aktivera taggar på ämnen?" min_trust_to_create_tag: "Lägsta förtroendenivå som krävs för att skapa en tagg." max_tags_per_topic: "Högsta antal taggar som kan tillskrivas ett ämne." diff --git a/config/locales/server.tr_TR.yml b/config/locales/server.tr_TR.yml index c181a9aac13..2330cc5fff8 100644 --- a/config/locales/server.tr_TR.yml +++ b/config/locales/server.tr_TR.yml @@ -2110,14 +2110,14 @@ tr_TR: default_sidebar_switch_panel_position: "Kenar çubuğu geçiş paneli düğmelerinin konumu" retain_web_hook_events_period_days: "Web kancası olay kayıtlarının saklanacağı gün sayısı." retry_web_hook_events: "Başarısız web kancası olaylarını otomatik olarak 4 kez yeniden deneyin. Yeniden denemeler arasındaki zaman aralıkları 1, 5, 25 ve 125 dakikadır." - revoke_api_keys_days: "Kullanılmayan bir API anahtarının otomatik olarak iptal edilmesinden önceki gün sayısı (asla için 0)" + revoke_api_keys_unused_days: "Kullanılmayan bir API anahtarının otomatik olarak iptal edilmesinden önceki gün sayısı (asla için 0)" allow_user_api_key_scopes: "Kullanıcı API anahtarları için izin verilen kapsamların listesi" min_trust_level_for_user_api_key: | Kullanıcı API anahtarlarının oluşturulması için gereken güven seviyesi.
UYARI: Güven seviyesinin değiştirilmesi, daha düşük güven seviyesine sahip kullanıcıların Discourse Hub üzerinden giriş yapmasını engeller allowed_user_api_auth_redirects: "Kullanıcı API anahtarları için kimlik doğrulama yönlendirmesi için izin verilen URL. Joker karakter sembolü * herhangi bir bölümüyle eşleşmek için kullanılabilir (ör. www.example.com/*)." allowed_user_api_push_urls: "Kullanıcı API'sine sunucu anlık iletimi için izin verilen URL'ler" - expire_user_api_keys_days: "Bir kullanıcı API anahtarının otomatik olarak sona ermesinden önceki gün sayısı (asla için 0)" + revoke_user_api_keys_unused_days: "Bir kullanıcı API anahtarının otomatik olarak sona ermesinden önceki gün sayısı (asla için 0)" tagging_enabled: "Konularda etiketler etkinleştirilsin mi?" min_trust_to_create_tag: "Etiket oluşturmak için gereken minimum güven seviyesi." max_tags_per_topic: "Bir konuya uygulanabilecek maksimum etiket sayısı." diff --git a/config/locales/server.uk.yml b/config/locales/server.uk.yml index 32e3f4e0d38..f815bba0993 100644 --- a/config/locales/server.uk.yml +++ b/config/locales/server.uk.yml @@ -2229,14 +2229,14 @@ uk: default_sidebar_switch_panel_position: "Позиція кнопок перемикання панелі на бічній панелі" retain_web_hook_events_period_days: "Кількість днів для збереження записів про події web hook." retry_web_hook_events: "Автоматично повторювати невдалі події web hook протягом 4 разів. Проміжки часу між повторними спробами становлять 1, 5, 25 і 125 хвилин." - revoke_api_keys_days: "Кількість днів до автоматичного відкликання невикористаного ключа API (0 для ніколи)" + revoke_api_keys_unused_days: "Кількість днів до автоматичного відкликання невикористаного ключа API (0 для ніколи)" allow_user_api_key_scopes: "Список даних, дозволених для API ключів користувача" min_trust_level_for_user_api_key: | Рівень довіри, необхідний для генерації ключів API користувача.
ПОПЕРЕДЖЕННЯ: Зміна рівня довіри не дозволить користувачам з нижчим рівнем довіри увійти в систему через Discourse Hub allowed_user_api_auth_redirects: "Дозволена URL-адреса для переадресації автентифікації для ключів API користувача. Символ підстановки * може використовуватися для узгодження будь-якої його частини (наприклад, www.example.com/*)." allowed_user_api_push_urls: "Дозволені URL-адреси для надсилання на сервер push до API" - expire_user_api_keys_days: "Кількість днів до того, як автоматично закінчиться термін дії ключа API користувача (0 ніколи)" + revoke_user_api_keys_unused_days: "Кількість днів до того, як автоматично закінчиться термін дії ключа API користувача (0 ніколи)" tagging_enabled: "Увімкнути теґи за темами?" min_trust_to_create_tag: "Мінімальний рівень довіри, необхідний для створення теґу." max_tags_per_topic: "Максимум теґів, які можна застосувати до теми." diff --git a/config/locales/server.ur.yml b/config/locales/server.ur.yml index aed9a9d9e4d..161762565a5 100644 --- a/config/locales/server.ur.yml +++ b/config/locales/server.ur.yml @@ -1861,7 +1861,7 @@ ur: allow_user_api_key_scopes: "صارف API کلیدوں کیلئے اجازت دی جانے والی سکَوپس کی فہرست" allowed_user_api_auth_redirects: "صارف API کیز کیلئے توثیقی ریڈائرَیکٹ کیلئے اجازت یافتہ URL۔ وائلڈ کارڈ علامت * اُس کے کسی بھی حصے کو میچ کرنے کیلئے استعمال کیا جا سکتا ہے (مثلاً www.example.com/*)۔" allowed_user_api_push_urls: "صارف API پر سرور پُش کیلئے اجازت یافتہ URL" - expire_user_api_keys_days: "دنوں کی تعداد جس سے پہلے ایک صارف API کِی کی میعاد ختم ہو جائے (کبھی نہیں کیلئے 0)" + revoke_user_api_keys_unused_days: "دنوں کی تعداد جس سے پہلے ایک صارف API کِی کی میعاد ختم ہو جائے (کبھی نہیں کیلئے 0)" tagging_enabled: "ٹاپکس پر ٹیگز فعال کریں؟" min_trust_to_create_tag: "ٹَیگ بنانے کیلئے کم از کم مطلوبہ ٹرسٹ لَیول۔" max_tags_per_topic: "ایک ٹاپک پر لگائے جانے والے ٹَیگز کی زیادہ سے زیادہ تعداد۔" diff --git a/config/locales/server.zh_CN.yml b/config/locales/server.zh_CN.yml index 93e5eca0204..d1e8f2e88a0 100644 --- a/config/locales/server.zh_CN.yml +++ b/config/locales/server.zh_CN.yml @@ -2055,14 +2055,14 @@ zh_CN: default_sidebar_switch_panel_position: "边栏开关面板按钮的位置" retain_web_hook_events_period_days: "保留网络钩子事件记录的天数。" retry_web_hook_events: "自动重试失败的网络钩子事件 4 次。重试之间的时间间隔为 1、5、25 和 125 分钟。" - revoke_api_keys_days: "未使用的 API 密钥被自动撤消前的天数(0 表示从不撤消)" + revoke_api_keys_unused_days: "未使用的 API 密钥被自动撤消前的天数(0 表示从不撤消)" allow_user_api_key_scopes: "用户 API 密钥允许的范围列表" min_trust_level_for_user_api_key: | 生成用户 API 密钥所需的信任级别。
警告:更改信任级别将阻止信任级别较低的用户通过 Discourse Hub 登录 allowed_user_api_auth_redirects: "用户 API 密钥身份验证重定向的允许 URL。通配符 * 可用于匹配它的任何部分(例如 www.example.com/*)。" allowed_user_api_push_urls: "服务器推送到用户 API 的允许 URL" - expire_user_api_keys_days: "用户 API 密钥自动过期前的天数(0 表示从不过期)" + revoke_user_api_keys_unused_days: "用户 API 密钥自动过期前的天数(0 表示从不过期)" tagging_enabled: "在话题上启用标签?" min_trust_to_create_tag: "创建标签所需的最低信任级别。" max_tags_per_topic: "可应用于话题的最大标签数。" diff --git a/config/site_settings.yml b/config/site_settings.yml index e58ad1c84e8..8ec58243ff0 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -2775,9 +2775,13 @@ api: api_key_last_used_epoch: default: "" # Value is added in a migration hidden: true - revoke_api_keys_days: + revoke_api_keys_unused_days: default: 180 max: 36500 + revoke_api_keys_maxlife_days: + default: 0 + max: 36500 + hidden: true user_api: allow_user_api_key_scopes: @@ -2796,9 +2800,13 @@ user_api: allowed_user_api_auth_redirects: default: "https://api.discourse.org/api/auth_redirect|discourse://auth_redirect" type: list - expire_user_api_keys_days: + revoke_user_api_keys_unused_days: default: 180 max: 36500 + revoke_user_api_keys_maxlife_days: + default: 0 + max: 36500 + hidden: true tags: tagging_enabled: diff --git a/db/migrate/20230913194832_rename_revoke_api_keys_settings.rb b/db/migrate/20230913194832_rename_revoke_api_keys_settings.rb new file mode 100644 index 00000000000..36f7ca2b9f3 --- /dev/null +++ b/db/migrate/20230913194832_rename_revoke_api_keys_settings.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# +class RenameRevokeApiKeysSettings < ActiveRecord::Migration[7.0] + def up + execute "UPDATE site_settings SET name = 'revoke_api_keys_unused_days' where name = 'revoke_api_keys_days'" + execute "UPDATE site_settings SET name = 'revoke_user_api_keys_unused_days' where name = 'expire_user_api_keys_days'" + end + + def down + execute "UPDATE site_settings SET name = 'revoke_api_keys_days' where name = 'revoke_api_keys_unused_days'" + execute "UPDATE site_settings SET name = 'expire_user_api_keys_days' where name = 'revoke_user_api_keys_unused_days'" + end +end diff --git a/spec/jobs/auto_expire_user_api_keys_spec.rb b/spec/jobs/auto_expire_user_api_keys_spec.rb deleted file mode 100644 index 5c6ce1c8a6c..00000000000 --- a/spec/jobs/auto_expire_user_api_keys_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Jobs::AutoExpireUserApiKeys do - fab!(:key1) { Fabricate(:readonly_user_api_key) } - fab!(:key2) { Fabricate(:readonly_user_api_key) } - - context "when user api key is unused in last 1 days" do - before { SiteSetting.expire_user_api_keys_days = 1 } - - it "should revoke the key" do - freeze_time - - key1.update!(last_used_at: 2.days.ago) - described_class.new.execute({}) - - expect(key1.reload.revoked_at).to eq_time(Time.zone.now) - expect(key2.reload.revoked_at).to eq(nil) - end - end -end diff --git a/spec/jobs/clean_up_unused_user_api_keys_spec.rb b/spec/jobs/clean_up_unused_user_api_keys_spec.rb new file mode 100644 index 00000000000..0136abe149f --- /dev/null +++ b/spec/jobs/clean_up_unused_user_api_keys_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +RSpec.describe Jobs::CleanUpUnusedUserApiKeys do + fab!(:key1) { Fabricate(:readonly_user_api_key) } + fab!(:key2) { Fabricate(:readonly_user_api_key) } + fab!(:key3) { Fabricate(:readonly_user_api_key, revoked_at: 10.days.ago) } + + context "when user api key is unused in last 1 days" do + before { SiteSetting.revoke_user_api_keys_unused_days = 1 } + + it "should only revoke keys that are active and unused" do + freeze_time + + key1.update!(last_used_at: 2.days.ago) + key3.update!(last_used_at: 2.days.ago) + + expect { described_class.new.execute({}) }.to change { key1.reload.revoked_at }.from(nil).to( + be_within_one_second_of Time.current + ).and not_change { key2.reload.revoked_at }.and not_change { key3.reload.revoked_at } + end + end +end diff --git a/spec/jobs/clean_up_user_api_keys_max_life_spec.rb b/spec/jobs/clean_up_user_api_keys_max_life_spec.rb new file mode 100644 index 00000000000..a000e908712 --- /dev/null +++ b/spec/jobs/clean_up_user_api_keys_max_life_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +RSpec.describe Jobs::CleanUpUserApiKeysMaxLife do + fab!(:older_key) { Fabricate(:readonly_user_api_key, created_at: 3.days.ago) } + fab!(:newer_key) { Fabricate(:readonly_user_api_key, created_at: 1.day.ago) } + fab!(:revoked_key) do + Fabricate(:readonly_user_api_key, created_at: 4.day.ago, revoked_at: 1.day.ago) + end + + context "when user api key was created before the max life period" do + before { SiteSetting.revoke_user_api_keys_maxlife_days = 2 } + + it "should revoke active keys" do + freeze_time + + expect { described_class.new.execute({}) }.to change { older_key.reload.revoked_at }.from( + nil, + ).to(be_within_one_second_of Time.current).and not_change { + newer_key.reload.revoked_at + }.and not_change { revoked_key.reload.revoked_at } + end + end +end diff --git a/spec/models/api_key_spec.rb b/spec/models/api_key_spec.rb index caf5c16e9dc..c9a728261e4 100644 --- a/spec/models/api_key_spec.rb +++ b/spec/models/api_key_spec.rb @@ -42,11 +42,11 @@ RSpec.describe ApiKey do expect(ApiKey.last_used_epoch).to eq(nil) end - it "can automatically revoke keys" do + it "can automatically revoke unused keys" do now = Time.now SiteSetting.api_key_last_used_epoch = now - 2.years - SiteSetting.revoke_api_keys_days = 180 # 6 months + SiteSetting.revoke_api_keys_unused_days = 180 # 6 months freeze_time now - 1.year never_used = Fabricate(:api_key) @@ -78,6 +78,22 @@ RSpec.describe ApiKey do expect(used_recently.revoked_at).to eq(nil) end + it "can automatically revoke keys by max life" do + freeze_time + + SiteSetting.revoke_api_keys_maxlife_days = 2 + + older_key = Fabricate(:api_key, created_at: 3.days.ago) + newer_key = Fabricate(:api_key, created_at: 1.days.ago) + revoked_key = Fabricate(:api_key, created_at: 3.days.ago, revoked_at: 1.day.ago) + + expect { ApiKey.revoke_max_life_keys! }.to change { older_key.reload.revoked_at }.from(nil).to( + be_within_one_second_of Time.current + ).and not_change { newer_key.reload.revoked_at }.and not_change { + revoked_key.reload.revoked_at + } + end + describe "API Key scope mappings" do it "maps api_key permissions" do api_key_mappings = ApiKeyScope.scope_mappings[:topics]