Skip to content

Feat(ui): SSO configuration from UI and Scim bot token generate revoke functionality and Group Mapping in settings page - #21839

Merged
mohityadav766 merged 213 commits into
mainfrom
scim-bot-settings-page-functionality
Sep 23, 2025
Merged

mohityadav766 merged 213 commits into
mainfrom
scim-bot-settings-page-functionality

Conversation

@shrushti2000

@shrushti2000 shrushti2000 commented Jun 18, 2025 •

Copy link
Copy Markdown
Contributor

This PR introduces following functionalities:-

  1. SSO configuration from UI through settings page.
    Users can configure different sso providers from the ui by filling config fields in the form instead of updating any yml files.
    Note: Currently there is no provision to reset back to basic provider if any sso is already configured. Only config fields for existing sso can be edited and saved.

  2. SCIM Token Generate and Revoke Functionality (Collate only feature for Azure and Okta)

  3. Edit sso config fields functionality for already configured sso through Configure Tab

  4. Group Mapping
    This functionality allows to map users from scim groups to Collate groups. (Collate only feature for Azure and Okta)

Working Demonstrations:-

  1. SSO Configuration from UI
Screen.Recording.2025-09-10.at.11.05.48.PM.mov
  1. SCIM Token Generate and Revoke Functionality (Collate only feature for Azure and Okta)
Screen.Recording.2025-09-10.at.9.51.50.PM.mov
  1. Configure Tab to be shown for users having already configured sso. Users can edit sso config fields through this form.
Screen.Recording.2025-09-10.at.9.52.16.PM.mov
  1. Group Mapping
    This functionality allows to map users from scim groups to Collate groups. (Collate only feature for Azure and Okta)
Screen.Recording.2025-09-10.at.9.53.34.PM.mov

Type of change:

  • Bug fix
  • Improvement
  • New feature
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation

Checklist:

  • I have read the CONTRIBUTING document.
  • My PR title is Fixes <issue-number>: <short explanation>
  • I have commented on my code, particularly in hard-to-understand areas.
  • For JSON Schema changes: I updated the migration scripts or explained why it is not needed.

@github-actions github-actions Bot added safe to test Add this label to run secure Github workflows on PRs UI UI specific issues labels Jun 18, 2025
@shrushti2000 shrushti2000 changed the title Feat(ui): Scim bot token generate and revoke functionality in settings page Feat(ui): Scim bot token generate revoke functionality and sso config form in settings page Jul 25, 2025
@shrushti2000 shrushti2000 changed the title Feat(ui): Scim bot token generate revoke functionality and sso config form in settings page Feat(ui): SSO config form and Scim bot token generate revoke functionality in settings page Jul 25, 2025
@github-actions

Copy link
Copy Markdown
Contributor

The Java checkstyle failed.

Please run mvn spotless:apply in the root of your repository and commit the changes to this PR.
You can also use pre-commit to automate the Java code formatting.

You can install the pre-commit hooks with make install_test precommit_install.

@github-actions

Copy link
Copy Markdown
Contributor

The Java checkstyle failed.

Please run mvn spotless:apply in the root of your repository and commit the changes to this PR.
You can also use pre-commit to automate the Java code formatting.

You can install the pre-commit hooks with make install_test precommit_install.

this.jwtFilter =
new JwtFilter(config.getAuthenticationConfiguration(), config.getAuthorizerConfiguration());
new JwtFilter(
SecurityConfigurationManager.getInstance().getCurrentAuthConfig(),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: create a static method getCurrentAuthConfig() that check for INSTANCE nullability and call INSTANCE. getCurrentAuthConfig

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

new ServletHolder(new AuthRefreshServlet(authenticationCodeFlowHandler));
refreshHolder.setName("auth_refresh");
environment.getApplicationContext().addServlet(refreshHolder, "/api/v1/auth/refresh");
SessionCookieConfig cookieConfig =

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for this one , please check that session timeout is not happening on multi tabs
default session expiry if of 30 mins , after which the session is removed .
So refresh does not work in taht case , we added below to extend that session expiry

@aji-aju aji-aju Sep 22, 2025 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Checked SESSION_ID expiry time in active tab. Session timeout didnt happen in any tab.

// Ensure we have a session handler
// Ensure we have a session handler
if (SecurityConfigurationManager.getInstance().getCurrentAuthConfig() != null
&& SecurityConfigurationManager.getInstance()

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can add static helper for these kinds of things on SecurityConfigurationManager , like isSaml(), isConfidentialClient()
It could be helpfule and provides better readablilty

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

catalogConfig.getAuthorizerConfiguration())),
"/api/v1/saml/logout");

if (contextHandler.getServletHandler().getServletMapping("/api/v1/saml/login") == null) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we don't need this check for if, internals already has this.containsServletHolder that prevents it

try (AutoLock ignored = this.lock()) {
if (!this.containsServletHolder(servlet)) {
this.setServlets((ServletHolder[])ArrayUtil.addToArray(holders, servlet, ServletHolder.class));
}
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

mohityadav766
mohityadav766 previously approved these changes Sep 22, 2025
@sonarqubecloud

Copy link
Copy Markdown

@sonarqubecloud

Copy link
Copy Markdown

This branch was previously deployed

1 inactive deployment
test — 19270f8b Deployed Sep 23, 2025 by aji-aju via playwright-ci-postgresql (1, 4) #22116
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend safe to test Add this label to run secure Github workflows on PRs UI UI specific issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants