mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 09:42:07 +08:00
FEATURE: site settings to revoke api keys older than a number of days (#23595)
* FEATURE: site settings to revoke api keys older than a number of days
This commit is contained in:
parent
c8fff19b99
commit
d93c2cb3d2
|
@ -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
|
11
app/jobs/scheduled/clean_up_api_keys_max_life.rb
Normal file
11
app/jobs/scheduled/clean_up_api_keys_max_life.rb
Normal file
|
@ -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
|
18
app/jobs/scheduled/clean_up_unused_user_api_keys.rb
Normal file
18
app/jobs/scheduled/clean_up_unused_user_api_keys.rb
Normal file
|
@ -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
|
18
app/jobs/scheduled/clean_up_user_api_keys_max_life.rb
Normal file
18
app/jobs/scheduled/clean_up_user_api_keys_max_life.rb
Normal file
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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: |
|
||||
مستوى الثقة المطلوب لإنشاء مفاتيح واجهة برمجة تطبيقات المستخدم<br>
|
||||
<b>تحذير</b>: سيؤدي تغيير مستوى الثقة إلى منع المستخدمين في مستويات الثقة الأقل من تسجيل الدخول عبر 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: "الحد الأقصى لعدد الوسوم التي يمكن تطبيقها على موضوع"
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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.<br>
|
||||
<b>WARNUNG</b>: 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."
|
||||
|
|
|
@ -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:
|
|||
<b>WARNING</b>: 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
|
||||
|
||||
|
|
|
@ -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.<br>
|
||||
<b>ADVERTENCIA</b>: 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."
|
||||
|
|
|
@ -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.<br>
|
||||
<b>VAROITUS:</b> 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."
|
||||
|
|
|
@ -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.<br>
|
||||
<b>AVERTISSEMENT</b> : 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."
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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 למשתמש.<br>
|
||||
<b>אזהרה</b>: שינוי דרגת האמון ימנע ממשתמשים עם דרגת אמון נמוכה יותר להיכנס דרך 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: "כמות התגיות המרבית שניתן להקצות לנושא."
|
||||
|
|
|
@ -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.<br>
|
||||
<b>AVVISO</b>: 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."
|
||||
|
|
|
@ -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 キーの生成に必要な信頼レベル。<br>
|
||||
<b>警告</b>: 信頼レベルを変更すると、それより低い信頼レベルのユーザーは 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: "トピックに適用できる最大タグ数。"
|
||||
|
|
|
@ -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: "주제에 적용할 수 있는 최대 태그입니다."
|
||||
|
|
|
@ -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.<br>
|
||||
<b>WAARSCHUWING</b>: 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."
|
||||
|
|
|
@ -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.<br>
|
||||
<b>OSTRZEŻENIE</b>: 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."
|
||||
|
|
|
@ -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).<br>
|
||||
<b>AVISO</b>: 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."
|
||||
|
|
|
@ -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-ключей пользователей.<br>
|
||||
<b>ВНИМАНИЕ</b>! Изменение уровня доверия не позволит пользователям с более низким уровнем доверия входить через 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: "Максимальное количество тегов, которое может быть применено к теме."
|
||||
|
|
|
@ -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.<br>
|
||||
<b>VARNING</b>: Ä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."
|
||||
|
|
|
@ -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.<br>
|
||||
<b>UYARI</b>: 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ı."
|
||||
|
|
|
@ -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 користувача.<br>
|
||||
<b>ПОПЕРЕДЖЕННЯ</b>: Зміна рівня довіри не дозволить користувачам з нижчим рівнем довіри увійти в систему через 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: "Максимум теґів, які можна застосувати до теми."
|
||||
|
|
|
@ -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: "ایک ٹاپک پر لگائے جانے والے ٹَیگز کی زیادہ سے زیادہ تعداد۔"
|
||||
|
|
|
@ -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 密钥所需的信任级别。<br>
|
||||
<b>警告</b>:更改信任级别将阻止信任级别较低的用户通过 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: "可应用于话题的最大标签数。"
|
||||
|
|
|
@ -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:
|
||||
|
|
13
db/migrate/20230913194832_rename_revoke_api_keys_settings.rb
Normal file
13
db/migrate/20230913194832_rename_revoke_api_keys_settings.rb
Normal file
|
@ -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
|
|
@ -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
|
22
spec/jobs/clean_up_unused_user_api_keys_spec.rb
Normal file
22
spec/jobs/clean_up_unused_user_api_keys_spec.rb
Normal file
|
@ -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
|
23
spec/jobs/clean_up_user_api_keys_max_life_spec.rb
Normal file
23
spec/jobs/clean_up_user_api_keys_max_life_spec.rb
Normal file
|
@ -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
|
|
@ -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]
|
||||
|
|
Loading…
Reference in New Issue
Block a user