sources/oauth: save null instead of empty string for sources without configurable URLs
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
		| @ -60,9 +60,9 @@ class BaseOAuthClient: | |||||||
|         args.update(additional) |         args.update(additional) | ||||||
|         params = urlencode(args) |         params = urlencode(args) | ||||||
|         LOGGER.info("redirect args", **args) |         LOGGER.info("redirect args", **args) | ||||||
|         base_url = self.source.authorization_url |         base_url = self.source.type.authorization_url | ||||||
|         if not self.source.type.urls_customizable: |         if self.source.authorization_url: | ||||||
|             base_url = self.source.type.authorization_url |             base_url = self.source.authorization_url | ||||||
|         if base_url == "": |         if base_url == "": | ||||||
|             Event.new( |             Event.new( | ||||||
|                 EventAction.CONFIGURATION_ERROR, |                 EventAction.CONFIGURATION_ERROR, | ||||||
|  | |||||||
| @ -28,9 +28,9 @@ class OAuthClient(BaseOAuthClient): | |||||||
|         if raw_token is not None and verifier is not None: |         if raw_token is not None and verifier is not None: | ||||||
|             token = self.parse_raw_token(raw_token) |             token = self.parse_raw_token(raw_token) | ||||||
|             try: |             try: | ||||||
|                 access_token_url: str = self.source.access_token_url |                 access_token_url: str = self.source.type.access_token_url or "" | ||||||
|                 if not self.source.type.urls_customizable: |                 if self.source.access_token_url: | ||||||
|                     access_token_url = self.source.type.access_token_url or "" |                     access_token_url = self.source.access_token_url | ||||||
|                 response = self.do_request( |                 response = self.do_request( | ||||||
|                     "post", |                     "post", | ||||||
|                     access_token_url, |                     access_token_url, | ||||||
| @ -51,9 +51,9 @@ class OAuthClient(BaseOAuthClient): | |||||||
|         "Fetch the OAuth request token. Only required for OAuth 1.0." |         "Fetch the OAuth request token. Only required for OAuth 1.0." | ||||||
|         callback = self.request.build_absolute_uri(self.callback) |         callback = self.request.build_absolute_uri(self.callback) | ||||||
|         try: |         try: | ||||||
|             request_token_url: str = self.source.request_token_url |             request_token_url: str = self.source.type.request_token_url or "" | ||||||
|             if not self.source.type.urls_customizable: |             if self.source.request_token_url: | ||||||
|                 request_token_url = self.source.type.request_token_url or "" |                 request_token_url = self.source.request_token_url | ||||||
|             response = self.do_request( |             response = self.do_request( | ||||||
|                 "post", |                 "post", | ||||||
|                 request_token_url, |                 request_token_url, | ||||||
|  | |||||||
| @ -56,9 +56,9 @@ class OAuth2Client(BaseOAuthClient): | |||||||
|             LOGGER.warning("No code returned by the source") |             LOGGER.warning("No code returned by the source") | ||||||
|             return None |             return None | ||||||
|         try: |         try: | ||||||
|             access_token_url = self.source.access_token_url |             access_token_url = self.source.type.access_token_url or "" | ||||||
|             if not self.source.type.urls_customizable: |             if self.source.access_token_url: | ||||||
|                 access_token_url = self.source.type.access_token_url or "" |                 access_token_url = self.source.access_token_url | ||||||
|             response = self.session.request( |             response = self.session.request( | ||||||
|                 "post", |                 "post", | ||||||
|                 access_token_url, |                 access_token_url, | ||||||
|  | |||||||
| @ -0,0 +1,79 @@ | |||||||
|  | # Generated by Django 3.2 on 2021-04-17 19:00 | ||||||
|  | from django.apps.registry import Apps | ||||||
|  | from django.db import migrations, models | ||||||
|  | from django.db.backends.base.schema import BaseDatabaseSchemaEditor | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def update_empty_urls(apps: Apps, schema_editor: BaseDatabaseSchemaEditor): | ||||||
|  |     OAuthSource = apps.get_model("authentik_sources_oauth", "oauthsource") | ||||||
|  |  | ||||||
|  |     db_alias = schema_editor.connection.alias | ||||||
|  |  | ||||||
|  |     for source in OAuthSource.objects.using(db_alias).all(): | ||||||
|  |         changed = False | ||||||
|  |         if source.access_token_url == "": | ||||||
|  |             source.access_token_url = None | ||||||
|  |             changed = True | ||||||
|  |         if source.authorization_url == "": | ||||||
|  |             source.authorization_url = None | ||||||
|  |             changed = True | ||||||
|  |         if source.profile_url == "": | ||||||
|  |             source.profile_url = None | ||||||
|  |             changed = True | ||||||
|  |         if source.request_token_url == "": | ||||||
|  |             source.request_token_url = None | ||||||
|  |             changed = True | ||||||
|  |  | ||||||
|  |         if changed: | ||||||
|  |             source.save() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  |  | ||||||
|  |     dependencies = [ | ||||||
|  |         ("authentik_sources_oauth", "0003_auto_20210416_0726"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     operations = [ | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="oauthsource", | ||||||
|  |             name="access_token_url", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 help_text="URL used by authentik to retrive tokens.", | ||||||
|  |                 max_length=255, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="Access Token URL", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="oauthsource", | ||||||
|  |             name="authorization_url", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 help_text="URL the user is redirect to to conest the flow.", | ||||||
|  |                 max_length=255, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="Authorization URL", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="oauthsource", | ||||||
|  |             name="profile_url", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 help_text="URL used by authentik to get user information.", | ||||||
|  |                 max_length=255, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="Profile URL", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="oauthsource", | ||||||
|  |             name="request_token_url", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 help_text="URL used to request the initial token. This URL is only required for OAuth 1.", | ||||||
|  |                 max_length=255, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="Request Token URL", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.RunPython(update_empty_urls), | ||||||
|  |     ] | ||||||
| @ -19,7 +19,7 @@ class OAuthSource(Source): | |||||||
|  |  | ||||||
|     provider_type = models.CharField(max_length=255) |     provider_type = models.CharField(max_length=255) | ||||||
|     request_token_url = models.CharField( |     request_token_url = models.CharField( | ||||||
|         blank=True, |         null=True, | ||||||
|         max_length=255, |         max_length=255, | ||||||
|         verbose_name=_("Request Token URL"), |         verbose_name=_("Request Token URL"), | ||||||
|         help_text=_( |         help_text=_( | ||||||
| @ -28,19 +28,19 @@ class OAuthSource(Source): | |||||||
|     ) |     ) | ||||||
|     authorization_url = models.CharField( |     authorization_url = models.CharField( | ||||||
|         max_length=255, |         max_length=255, | ||||||
|         blank=True, |         null=True, | ||||||
|         verbose_name=_("Authorization URL"), |         verbose_name=_("Authorization URL"), | ||||||
|         help_text=_("URL the user is redirect to to conest the flow."), |         help_text=_("URL the user is redirect to to conest the flow."), | ||||||
|     ) |     ) | ||||||
|     access_token_url = models.CharField( |     access_token_url = models.CharField( | ||||||
|         max_length=255, |         max_length=255, | ||||||
|         blank=True, |         null=True, | ||||||
|         verbose_name=_("Access Token URL"), |         verbose_name=_("Access Token URL"), | ||||||
|         help_text=_("URL used by authentik to retrive tokens."), |         help_text=_("URL used by authentik to retrive tokens."), | ||||||
|     ) |     ) | ||||||
|     profile_url = models.CharField( |     profile_url = models.CharField( | ||||||
|         max_length=255, |         max_length=255, | ||||||
|         blank=True, |         null=True, | ||||||
|         verbose_name=_("Profile URL"), |         verbose_name=_("Profile URL"), | ||||||
|         help_text=_("URL used by authentik to get user information."), |         help_text=_("URL used by authentik to get user information."), | ||||||
|     ) |     ) | ||||||
|  | |||||||
| @ -17034,21 +17034,29 @@ definitions: | |||||||
|           for OAuth 1. |           for OAuth 1. | ||||||
|         type: string |         type: string | ||||||
|         maxLength: 255 |         maxLength: 255 | ||||||
|  |         minLength: 1 | ||||||
|  |         x-nullable: true | ||||||
|       authorization_url: |       authorization_url: | ||||||
|         title: Authorization URL |         title: Authorization URL | ||||||
|         description: URL the user is redirect to to conest the flow. |         description: URL the user is redirect to to conest the flow. | ||||||
|         type: string |         type: string | ||||||
|         maxLength: 255 |         maxLength: 255 | ||||||
|  |         minLength: 1 | ||||||
|  |         x-nullable: true | ||||||
|       access_token_url: |       access_token_url: | ||||||
|         title: Access Token URL |         title: Access Token URL | ||||||
|         description: URL used by authentik to retrive tokens. |         description: URL used by authentik to retrive tokens. | ||||||
|         type: string |         type: string | ||||||
|         maxLength: 255 |         maxLength: 255 | ||||||
|  |         minLength: 1 | ||||||
|  |         x-nullable: true | ||||||
|       profile_url: |       profile_url: | ||||||
|         title: Profile URL |         title: Profile URL | ||||||
|         description: URL used by authentik to get user information. |         description: URL used by authentik to get user information. | ||||||
|         type: string |         type: string | ||||||
|         maxLength: 255 |         maxLength: 255 | ||||||
|  |         minLength: 1 | ||||||
|  |         x-nullable: true | ||||||
|       consumer_key: |       consumer_key: | ||||||
|         title: Consumer key |         title: Consumer key | ||||||
|         type: string |         type: string | ||||||
|  | |||||||
| @ -68,7 +68,7 @@ msgstr "API request failed" | |||||||
| msgid "Access Key" | msgid "Access Key" | ||||||
| msgstr "Access Key" | msgstr "Access Key" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:72 | #: src/pages/sources/oauth/OAuthSourceForm.ts:73 | ||||||
| msgid "Access token URL" | msgid "Access token URL" | ||||||
| msgstr "Access token URL" | msgstr "Access token URL" | ||||||
|  |  | ||||||
| @ -274,7 +274,7 @@ msgstr "Audience" | |||||||
| msgid "Authentication" | msgid "Authentication" | ||||||
| msgstr "Authentication" | msgstr "Authentication" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:175 | #: src/pages/sources/oauth/OAuthSourceForm.ts:189 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:245 | #: src/pages/sources/saml/SAMLSourceForm.ts:245 | ||||||
| msgid "Authentication flow" | msgid "Authentication flow" | ||||||
| msgstr "Authentication flow" | msgstr "Authentication flow" | ||||||
| @ -292,7 +292,7 @@ msgstr "Authorization" | |||||||
| msgid "Authorization Code" | msgid "Authorization Code" | ||||||
| msgstr "Authorization Code" | msgstr "Authorization Code" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:65 | #: src/pages/sources/oauth/OAuthSourceForm.ts:66 | ||||||
| #: src/pages/sources/oauth/OAuthSourceViewPage.ts:95 | #: src/pages/sources/oauth/OAuthSourceViewPage.ts:95 | ||||||
| msgid "Authorization URL" | msgid "Authorization URL" | ||||||
| msgstr "Authorization URL" | msgstr "Authorization URL" | ||||||
| @ -649,11 +649,11 @@ msgstr "Consider Objects matching this filter to be Groups." | |||||||
| msgid "Consider Objects matching this filter to be Users." | msgid "Consider Objects matching this filter to be Users." | ||||||
| msgstr "Consider Objects matching this filter to be Users." | msgstr "Consider Objects matching this filter to be Users." | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:124 | #: src/pages/sources/oauth/OAuthSourceForm.ts:126 | ||||||
| msgid "Consumer key" | msgid "Consumer key" | ||||||
| msgstr "Consumer key" | msgstr "Consumer key" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:130 | #: src/pages/sources/oauth/OAuthSourceForm.ts:132 | ||||||
| msgid "Consumer secret" | msgid "Consumer secret" | ||||||
| msgstr "Consumer secret" | msgstr "Consumer secret" | ||||||
|  |  | ||||||
| @ -1107,7 +1107,7 @@ msgstr "Enable TOTP" | |||||||
| #: src/pages/policies/BoundPoliciesList.ts:37 | #: src/pages/policies/BoundPoliciesList.ts:37 | ||||||
| #: src/pages/policies/PolicyBindingForm.ts:198 | #: src/pages/policies/PolicyBindingForm.ts:198 | ||||||
| #: src/pages/sources/ldap/LDAPSourceForm.ts:69 | #: src/pages/sources/ldap/LDAPSourceForm.ts:69 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:113 | #: src/pages/sources/oauth/OAuthSourceForm.ts:115 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:69 | #: src/pages/sources/saml/SAMLSourceForm.ts:69 | ||||||
| msgid "Enabled" | msgid "Enabled" | ||||||
| msgstr "Enabled" | msgstr "Enabled" | ||||||
| @ -1116,7 +1116,7 @@ msgstr "Enabled" | |||||||
| msgid "Enrollment" | msgid "Enrollment" | ||||||
| msgstr "Enrollment" | msgstr "Enrollment" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:196 | #: src/pages/sources/oauth/OAuthSourceForm.ts:210 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:266 | #: src/pages/sources/saml/SAMLSourceForm.ts:266 | ||||||
| #: src/pages/stages/identification/IdentificationStageForm.ts:107 | #: src/pages/stages/identification/IdentificationStageForm.ts:107 | ||||||
| msgid "Enrollment flow" | msgid "Enrollment flow" | ||||||
| @ -1328,17 +1328,17 @@ msgstr "Flow" | |||||||
| msgid "Flow Overview" | msgid "Flow Overview" | ||||||
| msgstr "Flow Overview" | msgstr "Flow Overview" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:171 | #: src/pages/sources/oauth/OAuthSourceForm.ts:185 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:220 | #: src/pages/sources/saml/SAMLSourceForm.ts:220 | ||||||
| msgid "Flow settings" | msgid "Flow settings" | ||||||
| msgstr "Flow settings" | msgstr "Flow settings" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:193 | #: src/pages/sources/oauth/OAuthSourceForm.ts:207 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:263 | #: src/pages/sources/saml/SAMLSourceForm.ts:263 | ||||||
| msgid "Flow to use when authenticating existing users." | msgid "Flow to use when authenticating existing users." | ||||||
| msgstr "Flow to use when authenticating existing users." | msgstr "Flow to use when authenticating existing users." | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:214 | #: src/pages/sources/oauth/OAuthSourceForm.ts:228 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:284 | #: src/pages/sources/saml/SAMLSourceForm.ts:284 | ||||||
| msgid "Flow to use when enrolling new users." | msgid "Flow to use when enrolling new users." | ||||||
| msgstr "Flow to use when enrolling new users." | msgstr "Flow to use when enrolling new users." | ||||||
| @ -1718,9 +1718,9 @@ msgstr "Loading" | |||||||
| #: src/pages/providers/saml/SAMLProviderImportForm.ts:55 | #: src/pages/providers/saml/SAMLProviderImportForm.ts:55 | ||||||
| #: src/pages/sources/ldap/LDAPSourceForm.ts:164 | #: src/pages/sources/ldap/LDAPSourceForm.ts:164 | ||||||
| #: src/pages/sources/ldap/LDAPSourceForm.ts:190 | #: src/pages/sources/ldap/LDAPSourceForm.ts:190 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:163 | #: src/pages/sources/oauth/OAuthSourceForm.ts:177 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:191 | #: src/pages/sources/oauth/OAuthSourceForm.ts:205 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:212 | #: src/pages/sources/oauth/OAuthSourceForm.ts:226 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:126 | #: src/pages/sources/saml/SAMLSourceForm.ts:126 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:240 | #: src/pages/sources/saml/SAMLSourceForm.ts:240 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:261 | #: src/pages/sources/saml/SAMLSourceForm.ts:261 | ||||||
| @ -1887,7 +1887,7 @@ msgstr "Monitor" | |||||||
| #: src/pages/sources/SourcesListPage.ts:51 | #: src/pages/sources/SourcesListPage.ts:51 | ||||||
| #: src/pages/sources/ldap/LDAPSourceForm.ts:54 | #: src/pages/sources/ldap/LDAPSourceForm.ts:54 | ||||||
| #: src/pages/sources/ldap/LDAPSourceViewPage.ts:64 | #: src/pages/sources/ldap/LDAPSourceViewPage.ts:64 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:98 | #: src/pages/sources/oauth/OAuthSourceForm.ts:100 | ||||||
| #: src/pages/sources/oauth/OAuthSourceViewPage.ts:63 | #: src/pages/sources/oauth/OAuthSourceViewPage.ts:63 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:54 | #: src/pages/sources/saml/SAMLSourceForm.ts:54 | ||||||
| #: src/pages/sources/saml/SAMLSourceViewPage.ts:66 | #: src/pages/sources/saml/SAMLSourceViewPage.ts:66 | ||||||
| @ -2338,7 +2338,7 @@ msgstr "Private key available?" | |||||||
| msgid "Private key, acquired from https://www.google.com/recaptcha/intro/v3.html." | msgid "Private key, acquired from https://www.google.com/recaptcha/intro/v3.html." | ||||||
| msgstr "Private key, acquired from https://www.google.com/recaptcha/intro/v3.html." | msgstr "Private key, acquired from https://www.google.com/recaptcha/intro/v3.html." | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:79 | #: src/pages/sources/oauth/OAuthSourceForm.ts:80 | ||||||
| msgid "Profile URL" | msgid "Profile URL" | ||||||
| msgstr "Profile URL" | msgstr "Profile URL" | ||||||
|  |  | ||||||
| @ -2380,7 +2380,7 @@ msgstr "Property mappings used to user creation." | |||||||
| #: src/pages/providers/oauth2/OAuth2ProviderForm.ts:81 | #: src/pages/providers/oauth2/OAuth2ProviderForm.ts:81 | ||||||
| #: src/pages/providers/proxy/ProxyProviderForm.ts:99 | #: src/pages/providers/proxy/ProxyProviderForm.ts:99 | ||||||
| #: src/pages/providers/saml/SAMLProviderForm.ts:78 | #: src/pages/providers/saml/SAMLProviderForm.ts:78 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:120 | #: src/pages/sources/oauth/OAuthSourceForm.ts:122 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:76 | #: src/pages/sources/saml/SAMLSourceForm.ts:76 | ||||||
| msgid "Protocol settings" | msgid "Protocol settings" | ||||||
| msgstr "Protocol settings" | msgstr "Protocol settings" | ||||||
| @ -2403,7 +2403,7 @@ msgstr "Provider" | |||||||
| msgid "Provider Type" | msgid "Provider Type" | ||||||
| msgstr "Provider Type" | msgstr "Provider Type" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:136 | #: src/pages/sources/oauth/OAuthSourceForm.ts:138 | ||||||
| msgid "Provider type" | msgid "Provider type" | ||||||
| msgstr "Provider type" | msgstr "Provider type" | ||||||
|  |  | ||||||
| @ -2529,7 +2529,7 @@ msgstr "Request" | |||||||
| msgid "Request has been denied." | msgid "Request has been denied." | ||||||
| msgstr "Request has been denied." | msgstr "Request has been denied." | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:86 | #: src/pages/sources/oauth/OAuthSourceForm.ts:87 | ||||||
| msgid "Request token URL" | msgid "Request token URL" | ||||||
| msgstr "Request token URL" | msgstr "Request token URL" | ||||||
|  |  | ||||||
| @ -2808,7 +2808,7 @@ msgstr "Skip path regex" | |||||||
| #: src/pages/applications/ApplicationListPage.ts:58 | #: src/pages/applications/ApplicationListPage.ts:58 | ||||||
| #: src/pages/flows/FlowForm.ts:94 | #: src/pages/flows/FlowForm.ts:94 | ||||||
| #: src/pages/sources/ldap/LDAPSourceForm.ts:60 | #: src/pages/sources/ldap/LDAPSourceForm.ts:60 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:104 | #: src/pages/sources/oauth/OAuthSourceForm.ts:106 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:60 | #: src/pages/sources/saml/SAMLSourceForm.ts:60 | ||||||
| msgid "Slug" | msgid "Slug" | ||||||
| msgstr "Slug" | msgstr "Slug" | ||||||
| @ -3027,7 +3027,7 @@ msgid "Successfully created service-connection." | |||||||
| msgstr "Successfully created service-connection." | msgstr "Successfully created service-connection." | ||||||
|  |  | ||||||
| #: src/pages/sources/ldap/LDAPSourceForm.ts:47 | #: src/pages/sources/ldap/LDAPSourceForm.ts:47 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:50 | #: src/pages/sources/oauth/OAuthSourceForm.ts:51 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:47 | #: src/pages/sources/saml/SAMLSourceForm.ts:47 | ||||||
| msgid "Successfully created source." | msgid "Successfully created source." | ||||||
| msgstr "Successfully created source." | msgstr "Successfully created source." | ||||||
| @ -3163,7 +3163,7 @@ msgid "Successfully updated service-connection." | |||||||
| msgstr "Successfully updated service-connection." | msgstr "Successfully updated service-connection." | ||||||
|  |  | ||||||
| #: src/pages/sources/ldap/LDAPSourceForm.ts:44 | #: src/pages/sources/ldap/LDAPSourceForm.ts:44 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:47 | #: src/pages/sources/oauth/OAuthSourceForm.ts:48 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:44 | #: src/pages/sources/saml/SAMLSourceForm.ts:44 | ||||||
| msgid "Successfully updated source." | msgid "Successfully updated source." | ||||||
| msgstr "Successfully updated source." | msgstr "Successfully updated source." | ||||||
| @ -3425,7 +3425,7 @@ msgstr "UI settings" | |||||||
| msgid "UID" | msgid "UID" | ||||||
| msgstr "UID" | msgstr "UID" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:61 | #: src/pages/sources/oauth/OAuthSourceForm.ts:62 | ||||||
| msgid "URL settings" | msgid "URL settings" | ||||||
| msgstr "URL settings" | msgstr "URL settings" | ||||||
|  |  | ||||||
| @ -3433,19 +3433,19 @@ msgstr "URL settings" | |||||||
| msgid "URL that the initial Login request is sent to." | msgid "URL that the initial Login request is sent to." | ||||||
| msgstr "URL that the initial Login request is sent to." | msgstr "URL that the initial Login request is sent to." | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:69 | #: src/pages/sources/oauth/OAuthSourceForm.ts:70 | ||||||
| msgid "URL the user is redirect to to consent the authorization." | msgid "URL the user is redirect to to consent the authorization." | ||||||
| msgstr "URL the user is redirect to to consent the authorization." | msgstr "URL the user is redirect to to consent the authorization." | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:83 | #: src/pages/sources/oauth/OAuthSourceForm.ts:84 | ||||||
| msgid "URL used by authentik to get user information." | msgid "URL used by authentik to get user information." | ||||||
| msgstr "URL used by authentik to get user information." | msgstr "URL used by authentik to get user information." | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:76 | #: src/pages/sources/oauth/OAuthSourceForm.ts:77 | ||||||
| msgid "URL used by authentik to retrieve tokens." | msgid "URL used by authentik to retrieve tokens." | ||||||
| msgstr "URL used by authentik to retrieve tokens." | msgstr "URL used by authentik to retrieve tokens." | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:89 | #: src/pages/sources/oauth/OAuthSourceForm.ts:90 | ||||||
| msgid "URL used to request the initial token. This URL is only required for OAuth 1." | msgid "URL used to request the initial token. This URL is only required for OAuth 1." | ||||||
| msgstr "URL used to request the initial token. This URL is only required for OAuth 1." | msgstr "URL used to request the initial token. This URL is only required for OAuth 1." | ||||||
|  |  | ||||||
|  | |||||||
| @ -68,7 +68,7 @@ msgstr "" | |||||||
| msgid "Access Key" | msgid "Access Key" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:72 | #: src/pages/sources/oauth/OAuthSourceForm.ts:73 | ||||||
| msgid "Access token URL" | msgid "Access token URL" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @ -270,7 +270,7 @@ msgstr "" | |||||||
| msgid "Authentication" | msgid "Authentication" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:175 | #: src/pages/sources/oauth/OAuthSourceForm.ts:189 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:245 | #: src/pages/sources/saml/SAMLSourceForm.ts:245 | ||||||
| msgid "Authentication flow" | msgid "Authentication flow" | ||||||
| msgstr "" | msgstr "" | ||||||
| @ -288,7 +288,7 @@ msgstr "" | |||||||
| msgid "Authorization Code" | msgid "Authorization Code" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:65 | #: src/pages/sources/oauth/OAuthSourceForm.ts:66 | ||||||
| #: src/pages/sources/oauth/OAuthSourceViewPage.ts:95 | #: src/pages/sources/oauth/OAuthSourceViewPage.ts:95 | ||||||
| msgid "Authorization URL" | msgid "Authorization URL" | ||||||
| msgstr "" | msgstr "" | ||||||
| @ -643,11 +643,11 @@ msgstr "" | |||||||
| msgid "Consider Objects matching this filter to be Users." | msgid "Consider Objects matching this filter to be Users." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:124 | #: src/pages/sources/oauth/OAuthSourceForm.ts:126 | ||||||
| msgid "Consumer key" | msgid "Consumer key" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:130 | #: src/pages/sources/oauth/OAuthSourceForm.ts:132 | ||||||
| msgid "Consumer secret" | msgid "Consumer secret" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @ -1099,7 +1099,7 @@ msgstr "" | |||||||
| #: src/pages/policies/BoundPoliciesList.ts:37 | #: src/pages/policies/BoundPoliciesList.ts:37 | ||||||
| #: src/pages/policies/PolicyBindingForm.ts:198 | #: src/pages/policies/PolicyBindingForm.ts:198 | ||||||
| #: src/pages/sources/ldap/LDAPSourceForm.ts:69 | #: src/pages/sources/ldap/LDAPSourceForm.ts:69 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:113 | #: src/pages/sources/oauth/OAuthSourceForm.ts:115 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:69 | #: src/pages/sources/saml/SAMLSourceForm.ts:69 | ||||||
| msgid "Enabled" | msgid "Enabled" | ||||||
| msgstr "" | msgstr "" | ||||||
| @ -1108,7 +1108,7 @@ msgstr "" | |||||||
| msgid "Enrollment" | msgid "Enrollment" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:196 | #: src/pages/sources/oauth/OAuthSourceForm.ts:210 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:266 | #: src/pages/sources/saml/SAMLSourceForm.ts:266 | ||||||
| #: src/pages/stages/identification/IdentificationStageForm.ts:107 | #: src/pages/stages/identification/IdentificationStageForm.ts:107 | ||||||
| msgid "Enrollment flow" | msgid "Enrollment flow" | ||||||
| @ -1320,17 +1320,17 @@ msgstr "" | |||||||
| msgid "Flow Overview" | msgid "Flow Overview" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:171 | #: src/pages/sources/oauth/OAuthSourceForm.ts:185 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:220 | #: src/pages/sources/saml/SAMLSourceForm.ts:220 | ||||||
| msgid "Flow settings" | msgid "Flow settings" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:193 | #: src/pages/sources/oauth/OAuthSourceForm.ts:207 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:263 | #: src/pages/sources/saml/SAMLSourceForm.ts:263 | ||||||
| msgid "Flow to use when authenticating existing users." | msgid "Flow to use when authenticating existing users." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:214 | #: src/pages/sources/oauth/OAuthSourceForm.ts:228 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:284 | #: src/pages/sources/saml/SAMLSourceForm.ts:284 | ||||||
| msgid "Flow to use when enrolling new users." | msgid "Flow to use when enrolling new users." | ||||||
| msgstr "" | msgstr "" | ||||||
| @ -1710,9 +1710,9 @@ msgstr "" | |||||||
| #: src/pages/providers/saml/SAMLProviderImportForm.ts:55 | #: src/pages/providers/saml/SAMLProviderImportForm.ts:55 | ||||||
| #: src/pages/sources/ldap/LDAPSourceForm.ts:164 | #: src/pages/sources/ldap/LDAPSourceForm.ts:164 | ||||||
| #: src/pages/sources/ldap/LDAPSourceForm.ts:190 | #: src/pages/sources/ldap/LDAPSourceForm.ts:190 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:163 | #: src/pages/sources/oauth/OAuthSourceForm.ts:177 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:191 | #: src/pages/sources/oauth/OAuthSourceForm.ts:205 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:212 | #: src/pages/sources/oauth/OAuthSourceForm.ts:226 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:126 | #: src/pages/sources/saml/SAMLSourceForm.ts:126 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:240 | #: src/pages/sources/saml/SAMLSourceForm.ts:240 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:261 | #: src/pages/sources/saml/SAMLSourceForm.ts:261 | ||||||
| @ -1879,7 +1879,7 @@ msgstr "" | |||||||
| #: src/pages/sources/SourcesListPage.ts:51 | #: src/pages/sources/SourcesListPage.ts:51 | ||||||
| #: src/pages/sources/ldap/LDAPSourceForm.ts:54 | #: src/pages/sources/ldap/LDAPSourceForm.ts:54 | ||||||
| #: src/pages/sources/ldap/LDAPSourceViewPage.ts:64 | #: src/pages/sources/ldap/LDAPSourceViewPage.ts:64 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:98 | #: src/pages/sources/oauth/OAuthSourceForm.ts:100 | ||||||
| #: src/pages/sources/oauth/OAuthSourceViewPage.ts:63 | #: src/pages/sources/oauth/OAuthSourceViewPage.ts:63 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:54 | #: src/pages/sources/saml/SAMLSourceForm.ts:54 | ||||||
| #: src/pages/sources/saml/SAMLSourceViewPage.ts:66 | #: src/pages/sources/saml/SAMLSourceViewPage.ts:66 | ||||||
| @ -2330,7 +2330,7 @@ msgstr "" | |||||||
| msgid "Private key, acquired from https://www.google.com/recaptcha/intro/v3.html." | msgid "Private key, acquired from https://www.google.com/recaptcha/intro/v3.html." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:79 | #: src/pages/sources/oauth/OAuthSourceForm.ts:80 | ||||||
| msgid "Profile URL" | msgid "Profile URL" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @ -2372,7 +2372,7 @@ msgstr "" | |||||||
| #: src/pages/providers/oauth2/OAuth2ProviderForm.ts:81 | #: src/pages/providers/oauth2/OAuth2ProviderForm.ts:81 | ||||||
| #: src/pages/providers/proxy/ProxyProviderForm.ts:99 | #: src/pages/providers/proxy/ProxyProviderForm.ts:99 | ||||||
| #: src/pages/providers/saml/SAMLProviderForm.ts:78 | #: src/pages/providers/saml/SAMLProviderForm.ts:78 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:120 | #: src/pages/sources/oauth/OAuthSourceForm.ts:122 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:76 | #: src/pages/sources/saml/SAMLSourceForm.ts:76 | ||||||
| msgid "Protocol settings" | msgid "Protocol settings" | ||||||
| msgstr "" | msgstr "" | ||||||
| @ -2395,7 +2395,7 @@ msgstr "" | |||||||
| msgid "Provider Type" | msgid "Provider Type" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:136 | #: src/pages/sources/oauth/OAuthSourceForm.ts:138 | ||||||
| msgid "Provider type" | msgid "Provider type" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @ -2521,7 +2521,7 @@ msgstr "" | |||||||
| msgid "Request has been denied." | msgid "Request has been denied." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:86 | #: src/pages/sources/oauth/OAuthSourceForm.ts:87 | ||||||
| msgid "Request token URL" | msgid "Request token URL" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @ -2800,7 +2800,7 @@ msgstr "" | |||||||
| #: src/pages/applications/ApplicationListPage.ts:58 | #: src/pages/applications/ApplicationListPage.ts:58 | ||||||
| #: src/pages/flows/FlowForm.ts:94 | #: src/pages/flows/FlowForm.ts:94 | ||||||
| #: src/pages/sources/ldap/LDAPSourceForm.ts:60 | #: src/pages/sources/ldap/LDAPSourceForm.ts:60 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:104 | #: src/pages/sources/oauth/OAuthSourceForm.ts:106 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:60 | #: src/pages/sources/saml/SAMLSourceForm.ts:60 | ||||||
| msgid "Slug" | msgid "Slug" | ||||||
| msgstr "" | msgstr "" | ||||||
| @ -3019,7 +3019,7 @@ msgid "Successfully created service-connection." | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/ldap/LDAPSourceForm.ts:47 | #: src/pages/sources/ldap/LDAPSourceForm.ts:47 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:50 | #: src/pages/sources/oauth/OAuthSourceForm.ts:51 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:47 | #: src/pages/sources/saml/SAMLSourceForm.ts:47 | ||||||
| msgid "Successfully created source." | msgid "Successfully created source." | ||||||
| msgstr "" | msgstr "" | ||||||
| @ -3155,7 +3155,7 @@ msgid "Successfully updated service-connection." | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/ldap/LDAPSourceForm.ts:44 | #: src/pages/sources/ldap/LDAPSourceForm.ts:44 | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:47 | #: src/pages/sources/oauth/OAuthSourceForm.ts:48 | ||||||
| #: src/pages/sources/saml/SAMLSourceForm.ts:44 | #: src/pages/sources/saml/SAMLSourceForm.ts:44 | ||||||
| msgid "Successfully updated source." | msgid "Successfully updated source." | ||||||
| msgstr "" | msgstr "" | ||||||
| @ -3415,7 +3415,7 @@ msgstr "" | |||||||
| msgid "UID" | msgid "UID" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:61 | #: src/pages/sources/oauth/OAuthSourceForm.ts:62 | ||||||
| msgid "URL settings" | msgid "URL settings" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @ -3423,19 +3423,19 @@ msgstr "" | |||||||
| msgid "URL that the initial Login request is sent to." | msgid "URL that the initial Login request is sent to." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:69 | #: src/pages/sources/oauth/OAuthSourceForm.ts:70 | ||||||
| msgid "URL the user is redirect to to consent the authorization." | msgid "URL the user is redirect to to consent the authorization." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:83 | #: src/pages/sources/oauth/OAuthSourceForm.ts:84 | ||||||
| msgid "URL used by authentik to get user information." | msgid "URL used by authentik to get user information." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:76 | #: src/pages/sources/oauth/OAuthSourceForm.ts:77 | ||||||
| msgid "URL used by authentik to retrieve tokens." | msgid "URL used by authentik to retrieve tokens." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: src/pages/sources/oauth/OAuthSourceForm.ts:89 | #: src/pages/sources/oauth/OAuthSourceForm.ts:90 | ||||||
| msgid "URL used to request the initial token. This URL is only required for OAuth 1." | msgid "URL used to request the initial token. This URL is only required for OAuth 1." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|  | |||||||
| @ -31,6 +31,9 @@ export class OAuthSourceForm extends Form<OAuthSource> { | |||||||
|     @property({type: Boolean}) |     @property({type: Boolean}) | ||||||
|     showUrlOptions = false; |     showUrlOptions = false; | ||||||
|  |  | ||||||
|  |     @property({type: Boolean}) | ||||||
|  |     showRequestTokenURL = false; | ||||||
|  |  | ||||||
|     getSuccessMessage(): string { |     getSuccessMessage(): string { | ||||||
|         if (this.source) { |         if (this.source) { | ||||||
|             return t`Successfully updated source.`; |             return t`Successfully updated source.`; | ||||||
| @ -66,29 +69,30 @@ export class OAuthSourceForm extends Form<OAuthSource> { | |||||||
|                         label=${t`Authorization URL`} |                         label=${t`Authorization URL`} | ||||||
|                         ?required=${true} |                         ?required=${true} | ||||||
|                         name="authorizationUrl"> |                         name="authorizationUrl"> | ||||||
|                         <input type="text" value="${ifDefined(this.source?.authorizationUrl)}" class="pf-c-form-control" required> |                         <input type="text" value="${first(this.source?.authorizationUrl, "")}" class="pf-c-form-control" required> | ||||||
|                         <p class="pf-c-form__helper-text">${t`URL the user is redirect to to consent the authorization.`}</p> |                         <p class="pf-c-form__helper-text">${t`URL the user is redirect to to consent the authorization.`}</p> | ||||||
|                     </ak-form-element-horizontal> |                     </ak-form-element-horizontal> | ||||||
|                     <ak-form-element-horizontal |                     <ak-form-element-horizontal | ||||||
|                         label=${t`Access token URL`} |                         label=${t`Access token URL`} | ||||||
|                         ?required=${true} |                         ?required=${true} | ||||||
|                         name="accessTokenUrl"> |                         name="accessTokenUrl"> | ||||||
|                         <input type="text" value="${ifDefined(this.source?.accessTokenUrl)}" class="pf-c-form-control" required> |                         <input type="text" value="${first(this.source?.accessTokenUrl, "")}" class="pf-c-form-control" required> | ||||||
|                         <p class="pf-c-form__helper-text">${t`URL used by authentik to retrieve tokens.`}</p> |                         <p class="pf-c-form__helper-text">${t`URL used by authentik to retrieve tokens.`}</p> | ||||||
|                     </ak-form-element-horizontal> |                     </ak-form-element-horizontal> | ||||||
|                     <ak-form-element-horizontal |                     <ak-form-element-horizontal | ||||||
|                         label=${t`Profile URL`} |                         label=${t`Profile URL`} | ||||||
|                         ?required=${true} |                         ?required=${true} | ||||||
|                         name="profileUrl"> |                         name="profileUrl"> | ||||||
|                         <input type="text" value="${ifDefined(this.source?.profileUrl)}" class="pf-c-form-control" required> |                         <input type="text" value="${first(this.source?.profileUrl, "")}" class="pf-c-form-control" required> | ||||||
|                         <p class="pf-c-form__helper-text">${t`URL used by authentik to get user information.`}</p> |                         <p class="pf-c-form__helper-text">${t`URL used by authentik to get user information.`}</p> | ||||||
|                     </ak-form-element-horizontal> |                     </ak-form-element-horizontal> | ||||||
|                     <ak-form-element-horizontal |                     ${this.showRequestTokenURL ? html`<ak-form-element-horizontal | ||||||
|                         label=${t`Request token URL`} |                         label=${t`Request token URL`} | ||||||
|                         name="requestTokenUrl"> |                         name="requestTokenUrl"> | ||||||
|                         <input type="text" value="${ifDefined(this.source?.requestTokenUrl)}" class="pf-c-form-control"> |                         <input type="text" value="${first(this.source?.requestTokenUrl, "")}" class="pf-c-form-control"> | ||||||
|                         <p class="pf-c-form__helper-text">${t`URL used to request the initial token. This URL is only required for OAuth 1.`}</p> |                         <p class="pf-c-form__helper-text">${t`URL used to request the initial token. This URL is only required for OAuth 1.`}</p> | ||||||
|                     </ak-form-element-horizontal> |                     </ak-form-element-horizontal> | ||||||
|  |                     ` : html``} | ||||||
|                 </div> |                 </div> | ||||||
|             </ak-form-group>`; |             </ak-form-group>`; | ||||||
|     } |     } | ||||||
| @ -144,6 +148,11 @@ export class OAuthSourceForm extends Form<OAuthSource> { | |||||||
|                             } else { |                             } else { | ||||||
|                                 this.showUrlOptions = false; |                                 this.showUrlOptions = false; | ||||||
|                             } |                             } | ||||||
|  |                             if ("data-request-token" in selected.attributes) { | ||||||
|  |                                 this.showRequestTokenURL = true; | ||||||
|  |                             } else { | ||||||
|  |                                 this.showRequestTokenURL = false; | ||||||
|  |                             } | ||||||
|                             if (!this.source) { |                             if (!this.source) { | ||||||
|                                 this.source = {} as OAuthSource; |                                 this.source = {} as OAuthSource; | ||||||
|                             } |                             } | ||||||
| @ -157,7 +166,13 @@ export class OAuthSourceForm extends Form<OAuthSource> { | |||||||
|                                             selected = true; |                                             selected = true; | ||||||
|                                         } |                                         } | ||||||
|                                     } |                                     } | ||||||
|                                     return html`<option ?data-urls-custom=${type.urlsCustomizable} value=${type.slug} ?selected=${selected}>${type.name}</option>`; |                                     return html`<option | ||||||
|  |                                         ?data-urls-custom=${type.urlsCustomizable} | ||||||
|  |                                         ?data-request-token=${type.requestTokenUrl} | ||||||
|  |                                         value=${type.slug} | ||||||
|  |                                         ?selected=${selected}> | ||||||
|  |                                         ${type.name} | ||||||
|  |                                     </option>`; | ||||||
|                                 }); |                                 }); | ||||||
|                             }), html`<option>${t`Loading...`}</option>`)} |                             }), html`<option>${t`Loading...`}</option>`)} | ||||||
|                         </select> |                         </select> | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user