@open-mercato/enterprise 0.4.6-develop-15c18897fc → 0.4.6-develop-34aa847ce6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/index.js.map +2 -2
  3. package/dist/modules/sso/acl.js +11 -0
  4. package/dist/modules/sso/acl.js.map +7 -0
  5. package/dist/modules/sso/api/admin-context.js +27 -0
  6. package/dist/modules/sso/api/admin-context.js.map +7 -0
  7. package/dist/modules/sso/api/callback/oidc/route.js +103 -0
  8. package/dist/modules/sso/api/callback/oidc/route.js.map +7 -0
  9. package/dist/modules/sso/api/config/[id]/activate/route.js +49 -0
  10. package/dist/modules/sso/api/config/[id]/activate/route.js.map +7 -0
  11. package/dist/modules/sso/api/config/[id]/domains/route.js +96 -0
  12. package/dist/modules/sso/api/config/[id]/domains/route.js.map +7 -0
  13. package/dist/modules/sso/api/config/[id]/route.js +103 -0
  14. package/dist/modules/sso/api/config/[id]/route.js.map +7 -0
  15. package/dist/modules/sso/api/config/[id]/test/route.js +41 -0
  16. package/dist/modules/sso/api/config/[id]/test/route.js.map +7 -0
  17. package/dist/modules/sso/api/config/route.js +83 -0
  18. package/dist/modules/sso/api/config/route.js.map +7 -0
  19. package/dist/modules/sso/api/error-handler.js +28 -0
  20. package/dist/modules/sso/api/error-handler.js.map +7 -0
  21. package/dist/modules/sso/api/hrd/route.js +52 -0
  22. package/dist/modules/sso/api/hrd/route.js.map +7 -0
  23. package/dist/modules/sso/api/initiate/route.js +66 -0
  24. package/dist/modules/sso/api/initiate/route.js.map +7 -0
  25. package/dist/modules/sso/api/scim/context.js +68 -0
  26. package/dist/modules/sso/api/scim/context.js.map +7 -0
  27. package/dist/modules/sso/api/scim/logs/route.js +65 -0
  28. package/dist/modules/sso/api/scim/logs/route.js.map +7 -0
  29. package/dist/modules/sso/api/scim/tokens/[id]/route.js +42 -0
  30. package/dist/modules/sso/api/scim/tokens/[id]/route.js.map +7 -0
  31. package/dist/modules/sso/api/scim/tokens/route.js +83 -0
  32. package/dist/modules/sso/api/scim/tokens/route.js.map +7 -0
  33. package/dist/modules/sso/api/scim/v2/ServiceProviderConfig/route.js +42 -0
  34. package/dist/modules/sso/api/scim/v2/ServiceProviderConfig/route.js.map +7 -0
  35. package/dist/modules/sso/api/scim/v2/Users/[id]/route.js +94 -0
  36. package/dist/modules/sso/api/scim/v2/Users/[id]/route.js.map +7 -0
  37. package/dist/modules/sso/api/scim/v2/Users/route.js +86 -0
  38. package/dist/modules/sso/api/scim/v2/Users/route.js.map +7 -0
  39. package/dist/modules/sso/backend/page.js +173 -0
  40. package/dist/modules/sso/backend/page.js.map +7 -0
  41. package/dist/modules/sso/backend/page.meta.js +31 -0
  42. package/dist/modules/sso/backend/page.meta.js.map +7 -0
  43. package/dist/modules/sso/backend/sso/config/[id]/page.js +749 -0
  44. package/dist/modules/sso/backend/sso/config/[id]/page.js.map +7 -0
  45. package/dist/modules/sso/backend/sso/config/[id]/page.meta.js +19 -0
  46. package/dist/modules/sso/backend/sso/config/[id]/page.meta.js.map +7 -0
  47. package/dist/modules/sso/backend/sso/config/new/page.js +381 -0
  48. package/dist/modules/sso/backend/sso/config/new/page.js.map +7 -0
  49. package/dist/modules/sso/backend/sso/config/new/page.meta.js +19 -0
  50. package/dist/modules/sso/backend/sso/config/new/page.meta.js.map +7 -0
  51. package/dist/modules/sso/data/entities.js +299 -0
  52. package/dist/modules/sso/data/entities.js.map +7 -0
  53. package/dist/modules/sso/data/validators.js +114 -0
  54. package/dist/modules/sso/data/validators.js.map +7 -0
  55. package/dist/modules/sso/di.js +26 -0
  56. package/dist/modules/sso/di.js.map +7 -0
  57. package/dist/modules/sso/events.js +24 -0
  58. package/dist/modules/sso/events.js.map +7 -0
  59. package/dist/modules/sso/i18n/de.json +146 -0
  60. package/dist/modules/sso/i18n/en.json +146 -0
  61. package/dist/modules/sso/i18n/es.json +146 -0
  62. package/dist/modules/sso/i18n/pl.json +146 -0
  63. package/dist/modules/sso/index.js +11 -0
  64. package/dist/modules/sso/index.js.map +7 -0
  65. package/dist/modules/sso/lib/domains.js +30 -0
  66. package/dist/modules/sso/lib/domains.js.map +7 -0
  67. package/dist/modules/sso/lib/oidc-provider.js +140 -0
  68. package/dist/modules/sso/lib/oidc-provider.js.map +7 -0
  69. package/dist/modules/sso/lib/registry.js +15 -0
  70. package/dist/modules/sso/lib/registry.js.map +7 -0
  71. package/dist/modules/sso/lib/scim-filter.js +43 -0
  72. package/dist/modules/sso/lib/scim-filter.js.map +7 -0
  73. package/dist/modules/sso/lib/scim-mapper.js +49 -0
  74. package/dist/modules/sso/lib/scim-mapper.js.map +7 -0
  75. package/dist/modules/sso/lib/scim-patch.js +63 -0
  76. package/dist/modules/sso/lib/scim-patch.js.map +7 -0
  77. package/dist/modules/sso/lib/scim-response.js +34 -0
  78. package/dist/modules/sso/lib/scim-response.js.map +7 -0
  79. package/dist/modules/sso/lib/scim-utils.js +9 -0
  80. package/dist/modules/sso/lib/scim-utils.js.map +7 -0
  81. package/dist/modules/sso/lib/state-cookie.js +67 -0
  82. package/dist/modules/sso/lib/state-cookie.js.map +7 -0
  83. package/dist/modules/sso/lib/types.js +1 -0
  84. package/dist/modules/sso/lib/types.js.map +7 -0
  85. package/dist/modules/sso/migrations/Migration20260219000000_sso.js +20 -0
  86. package/dist/modules/sso/migrations/Migration20260219000000_sso.js.map +7 -0
  87. package/dist/modules/sso/migrations/Migration20260222000000_sso_add_name.js +13 -0
  88. package/dist/modules/sso/migrations/Migration20260222000000_sso_add_name.js.map +7 -0
  89. package/dist/modules/sso/migrations/Migration20260222000001_sso_partial_unique_org.js +15 -0
  90. package/dist/modules/sso/migrations/Migration20260222000001_sso_partial_unique_org.js.map +7 -0
  91. package/dist/modules/sso/migrations/Migration20260223000000_scim_tables.js +22 -0
  92. package/dist/modules/sso/migrations/Migration20260223000000_scim_tables.js.map +7 -0
  93. package/dist/modules/sso/migrations/Migration20260224000000_sso_external_id.js +15 -0
  94. package/dist/modules/sso/migrations/Migration20260224000000_sso_external_id.js.map +7 -0
  95. package/dist/modules/sso/migrations/Migration20260224100000_sso_role_grants.js +17 -0
  96. package/dist/modules/sso/migrations/Migration20260224100000_sso_role_grants.js.map +7 -0
  97. package/dist/modules/sso/migrations/Migration20260224200000_drop_default_role_id.js +13 -0
  98. package/dist/modules/sso/migrations/Migration20260224200000_drop_default_role_id.js.map +7 -0
  99. package/dist/modules/sso/migrations/Migration20260225000000_sso_identities_partial_unique.js +23 -0
  100. package/dist/modules/sso/migrations/Migration20260225000000_sso_identities_partial_unique.js.map +7 -0
  101. package/dist/modules/sso/migrations/Migration20260305000000_sso_role_grants_org_id.js +14 -0
  102. package/dist/modules/sso/migrations/Migration20260305000000_sso_role_grants_org_id.js.map +7 -0
  103. package/dist/modules/sso/services/accountLinkingService.js +298 -0
  104. package/dist/modules/sso/services/accountLinkingService.js.map +7 -0
  105. package/dist/modules/sso/services/hrdService.js +18 -0
  106. package/dist/modules/sso/services/hrdService.js.map +7 -0
  107. package/dist/modules/sso/services/scimService.js +372 -0
  108. package/dist/modules/sso/services/scimService.js.map +7 -0
  109. package/dist/modules/sso/services/scimTokenService.js +94 -0
  110. package/dist/modules/sso/services/scimTokenService.js.map +7 -0
  111. package/dist/modules/sso/services/ssoConfigService.js +254 -0
  112. package/dist/modules/sso/services/ssoConfigService.js.map +7 -0
  113. package/dist/modules/sso/services/ssoService.js +125 -0
  114. package/dist/modules/sso/services/ssoService.js.map +7 -0
  115. package/dist/modules/sso/setup.js +47 -0
  116. package/dist/modules/sso/setup.js.map +7 -0
  117. package/dist/modules/sso/subscribers/user-deleted-cleanup.js +21 -0
  118. package/dist/modules/sso/subscribers/user-deleted-cleanup.js.map +7 -0
  119. package/dist/modules/sso/widgets/injection/login-sso/widget.client.js +106 -0
  120. package/dist/modules/sso/widgets/injection/login-sso/widget.client.js.map +7 -0
  121. package/dist/modules/sso/widgets/injection/login-sso/widget.js +16 -0
  122. package/dist/modules/sso/widgets/injection/login-sso/widget.js.map +7 -0
  123. package/dist/modules/sso/widgets/injection-table.js +14 -0
  124. package/dist/modules/sso/widgets/injection-table.js.map +7 -0
  125. package/package.json +5 -4
  126. package/src/index.ts +1 -1
  127. package/src/modules/sso/acl.ts +7 -0
  128. package/src/modules/sso/api/admin-context.ts +36 -0
  129. package/src/modules/sso/api/callback/oidc/route.ts +115 -0
  130. package/src/modules/sso/api/config/[id]/activate/route.ts +53 -0
  131. package/src/modules/sso/api/config/[id]/domains/route.ts +107 -0
  132. package/src/modules/sso/api/config/[id]/route.ts +114 -0
  133. package/src/modules/sso/api/config/[id]/test/route.ts +44 -0
  134. package/src/modules/sso/api/config/route.ts +88 -0
  135. package/src/modules/sso/api/error-handler.ts +36 -0
  136. package/src/modules/sso/api/hrd/route.ts +55 -0
  137. package/src/modules/sso/api/initiate/route.ts +70 -0
  138. package/src/modules/sso/api/scim/context.ts +85 -0
  139. package/src/modules/sso/api/scim/logs/route.ts +69 -0
  140. package/src/modules/sso/api/scim/tokens/[id]/route.ts +45 -0
  141. package/src/modules/sso/api/scim/tokens/route.ts +89 -0
  142. package/src/modules/sso/api/scim/v2/ServiceProviderConfig/route.ts +40 -0
  143. package/src/modules/sso/api/scim/v2/Users/[id]/route.ts +103 -0
  144. package/src/modules/sso/api/scim/v2/Users/route.ts +94 -0
  145. package/src/modules/sso/backend/page.meta.ts +29 -0
  146. package/src/modules/sso/backend/page.tsx +232 -0
  147. package/src/modules/sso/backend/sso/config/[id]/page.meta.ts +15 -0
  148. package/src/modules/sso/backend/sso/config/[id]/page.tsx +1024 -0
  149. package/src/modules/sso/backend/sso/config/new/page.meta.ts +15 -0
  150. package/src/modules/sso/backend/sso/config/new/page.tsx +463 -0
  151. package/src/modules/sso/data/entities.ts +240 -0
  152. package/src/modules/sso/data/validators.ts +140 -0
  153. package/src/modules/sso/di.ts +25 -0
  154. package/src/modules/sso/docs/entra-id-setup.md +281 -0
  155. package/src/modules/sso/docs/google-workspace-setup.md +174 -0
  156. package/src/modules/sso/docs/sso-overview.md +218 -0
  157. package/src/modules/sso/docs/sso-security-audit-2026-02-27.md +118 -0
  158. package/src/modules/sso/docs/zitadel-setup.md +195 -0
  159. package/src/modules/sso/events.ts +21 -0
  160. package/src/modules/sso/i18n/de.json +146 -0
  161. package/src/modules/sso/i18n/en.json +146 -0
  162. package/src/modules/sso/i18n/es.json +146 -0
  163. package/src/modules/sso/i18n/pl.json +146 -0
  164. package/src/modules/sso/index.ts +7 -0
  165. package/src/modules/sso/lib/domains.ts +31 -0
  166. package/src/modules/sso/lib/oidc-provider.ts +196 -0
  167. package/src/modules/sso/lib/registry.ts +13 -0
  168. package/src/modules/sso/lib/scim-filter.ts +62 -0
  169. package/src/modules/sso/lib/scim-mapper.ts +88 -0
  170. package/src/modules/sso/lib/scim-patch.ts +88 -0
  171. package/src/modules/sso/lib/scim-response.ts +40 -0
  172. package/src/modules/sso/lib/scim-utils.ts +5 -0
  173. package/src/modules/sso/lib/state-cookie.ts +79 -0
  174. package/src/modules/sso/lib/types.ts +50 -0
  175. package/src/modules/sso/migrations/.snapshot-open-mercato.json +912 -0
  176. package/src/modules/sso/migrations/Migration20260219000000_sso.ts +21 -0
  177. package/src/modules/sso/migrations/Migration20260222000000_sso_add_name.ts +13 -0
  178. package/src/modules/sso/migrations/Migration20260222000001_sso_partial_unique_org.ts +15 -0
  179. package/src/modules/sso/migrations/Migration20260223000000_scim_tables.ts +24 -0
  180. package/src/modules/sso/migrations/Migration20260224000000_sso_external_id.ts +15 -0
  181. package/src/modules/sso/migrations/Migration20260224100000_sso_role_grants.ts +18 -0
  182. package/src/modules/sso/migrations/Migration20260224200000_drop_default_role_id.ts +13 -0
  183. package/src/modules/sso/migrations/Migration20260225000000_sso_identities_partial_unique.ts +25 -0
  184. package/src/modules/sso/migrations/Migration20260305000000_sso_role_grants_org_id.ts +14 -0
  185. package/src/modules/sso/services/accountLinkingService.ts +386 -0
  186. package/src/modules/sso/services/hrdService.ts +22 -0
  187. package/src/modules/sso/services/scimService.ts +461 -0
  188. package/src/modules/sso/services/scimTokenService.ts +136 -0
  189. package/src/modules/sso/services/ssoConfigService.ts +337 -0
  190. package/src/modules/sso/services/ssoService.ts +167 -0
  191. package/src/modules/sso/setup.ts +56 -0
  192. package/src/modules/sso/subscribers/user-deleted-cleanup.ts +33 -0
  193. package/src/modules/sso/widgets/injection/login-sso/widget.client.tsx +130 -0
  194. package/src/modules/sso/widgets/injection/login-sso/widget.ts +16 -0
  195. package/src/modules/sso/widgets/injection-table.ts +12 -0
