diff --git a/web/src/locales/en.po b/web/src/locales/en.po
index 6e753cb64..08a118191 100644
--- a/web/src/locales/en.po
+++ b/web/src/locales/en.po
@@ -156,7 +156,7 @@ msgstr "Allow users to use Applications based on properties, enforce Password Cr
msgid "Allowed count"
msgstr "Allowed count"
-#: src/pages/sources/plex/PlexSourceForm.ts:119
+#: src/pages/sources/plex/PlexSourceForm.ts:141
msgid "Allowed servers"
msgstr "Allowed servers"
@@ -289,8 +289,8 @@ msgstr "Authenticating with Plex..."
msgid "Authentication"
msgstr "Authentication"
-#: src/pages/sources/oauth/OAuthSourceForm.ts:189
-#: src/pages/sources/plex/PlexSourceForm.ts:149
+#: src/pages/sources/oauth/OAuthSourceForm.ts:211
+#: src/pages/sources/plex/PlexSourceForm.ts:171
#: src/pages/sources/saml/SAMLSourceForm.ts:245
msgid "Authentication flow"
msgstr "Authentication flow"
@@ -489,6 +489,7 @@ msgstr "Change your password"
#: src/pages/providers/saml/SAMLProviderViewPage.ts:129
#: src/pages/sources/ldap/LDAPSourceViewPage.ts:113
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:133
+#: src/pages/sources/plex/PlexSourceViewPage.ts:92
#: src/pages/sources/saml/SAMLSourceViewPage.ts:119
#: src/pages/users/UserViewPage.ts:185
msgid "Changelog"
@@ -553,7 +554,7 @@ msgstr "Click to copy token"
#: src/pages/providers/oauth2/OAuth2ProviderForm.ts:107
#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts:99
-#: src/pages/sources/plex/PlexSourceForm.ts:113
+#: src/pages/sources/plex/PlexSourceForm.ts:135
msgid "Client ID"
msgstr "Client ID"
@@ -678,11 +679,11 @@ msgstr "Consider Objects matching this filter to be Groups."
msgid "Consider Objects matching this filter to be Users."
msgstr "Consider Objects matching this filter to be Users."
-#: src/pages/sources/oauth/OAuthSourceForm.ts:126
+#: src/pages/sources/oauth/OAuthSourceForm.ts:148
msgid "Consumer key"
msgstr "Consumer key"
-#: src/pages/sources/oauth/OAuthSourceForm.ts:132
+#: src/pages/sources/oauth/OAuthSourceForm.ts:154
msgid "Consumer secret"
msgstr "Consumer secret"
@@ -1062,6 +1063,7 @@ msgstr "Each provider has a different issuer, based on the application slug."
#: src/pages/sources/SourcesListPage.ts:83
#: src/pages/sources/ldap/LDAPSourceViewPage.ts:105
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:125
+#: src/pages/sources/plex/PlexSourceViewPage.ts:84
#: src/pages/sources/saml/SAMLSourceViewPage.ts:111
#: src/pages/stages/StageListPage.ts:98
#: src/pages/stages/prompt/PromptListPage.ts:75
@@ -1155,8 +1157,8 @@ msgstr "Enabled"
msgid "Enrollment"
msgstr "Enrollment"
-#: src/pages/sources/oauth/OAuthSourceForm.ts:210
-#: src/pages/sources/plex/PlexSourceForm.ts:170
+#: src/pages/sources/oauth/OAuthSourceForm.ts:232
+#: src/pages/sources/plex/PlexSourceForm.ts:192
#: src/pages/sources/saml/SAMLSourceForm.ts:266
#: src/pages/stages/identification/IdentificationStageForm.ts:106
msgid "Enrollment flow"
@@ -1368,20 +1370,20 @@ msgstr "Flow"
msgid "Flow Overview"
msgstr "Flow Overview"
-#: src/pages/sources/oauth/OAuthSourceForm.ts:185
-#: src/pages/sources/plex/PlexSourceForm.ts:145
+#: src/pages/sources/oauth/OAuthSourceForm.ts:207
+#: src/pages/sources/plex/PlexSourceForm.ts:167
#: src/pages/sources/saml/SAMLSourceForm.ts:220
msgid "Flow settings"
msgstr "Flow settings"
-#: src/pages/sources/oauth/OAuthSourceForm.ts:207
-#: src/pages/sources/plex/PlexSourceForm.ts:167
+#: src/pages/sources/oauth/OAuthSourceForm.ts:229
+#: src/pages/sources/plex/PlexSourceForm.ts:189
#: src/pages/sources/saml/SAMLSourceForm.ts:263
msgid "Flow to use when authenticating existing users."
msgstr "Flow to use when authenticating existing users."
-#: src/pages/sources/oauth/OAuthSourceForm.ts:228
-#: src/pages/sources/plex/PlexSourceForm.ts:188
+#: src/pages/sources/oauth/OAuthSourceForm.ts:250
+#: src/pages/sources/plex/PlexSourceForm.ts:210
#: src/pages/sources/saml/SAMLSourceForm.ts:284
msgid "Flow to use when enrolling new users."
msgstr "Flow to use when enrolling new users."
@@ -1525,7 +1527,7 @@ msgstr "Hide managed mappings"
#: src/pages/providers/saml/SAMLProviderForm.ts:177
#: src/pages/sources/ldap/LDAPSourceForm.ts:167
#: src/pages/sources/ldap/LDAPSourceForm.ts:193
-#: src/pages/sources/plex/PlexSourceForm.ts:132
+#: src/pages/sources/plex/PlexSourceForm.ts:154
#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts:114
#: src/pages/stages/identification/IdentificationStageForm.ts:85
#: src/pages/stages/password/PasswordStageForm.ts:86
@@ -1708,7 +1710,22 @@ msgstr "Let the user identify themselves with their username or Email address."
msgid "Library"
msgstr "Library"
-#: src/pages/sources/plex/PlexSourceForm.ts:137
+#: src/pages/sources/oauth/OAuthSourceForm.ts:128
+#: src/pages/sources/plex/PlexSourceForm.ts:115
+msgid "Link to a user with identical email address. Can have security implications when a source doesn't validate email addresses"
+msgstr "Link to a user with identical email address. Can have security implications when a source doesn't validate email addresses"
+
+#: src/pages/sources/oauth/OAuthSourceForm.ts:134
+#: src/pages/sources/plex/PlexSourceForm.ts:121
+msgid "Link to a user with identical username address. Can have security implications when a username is used with another source."
+msgstr "Link to a user with identical username address. Can have security implications when a username is used with another source."
+
+#: src/pages/sources/oauth/OAuthSourceForm.ts:125
+#: src/pages/sources/plex/PlexSourceForm.ts:112
+msgid "Link users on unique identifier"
+msgstr "Link users on unique identifier"
+
+#: src/pages/sources/plex/PlexSourceForm.ts:159
msgid "Load servers"
msgstr "Load servers"
@@ -1767,11 +1784,11 @@ msgstr "Loading"
#: src/pages/providers/saml/SAMLProviderImportForm.ts:55
#: src/pages/sources/ldap/LDAPSourceForm.ts:164
#: src/pages/sources/ldap/LDAPSourceForm.ts:190
-#: src/pages/sources/oauth/OAuthSourceForm.ts:177
-#: src/pages/sources/oauth/OAuthSourceForm.ts:205
-#: src/pages/sources/oauth/OAuthSourceForm.ts:226
-#: src/pages/sources/plex/PlexSourceForm.ts:165
-#: src/pages/sources/plex/PlexSourceForm.ts:186
+#: src/pages/sources/oauth/OAuthSourceForm.ts:199
+#: src/pages/sources/oauth/OAuthSourceForm.ts:227
+#: src/pages/sources/oauth/OAuthSourceForm.ts:248
+#: src/pages/sources/plex/PlexSourceForm.ts:187
+#: src/pages/sources/plex/PlexSourceForm.ts:208
#: src/pages/sources/saml/SAMLSourceForm.ts:126
#: src/pages/sources/saml/SAMLSourceForm.ts:240
#: src/pages/sources/saml/SAMLSourceForm.ts:261
@@ -1941,6 +1958,7 @@ msgstr "Monitor"
#: src/pages/sources/oauth/OAuthSourceForm.ts:100
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:64
#: src/pages/sources/plex/PlexSourceForm.ts:87
+#: src/pages/sources/plex/PlexSourceViewPage.ts:63
#: src/pages/sources/saml/SAMLSourceForm.ts:54
#: src/pages/sources/saml/SAMLSourceViewPage.ts:66
#: src/pages/stages/StageListPage.ts:65
@@ -2250,6 +2268,7 @@ msgstr "Outposts are deployments of authentik components to support different en
#: src/pages/providers/saml/SAMLProviderViewPage.ts:58
#: src/pages/sources/ldap/LDAPSourceViewPage.ts:56
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:56
+#: src/pages/sources/plex/PlexSourceViewPage.ts:55
#: src/pages/sources/saml/SAMLSourceViewPage.ts:58
#: src/pages/users/UserViewPage.ts:74
msgid "Overview"
@@ -2330,6 +2349,7 @@ msgid "Policy / User / Group"
msgstr "Policy / User / Group"
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:144
+#: src/pages/sources/plex/PlexSourceViewPage.ts:103
#: src/pages/sources/saml/SAMLSourceViewPage.ts:150
msgid "Policy Bindings"
msgstr "Policy Bindings"
@@ -2434,8 +2454,8 @@ msgstr "Property mappings used to user creation."
#: src/pages/providers/oauth2/OAuth2ProviderForm.ts:81
#: src/pages/providers/proxy/ProxyProviderForm.ts:123
#: src/pages/providers/saml/SAMLProviderForm.ts:78
-#: src/pages/sources/oauth/OAuthSourceForm.ts:122
-#: src/pages/sources/plex/PlexSourceForm.ts:109
+#: src/pages/sources/oauth/OAuthSourceForm.ts:144
+#: src/pages/sources/plex/PlexSourceForm.ts:131
#: src/pages/sources/saml/SAMLSourceForm.ts:76
msgid "Protocol settings"
msgstr "Protocol settings"
@@ -2457,7 +2477,7 @@ msgstr "Provider"
msgid "Provider Type"
msgstr "Provider Type"
-#: src/pages/sources/oauth/OAuthSourceForm.ts:138
+#: src/pages/sources/oauth/OAuthSourceForm.ts:160
msgid "Provider type"
msgstr "Provider type"
@@ -2746,7 +2766,7 @@ msgstr "Select users to add"
msgid "Select which scopes can be used by the client. The client stil has to specify the scope to access the data."
msgstr "Select which scopes can be used by the client. The client stil has to specify the scope to access the data."
-#: src/pages/sources/plex/PlexSourceForm.ts:131
+#: src/pages/sources/plex/PlexSourceForm.ts:153
msgid "Select which server a user has to be a member of to be allowed to authenticate."
msgstr "Select which server a user has to be a member of to be allowed to authenticate."
@@ -3398,6 +3418,7 @@ msgid "These bindings control which users can access this flow."
msgstr "These bindings control which users can access this flow."
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:146
+#: src/pages/sources/plex/PlexSourceViewPage.ts:105
#: src/pages/sources/saml/SAMLSourceViewPage.ts:152
msgid ""
"These bindings control which users can access this source.\n"
@@ -3577,6 +3598,7 @@ msgstr "Up-to-date!"
#: src/pages/sources/SourcesListPage.ts:70
#: src/pages/sources/ldap/LDAPSourceViewPage.ts:95
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:115
+#: src/pages/sources/plex/PlexSourceViewPage.ts:74
#: src/pages/sources/saml/SAMLSourceViewPage.ts:101
#: src/pages/stages/StageListPage.ts:85
#: src/pages/stages/prompt/PromptListPage.ts:67
@@ -3637,6 +3659,10 @@ msgstr "Update OAuth2 Provider"
msgid "Update Outpost"
msgstr "Update Outpost"
+#: src/pages/sources/plex/PlexSourceViewPage.ts:77
+msgid "Update Plex Source"
+msgstr "Update Plex Source"
+
#: src/pages/stages/prompt/PromptListPage.ts:70
msgid "Update Prompt"
msgstr "Update Prompt"
@@ -3707,6 +3733,16 @@ msgstr "Use a security key to prove your identity."
msgid "Use global settings"
msgstr "Use global settings"
+#: src/pages/sources/oauth/OAuthSourceForm.ts:131
+#: src/pages/sources/plex/PlexSourceForm.ts:118
+msgid "Use the user's email address, but deny enrollment when the email address already exists."
+msgstr "Use the user's email address, but deny enrollment when the email address already exists."
+
+#: src/pages/sources/oauth/OAuthSourceForm.ts:137
+#: src/pages/sources/plex/PlexSourceForm.ts:124
+msgid "Use the user's username, but deny enrollment when the username already exists."
+msgstr "Use the user's username, but deny enrollment when the username already exists."
+
#: src/elements/events/ObjectChangelog.ts:39
#: src/elements/events/UserEvents.ts:36
#: src/pages/events/EventInfo.ts:83
@@ -3747,6 +3783,11 @@ msgstr "User events"
msgid "User fields"
msgstr "User fields"
+#: src/pages/sources/oauth/OAuthSourceForm.ts:120
+#: src/pages/sources/plex/PlexSourceForm.ts:107
+msgid "User matching mode"
+msgstr "User matching mode"
+
#: src/pages/sources/ldap/LDAPSourceForm.ts:208
msgid "User object filter"
msgstr "User object filter"
diff --git a/web/src/locales/pseudo-LOCALE.po b/web/src/locales/pseudo-LOCALE.po
index 9b2270490..40ddf6a92 100644
--- a/web/src/locales/pseudo-LOCALE.po
+++ b/web/src/locales/pseudo-LOCALE.po
@@ -156,7 +156,7 @@ msgstr ""
msgid "Allowed count"
msgstr ""
-#: src/pages/sources/plex/PlexSourceForm.ts:119
+#: src/pages/sources/plex/PlexSourceForm.ts:141
msgid "Allowed servers"
msgstr ""
@@ -285,8 +285,8 @@ msgstr ""
msgid "Authentication"
msgstr ""
-#: src/pages/sources/oauth/OAuthSourceForm.ts:189
-#: src/pages/sources/plex/PlexSourceForm.ts:149
+#: src/pages/sources/oauth/OAuthSourceForm.ts:211
+#: src/pages/sources/plex/PlexSourceForm.ts:171
#: src/pages/sources/saml/SAMLSourceForm.ts:245
msgid "Authentication flow"
msgstr ""
@@ -485,6 +485,7 @@ msgstr ""
#: src/pages/providers/saml/SAMLProviderViewPage.ts:129
#: src/pages/sources/ldap/LDAPSourceViewPage.ts:113
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:133
+#: src/pages/sources/plex/PlexSourceViewPage.ts:92
#: src/pages/sources/saml/SAMLSourceViewPage.ts:119
#: src/pages/users/UserViewPage.ts:185
msgid "Changelog"
@@ -547,7 +548,7 @@ msgstr ""
#: src/pages/providers/oauth2/OAuth2ProviderForm.ts:107
#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts:99
-#: src/pages/sources/plex/PlexSourceForm.ts:113
+#: src/pages/sources/plex/PlexSourceForm.ts:135
msgid "Client ID"
msgstr ""
@@ -672,11 +673,11 @@ msgstr ""
msgid "Consider Objects matching this filter to be Users."
msgstr ""
-#: src/pages/sources/oauth/OAuthSourceForm.ts:126
+#: src/pages/sources/oauth/OAuthSourceForm.ts:148
msgid "Consumer key"
msgstr ""
-#: src/pages/sources/oauth/OAuthSourceForm.ts:132
+#: src/pages/sources/oauth/OAuthSourceForm.ts:154
msgid "Consumer secret"
msgstr ""
@@ -1054,6 +1055,7 @@ msgstr ""
#: src/pages/sources/SourcesListPage.ts:83
#: src/pages/sources/ldap/LDAPSourceViewPage.ts:105
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:125
+#: src/pages/sources/plex/PlexSourceViewPage.ts:84
#: src/pages/sources/saml/SAMLSourceViewPage.ts:111
#: src/pages/stages/StageListPage.ts:98
#: src/pages/stages/prompt/PromptListPage.ts:75
@@ -1147,8 +1149,8 @@ msgstr ""
msgid "Enrollment"
msgstr ""
-#: src/pages/sources/oauth/OAuthSourceForm.ts:210
-#: src/pages/sources/plex/PlexSourceForm.ts:170
+#: src/pages/sources/oauth/OAuthSourceForm.ts:232
+#: src/pages/sources/plex/PlexSourceForm.ts:192
#: src/pages/sources/saml/SAMLSourceForm.ts:266
#: src/pages/stages/identification/IdentificationStageForm.ts:106
msgid "Enrollment flow"
@@ -1360,20 +1362,20 @@ msgstr ""
msgid "Flow Overview"
msgstr ""
-#: src/pages/sources/oauth/OAuthSourceForm.ts:185
-#: src/pages/sources/plex/PlexSourceForm.ts:145
+#: src/pages/sources/oauth/OAuthSourceForm.ts:207
+#: src/pages/sources/plex/PlexSourceForm.ts:167
#: src/pages/sources/saml/SAMLSourceForm.ts:220
msgid "Flow settings"
msgstr ""
-#: src/pages/sources/oauth/OAuthSourceForm.ts:207
-#: src/pages/sources/plex/PlexSourceForm.ts:167
+#: src/pages/sources/oauth/OAuthSourceForm.ts:229
+#: src/pages/sources/plex/PlexSourceForm.ts:189
#: src/pages/sources/saml/SAMLSourceForm.ts:263
msgid "Flow to use when authenticating existing users."
msgstr ""
-#: src/pages/sources/oauth/OAuthSourceForm.ts:228
-#: src/pages/sources/plex/PlexSourceForm.ts:188
+#: src/pages/sources/oauth/OAuthSourceForm.ts:250
+#: src/pages/sources/plex/PlexSourceForm.ts:210
#: src/pages/sources/saml/SAMLSourceForm.ts:284
msgid "Flow to use when enrolling new users."
msgstr ""
@@ -1517,7 +1519,7 @@ msgstr ""
#: src/pages/providers/saml/SAMLProviderForm.ts:177
#: src/pages/sources/ldap/LDAPSourceForm.ts:167
#: src/pages/sources/ldap/LDAPSourceForm.ts:193
-#: src/pages/sources/plex/PlexSourceForm.ts:132
+#: src/pages/sources/plex/PlexSourceForm.ts:154
#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts:114
#: src/pages/stages/identification/IdentificationStageForm.ts:85
#: src/pages/stages/password/PasswordStageForm.ts:86
@@ -1700,7 +1702,22 @@ msgstr ""
msgid "Library"
msgstr ""
-#: src/pages/sources/plex/PlexSourceForm.ts:137
+#: src/pages/sources/oauth/OAuthSourceForm.ts:128
+#: src/pages/sources/plex/PlexSourceForm.ts:115
+msgid "Link to a user with identical email address. Can have security implications when a source doesn't validate email addresses"
+msgstr ""
+
+#: src/pages/sources/oauth/OAuthSourceForm.ts:134
+#: src/pages/sources/plex/PlexSourceForm.ts:121
+msgid "Link to a user with identical username address. Can have security implications when a username is used with another source."
+msgstr ""
+
+#: src/pages/sources/oauth/OAuthSourceForm.ts:125
+#: src/pages/sources/plex/PlexSourceForm.ts:112
+msgid "Link users on unique identifier"
+msgstr ""
+
+#: src/pages/sources/plex/PlexSourceForm.ts:159
msgid "Load servers"
msgstr ""
@@ -1759,11 +1776,11 @@ msgstr ""
#: src/pages/providers/saml/SAMLProviderImportForm.ts:55
#: src/pages/sources/ldap/LDAPSourceForm.ts:164
#: src/pages/sources/ldap/LDAPSourceForm.ts:190
-#: src/pages/sources/oauth/OAuthSourceForm.ts:177
-#: src/pages/sources/oauth/OAuthSourceForm.ts:205
-#: src/pages/sources/oauth/OAuthSourceForm.ts:226
-#: src/pages/sources/plex/PlexSourceForm.ts:165
-#: src/pages/sources/plex/PlexSourceForm.ts:186
+#: src/pages/sources/oauth/OAuthSourceForm.ts:199
+#: src/pages/sources/oauth/OAuthSourceForm.ts:227
+#: src/pages/sources/oauth/OAuthSourceForm.ts:248
+#: src/pages/sources/plex/PlexSourceForm.ts:187
+#: src/pages/sources/plex/PlexSourceForm.ts:208
#: src/pages/sources/saml/SAMLSourceForm.ts:126
#: src/pages/sources/saml/SAMLSourceForm.ts:240
#: src/pages/sources/saml/SAMLSourceForm.ts:261
@@ -1933,6 +1950,7 @@ msgstr ""
#: src/pages/sources/oauth/OAuthSourceForm.ts:100
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:64
#: src/pages/sources/plex/PlexSourceForm.ts:87
+#: src/pages/sources/plex/PlexSourceViewPage.ts:63
#: src/pages/sources/saml/SAMLSourceForm.ts:54
#: src/pages/sources/saml/SAMLSourceViewPage.ts:66
#: src/pages/stages/StageListPage.ts:65
@@ -2242,6 +2260,7 @@ msgstr ""
#: src/pages/providers/saml/SAMLProviderViewPage.ts:58
#: src/pages/sources/ldap/LDAPSourceViewPage.ts:56
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:56
+#: src/pages/sources/plex/PlexSourceViewPage.ts:55
#: src/pages/sources/saml/SAMLSourceViewPage.ts:58
#: src/pages/users/UserViewPage.ts:74
msgid "Overview"
@@ -2322,6 +2341,7 @@ msgid "Policy / User / Group"
msgstr ""
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:144
+#: src/pages/sources/plex/PlexSourceViewPage.ts:103
#: src/pages/sources/saml/SAMLSourceViewPage.ts:150
msgid "Policy Bindings"
msgstr ""
@@ -2426,8 +2446,8 @@ msgstr ""
#: src/pages/providers/oauth2/OAuth2ProviderForm.ts:81
#: src/pages/providers/proxy/ProxyProviderForm.ts:123
#: src/pages/providers/saml/SAMLProviderForm.ts:78
-#: src/pages/sources/oauth/OAuthSourceForm.ts:122
-#: src/pages/sources/plex/PlexSourceForm.ts:109
+#: src/pages/sources/oauth/OAuthSourceForm.ts:144
+#: src/pages/sources/plex/PlexSourceForm.ts:131
#: src/pages/sources/saml/SAMLSourceForm.ts:76
msgid "Protocol settings"
msgstr ""
@@ -2449,7 +2469,7 @@ msgstr ""
msgid "Provider Type"
msgstr ""
-#: src/pages/sources/oauth/OAuthSourceForm.ts:138
+#: src/pages/sources/oauth/OAuthSourceForm.ts:160
msgid "Provider type"
msgstr ""
@@ -2738,7 +2758,7 @@ msgstr ""
msgid "Select which scopes can be used by the client. The client stil has to specify the scope to access the data."
msgstr ""
-#: src/pages/sources/plex/PlexSourceForm.ts:131
+#: src/pages/sources/plex/PlexSourceForm.ts:153
msgid "Select which server a user has to be a member of to be allowed to authenticate."
msgstr ""
@@ -3388,6 +3408,7 @@ msgid "These bindings control which users can access this flow."
msgstr ""
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:146
+#: src/pages/sources/plex/PlexSourceViewPage.ts:105
#: src/pages/sources/saml/SAMLSourceViewPage.ts:152
msgid ""
"These bindings control which users can access this source.\n"
@@ -3565,6 +3586,7 @@ msgstr ""
#: src/pages/sources/SourcesListPage.ts:70
#: src/pages/sources/ldap/LDAPSourceViewPage.ts:95
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:115
+#: src/pages/sources/plex/PlexSourceViewPage.ts:74
#: src/pages/sources/saml/SAMLSourceViewPage.ts:101
#: src/pages/stages/StageListPage.ts:85
#: src/pages/stages/prompt/PromptListPage.ts:67
@@ -3625,6 +3647,10 @@ msgstr ""
msgid "Update Outpost"
msgstr ""
+#: src/pages/sources/plex/PlexSourceViewPage.ts:77
+msgid "Update Plex Source"
+msgstr ""
+
#: src/pages/stages/prompt/PromptListPage.ts:70
msgid "Update Prompt"
msgstr ""
@@ -3695,6 +3721,16 @@ msgstr ""
msgid "Use global settings"
msgstr ""
+#: src/pages/sources/oauth/OAuthSourceForm.ts:131
+#: src/pages/sources/plex/PlexSourceForm.ts:118
+msgid "Use the user's email address, but deny enrollment when the email address already exists."
+msgstr ""
+
+#: src/pages/sources/oauth/OAuthSourceForm.ts:137
+#: src/pages/sources/plex/PlexSourceForm.ts:124
+msgid "Use the user's username, but deny enrollment when the username already exists."
+msgstr ""
+
#: src/elements/events/ObjectChangelog.ts:39
#: src/elements/events/UserEvents.ts:36
#: src/pages/events/EventInfo.ts:83
@@ -3735,6 +3771,11 @@ msgstr ""
msgid "User fields"
msgstr ""
+#: src/pages/sources/oauth/OAuthSourceForm.ts:120
+#: src/pages/sources/plex/PlexSourceForm.ts:107
+msgid "User matching mode"
+msgstr ""
+
#: src/pages/sources/ldap/LDAPSourceForm.ts:208
msgid "User object filter"
msgstr ""
diff --git a/web/src/pages/sources/SourceViewPage.ts b/web/src/pages/sources/SourceViewPage.ts
index 7ad8fa8fa..7041d54d2 100644
--- a/web/src/pages/sources/SourceViewPage.ts
+++ b/web/src/pages/sources/SourceViewPage.ts
@@ -9,6 +9,7 @@ import "../../elements/PageHeader";
import "./ldap/LDAPSourceViewPage";
import "./oauth/OAuthSourceViewPage";
import "./saml/SAMLSourceViewPage";
+import "./plex/PlexSourceViewPage";
import { ifDefined } from "lit-html/directives/if-defined";
@customElement("ak-source-view")
@@ -37,6 +38,8 @@ export class SourceViewPage extends LitElement {
return html`
Invalid source type ${this.source.component}
`; } diff --git a/web/src/pages/sources/plex/PlexSourceViewPage.ts b/web/src/pages/sources/plex/PlexSourceViewPage.ts new file mode 100644 index 000000000..2640cd11d --- /dev/null +++ b/web/src/pages/sources/plex/PlexSourceViewPage.ts @@ -0,0 +1,119 @@ +import { t } from "@lingui/macro"; +import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element"; + +import PFPage from "@patternfly/patternfly/components/Page/page.css"; +import PFContent from "@patternfly/patternfly/components/Content/content.css"; +import PFGallery from "@patternfly/patternfly/layouts/Gallery/gallery.css"; +import PFCard from "@patternfly/patternfly/components/Card/card.css"; +import PFDescriptionList from "@patternfly/patternfly/components/DescriptionList/description-list.css"; +import PFSizing from "@patternfly/patternfly/utilities/Sizing/sizing.css"; +import PFFlex from "@patternfly/patternfly/utilities/Flex/flex.css"; +import PFDisplay from "@patternfly/patternfly/utilities/Display/display.css"; +import AKGlobal from "../../../authentik.css"; +import PFBase from "@patternfly/patternfly/patternfly-base.css"; +import PFButton from "@patternfly/patternfly/components/Button/button.css"; + +import "../../../elements/buttons/SpinnerButton"; +import "../../../elements/CodeMirror"; +import "../../../elements/Tabs"; +import "../../../elements/events/ObjectChangelog"; +import "../../../elements/forms/ModalForm"; +import "../../policies/BoundPoliciesList"; +import "./PlexSourceForm"; +import { PlexSource, SourcesApi } from "authentik-api"; +import { DEFAULT_CONFIG } from "../../../api/Config"; +import { EVENT_REFRESH } from "../../../constants"; + +@customElement("ak-source-plex-view") +export class PlexSourceViewPage extends LitElement { + + @property({ type: String }) + set sourceSlug(value: string) { + new SourcesApi(DEFAULT_CONFIG).sourcesPlexRead({ + slug: value + }).then((source) => { + this.source = source; + }); + } + + @property({ attribute: false }) + source?: PlexSource; + + static get styles(): CSSResult[] { + return [PFBase, PFPage, PFButton, PFFlex, PFDisplay, PFGallery, PFContent, PFCard, PFDescriptionList, PFSizing, AKGlobal]; + } + + constructor() { + super(); + this.addEventListener(EVENT_REFRESH, () => { + if (!this.source?.pk) return; + this.sourceSlug = this.source?.slug; + }); + } + + render(): TemplateResult { + if (!this.source) { + return html``; + } + return html`