diff --git a/backend/internal/bootstrap/router_bootstrap.go b/backend/internal/bootstrap/router_bootstrap.go index 993c147..bdac475 100644 --- a/backend/internal/bootstrap/router_bootstrap.go +++ b/backend/internal/bootstrap/router_bootstrap.go @@ -42,7 +42,7 @@ func initRouter(db *gorm.DB, appConfigService *service.AppConfigService) { customClaimService := service.NewCustomClaimService(db) oidcService := service.NewOidcService(db, jwtService, appConfigService, auditLogService, customClaimService) testService := service.NewTestService(db, appConfigService) - userGroupService := service.NewUserGroupService(db) + userGroupService := service.NewUserGroupService(db, appConfigService) ldapService := service.NewLdapService(db, appConfigService, userService, userGroupService) rateLimitMiddleware := middleware.NewRateLimitMiddleware() diff --git a/backend/internal/service/app_config_service.go b/backend/internal/service/app_config_service.go index 529755f..39d1ba5 100644 --- a/backend/internal/service/app_config_service.go +++ b/backend/internal/service/app_config_service.go @@ -119,6 +119,7 @@ var defaultDbConfig = model.AppConfig{ LdapEnabled: model.AppConfigVariable{ Key: "ldapEnabled", Type: "bool", + IsPublic: true, DefaultValue: "false", }, LdapUrl: model.AppConfigVariable{ diff --git a/backend/internal/service/user_group_service.go b/backend/internal/service/user_group_service.go index fa146ee..62d6d55 100644 --- a/backend/internal/service/user_group_service.go +++ b/backend/internal/service/user_group_service.go @@ -10,11 +10,12 @@ import ( ) type UserGroupService struct { - db *gorm.DB + db *gorm.DB + appConfigService *AppConfigService } -func NewUserGroupService(db *gorm.DB) *UserGroupService { - return &UserGroupService{db: db} +func NewUserGroupService(db *gorm.DB, appConfigService *AppConfigService) *UserGroupService { + return &UserGroupService{db: db, appConfigService: appConfigService} } func (s *UserGroupService) List(name string, sortedPaginationRequest utils.SortedPaginationRequest) (groups []model.UserGroup, response utils.PaginationResponse, err error) { @@ -51,7 +52,8 @@ func (s *UserGroupService) Delete(id string) error { return err } - if group.LdapID != nil { + // Disallow deleting the group if it is an LDAP group and LDAP is enabled + if group.LdapID != nil && s.appConfigService.DbConfig.LdapEnabled.Value == "true" { return &common.LdapUserGroupUpdateError{} } @@ -83,7 +85,8 @@ func (s *UserGroupService) Update(id string, input dto.UserGroupCreateDto, allow return model.UserGroup{}, err } - if group.LdapID != nil && !allowLdapUpdate { + // Disallow updating the group if it is an LDAP group and LDAP is enabled + if !allowLdapUpdate && group.LdapID != nil && s.appConfigService.DbConfig.LdapEnabled.Value == "true" { return model.UserGroup{}, &common.LdapUserGroupUpdateError{} } diff --git a/backend/internal/service/user_service.go b/backend/internal/service/user_service.go index 57343d8..8f0d6c3 100644 --- a/backend/internal/service/user_service.go +++ b/backend/internal/service/user_service.go @@ -17,14 +17,15 @@ import ( ) type UserService struct { - db *gorm.DB - jwtService *JwtService - auditLogService *AuditLogService - emailService *EmailService + db *gorm.DB + jwtService *JwtService + auditLogService *AuditLogService + emailService *EmailService + appConfigService *AppConfigService } -func NewUserService(db *gorm.DB, jwtService *JwtService, auditLogService *AuditLogService, emailService *EmailService) *UserService { - return &UserService{db: db, jwtService: jwtService, auditLogService: auditLogService, emailService: emailService} +func NewUserService(db *gorm.DB, jwtService *JwtService, auditLogService *AuditLogService, emailService *EmailService, appConfigService *AppConfigService) *UserService { + return &UserService{db: db, jwtService: jwtService, auditLogService: auditLogService, emailService: emailService, appConfigService: appConfigService} } func (s *UserService) ListUsers(searchTerm string, sortedPaginationRequest utils.SortedPaginationRequest) ([]model.User, utils.PaginationResponse, error) { @@ -52,7 +53,8 @@ func (s *UserService) DeleteUser(userID string) error { return err } - if user.LdapID != nil { + // Disallow deleting the user if it is an LDAP user and LDAP is enabled + if user.LdapID != nil && s.appConfigService.DbConfig.LdapEnabled.Value == "true" { return &common.LdapUserUpdateError{} } @@ -86,7 +88,8 @@ func (s *UserService) UpdateUser(userID string, updatedUser dto.UserCreateDto, u return model.User{}, err } - if user.LdapID != nil && !allowLdapUpdate { + // Disallow updating the user if it is an LDAP group and LDAP is enabled + if !allowLdapUpdate && user.LdapID != nil && s.appConfigService.DbConfig.LdapEnabled.Value == "true" { return model.User{}, &common.LdapUserUpdateError{} } diff --git a/frontend/src/lib/types/application-configuration.ts b/frontend/src/lib/types/application-configuration.ts index 0f16662..76a68e9 100644 --- a/frontend/src/lib/types/application-configuration.ts +++ b/frontend/src/lib/types/application-configuration.ts @@ -2,6 +2,7 @@ export type AppConfig = { appName: string; allowOwnAccountEdit: boolean; emailOneTimeAccessEnabled: boolean; + ldapEnabled: boolean; }; export type AllAppConfig = AppConfig & { @@ -18,7 +19,6 @@ export type AllAppConfig = AppConfig & { smtpSkipCertVerify: boolean; emailLoginNotificationEnabled: boolean; // LDAP - ldapEnabled: boolean; ldapUrl: string; ldapBindDn: string; ldapBindPassword: string; diff --git a/frontend/src/routes/settings/account/+page.svelte b/frontend/src/routes/settings/account/+page.svelte index c05dfa7..6050343 100644 --- a/frontend/src/routes/settings/account/+page.svelte +++ b/frontend/src/routes/settings/account/+page.svelte @@ -64,7 +64,7 @@ {/if} -