diff --git a/app/javascript/dashboard/components-next/sidebar/Sidebar.vue b/app/javascript/dashboard/components-next/sidebar/Sidebar.vue
index 20139ed27..738f44a58 100644
--- a/app/javascript/dashboard/components-next/sidebar/Sidebar.vue
+++ b/app/javascript/dashboard/components-next/sidebar/Sidebar.vue
@@ -488,6 +488,12 @@ const menuItems = computed(() => {
icon: 'i-lucide-clock-alert',
to: accountScopedRoute('sla_list'),
},
+ {
+ name: 'Settings Security',
+ label: t('SIDEBAR.SECURITY'),
+ icon: 'i-lucide-shield',
+ to: accountScopedRoute('security_settings_index'),
+ },
{
name: 'Settings Billing',
label: t('SIDEBAR.BILLING'),
diff --git a/app/javascript/dashboard/i18n/locale/en/settings.json b/app/javascript/dashboard/i18n/locale/en/settings.json
index d547538db..9a3d58443 100644
--- a/app/javascript/dashboard/i18n/locale/en/settings.json
+++ b/app/javascript/dashboard/i18n/locale/en/settings.json
@@ -350,7 +350,8 @@
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard.",
"INFO_SHORT": "Automatically mark offline when you aren't using the app."
},
- "DOCS": "Read docs"
+ "DOCS": "Read docs",
+ "SECURITY": "Security"
},
"BILLING_SETTINGS": {
"TITLE": "Billing",
@@ -382,6 +383,39 @@
},
"NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again."
},
+ "SECURITY_SETTINGS": {
+ "TITLE": "Security",
+ "DESCRIPTION": "Manage your account security settings.",
+ "SAML": {
+ "TITLE": "SAML SSO",
+ "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.",
+ "SSO_URL": {
+ "LABEL": "SSO URL",
+ "HELP": "The URL where SAML authentication requests will be sent",
+ "PLACEHOLDER": "https://your-idp.com/saml/sso"
+ },
+ "CERTIFICATE": {
+ "LABEL": "X.509 Certificate",
+ "HELP": "The public certificate from your identity provider used to verify SAML responses",
+ "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..."
+ },
+ "SP_ENTITY_ID": {
+ "LABEL": "Service Provider Entity ID",
+ "HELP": "Unique identifier for this application as a service provider. Leave blank to use default.",
+ "PLACEHOLDER": "my-unique-sp"
+ },
+ "UPDATE_BUTTON": "Update SAML Settings",
+ "API": {
+ "SUCCESS": "SAML settings updated successfully",
+ "ERROR": "Failed to update SAML settings",
+ "ERROR_LOADING": "Failed to load SAML settings",
+ "DISABLED": "SAML settings disabled successfully"
+ },
+ "VALIDATION": {
+ "REQUIRED_FIELDS": "SSO URL and Certificate are required fields"
+ }
+ }
+ },
"CREATE_ACCOUNT": {
"NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.",
"NEW_ACCOUNT": "New Account",
diff --git a/app/javascript/dashboard/routes/dashboard/settings/security/Index.vue b/app/javascript/dashboard/routes/dashboard/settings/security/Index.vue
new file mode 100644
index 000000000..70b8043ae
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/security/Index.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlSettings.vue b/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlSettings.vue
new file mode 100644
index 000000000..67b9d62d9
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlSettings.vue
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/security/security.routes.js b/app/javascript/dashboard/routes/dashboard/settings/security/security.routes.js
new file mode 100644
index 000000000..a90086be4
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/security/security.routes.js
@@ -0,0 +1,39 @@
+import { frontendURL } from '../../../../helper/URLHelper';
+import { INSTALLATION_TYPES } from 'dashboard/constants/installationTypes';
+import SettingsWrapper from '../SettingsWrapper.vue';
+import Index from './Index.vue';
+
+export default {
+ routes: [
+ {
+ path: frontendURL('accounts/:accountId/settings/security'),
+ meta: {
+ permissions: ['administrator'],
+ installationTypes: [
+ INSTALLATION_TYPES.CLOUD,
+ INSTALLATION_TYPES.ENTERPRISE,
+ ],
+ },
+ component: SettingsWrapper,
+ props: {
+ headerTitle: 'BILLING_SETTINGS.TITLE',
+ icon: 'credit-card-person',
+ showNewButton: false,
+ },
+ children: [
+ {
+ path: '',
+ name: 'security_settings_index',
+ component: Index,
+ meta: {
+ permissions: ['administrator'],
+ installationTypes: [
+ INSTALLATION_TYPES.CLOUD,
+ INSTALLATION_TYPES.ENTERPRISE,
+ ],
+ },
+ },
+ ],
+ },
+ ],
+};
diff --git a/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js b/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js
index ef39688a5..d513bdfde 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js
+++ b/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js
@@ -22,6 +22,7 @@ import sla from './sla/sla.routes';
import teams from './teams/teams.routes';
import customRoles from './customRoles/customRole.routes';
import profile from './profile/profile.routes';
+import security from './security/security.routes';
export default {
routes: [
@@ -59,5 +60,6 @@ export default {
...teams.routes,
...customRoles.routes,
...profile.routes,
+ ...security.routes,
],
};