diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml
index 32840a801..44886620c 100644
--- a/.github/workflows/dev.yml
+++ b/.github/workflows/dev.yml
@@ -48,7 +48,7 @@ jobs:
- name: Test - RUN
uses: kohlerdominik/docker-run-action@v2.0.0
with:
- image: squidex/build:8
+ image: mcr.microsoft.com/dotnet/sdk:8.0
environment: |
CONFIG__BACKUPURL=http://localhost:5000
CONFIG__WAIT=60
@@ -62,7 +62,7 @@ jobs:
- name: Test - RUN on path
uses: kohlerdominik/docker-run-action@v2.0.0
with:
- image: squidex/build:8
+ image: mcr.microsoft.com/dotnet/sdk:8.0
environment: |
CONFIG__BACKUPURL=http://localhost:5000
CONFIG__WAIT=60
@@ -76,7 +76,7 @@ jobs:
- name: Test - RUN with dedicated collections
uses: kohlerdominik/docker-run-action@v2.0.0
with:
- image: squidex/build:8
+ image: mcr.microsoft.com/dotnet/sdk:8.0
environment: |
CONFIG__BACKUPURL=http://localhost:5000
CONFIG__WAIT=60
@@ -109,6 +109,13 @@ jobs:
path: tools/e2e/playwright-report/
retention-days: 30
+ - name: Test - Upload Screenshots
+ if: failure()
+ uses: actions/upload-artifact@v4.3.1
+ with:
+ path: |
+ tools/TestSuite/TestSuite.ApiTests/bin/Debug/net8.0/screenshots/
+
- name: Test - Dump docker logs on failure
if: failure()
uses: jwalton/gh-docker-logs@v2.2.2
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 3dc7d2fe2..fc8eeed99 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -43,7 +43,7 @@ jobs:
- name: Test - RUN
uses: kohlerdominik/docker-run-action@v2.0.0
with:
- image: squidex/build:8
+ image: mcr.microsoft.com/dotnet/sdk:8.0
environment: |
CONFIG__BACKUPURL=http://localhost:5000
CONFIG__WAIT=60
@@ -57,7 +57,7 @@ jobs:
- name: Test - RUN on path
uses: kohlerdominik/docker-run-action@v2.0.0
with:
- image: squidex/build:8
+ image: mcr.microsoft.com/dotnet/sdk:8.0
environment: |
CONFIG__BACKUPURL=http://localhost:5000
CONFIG__WAIT=60
@@ -71,7 +71,7 @@ jobs:
- name: Test - RUN with dedicated collections
uses: kohlerdominik/docker-run-action@v2.0.0
with:
- image: squidex/build:8
+ image: squidex/build:9
environment: |
CONFIG__BACKUPURL=http://localhost:5000
CONFIG__WAIT=60
diff --git a/backend/extensions/Squidex.Extensions/Actions/CreateContent/CreateContentActionHandler.cs b/backend/extensions/Squidex.Extensions/Actions/CreateContent/CreateContentActionHandler.cs
index ad6baaa3e..da138cf5b 100644
--- a/backend/extensions/Squidex.Extensions/Actions/CreateContent/CreateContentActionHandler.cs
+++ b/backend/extensions/Squidex.Extensions/Actions/CreateContent/CreateContentActionHandler.cs
@@ -39,12 +39,8 @@ public sealed class CreateContentActionHandler : RuleActionHandler
-
+
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
-
+
-
-
-
-
-
+
+
+
+
+
diff --git a/backend/i18n/frontend_en.json b/backend/i18n/frontend_en.json
index d5d83bbd2..0cb54430d 100644
--- a/backend/i18n/frontend_en.json
+++ b/backend/i18n/frontend_en.json
@@ -17,16 +17,16 @@
"apps.appsButtonCreate": "Create App",
"apps.appsButtonCreateTeam": "Create Team",
"apps.appsButtonFallbackTitle": "Apps and Teams",
- "apps.archiveFailed": "Failed to archive app.",
+ "apps.archiveFailed": "Failed to archive App.",
"apps.create": "Create App",
"apps.createBlankApp": "New App",
"apps.createBlankAppDescription": "Create a new blank app without content and schemas.",
"apps.createFailed": "Failed to create app. Please reload.",
"apps.createWithTemplate": "Create {template} Sample",
"apps.delete": "Delete App",
- "apps.deleteConfirmText": "Do you really want to delete this app?",
+ "apps.deleteConfirmText": "Do you really want to delete this App?",
"apps.deleteConfirmTitle": "I understand. Delete my App",
- "apps.deleteWarning": "Once you delete an app, there is no going back. All your data will be deleted in the background.",
+ "apps.deleteWarning": "Once you delete an App, there is no going back. All your data will be deleted in the background.",
"apps.empty": "You are not collaborating on any apps yet",
"apps.generalSettings": "General",
"apps.generalSettingsDangerZone": "Danger Zone",
@@ -200,6 +200,7 @@
"common.aspectRatio": "AspectRatio",
"common.assets": "Assets",
"common.assetScripts": "Asset Scripts",
+ "common.auth": "Authentication",
"common.back": "Back",
"common.backendError": "Backend ERROR",
"common.backups": "Backups",
@@ -1038,9 +1039,30 @@
"start.login": "Login to Squidex",
"start.loginHint": "The login button will open a new popup. Once you are logged in successful we will redirect you to the Squidex management portal.",
"start.madeBy": "Proudly made by",
- "start.madeByCopyright": "Sebastian Stehle and Contributors, 2016-2021",
+ "start.madeByCopyright": "Sebastian Stehle and Contributors, 2016-2024",
+ "teams.archiveFailed": "Failed to archive Team.",
+ "teams.auth.authority": "Authority",
+ "teams.auth.authorityHint": "The URL to your authority server.",
+ "teams.auth.clientId": "Client ID",
+ "teams.auth.clientSecret": "Client Secret",
+ "teams.auth.displayName": "Display Name",
+ "teams.auth.displayNameHint": "The name for buttons and other UI elements.",
+ "teams.auth.domain": "Domain",
+ "teams.auth.domainHint": "The domain is used to identity your users. When they enter their email address and the domain matches to your settings they will redirected to your authentication server.",
+ "teams.auth.domainHintEmail": "Email Format",
+ "teams.auth.redirectUrl": "Redirect URL",
+ "teams.auth.redirectUrlHint": "You have to allow this URL in your authentication server.",
+ "teams.auth.reloaded": "Auth setting reloaded.",
+ "teams.auth.signoutRedirectUrl": "Signout Redirect URL",
+ "teams.auth.testLogin": "Test Login",
+ "teams.auth.use": "Custom OIDC Server",
+ "teams.auth.useHint": "Use single-sign-on (SSO) solution to connect Squidex to your infrastructure. Your employees and collegues can connect with their normal business account.",
"teams.create": "Create",
"teams.createFailed": "Failed to create team. Please reload.",
+ "teams.delete": "Delete Team",
+ "teams.deleteConfirmText": "Do you really want to delete this Team?",
+ "teams.deleteConfirmTitle": "I understand. Delete my Team",
+ "teams.deleteWarning": "Once you delete an Team, there is no going back. All your data will be deleted in the background.",
"teams.empty": "This team has no apps yet.",
"teams.leave": "Leave team",
"teams.leaveConfirmText": "Do you really want to leave this team?",
diff --git a/backend/i18n/frontend_fr.json b/backend/i18n/frontend_fr.json
index 9f3061715..43d256fae 100644
--- a/backend/i18n/frontend_fr.json
+++ b/backend/i18n/frontend_fr.json
@@ -200,6 +200,7 @@
"common.aspectRatio": "Ratio d'aspect",
"common.assets": "Actifs",
"common.assetScripts": "Scripts d'actif",
+ "common.auth": "Authentication",
"common.back": "Dos",
"common.backendError": "ERREUR back-end",
"common.backups": "Sauvegardes",
@@ -1038,9 +1039,30 @@
"start.login": "Connectez-vous à Squidex",
"start.loginHint": "Le bouton de connexion ouvrira une nouvelle fenêtre contextuelle. Une fois que vous êtes connecté avec succès, nous vous redirigerons vers le portail de gestion Squidex.",
"start.madeBy": "Fièrement fabriqué par",
- "start.madeByCopyright": "Sebastian Stehle et contributeurs, 2016-2021",
+ "start.madeByCopyright": "Sebastian Stehle et contributeurs, 2016-2024",
+ "teams.archiveFailed": "Failed to archive Team.",
+ "teams.auth.authority": "Authority",
+ "teams.auth.authorityHint": "The URL to your authority server.",
+ "teams.auth.clientId": "Client ID",
+ "teams.auth.clientSecret": "Client Secret",
+ "teams.auth.displayName": "Display Name",
+ "teams.auth.displayNameHint": "The name for buttons and other UI elements.",
+ "teams.auth.domain": "Domain",
+ "teams.auth.domainHint": "The domain is used to identity your users. When they enter their email address and the domain matches to your settings they will redirected to your authentication server.",
+ "teams.auth.domainHintEmail": "Email Format",
+ "teams.auth.redirectUrl": "Redirect URL",
+ "teams.auth.redirectUrlHint": "You have to allow this URL in your authentication server.",
+ "teams.auth.reloaded": "Auth setting reloaded.",
+ "teams.auth.signoutRedirectUrl": "Signout Redirect URL",
+ "teams.auth.testLogin": "Test Login",
+ "teams.auth.use": "Custom OIDC Server",
+ "teams.auth.useHint": "Use single-sign-on (SSO) solution to connect Squidex to your infrastructure. Your employees and collegues can connect with their normal business account.",
"teams.create": "Créer",
"teams.createFailed": "Échec de la création de l'équipe. Veuillez recharger.",
+ "teams.delete": "Delete Team",
+ "teams.deleteConfirmText": "Do you really want to delete this Team?",
+ "teams.deleteConfirmTitle": "I understand. Delete my Team",
+ "teams.deleteWarning": "Once you delete an Team, there is no going back. All your data will be deleted in the background.",
"teams.empty": "Cette équipe n'a pas encore d'applications.",
"teams.leave": "Quitter l'équipe",
"teams.leaveConfirmText": "Voulez-vous vraiment quitter cette équipe ?",
diff --git a/backend/i18n/frontend_it.json b/backend/i18n/frontend_it.json
index f78fa73c3..8b66090c8 100644
--- a/backend/i18n/frontend_it.json
+++ b/backend/i18n/frontend_it.json
@@ -17,16 +17,16 @@
"apps.appsButtonCreate": "Nuova App",
"apps.appsButtonCreateTeam": "Create Team",
"apps.appsButtonFallbackTitle": "Lista App",
- "apps.archiveFailed": "Failed to archive app.",
+ "apps.archiveFailed": "Failed to archive App.",
"apps.create": "Crea un'App",
"apps.createBlankApp": "Nuova App.",
"apps.createBlankAppDescription": "Crea una app vuota senza contenuti o schema.",
"apps.createFailed": "Non è stato possibile creare l'app. Per favore ricarica.",
"apps.createWithTemplate": "Create un esempio di {template}",
"apps.delete": "Delete App",
- "apps.deleteConfirmText": "Do you really want to delete this app?",
+ "apps.deleteConfirmText": "Do you really want to delete this App?",
"apps.deleteConfirmTitle": "I understand. Delete my App",
- "apps.deleteWarning": "Once you delete an app, there is no going back. All your data will be deleted in the background.",
+ "apps.deleteWarning": "Once you delete an App, there is no going back. All your data will be deleted in the background.",
"apps.empty": "Non stai ancora collaborando su nessuna app",
"apps.generalSettings": "Generale",
"apps.generalSettingsDangerZone": "Generale",
@@ -200,6 +200,7 @@
"common.aspectRatio": "Proporzioni",
"common.assets": "Risorse",
"common.assetScripts": "Asset Scripts",
+ "common.auth": "Authentication",
"common.back": "Indietro",
"common.backendError": "Errore nel Backend",
"common.backups": "Backup",
@@ -1039,8 +1040,29 @@
"start.loginHint": "Il pulsante per accedere aprirà un popup. Una volta effettuato l'accesso sarai indirizzato al portale per la gestione di Squidex.",
"start.madeBy": "Realizzato con orgoglio da",
"start.madeByCopyright": "Sebastian Stehle e Collaboratori, 2016-2020",
+ "teams.archiveFailed": "Failed to archive Team.",
+ "teams.auth.authority": "Authority",
+ "teams.auth.authorityHint": "The URL to your authority server.",
+ "teams.auth.clientId": "Client ID",
+ "teams.auth.clientSecret": "Client Secret",
+ "teams.auth.displayName": "Display Name",
+ "teams.auth.displayNameHint": "The name for buttons and other UI elements.",
+ "teams.auth.domain": "Domain",
+ "teams.auth.domainHint": "The domain is used to identity your users. When they enter their email address and the domain matches to your settings they will redirected to your authentication server.",
+ "teams.auth.domainHintEmail": "Email Format",
+ "teams.auth.redirectUrl": "Redirect URL",
+ "teams.auth.redirectUrlHint": "You have to allow this URL in your authentication server.",
+ "teams.auth.reloaded": "Auth setting reloaded.",
+ "teams.auth.signoutRedirectUrl": "Signout Redirect URL",
+ "teams.auth.testLogin": "Test Login",
+ "teams.auth.use": "Custom OIDC Server",
+ "teams.auth.useHint": "Use single-sign-on (SSO) solution to connect Squidex to your infrastructure. Your employees and collegues can connect with their normal business account.",
"teams.create": "Create",
"teams.createFailed": "Failed to create team. Please reload.",
+ "teams.delete": "Delete Team",
+ "teams.deleteConfirmText": "Do you really want to delete this Team?",
+ "teams.deleteConfirmTitle": "I understand. Delete my Team",
+ "teams.deleteWarning": "Once you delete an Team, there is no going back. All your data will be deleted in the background.",
"teams.empty": "This team has no apps yet.",
"teams.leave": "Leave team",
"teams.leaveConfirmText": "Do you really want to leave this team?",
diff --git a/backend/i18n/frontend_nl.json b/backend/i18n/frontend_nl.json
index 16594eb4d..ba9d935ff 100644
--- a/backend/i18n/frontend_nl.json
+++ b/backend/i18n/frontend_nl.json
@@ -17,7 +17,7 @@
"apps.appsButtonCreate": "Apps-overzicht",
"apps.appsButtonCreateTeam": "Create Team",
"apps.appsButtonFallbackTitle": "Apps-overzicht",
- "apps.archiveFailed": "Failed to archive app.",
+ "apps.archiveFailed": "Failed to archive App.",
"apps.create": "App maken",
"apps.createBlankApp": "Nieuwe app.",
"apps.createBlankAppDescription": "Maak een nieuwe lege app zonder inhoud en schema's.",
@@ -200,6 +200,7 @@
"common.aspectRatio": "AspectRatio",
"common.assets": "Bestanden",
"common.assetScripts": "Asset Scripts",
+ "common.auth": "Authentication",
"common.back": "Terug",
"common.backendError": "Backend ERROR",
"common.backups": "Back-ups",
@@ -1039,8 +1040,29 @@
"start.loginHint": "De login-knop opent een nieuwe pop-up. Zodra je succesvol bent ingelogd, zullen we je doorverwijzen naar het Squidex beheerportaal.",
"start.madeBy": "Met trots gemaakt door",
"start.madeByCopyright": "Sebastian Stehle en medewerkers, 2016-2020",
+ "teams.archiveFailed": "Failed to archive Team.",
+ "teams.auth.authority": "Authority",
+ "teams.auth.authorityHint": "The URL to your authority server.",
+ "teams.auth.clientId": "Client ID",
+ "teams.auth.clientSecret": "Client Secret",
+ "teams.auth.displayName": "Display Name",
+ "teams.auth.displayNameHint": "The name for buttons and other UI elements.",
+ "teams.auth.domain": "Domain",
+ "teams.auth.domainHint": "The domain is used to identity your users. When they enter their email address and the domain matches to your settings they will redirected to your authentication server.",
+ "teams.auth.domainHintEmail": "Email Format",
+ "teams.auth.redirectUrl": "Redirect URL",
+ "teams.auth.redirectUrlHint": "You have to allow this URL in your authentication server.",
+ "teams.auth.reloaded": "Auth setting reloaded.",
+ "teams.auth.signoutRedirectUrl": "Signout Redirect URL",
+ "teams.auth.testLogin": "Test Login",
+ "teams.auth.use": "Custom OIDC Server",
+ "teams.auth.useHint": "Use single-sign-on (SSO) solution to connect Squidex to your infrastructure. Your employees and collegues can connect with their normal business account.",
"teams.create": "Create",
"teams.createFailed": "Failed to create team. Please reload.",
+ "teams.delete": "Delete Team",
+ "teams.deleteConfirmText": "Do you really want to delete this Team?",
+ "teams.deleteConfirmTitle": "I understand. Delete my Team",
+ "teams.deleteWarning": "Once you delete an Team, there is no going back. All your data will be deleted in the background.",
"teams.empty": "This team has no apps yet.",
"teams.leave": "Leave team",
"teams.leaveConfirmText": "Do you really want to leave this team?",
diff --git a/backend/i18n/frontend_pt.json b/backend/i18n/frontend_pt.json
index f790652d1..814e44f91 100644
--- a/backend/i18n/frontend_pt.json
+++ b/backend/i18n/frontend_pt.json
@@ -200,6 +200,7 @@
"common.aspectRatio": "AspectRatio",
"common.assets": "Ficheiros",
"common.assetScripts": "Scripts de ficheiros",
+ "common.auth": "Authentication",
"common.back": "Voltar",
"common.backendError": "Erro de backend",
"common.backups": "Backups",
@@ -1039,8 +1040,29 @@
"start.loginHint": "O botão de login abrirá um novo pop-up. Assim que tiver sucesso, redireciona-o para o portal de gestão Squidex.",
"start.madeBy": "Orgulhosamente feito por",
"start.madeByCopyright": "Sebastian Stehle e Colaboradores, 2016-2022",
+ "teams.archiveFailed": "Failed to archive Team.",
+ "teams.auth.authority": "Authority",
+ "teams.auth.authorityHint": "The URL to your authority server.",
+ "teams.auth.clientId": "Client ID",
+ "teams.auth.clientSecret": "Client Secret",
+ "teams.auth.displayName": "Display Name",
+ "teams.auth.displayNameHint": "The name for buttons and other UI elements.",
+ "teams.auth.domain": "Domain",
+ "teams.auth.domainHint": "The domain is used to identity your users. When they enter their email address and the domain matches to your settings they will redirected to your authentication server.",
+ "teams.auth.domainHintEmail": "Email Format",
+ "teams.auth.redirectUrl": "Redirect URL",
+ "teams.auth.redirectUrlHint": "You have to allow this URL in your authentication server.",
+ "teams.auth.reloaded": "Auth setting reloaded.",
+ "teams.auth.signoutRedirectUrl": "Signout Redirect URL",
+ "teams.auth.testLogin": "Test Login",
+ "teams.auth.use": "Custom OIDC Server",
+ "teams.auth.useHint": "Use single-sign-on (SSO) solution to connect Squidex to your infrastructure. Your employees and collegues can connect with their normal business account.",
"teams.create": "Criar",
"teams.createFailed": "Falhou na criação de uma equipa. Por favor, recarregue.",
+ "teams.delete": "Delete Team",
+ "teams.deleteConfirmText": "Do you really want to delete this Team?",
+ "teams.deleteConfirmTitle": "I understand. Delete my Team",
+ "teams.deleteWarning": "Once you delete an Team, there is no going back. All your data will be deleted in the background.",
"teams.empty": "Esta equipa ainda não tem aplicativos.",
"teams.leave": "Deixar a equipa",
"teams.leaveConfirmText": "Queres mesmo deixar esta equipa?",
diff --git a/backend/i18n/frontend_zh.json b/backend/i18n/frontend_zh.json
index bfba49f98..d39d7e73b 100644
--- a/backend/i18n/frontend_zh.json
+++ b/backend/i18n/frontend_zh.json
@@ -17,16 +17,16 @@
"apps.appsButtonCreate": "应用概览",
"apps.appsButtonCreateTeam": "Create Team",
"apps.appsButtonFallbackTitle": "应用概览",
- "apps.archiveFailed": "Failed to archive app.",
+ "apps.archiveFailed": "Failed to archive App.",
"apps.create": "创建应用程序",
"apps.createBlankApp": "新应用程序",
"apps.createBlankAppDescription": "创建一个没有内容和Schemas的新空白应用程序。",
"apps.createFailed": "创建应用失败。请重新加载。",
"apps.createWithTemplate": "创建 {template} 示例",
"apps.delete": "Delete App",
- "apps.deleteConfirmText": "Do you really want to delete this app?",
+ "apps.deleteConfirmText": "Do you really want to delete this App?",
"apps.deleteConfirmTitle": "I understand. Delete my App",
- "apps.deleteWarning": "Once you delete an app, there is no going back. All your data will be deleted in the background.",
+ "apps.deleteWarning": "Once you delete an App, there is no going back. All your data will be deleted in the background.",
"apps.empty": "您还没有与任何应用协作",
"apps.generalSettings": "通用",
"apps.generalSettingsDangerZone": "通用",
@@ -200,6 +200,7 @@
"common.aspectRatio": "纵横比",
"common.assets": "资源",
"common.assetScripts": "Asset Scripts",
+ "common.auth": "Authentication",
"common.back": "返回",
"common.backendError": "后端错误",
"common.backups": "备份",
@@ -1038,9 +1039,30 @@
"start.login": "登录 Squidex",
"start.loginHint": "登录按钮将打开一个新的弹出窗口。一旦您登录成功,我们会将您重定向到 Squidex 管理门户。",
"start.madeBy": "自豪地制作",
- "start.madeByCopyright": "Sebastian Stehle 和贡献者,2016-2021",
+ "start.madeByCopyright": "Sebastian Stehle 和贡献者,2016-2024",
+ "teams.archiveFailed": "Failed to archive Team.",
+ "teams.auth.authority": "Authority",
+ "teams.auth.authorityHint": "The URL to your authority server.",
+ "teams.auth.clientId": "Client ID",
+ "teams.auth.clientSecret": "Client Secret",
+ "teams.auth.displayName": "Display Name",
+ "teams.auth.displayNameHint": "The name for buttons and other UI elements.",
+ "teams.auth.domain": "Domain",
+ "teams.auth.domainHint": "The domain is used to identity your users. When they enter their email address and the domain matches to your settings they will redirected to your authentication server.",
+ "teams.auth.domainHintEmail": "Email Format",
+ "teams.auth.redirectUrl": "Redirect URL",
+ "teams.auth.redirectUrlHint": "You have to allow this URL in your authentication server.",
+ "teams.auth.reloaded": "Auth setting reloaded.",
+ "teams.auth.signoutRedirectUrl": "Signout Redirect URL",
+ "teams.auth.testLogin": "Test Login",
+ "teams.auth.use": "Custom OIDC Server",
+ "teams.auth.useHint": "Use single-sign-on (SSO) solution to connect Squidex to your infrastructure. Your employees and collegues can connect with their normal business account.",
"teams.create": "Create",
"teams.createFailed": "Failed to create team. Please reload.",
+ "teams.delete": "Delete Team",
+ "teams.deleteConfirmText": "Do you really want to delete this Team?",
+ "teams.deleteConfirmTitle": "I understand. Delete my Team",
+ "teams.deleteWarning": "Once you delete an Team, there is no going back. All your data will be deleted in the background.",
"teams.empty": "This team has no apps yet.",
"teams.leave": "Leave team",
"teams.leaveConfirmText": "Do you really want to leave this team?",
diff --git a/backend/i18n/source/backend_en.json b/backend/i18n/source/backend_en.json
index 77605be36..90963abf1 100644
--- a/backend/i18n/source/backend_en.json
+++ b/backend/i18n/source/backend_en.json
@@ -37,7 +37,6 @@
"common.aspectHeight": "Aspect height",
"common.aspectWidth": "Aspect width",
"common.calculatedDefaultValue": "Calculated default value",
- "common.clientd": "Client ID",
"common.clientId": "Client ID",
"common.clientSecret": "Client Secret",
"common.contentType": "Content type",
@@ -111,6 +110,7 @@
"common.role": "Role",
"common.save": "Save",
"common.schemaId": "Schema ID",
+ "common.signoutRedirectUrl": "Signout Redirect URL",
"common.signup": "Signup",
"common.success": "Success",
"common.text": "Text",
@@ -274,6 +274,9 @@
"jobs.ruleRunNamedSnapshot": "Replay Rule '{name}' from states.",
"jobs.ruleRunSnapshot": "Replay Rule from states",
"login.githubPrivateEmail": "Your email address is set to private in Github. Please set it to public to use Github login.",
+ "login.test.headline": "Successful Test",
+ "login.test.text": "Login Test was successful. You can save the settings now. It is recommended to make a final test with the actual login flow.",
+ "login.test.title": "Login Test",
"schemas.dateTimeCalculatedDefaultAndDefaultError": "Calculated default value and default value cannot be used together.",
"schemas.duplicateFieldName": "Field '{field}' has been added twice.",
"schemas.fieldCannotBeUIField": "Field cannot be an UI field.",
@@ -309,7 +312,7 @@
"setup.headline": "Installation",
"setup.hint": "You see this screen because no user exists yet. After a user is created, you are not able to use this setup page again.",
"setup.madeBy": "Proudly made by",
- "setup.madeByCopyright": "Sebastian Stehle and Contributors, 2016-2021",
+ "setup.madeByCopyright": "Sebastian Stehle and Contributors, 2016-2024",
"setup.ruleAppCreation.warningAdmins": "With your setup, only admins can create new apps. If you want to change this set UI__ONLYADMINSCANCREATEAPPS=false as environment variable.",
"setup.ruleAppCreation.warningAll": "With your setup, every user can create new apps. If you want to change this set UI__ONLYADMINSCANCREATEAPPS=true as environment variable.",
"setup.ruleFolder.warning": "You are using the folder asset store where all assets are stored in the file system. Please remember to include the asset folder into your backup strategy and map it to a volume, if you are using docker.",
@@ -322,6 +325,8 @@
"setup.ruleUrl.failure": "You should access Squidex only over one canonical URL and configure this URL with the URLS__BASEURL environment variable. The current base URL {actual} does not match to the base url {configured}. This variable must point to the public URL under which your Squidex instance is available.",
"setup.ruleUrl.success": "Congratulations, the URLS__BASEURL environment variable is configured properly. This variable must point to the public URL under which your Squidex instance is available.",
"setup.title": "Installation",
+ "teams.appsAssigned": "Cannot delete team, when apps are assigned.",
+ "teams.domainInUse": "Domain is already used for another team.",
"users.accessDenied.text": "This operation is not allowed, your account might be locked.",
"users.accessDenied.title": "Access denied",
"users.consent.agree": "I agree!",
@@ -343,6 +348,8 @@
"users.lockedOutTitle": "Account locked",
"users.lockYourselfError": "You cannot lock yourself.",
"users.login.askAdmin": "",
+ "users.login.custom": "Enter your E-Mail Address to login with your Company Account and single sign on (SSO).",
+ "users.login.emailBusinessPlaceholder": "Enter Business Email",
"users.login.emailPlaceholder": "Enter Email",
"users.login.error": "Email or password not correct",
"users.login.loginWith": "{action} with {provider}",
@@ -355,6 +362,7 @@
"users.logout.headline": "Logged out!",
"users.logout.text": "!Please close this popup.",
"users.logout.title": "Logout",
+ "users.noCustomDomain": "No authentication server registered.",
"users.noEmailAddress": "We cannot get the email address from authentication provider.",
"users.profile.aboutHint": "Please share some information about your. It helps us to get an understanding about our users and to improve the product.",
"users.profile.aboutTitle": "About You",
@@ -419,6 +427,7 @@
"validation.requiredBoth": "If {property1|lower} or {property2|lower} is used both must be defined.",
"validation.requiredValue": "Value must be defined.",
"validation.slug": "{property|upper} is not a valid slug.",
+ "validation.url": "{property|upper} is not a valid URL.",
"validation.valid": "{property|upper} is not a valid value.",
"workflows.overlap": "Multiple workflows cover all schemas.",
"workflows.publishedIsInitial": "Initial step cannot be published step.",
diff --git a/backend/i18n/source/backend_fr.json b/backend/i18n/source/backend_fr.json
index 5c87bf9c6..73fd5086c 100644
--- a/backend/i18n/source/backend_fr.json
+++ b/backend/i18n/source/backend_fr.json
@@ -303,7 +303,7 @@
"setup.headline": "Installation",
"setup.hint": "Cet écran s'affiche car aucun utilisateur n'existe encore. Une fois qu'un utilisateur est créé, vous ne pouvez plus utiliser cette page de configuration.",
"setup.madeBy": "Fièrement fabriqué par",
- "setup.madeByCopyright": "Sebastian Stehle et contributeurs, 2016-2021",
+ "setup.madeByCopyright": "Sebastian Stehle et contributeurs, 2016-2024",
"setup.ruleAppCreation.warningAdmins": "Avec votre configuration, seuls les administrateurs peuvent créer de nouvelles applications. Si vous souhaitez modifier cela, définissez UI__ONLYADMINSCANCREATEAPPS=false comme variable d'environnement.",
"setup.ruleAppCreation.warningAll": "Avec votre configuration, chaque utilisateur peut créer de nouvelles applications. Si vous souhaitez modifier cela, définissez UI__ONLYADMINSCANCREATEAPPS=true comme variable d'environnement.",
"setup.ruleFolder.warning": "Vous utilisez le magasin d'actifs de dossier où tous les actifs sont stockés dans le système de fichiers. N'oubliez pas d'inclure le dossier d'actifs dans votre stratégie de sauvegarde et de le mapper sur un volume, si vous utilisez docker.",
diff --git a/backend/i18n/source/backend_it.json b/backend/i18n/source/backend_it.json
index ddc18af89..b3902530f 100644
--- a/backend/i18n/source/backend_it.json
+++ b/backend/i18n/source/backend_it.json
@@ -273,7 +273,7 @@
"setup.headline": "Installazione",
"setup.hint": "Vedi questa schermata perché non esiste ancora alcun utente. Dopo aver creato un utente, non sarà più possibile visualizzare questa schermata.",
"setup.madeBy": "Orgogliosamente realizzato da",
- "setup.madeByCopyright": "Sebastian Stehle e Collaboratori, 2016-2021",
+ "setup.madeByCopyright": "Sebastian Stehle e Collaboratori, 2016-2024",
"setup.ruleAppCreation.warningAdmins": "Con questa impostazione solamente gli amministratori possono creare nuove app. Se volessi cambiare questa impostazione utilizza UI__ONLYADMINSCANCREATEAPPS=false come variabile d'ambiente.",
"setup.ruleAppCreation.warningAll": "Con questa impostazione, ogni utente può creare nuove app. Se volessi cambiare questa impostazione utilizza UI__ONLYADMINSCANCREATEAPPS=true come variabile d'ambiente.",
"setup.ruleFolder.warning": "Stai usando la cartella delle risorse dove tutte le risorse sono salvate all'interno del file system. Ricordati per favore di includere la cartella delle risorse all'interno della gestione dei backup e mappalo in un volume, se stai usando Docker.",
diff --git a/backend/i18n/source/backend_zh.json b/backend/i18n/source/backend_zh.json
index ed7712333..4b04c4433 100644
--- a/backend/i18n/source/backend_zh.json
+++ b/backend/i18n/source/backend_zh.json
@@ -274,7 +274,7 @@
"setup.headline": "安装",
"setup.hint": "您看到此屏幕是因为尚无用户存在。创建用户后,您将无法再次使用此屏幕。",
"setup.madeBy": "制作",
- "setup.madeByCopyright": "Sebastian Stehle 和贡献者,2016-2021",
+ "setup.madeByCopyright": "Sebastian Stehle 和贡献者,2016-2024",
"setup.ruleAppCreation.warningAdmins": "通过你的设置,只有管理员可以创建新的应用程序。如果你想改变这个设置 UI__ONLYADMINCANCREATEAPPS=false 作为环境变量。",
"setup.ruleAppCreation.warningAll": "通过你的设置,每个用户都可以创建新的应用程序。如果你想改变这个设置 UI__ONLYADMINCANCREATEAPPS=true 作为环境变量。",
"setup.ruleFolder.warning": "您正在使用文件夹资源存储,其中所有资源都存储在文件系统中。请记住将资源文件夹包含在您的备份策略中并将其映射到卷, 如果您使用的是 Docker。",
diff --git a/backend/i18n/source/frontend_en.json b/backend/i18n/source/frontend_en.json
index d5d83bbd2..0cb54430d 100644
--- a/backend/i18n/source/frontend_en.json
+++ b/backend/i18n/source/frontend_en.json
@@ -17,16 +17,16 @@
"apps.appsButtonCreate": "Create App",
"apps.appsButtonCreateTeam": "Create Team",
"apps.appsButtonFallbackTitle": "Apps and Teams",
- "apps.archiveFailed": "Failed to archive app.",
+ "apps.archiveFailed": "Failed to archive App.",
"apps.create": "Create App",
"apps.createBlankApp": "New App",
"apps.createBlankAppDescription": "Create a new blank app without content and schemas.",
"apps.createFailed": "Failed to create app. Please reload.",
"apps.createWithTemplate": "Create {template} Sample",
"apps.delete": "Delete App",
- "apps.deleteConfirmText": "Do you really want to delete this app?",
+ "apps.deleteConfirmText": "Do you really want to delete this App?",
"apps.deleteConfirmTitle": "I understand. Delete my App",
- "apps.deleteWarning": "Once you delete an app, there is no going back. All your data will be deleted in the background.",
+ "apps.deleteWarning": "Once you delete an App, there is no going back. All your data will be deleted in the background.",
"apps.empty": "You are not collaborating on any apps yet",
"apps.generalSettings": "General",
"apps.generalSettingsDangerZone": "Danger Zone",
@@ -200,6 +200,7 @@
"common.aspectRatio": "AspectRatio",
"common.assets": "Assets",
"common.assetScripts": "Asset Scripts",
+ "common.auth": "Authentication",
"common.back": "Back",
"common.backendError": "Backend ERROR",
"common.backups": "Backups",
@@ -1038,9 +1039,30 @@
"start.login": "Login to Squidex",
"start.loginHint": "The login button will open a new popup. Once you are logged in successful we will redirect you to the Squidex management portal.",
"start.madeBy": "Proudly made by",
- "start.madeByCopyright": "Sebastian Stehle and Contributors, 2016-2021",
+ "start.madeByCopyright": "Sebastian Stehle and Contributors, 2016-2024",
+ "teams.archiveFailed": "Failed to archive Team.",
+ "teams.auth.authority": "Authority",
+ "teams.auth.authorityHint": "The URL to your authority server.",
+ "teams.auth.clientId": "Client ID",
+ "teams.auth.clientSecret": "Client Secret",
+ "teams.auth.displayName": "Display Name",
+ "teams.auth.displayNameHint": "The name for buttons and other UI elements.",
+ "teams.auth.domain": "Domain",
+ "teams.auth.domainHint": "The domain is used to identity your users. When they enter their email address and the domain matches to your settings they will redirected to your authentication server.",
+ "teams.auth.domainHintEmail": "Email Format",
+ "teams.auth.redirectUrl": "Redirect URL",
+ "teams.auth.redirectUrlHint": "You have to allow this URL in your authentication server.",
+ "teams.auth.reloaded": "Auth setting reloaded.",
+ "teams.auth.signoutRedirectUrl": "Signout Redirect URL",
+ "teams.auth.testLogin": "Test Login",
+ "teams.auth.use": "Custom OIDC Server",
+ "teams.auth.useHint": "Use single-sign-on (SSO) solution to connect Squidex to your infrastructure. Your employees and collegues can connect with their normal business account.",
"teams.create": "Create",
"teams.createFailed": "Failed to create team. Please reload.",
+ "teams.delete": "Delete Team",
+ "teams.deleteConfirmText": "Do you really want to delete this Team?",
+ "teams.deleteConfirmTitle": "I understand. Delete my Team",
+ "teams.deleteWarning": "Once you delete an Team, there is no going back. All your data will be deleted in the background.",
"teams.empty": "This team has no apps yet.",
"teams.leave": "Leave team",
"teams.leaveConfirmText": "Do you really want to leave this team?",
diff --git a/backend/i18n/source/frontend_fr.json b/backend/i18n/source/frontend_fr.json
index 9807fbd5b..fff96cba9 100644
--- a/backend/i18n/source/frontend_fr.json
+++ b/backend/i18n/source/frontend_fr.json
@@ -1006,7 +1006,7 @@
"start.login": "Connectez-vous à Squidex",
"start.loginHint": "Le bouton de connexion ouvrira une nouvelle fenêtre contextuelle. Une fois que vous êtes connecté avec succès, nous vous redirigerons vers le portail de gestion Squidex.",
"start.madeBy": "Fièrement fabriqué par",
- "start.madeByCopyright": "Sebastian Stehle et contributeurs, 2016-2021",
+ "start.madeByCopyright": "Sebastian Stehle et contributeurs, 2016-2024",
"teams.create": "Créer",
"teams.createFailed": "Échec de la création de l'équipe. Veuillez recharger.",
"teams.empty": "Cette équipe n'a pas encore d'applications.",
diff --git a/backend/i18n/source/frontend_zh.json b/backend/i18n/source/frontend_zh.json
index e518e8ee4..223399e85 100644
--- a/backend/i18n/source/frontend_zh.json
+++ b/backend/i18n/source/frontend_zh.json
@@ -817,7 +817,7 @@
"start.login": "登录 Squidex",
"start.loginHint": "登录按钮将打开一个新的弹出窗口。一旦您登录成功,我们会将您重定向到 Squidex 管理门户。",
"start.madeBy": "自豪地制作",
- "start.madeByCopyright": "Sebastian Stehle 和贡献者,2016-2021",
+ "start.madeByCopyright": "Sebastian Stehle 和贡献者,2016-2024",
"tour.skip": "跳过游览",
"tour.stepAppNext": "继续",
"tour.stepAppText": "应用程序是您项目的存储库,例如(博客、网上商店或移动应用程序)。您可以为您的应用程序分配贡献者以协同工作。\n\n您可以在其中创建无限数量的应用程序Squidex 同时管理多个项目。",
diff --git a/backend/i18n/translator/Squidex.Translator/Processes/Helper.cs b/backend/i18n/translator/Squidex.Translator/Processes/Helper.cs
index c063d3fc4..a3f1f9e29 100644
--- a/backend/i18n/translator/Squidex.Translator/Processes/Helper.cs
+++ b/backend/i18n/translator/Squidex.Translator/Processes/Helper.cs
@@ -15,7 +15,7 @@ public static class Helper
[
[
"apps",
- "team"
+ "teams"
],
[
"chatBot",
@@ -134,7 +134,7 @@ public static class Helper
{
if (translations.Count > 0)
{
- var prefixes = new HashSet();
+ var prefixes = new SortedSet();
foreach (var key in translations.ToList())
{
@@ -176,7 +176,7 @@ public static class Helper
return translations;
}
- private static bool HasInvalidPrefixes(HashSet prefixes)
+ private static bool HasInvalidPrefixes(SortedSet prefixes)
{
if (prefixes.Count <= 1)
{
diff --git a/backend/src/Migrations/Migrations.csproj b/backend/src/Migrations/Migrations.csproj
index 2aff5d219..438ecb81c 100644
--- a/backend/src/Migrations/Migrations.csproj
+++ b/backend/src/Migrations/Migrations.csproj
@@ -6,7 +6,7 @@
enable
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/backend/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj b/backend/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj
index 1702a34ed..cd12705db 100644
--- a/backend/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj
+++ b/backend/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj
@@ -12,7 +12,7 @@
True
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/backend/src/Squidex.Domain.Apps.Core.Model/Teams/AuthScheme.cs b/backend/src/Squidex.Domain.Apps.Core.Model/Teams/AuthScheme.cs
new file mode 100644
index 000000000..791d483b9
--- /dev/null
+++ b/backend/src/Squidex.Domain.Apps.Core.Model/Teams/AuthScheme.cs
@@ -0,0 +1,23 @@
+// ==========================================================================
+// Squidex Headless CMS
+// ==========================================================================
+// Copyright (c) Squidex UG (haftungsbeschraenkt)
+// All rights reserved. Licensed under the MIT license.
+// ==========================================================================
+
+namespace Squidex.Domain.Apps.Core.Teams;
+
+public sealed record AuthScheme
+{
+ public string Domain { get; init; }
+
+ public string DisplayName { get; init; }
+
+ public string ClientId { get; init; }
+
+ public string ClientSecret { get; init; }
+
+ public string Authority { get; init; }
+
+ public string? SignoutRedirectUrl { get; init; }
+}
diff --git a/backend/src/Squidex.Domain.Apps.Core.Model/Teams/Team.cs b/backend/src/Squidex.Domain.Apps.Core.Model/Teams/Team.cs
index 7644bd06b..287b3d661 100644
--- a/backend/src/Squidex.Domain.Apps.Core.Model/Teams/Team.cs
+++ b/backend/src/Squidex.Domain.Apps.Core.Model/Teams/Team.cs
@@ -19,6 +19,10 @@ public record Team : Entity
public AssignedPlan? Plan { get; init; }
+ public AuthScheme? AuthScheme { get; init; }
+
+ public bool IsDeleted { get; init; }
+
[Pure]
public Team Rename(string name)
{
@@ -43,6 +47,17 @@ public record Team : Entity
return this with { Plan = plan };
}
+ [Pure]
+ public Team ChangeAuthScheme(AuthScheme? authScheme)
+ {
+ if (Equals(authScheme, AuthScheme))
+ {
+ return this;
+ }
+
+ return this with { AuthScheme = authScheme };
+ }
+
[Pure]
public Team UpdateContributors(T state, Func update)
{
diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/Internal/Parser.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/Internal/Parser.cs
index 36acae9b2..a76e0d529 100644
--- a/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/Internal/Parser.cs
+++ b/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/Internal/Parser.cs
@@ -5,8 +5,8 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
-using Esprima;
using Esprima.Ast;
+using Jint;
using Microsoft.Extensions.Caching.Memory;
namespace Squidex.Domain.Apps.Core.Scripting.Internal;
@@ -22,7 +22,7 @@ internal sealed class Parser
this.cache = cache;
}
- public Script Parse(string script)
+ public Prepared