@@ -0,0 +1,195 @@
1
+ # Zitadel Setup Guide for Open Mercato SSO
2
+
3
+ This guide walks through setting up Zitadel as the identity provider for OIDC login and SCIM user provisioning in Open Mercato.
4
+
5
+ **Free tier**: Zitadel Cloud offers a free tier with up to 25,000 monthly active users.
6
+
7
+ ---
8
+
9
+ ## 1. Create a Zitadel Instance
10
+
11
+ 1. Go to https://zitadel.com and sign up for a free account
12
+ 2. Create a new instance (or use the default one)
13
+ 3. Note your instance domain: `https://<instance>.zitadel.cloud`
14
+
15
+ ## 2. Create Test Users
16
+
17
+ 1. In the Zitadel Console, go to **Users** → **+ New**
18
+ 2. Fill in:
19
+ - **Username**: e.g., `testuser@yourdomain.com`
20
+ - **First name** / **Last name**
21
+ - **Email**: the user's email address
22
+ - **Password**: set an initial password
23
+ 3. Click **Create**
24
+ 4. Repeat for 2-3 test users
25
+
26
+ ## 3. Register the OIDC Application
27
+
28
+ 1. In the Zitadel Console, go to **Projects** → **+ New**
29
+ 2. Name the project `Open Mercato` and click **Continue**
30
+ 3. Click **+ New Application**
31
+ 4. Configure:
32
+
33
+ | Field | Value |
34
+ |-------|-------|
35
+ | **Name** | `Open Mercato` |
36
+ | **Type** | `Web` |
37
+ | **Authentication Method** | `Code (PKCE)` |
38
+ | **Redirect URIs** | `http://localhost:3000/api/sso/callback/oidc` |
39
+ | **Post-Logout URIs** | `http://localhost:3000/login` |
40
+
41
+ 5. Click **Create**
42
+ 6. On the application overview, note:
43
+ - **Client ID**
44
+ - **Client Secret** (generate one if using Code flow)
45
+
46
+ ### OIDC Credentials Summary
47
+
48
+ | Credential | Where to find it | Value |
49
+ |------------|-----------------|-------|
50
+ | **Issuer URL** | Instance domain | `https://<instance>.zitadel.cloud` |
51
+ | **Client ID** | Application → General | Copy from console |
52
+ | **Client Secret** | Application → General → Generate | Copy immediately |
53
+ | **Redirect URI** | You configured this | `http://localhost:3000/api/sso/callback/oidc` |
54
+
55
+ ### Configure Token Claims
56
+
57
+ Zitadel includes `email`, `given_name`, `family_name`, and `email_verified` in ID tokens by default when the `openid`, `profile`, and `email` scopes are requested. No additional configuration is needed.
58
+
59
+ ### Assign Users
60
+
61
+ By default, all users in the organization can access the application. To restrict access:
62
+
63
+ 1. Go to your Project → **Authorizations** → **+ New**
64
+ 2. Select specific users or grant roles
65
+ 3. Enable "Require authorization" on the project settings if you want to restrict access
66
+
67
+ ---
68
+
69
+ ## 4. Create the SSO Config in Open Mercato
70
+
71
+ 1. Log into Open Mercato as admin
72
+ 2. Go to **Settings** → **Single Sign-On** → **Create New**
73
+ 3. Select **OIDC** as the protocol
74
+ 4. Enter:
75
+ - **Name**: `Zitadel`
76
+ - **Issuer URL**: `https://<instance>.zitadel.cloud`
77
+ - **Client ID**: (paste from Zitadel)
78
+ - **Client Secret**: (paste from Zitadel)
79
+ 5. Add allowed email domains (e.g., `yourdomain.com`)
80
+ 6. Test the connection (Verify Discovery)
81
+ 7. Activate the config
82
+
83
+ ### Verify OIDC Login
84
+
85
+ 1. Open a private/incognito browser window
86
+ 2. Go to the Open Mercato login page
87
+ 3. Enter an email address belonging to one of your test users
88
+ 4. The HRD check should detect SSO and redirect to Zitadel login
89
+ 5. Authenticate at Zitadel
90
+ 6. You should be redirected back to Open Mercato and logged in
91
+
92
+ ---
93
+
94
+ ## 5. Configure SCIM Provisioning
95
+
96
+ **Prerequisite**: Generate a SCIM bearer token from Open Mercato via the admin UI (SSO config → Provisioning tab → Generate Token).
97
+
98
+ ### Zitadel SCIM Support
99
+
100
+ Zitadel supports outbound SCIM provisioning through its **Actions** feature (custom workflows). As of 2026, Zitadel also offers a native SCIM provisioning option:
101
+
102
+ 1. Go to your Project → **Open Mercato** application
103
+ 2. Navigate to **Provisioning** or **Actions**
104
+ 3. Configure SCIM outbound provisioning:
105
+
106
+ | Field | Value |
107
+ |-------|-------|
108
+ | **SCIM Base URL** | `http://localhost:3000/api/sso/scim/v2` (dev) or `https://<your-domain>/api/sso/scim/v2` (prod) |
109
+ | **Bearer Token** | Paste the SCIM token from Open Mercato |
110
+
111
+ 4. Test the connection
112
+
113
+ ### Alternative: Manual/API-Based Provisioning
114
+
115
+ If Zitadel's native SCIM outbound is not available in your version, use the Zitadel Management API to sync users:
116
+
117
+ 1. Create a Service User in Zitadel with Management API access
118
+ 2. Use the Zitadel Management API to list users
119
+ 3. Push user changes to Open Mercato's SCIM endpoint
120
+
121
+ ---
122
+
123
+ ## 6. Test the Full Flow
124
+
125
+ ### Test OIDC Login
126
+
127
+ 1. Navigate to Open Mercato login
128
+ 2. Enter a test user's email
129
+ 3. **Expected**: Redirect to Zitadel → authenticate → redirect back to Open Mercato
130
+ 4. Verify the user appears in the Open Mercato admin panel
131
+
132
+ ### Test JIT Provisioning
133
+
134
+ If SCIM is not configured and JIT is enabled:
135
+
136
+ 1. Log in as a new user via OIDC
137
+ 2. **Expected**: User is automatically created in Open Mercato with `provisioningMethod: jit`
138
+ 3. Verify user profile (name, email) matches Zitadel
139
+
140
+ ### Test SCIM Provisioning (if configured)
141
+
142
+ 1. Create a new user in Zitadel
143
+ 2. Wait for provisioning cycle (or trigger manually)
144
+ 3. **Expected**: User appears in Open Mercato with `provisioningMethod: scim`
145
+ 4. Update the user in Zitadel → verify changes propagate
146
+ 5. Deactivate the user in Zitadel → verify deactivation in Open Mercato
147
+
148
+ ---
149
+
150
+ ## Zitadel SCIM Quirks
151
+
152
+ | Quirk | Description | How to handle |
153
+ |-------|-------------|---------------|
154
+ | **Standard-compliant** | Zitadel follows SCIM 2.0 spec closely | Standard parsing works |
155
+ | **`email_verified` claim** | Always included in ID tokens | No special handling needed |
156
+ | **Group claims** | Available via project roles | Configure role mappings if needed |
157
+ | **PKCE support** | Natively supports S256 PKCE | Automatically used by Open Mercato |
158
+
159
+ ---
160
+
161
+ ## Troubleshooting
162
+
163
+ ### OIDC login redirects but fails
164
+
165
+ - Verify the Redirect URI matches exactly: `http://localhost:3000/api/sso/callback/oidc`
166
+ - Check that the Issuer URL matches your instance: `https://<instance>.zitadel.cloud`
167
+ - Verify Client ID and Client Secret
168
+ - Check the Zitadel Console → **Events** for error details
169
+
170
+ ### "redirect_uri_mismatch" error
171
+
172
+ - Ensure the redirect URI registered in Zitadel matches exactly (including protocol and port)
173
+ - No trailing slash differences
174
+ - For production, use HTTPS
175
+
176
+ ### Users can't log in
177
+
178
+ - Check that users exist in the same Zitadel organization
179
+ - If "Require authorization" is enabled on the project, ensure users have project grants
180
+ - Check that the email domain matches the allowed domains in Open Mercato SSO config
181
+
182
+ ### SCIM connection fails
183
+
184
+ - For local dev, Zitadel needs to reach your server over the internet
185
+ - Use ngrok: `ngrok http 3000`
186
+ - Update the SCIM Base URL to the ngrok URL
187
+
188
+ ---
189
+
190
+ ## Reference
191
+
192
+ - [Zitadel OIDC Documentation](https://zitadel.com/docs/guides/integrate/login/oidc)
193
+ - [Zitadel SCIM Documentation](https://zitadel.com/docs/guides/integrate/scim)
194
+ - [Zitadel Actions](https://zitadel.com/docs/guides/manage/customize/actions)
195
+ - [Zitadel Cloud](https://zitadel.com/pricing)
@@ -0,0 +1,21 @@
1
+ import { createModuleEvents } from '@open-mercato/shared/modules/events'
2
+
3
+ const events = [
4
+ { id: 'sso.login.initiated', label: 'SSO Login Initiated', category: 'lifecycle' },
5
+ { id: 'sso.login.completed', label: 'SSO Login Completed', category: 'lifecycle' },
6
+ { id: 'sso.login.failed', label: 'SSO Login Failed', category: 'lifecycle' },
7
+ { id: 'sso.identity.linked', label: 'SSO Identity Linked', category: 'lifecycle' },
8
+ { id: 'sso.identity.created', label: 'SSO Identity Created (JIT)', category: 'lifecycle' },
9
+ { id: 'sso.config.created', label: 'SSO Config Created', entity: 'sso_config', category: 'crud' },
10
+ { id: 'sso.config.updated', label: 'SSO Config Updated', entity: 'sso_config', category: 'crud' },
11
+ { id: 'sso.config.deleted', label: 'SSO Config Deleted', entity: 'sso_config', category: 'crud' },
12
+ { id: 'sso.config.activated', label: 'SSO Config Activated', entity: 'sso_config', category: 'lifecycle' },
13
+ { id: 'sso.config.deactivated', label: 'SSO Config Deactivated', entity: 'sso_config', category: 'lifecycle' },
14
+ { id: 'sso.domain.added', label: 'SSO Domain Added', entity: 'sso_config', category: 'lifecycle' },
15
+ { id: 'sso.domain.removed', label: 'SSO Domain Removed', entity: 'sso_config', category: 'lifecycle' },
16
+ ] as const
17
+
18
+ export const eventsConfig = createModuleEvents({ moduleId: 'sso', events })
19
+ export const emitSsoEvent = eventsConfig.emit
20
+ export type SsoEventId = typeof events[number]['id']
21
+ export default eventsConfig
@@ -0,0 +1,146 @@
1
+ {
2
+ "common.activating": "Wird aktiviert...",
3
+ "common.add": "Hinzufügen",
4
+ "common.back": "Zurück",
5
+ "common.cancel": "Abbrechen",
6
+ "common.copied": "In die Zwischenablage kopiert",
7
+ "common.copy": "Kopieren",
8
+ "common.create": "Erstellen",
9
+ "common.creating": "Wird erstellt...",
10
+ "common.delete": "Löschen",
11
+ "common.disabled": "Deaktiviert",
12
+ "common.dismiss": "Verwerfen",
13
+ "common.edit": "Bearbeiten",
14
+ "common.enabled": "Aktiviert",
15
+ "common.loading": "Wird geladen...",
16
+ "common.next": "Weiter",
17
+ "common.notFound": "Nicht gefunden",
18
+ "common.remove": "Entfernen",
19
+ "common.save": "Speichern",
20
+ "common.saving": "Wird gespeichert...",
21
+ "settings.sections.auth": "Authentifizierung",
22
+ "sso.admin.action.activate": "Aktivieren",
23
+ "sso.admin.action.deactivate": "Deaktivieren",
24
+ "sso.admin.action.test": "Erkennung überprüfen",
25
+ "sso.admin.activated": "SSO-Konfiguration aktiviert",
26
+ "sso.admin.activity.empty": "Noch keine SSO-Anmeldeaktivität. Aktivitäten werden hier angezeigt, sobald Benutzer sich über SSO anmelden.",
27
+ "sso.admin.banner.activateNow": "Jetzt aktivieren",
28
+ "sso.admin.banner.created": "Ihre SSO-Konfiguration wurde erstellt. Möchten Sie sie jetzt aktivieren?",
29
+ "sso.admin.banner.notYet": "Noch nicht",
30
+ "sso.admin.column.created": "Erstellt",
31
+ "sso.admin.column.domains": "Domains",
32
+ "sso.admin.column.name": "Name",
33
+ "sso.admin.column.protocol": "Protokoll",
34
+ "sso.admin.column.status": "Status",
35
+ "sso.admin.create.title": "SSO konfigurieren",
36
+ "sso.admin.created": "SSO-Konfiguration erstellt",
37
+ "sso.admin.deactivated": "SSO-Konfiguration deaktiviert",
38
+ "sso.admin.delete.confirm": "Sind Sie sicher? Die SSO-Konfiguration wird entfernt. Benutzer mit verknüpften SSO-Identitäten müssen die Passwort-Anmeldung verwenden.",
39
+ "sso.admin.delete.success": "SSO-Konfiguration gelöscht",
40
+ "sso.admin.delete.title": "SSO-Konfiguration löschen",
41
+ "sso.admin.detail.backToList": "Zurück zu SSO",
42
+ "sso.admin.detail.title": "SSO-Konfiguration",
43
+ "sso.admin.domains.empty": "Keine Domains konfiguriert. Fügen Sie mindestens eine Domain hinzu, bevor Sie SSO aktivieren.",
44
+ "sso.admin.empty.cta": "SSO konfigurieren",
45
+ "sso.admin.empty.description": "Konfigurieren Sie Single Sign-On, damit sich Ihre Benutzer mit Ihrem Identitätsanbieter authentifizieren können.",
46
+ "sso.admin.empty.title": "Kein SSO konfiguriert",
47
+ "sso.admin.error.activationFailed": "Aktivierungsstatus konnte nicht aktualisiert werden",
48
+ "sso.admin.error.alreadyExists": "Für diese Organisation existiert bereits eine SSO-Konfiguration",
49
+ "sso.admin.error.createFailed": "SSO-Konfiguration konnte nicht erstellt werden",
50
+ "sso.admin.error.deleteActive": "Eine aktive SSO-Konfiguration kann nicht gelöscht werden — deaktivieren Sie sie zuerst",
51
+ "sso.admin.error.deleteFailed": "SSO-Konfiguration konnte nicht gelöscht werden",
52
+ "sso.admin.error.domainAddFailed": "Domain konnte nicht hinzugefügt werden",
53
+ "sso.admin.error.domainRemoveFailed": "Domain konnte nicht entfernt werden",
54
+ "sso.admin.error.loadFailed": "SSO-Konfiguration konnte nicht geladen werden",
55
+ "sso.admin.error.noDomainsForActivation": "Fügen Sie mindestens eine erlaubte E-Mail-Domain hinzu, bevor Sie aktivieren",
56
+ "sso.admin.error.saveFailed": "SSO-Konfiguration konnte nicht gespeichert werden",
57
+ "sso.admin.error.testFailed": "Verbindungstest fehlgeschlagen",
58
+ "sso.admin.field.autoLinkByEmail": "Automatische Verknüpfung per E-Mail",
59
+ "sso.admin.field.autoLinkByEmailDesc": "Bestehende Benutzer automatisch über übereinstimmende E-Mail-Adresse verknüpfen",
60
+ "sso.admin.field.changeSecret": "Ändern",
61
+ "sso.admin.field.clientId": "Client-ID",
62
+ "sso.admin.field.clientSecret": "Client-Geheimnis",
63
+ "sso.admin.field.issuer": "Aussteller-URL",
64
+ "sso.admin.field.jitDisabledByScim": "Nicht verfügbar — SCIM-Verzeichnissynchronisierung ist aktiv. Widerrufen Sie SCIM-Token, um JIT zu aktivieren.",
65
+ "sso.admin.field.jitEnabled": "Just-in-Time-Bereitstellung",
66
+ "sso.admin.field.jitEnabledDesc": "Benutzerkonten automatisch bei der ersten SSO-Anmeldung erstellen",
67
+ "sso.admin.field.name": "Konfigurationsname",
68
+ "sso.admin.field.protocol": "Protokoll",
69
+ "sso.admin.field.secretPlaceholder": "Neues Geheimnis eingeben, um das bestehende zu ersetzen",
70
+ "sso.admin.field.secretRequired": "Client-Geheimnis eingeben",
71
+ "sso.admin.field.secretSet": "Client-Geheimnis ist konfiguriert",
72
+ "sso.admin.new": "Neue SSO-Konfiguration",
73
+ "sso.admin.roles.description": "Ordnen Sie IdP-App-Rollennamen lokalen Rollen zu. Bei jeder SSO-Anmeldung werden SSO-basierte Rollen synchronisiert — Rollen, die der IdP nicht mehr sendet, werden entfernt, während manuell zugewiesene Rollen erhalten bleiben.",
74
+ "sso.admin.roles.empty": "Keine Rollenzuordnungen konfiguriert. IdP-Rollennamen werden direkt mit lokalen Rollennamen abgeglichen.",
75
+ "sso.admin.roles.error.duplicate": "Diese IdP-Rolle ist bereits zugeordnet",
76
+ "sso.admin.roles.error.emptyIdpRole": "IdP-Rollenname ist erforderlich",
77
+ "sso.admin.roles.error.emptyLocalRole": "Wählen Sie eine lokale Rolle",
78
+ "sso.admin.roles.error.saveFailed": "Rollenzuordnungen konnten nicht gespeichert werden",
79
+ "sso.admin.roles.idpRole": "IdP-Rollenname",
80
+ "sso.admin.roles.idpRolePlaceholder": "z.B. OpenMercato.Admin",
81
+ "sso.admin.roles.localRole": "Lokale Rolle",
82
+ "sso.admin.roles.saved": "Rollenzuordnungen gespeichert",
83
+ "sso.admin.saved": "SSO-Konfiguration gespeichert",
84
+ "sso.admin.scim.endpointCopied": "SCIM-Endpunkt-URL kopiert",
85
+ "sso.admin.scim.endpointUrl": "SCIM-Endpunkt-URL",
86
+ "sso.admin.scim.error.createFailed": "SCIM-Token konnte nicht erstellt werden",
87
+ "sso.admin.scim.error.revokeFailed": "Token konnte nicht widerrufen werden",
88
+ "sso.admin.scim.generateToken": "Token generieren",
89
+ "sso.admin.scim.googleNotSupported": "Google Workspace unterstützt keine SCIM-Bereitstellung. Benutzer werden beim ersten Anmelden per Just-In-Time (JIT) bereitgestellt.",
90
+ "sso.admin.scim.jitActiveWarning": "SCIM-Bereitstellung ist nicht verfügbar, solange JIT aktiviert ist. Deaktivieren Sie JIT im Tab Allgemein, um SCIM zu konfigurieren.",
91
+ "sso.admin.scim.log.error": "Fehler",
92
+ "sso.admin.scim.log.operation": "Vorgang",
93
+ "sso.admin.scim.log.resource": "Ressource",
94
+ "sso.admin.scim.log.status": "Status",
95
+ "sso.admin.scim.log.time": "Zeit",
96
+ "sso.admin.scim.noTokens": "SCIM-Bereitstellung ist nicht konfiguriert. Generieren Sie ein Bearer-Token, damit Ihr Identitätsanbieter Benutzer automatisch synchronisieren kann.",
97
+ "sso.admin.scim.recentActivity": "Letzte Bereitstellungsaktivität",
98
+ "sso.admin.scim.revoke.action": "Widerrufen",
99
+ "sso.admin.scim.revoke.confirm": "Sind Sie sicher? Dieses Token wird SCIM-Anfragen nicht mehr authentifizieren.",
100
+ "sso.admin.scim.revoke.title": "Token widerrufen",
101
+ "sso.admin.scim.revoked": "Token widerrufen",
102
+ "sso.admin.scim.tokenActive": "Aktiv",
103
+ "sso.admin.scim.tokenCopied": "Token in die Zwischenablage kopiert",
104
+ "sso.admin.scim.tokenCreated": "Ihr SCIM-Token wurde erstellt. Kopieren Sie es jetzt — es wird nicht erneut angezeigt.",
105
+ "sso.admin.scim.tokenNamePlaceholder": "Token-Name (z.B. Entra ID Produktion)",
106
+ "sso.admin.scim.tokenRevoked": "Widerrufen",
107
+ "sso.admin.scim.tokens": "Bearer-Token",
108
+ "sso.admin.search": "Nach Name oder Aussteller suchen...",
109
+ "sso.admin.section.allowedDomains": "Erlaubte Domains",
110
+ "sso.admin.section.oidcSettings": "OIDC-Einstellungen",
111
+ "sso.admin.status.active": "Aktiv",
112
+ "sso.admin.status.inactive": "Inaktiv",
113
+ "sso.admin.tab.activity": "Aktivität",
114
+ "sso.admin.tab.domains": "Domains",
115
+ "sso.admin.tab.general": "Allgemein",
116
+ "sso.admin.tab.roles": "Rollenzuordnung",
117
+ "sso.admin.tab.scim": "Bereitstellung",
118
+ "sso.admin.test.failed": "Erkennung fehlgeschlagen",
119
+ "sso.admin.test.success": "Erkennung erfolgreich — Aussteller ist erreichbar",
120
+ "sso.admin.title": "Single Sign-On",
121
+ "sso.admin.wizard.credentials.callbackUrl": "Weiterleitungs-URI (in Ihren IdP kopieren)",
122
+ "sso.admin.wizard.credentials.namePlaceholder": "z.B. Zitadel Produktion",
123
+ "sso.admin.wizard.credentials.title": "OIDC-Anmeldedaten",
124
+ "sso.admin.wizard.domain.duplicate": "Domain bereits hinzugefügt",
125
+ "sso.admin.wizard.domain.invalid": "Ungültiges Domain-Format",
126
+ "sso.admin.wizard.domain.limit": "Maximal 20 Domains pro Konfiguration",
127
+ "sso.admin.wizard.domains.description": "Benutzer mit E-Mail-Adressen, die diesen Domains entsprechen, werden zu Ihrem SSO-Anbieter weitergeleitet.",
128
+ "sso.admin.wizard.domains.placeholder": "beispiel.de",
129
+ "sso.admin.wizard.domains.title": "Erlaubte E-Mail-Domains",
130
+ "sso.admin.wizard.options.title": "Optionen",
131
+ "sso.admin.wizard.protocol.oidcDesc": "Funktioniert mit Zitadel, Microsoft Entra ID, Google Workspace, Okta und mehr",
132
+ "sso.admin.wizard.protocol.samlDesc": "Demnächst verfügbar",
133
+ "sso.admin.wizard.protocol.title": "Protokoll auswählen",
134
+ "sso.admin.wizard.review.note": "Die Konfiguration wird als inaktiv erstellt. Sie können sie von der Detailseite aus aktivieren, nachdem Sie alles überprüft haben.",
135
+ "sso.admin.wizard.review.save": "Konfiguration erstellen",
136
+ "sso.admin.wizard.review.testing": "Wird getestet...",
137
+ "sso.admin.wizard.review.title": "Überprüfen und speichern",
138
+ "sso.login.continueWithSso": "Mit SSO fortfahren",
139
+ "sso.login.errors.emailNotVerified": "Ihre E-Mail-Adresse ist vom Identitätsanbieter nicht verifiziert. Bitte verifizieren Sie Ihre E-Mail und versuchen Sie es erneut.",
140
+ "sso.login.errors.failed": "SSO-Anmeldung fehlgeschlagen. Bitte versuchen Sie es erneut.",
141
+ "sso.login.errors.idpError": "Der Identitätsanbieter hat einen Fehler zurückgegeben. Bitte versuchen Sie es erneut oder kontaktieren Sie Ihren Administrator.",
142
+ "sso.login.errors.missingConfig": "SSO ist für dieses Konto nicht konfiguriert.",
143
+ "sso.login.errors.missingParams": "Der SSO-Rückruf war unvollständig. Bitte versuchen Sie es erneut.",
144
+ "sso.login.errors.stateMissing": "Die SSO-Sitzung ist abgelaufen. Bitte versuchen Sie es erneut.",
145
+ "sso.login.ssoEnabled": "SSO ist für dieses Konto aktiviert"
146
+ }
@@ -0,0 +1,146 @@
1
+ {
2
+ "common.activating": "Activating...",
3
+ "common.add": "Add",
4
+ "common.back": "Back",
5
+ "common.cancel": "Cancel",
6
+ "common.copied": "Copied to clipboard",
7
+ "common.copy": "Copy",
8
+ "common.create": "Create",
9
+ "common.creating": "Creating...",
10
+ "common.delete": "Delete",
11
+ "common.disabled": "Disabled",
12
+ "common.dismiss": "Dismiss",
13
+ "common.edit": "Edit",
14
+ "common.enabled": "Enabled",
15
+ "common.loading": "Loading...",
16
+ "common.next": "Next",
17
+ "common.notFound": "Not found",
18
+ "common.remove": "Remove",
19
+ "common.save": "Save",
20
+ "common.saving": "Saving...",
21
+ "settings.sections.auth": "Auth",
22
+ "sso.admin.action.activate": "Activate",
23
+ "sso.admin.action.deactivate": "Deactivate",
24
+ "sso.admin.action.test": "Verify Discovery",
25
+ "sso.admin.activated": "SSO configuration activated",
26
+ "sso.admin.activity.empty": "No SSO login activity yet. Activity will appear here once users start logging in via SSO.",
27
+ "sso.admin.banner.activateNow": "Activate Now",
28
+ "sso.admin.banner.created": "Your SSO configuration has been created. Would you like to activate it now?",
29
+ "sso.admin.banner.notYet": "Not Yet",
30
+ "sso.admin.column.created": "Created",
31
+ "sso.admin.column.domains": "Domains",
32
+ "sso.admin.column.name": "Name",
33
+ "sso.admin.column.protocol": "Protocol",
34
+ "sso.admin.column.status": "Status",
35
+ "sso.admin.create.title": "Configure SSO",
36
+ "sso.admin.created": "SSO configuration created",
37
+ "sso.admin.deactivated": "SSO configuration deactivated",
38
+ "sso.admin.delete.confirm": "Are you sure? This will remove the SSO configuration. Users with linked SSO identities will need to use password login.",
39
+ "sso.admin.delete.success": "SSO configuration deleted",
40
+ "sso.admin.delete.title": "Delete SSO Configuration",
41
+ "sso.admin.detail.backToList": "Back to SSO",
42
+ "sso.admin.detail.title": "SSO Configuration",
43
+ "sso.admin.domains.empty": "No domains configured. Add at least one domain before activating SSO.",
44
+ "sso.admin.empty.cta": "Configure SSO",
45
+ "sso.admin.empty.description": "Configure Single Sign-On to let your users authenticate with your identity provider.",
46
+ "sso.admin.empty.title": "No SSO configured",
47
+ "sso.admin.error.activationFailed": "Failed to update activation status",
48
+ "sso.admin.error.alreadyExists": "An SSO configuration already exists for this organization",
49
+ "sso.admin.error.createFailed": "Failed to create SSO configuration",
50
+ "sso.admin.error.deleteActive": "Cannot delete an active SSO configuration — deactivate it first",
51
+ "sso.admin.error.deleteFailed": "Failed to delete SSO configuration",
52
+ "sso.admin.error.domainAddFailed": "Failed to add domain",
53
+ "sso.admin.error.domainRemoveFailed": "Failed to remove domain",
54
+ "sso.admin.error.loadFailed": "Failed to load SSO configuration",
55
+ "sso.admin.error.noDomainsForActivation": "Add at least one allowed email domain before activating",
56
+ "sso.admin.error.saveFailed": "Failed to save SSO configuration",
57
+ "sso.admin.error.testFailed": "Connection test failed",
58
+ "sso.admin.field.autoLinkByEmail": "Auto-link by Email",
59
+ "sso.admin.field.autoLinkByEmailDesc": "Automatically link existing users by matching email address",
60
+ "sso.admin.field.changeSecret": "Change",
61
+ "sso.admin.field.clientId": "Client ID",
62
+ "sso.admin.field.clientSecret": "Client Secret",
63
+ "sso.admin.field.issuer": "Issuer URL",
64
+ "sso.admin.field.jitDisabledByScim": "Unavailable — SCIM directory sync is active. Revoke SCIM tokens to enable JIT.",
65
+ "sso.admin.field.jitEnabled": "Just-in-Time Provisioning",
66
+ "sso.admin.field.jitEnabledDesc": "Automatically create user accounts on first SSO login",
67
+ "sso.admin.field.name": "Configuration Name",
68
+ "sso.admin.field.protocol": "Protocol",
69
+ "sso.admin.field.secretPlaceholder": "Enter new secret to replace existing",
70
+ "sso.admin.field.secretRequired": "Enter client secret",
71
+ "sso.admin.field.secretSet": "Client secret is configured",
72
+ "sso.admin.new": "New SSO Config",
73
+ "sso.admin.roles.description": "Map IdP app role names to local roles. On each SSO login, SSO-sourced roles are synced — roles no longer sent by the IdP are removed, while manually-assigned roles are preserved.",
74
+ "sso.admin.roles.empty": "No role mappings configured. IdP role names will be matched directly against local role names.",
75
+ "sso.admin.roles.error.duplicate": "This IdP role is already mapped",
76
+ "sso.admin.roles.error.emptyIdpRole": "IdP role name is required",
77
+ "sso.admin.roles.error.emptyLocalRole": "Select a local role",
78
+ "sso.admin.roles.error.saveFailed": "Failed to save role mappings",
79
+ "sso.admin.roles.idpRole": "IdP Role Name",
80
+ "sso.admin.roles.idpRolePlaceholder": "e.g. OpenMercato.Admin",
81
+ "sso.admin.roles.localRole": "Local Role",
82
+ "sso.admin.roles.saved": "Role mappings saved",
83
+ "sso.admin.saved": "SSO configuration saved",
84
+ "sso.admin.scim.endpointCopied": "SCIM endpoint URL copied",
85
+ "sso.admin.scim.endpointUrl": "SCIM Endpoint URL",
86
+ "sso.admin.scim.error.createFailed": "Failed to create SCIM token",
87
+ "sso.admin.scim.error.revokeFailed": "Failed to revoke token",
88
+ "sso.admin.scim.generateToken": "Generate Token",
89
+ "sso.admin.scim.googleNotSupported": "Google Workspace does not support SCIM provisioning. Users are provisioned via Just-In-Time (JIT) on first login.",
90
+ "sso.admin.scim.jitActiveWarning": "SCIM provisioning is unavailable while JIT provisioning is enabled. Disable JIT in the General tab to configure SCIM.",
91
+ "sso.admin.scim.log.error": "Error",
92
+ "sso.admin.scim.log.operation": "Operation",
93
+ "sso.admin.scim.log.resource": "Resource",
94
+ "sso.admin.scim.log.status": "Status",
95
+ "sso.admin.scim.log.time": "Time",
96
+ "sso.admin.scim.noTokens": "SCIM provisioning is not configured. Generate a bearer token to enable your identity provider to sync users automatically.",
97
+ "sso.admin.scim.recentActivity": "Recent Provisioning Activity",
98
+ "sso.admin.scim.revoke.action": "Revoke",
99
+ "sso.admin.scim.revoke.confirm": "Are you sure? This token will no longer authenticate SCIM requests.",
100
+ "sso.admin.scim.revoke.title": "Revoke Token",
101
+ "sso.admin.scim.revoked": "Token revoked",
102
+ "sso.admin.scim.tokenActive": "Active",
103
+ "sso.admin.scim.tokenCopied": "Token copied to clipboard",
104
+ "sso.admin.scim.tokenCreated": "Your SCIM token has been created. Copy it now — it will not be shown again.",
105
+ "sso.admin.scim.tokenNamePlaceholder": "Token name (e.g., Entra ID Production)",
106
+ "sso.admin.scim.tokenRevoked": "Revoked",
107
+ "sso.admin.scim.tokens": "Bearer Tokens",
108
+ "sso.admin.search": "Search by name or issuer...",
109
+ "sso.admin.section.allowedDomains": "Allowed Domains",
110
+ "sso.admin.section.oidcSettings": "OIDC Settings",
111
+ "sso.admin.status.active": "Active",
112
+ "sso.admin.status.inactive": "Inactive",
113
+ "sso.admin.tab.activity": "Activity",
114
+ "sso.admin.tab.domains": "Domains",
115
+ "sso.admin.tab.general": "General",
116
+ "sso.admin.tab.roles": "Role Mappings",
117
+ "sso.admin.tab.scim": "Provisioning",
118
+ "sso.admin.test.failed": "Discovery failed",
119
+ "sso.admin.test.success": "Discovery successful — issuer is reachable",
120
+ "sso.admin.title": "Single Sign-On",
121
+ "sso.admin.wizard.credentials.callbackUrl": "Redirect URI (copy to your IdP)",
122
+ "sso.admin.wizard.credentials.namePlaceholder": "e.g., Zitadel Production",
123
+ "sso.admin.wizard.credentials.title": "OIDC Credentials",
124
+ "sso.admin.wizard.domain.duplicate": "Domain already added",
125
+ "sso.admin.wizard.domain.invalid": "Invalid domain format",
126
+ "sso.admin.wizard.domain.limit": "Maximum 20 domains per configuration",
127
+ "sso.admin.wizard.domains.description": "Users with email addresses matching these domains will be redirected to your SSO provider.",
128
+ "sso.admin.wizard.domains.placeholder": "example.com",
129
+ "sso.admin.wizard.domains.title": "Allowed Email Domains",
130
+ "sso.admin.wizard.options.title": "Options",
131
+ "sso.admin.wizard.protocol.oidcDesc": "Works with Zitadel, Microsoft Entra ID, Google Workspace, Okta, and more",
132
+ "sso.admin.wizard.protocol.samlDesc": "Coming soon",
133
+ "sso.admin.wizard.protocol.title": "Select Protocol",
134
+ "sso.admin.wizard.review.note": "The configuration will be created as inactive. You can activate it from the detail page after verifying everything is correct.",
135
+ "sso.admin.wizard.review.save": "Create Configuration",
136
+ "sso.admin.wizard.review.testing": "Testing...",
137
+ "sso.admin.wizard.review.title": "Review & Save",
138
+ "sso.login.continueWithSso": "Continue with SSO",
139
+ "sso.login.errors.emailNotVerified": "Your email address is not verified by the identity provider. Please verify your email and try again.",
140
+ "sso.login.errors.failed": "SSO login failed. Please try again.",
141
+ "sso.login.errors.idpError": "The identity provider returned an error. Please try again or contact your administrator.",
142
+ "sso.login.errors.missingConfig": "SSO is not configured for this account.",
143
+ "sso.login.errors.missingParams": "SSO callback was incomplete. Please try again.",
144
+ "sso.login.errors.stateMissing": "SSO session expired. Please try again.",
145
+ "sso.login.ssoEnabled": "SSO is enabled for this account"
146
+ }