diff --git a/packages/grafana-data/src/types/config.ts b/packages/grafana-data/src/types/config.ts index 2f0b426d6b0..7fa8ec72e86 100644 --- a/packages/grafana-data/src/types/config.ts +++ b/packages/grafana-data/src/types/config.ts @@ -220,4 +220,5 @@ export interface GrafanaConfig { export interface AuthSettings { OAuthSkipOrgRoleUpdateSync?: boolean; SAMLSkipOrgRoleSync?: boolean; + DisableSyncLock?: boolean; } diff --git a/pkg/api/frontendsettings.go b/pkg/api/frontendsettings.go index 4410963c6e1..20843b28200 100644 --- a/pkg/api/frontendsettings.go +++ b/pkg/api/frontendsettings.go @@ -140,6 +140,7 @@ func (hs *HTTPServer) getFrontendSettingsMap(c *models.ReqContext) (map[string]i "auth": map[string]interface{}{ "OAuthSkipOrgRoleUpdateSync": hs.Cfg.OAuthSkipOrgRoleUpdateSync, "SAMLSkipOrgRoleSync": hs.Cfg.SectionWithEnvOverrides("auth.saml").Key("skip_org_role_sync").MustBool(false), + "DisableSyncLock": hs.Cfg.DisableSyncLock, }, "buildInfo": map[string]interface{}{ "hideVersion": hideVersion, diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index 4c5f064033e..d1bbb432017 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -295,6 +295,7 @@ type Cfg struct { AdminUser string AdminPassword string AdminEmail string + DisableSyncLock bool // AWS Plugin Auth AWSAllowedAuthProviders []string @@ -1288,6 +1289,9 @@ func readAuthSettings(iniFile *ini.File, cfg *Cfg) (err error) { cfg.TokenRotationIntervalMinutes = 2 } + // Debug setting unlocking frontend auth sync lock. Users will still be reset on their next login. + cfg.DisableSyncLock = auth.Key("disable_sync_lock").MustBool(false) + DisableLoginForm = auth.Key("disable_login_form").MustBool(false) DisableSignoutMenu = auth.Key("disable_signout_menu").MustBool(false) OAuthAutoLogin = auth.Key("oauth_auto_login").MustBool(false) diff --git a/public/app/features/admin/UserAdminPage.tsx b/public/app/features/admin/UserAdminPage.tsx index 879dda5e114..b3087552d04 100644 --- a/public/app/features/admin/UserAdminPage.tsx +++ b/public/app/features/admin/UserAdminPage.tsx @@ -112,9 +112,10 @@ export class UserAdminPage extends PureComponent { user?.isExternal && user?.authLabels?.some((r) => SyncedOAuthLabels.includes(r)); const isSAMLUser = user?.isExternal && user?.authLabels?.includes('SAML'); const isUserSynced = - (user?.isExternal && !(isOAuthUserWithSkippableSync || isSAMLUser)) || - (!config.auth.OAuthSkipOrgRoleUpdateSync && isOAuthUserWithSkippableSync) || - (!config.auth.SAMLSkipOrgRoleSync && isSAMLUser); + !config.auth.DisableSyncLock && + ((user?.isExternal && !(isOAuthUserWithSkippableSync || isSAMLUser)) || + (!config.auth.OAuthSkipOrgRoleUpdateSync && isOAuthUserWithSkippableSync) || + (!config.auth.SAMLSkipOrgRoleSync && isSAMLUser)); const pageNav: NavModelItem = { text: user?.login ?? '',