Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
52f0591
Add debug error and success JSP pages
LinukaAr Oct 27, 2025
8683099
Add "Test Connection" button to Connection Edit page
LinukaAr Nov 2, 2025
d74523c
Add Connection Test page for Identity Provider
LinukaAr Nov 2, 2025
1cda828
Add Identity Provider connection test and result pages
LinukaAr Nov 2, 2025
673a545
Refactor debugSuccess page
LinukaAr Nov 4, 2025
105d5a8
Add minor improvements
LinukaAr Nov 6, 2025
ed6b2ed
Remove Debug Result page and update Connection Test page UI
LinukaAr Nov 25, 2025
dab5270
Add an empty placeholder
LinukaAr Jan 27, 2026
02519ed
Add condition to render test button for identity providers
LinukaAr Jan 27, 2026
b1c370d
Add debug endpoints to connection resource
LinukaAr Jan 27, 2026
97efdf8
Refactor connection test functionality and improve UI components
LinukaAr Feb 10, 2026
71a0fef
Refactor connection ID handling
LinukaAr Feb 24, 2026
2bf2e13
Refactor connection debug endpoints
LinukaAr Mar 11, 2026
d4c9b1d
Refactor connection edit and test page components
LinukaAr Mar 25, 2026
ee24eb2
Refactor Connection Test page use oxygen ui
LinukaAr Mar 25, 2026
d72b5a7
Eenhance error handling and UI feedback
LinukaAr Apr 9, 2026
118393a
Address UI review comments
LinukaAr May 11, 2026
51bb1d1
Address coderabbit comments
LinukaAr May 14, 2026
27bf651
Refactor httpClient binding
LinukaAr May 18, 2026
c9cd0b3
Improve authentication provider interfaces and translations
LinukaAr May 19, 2026
22f944a
Update configuration reducer
LinukaAr May 19, 2026
518439d
Add minor fix
LinukaAr May 19, 2026
3914711
Format code
LinukaAr May 19, 2026
6170a93
Fixed polling time issue
LinukaAr May 28, 2026
3b9b7c9
Add preference consent management UI (#10329)
hwupathum May 29, 2026
110d55f
Merge remote-tracking branch 'origin/master' into idp-validator
LinukaAr May 29, 2026
e9a7355
Address coderabbit comments
LinukaAr May 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .changeset/rare-parrots-do.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
"@wso2is/console": patch
"@wso2is/myaccount": patch
"@wso2is/admin.ask-password-flow-builder.v1": patch
"@wso2is/admin.consents.v1": patch
"@wso2is/admin.flow-builder-core.v1": patch
"@wso2is/admin.registration-flow-builder.v1": patch
"@wso2is/admin.server-configurations.v1": patch
"@wso2is/common.consents.v1": patch
"@wso2is/identity-apps-core": patch
"@wso2is/i18n": patch
---

Add preference management management UI
54 changes: 54 additions & 0 deletions apps/console/src/configs/routes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -609,6 +609,46 @@ export const getAppViewRoutes = (): RouteInterface[] => {
protected: true,
showOnSidePanel: false
},
{
category: "extensions:manage.sidePanel.categories.userManagement",
children: [
{
component: lazy(() => import("@wso2is/admin.consents.v1/pages/preference-management-new")),
exact: true,
icon: {
icon: getSidePanelIcons().childIcon
},
id: "preference-management-new",
name: "Preference Management New",
path: AppConstants.getPaths().get("PREFERENCE_MANAGEMENT_NEW"),
protected: true,
showOnSidePanel: false
},
{
component: lazy(() => import("@wso2is/admin.consents.v1/pages/preference-management-edit")),
exact: true,
icon: {
icon: getSidePanelIcons().childIcon
},
id: "preference-management-edit",
name: "Preference Management Edit",
path: AppConstants.getPaths().get("PREFERENCE_MANAGEMENT_EDIT"),
protected: true,
showOnSidePanel: false
}
],
component: lazy(() => import("@wso2is/admin.consents.v1/pages/preference-management")),
exact: true,
icon: {
icon: getSidePanelIcons().consents
},
id: "preferenceManagement",
name: "extensions:develop.sidePanel.preferenceManagement",
order: 8,
path: AppConstants.getPaths().get("PREFERENCE_MANAGEMENT"),
protected: true,
showOnSidePanel: false
},
{
category: "console:develop.features.sidePanel.categories.application",
children: [
Expand All @@ -626,6 +666,20 @@ export const getAppViewRoutes = (): RouteInterface[] => {
protected: true,
showOnSidePanel: false
},
{
component: lazy(() =>
import("@wso2is/admin.connections.v1/pages/connection-test")
),
exact: true,
icon: {
icon: getSidePanelIcons().childIcon
},
id: "identityProviderTest",
name: "Identity Provider Test",
path: AppConstants.getPaths().get("IDP_TEST"),
protected: true,
showOnSidePanel: false
},
{
component: lazy(() =>
import("@wso2is/admin.connections.v1/pages/connection-edit")
Expand Down
2 changes: 2 additions & 0 deletions apps/console/src/public/deployment.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -2248,6 +2248,7 @@
"attributeDialects": "v0.0.0",
"attributeUpdateVerificationSettings": "v1.0.0",
"branding": "v0.0.0",
"consents": "v0.0.0",
"consoleSettings": "v0.0.0",
"emailTemplates": "v0.0.0",
"flows": "v1.0.0",
Expand All @@ -2256,6 +2257,7 @@
"groups": "v0.0.0",
"identityProviders": "v0.0.0",
"loginAndRegistration": "v1.0.0",
"preferenceManagement": "v0.0.0",
"mcpServers": "v0.0.0",
"oidcScopes": "v0.0.0",
"organizations": "v0.0.0",
Expand Down
37 changes: 37 additions & 0 deletions apps/myaccount/src/api/consents.ts
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,43 @@ export const getConsentById = (
});
};

/**
* Creates a new user consent record via the v2 consents API.
*
* @param consentsBaseUrl - Base URL for the v2 consents endpoint.
* @param body - Consent payload with serviceId, language, and purposes.
* @returns A promise containing the created consent detail.
*/
export const postConsent = (
consentsBaseUrl: string,
body: {
serviceId: string;
language: string;
purposes: Array<{
id: string;
elements: Array<{ id: string }>;
}>;
}
): Promise<PolicyConsentDetailInterface> => {
const requestConfig: AxiosRequestConfig = {
data: body,
headers: {
"Accept": "application/json",
"Content-Type": "application/json"
},
method: "POST",
url: consentsBaseUrl
};

return httpClient(requestConfig)
.then((response: HttpResponse<PolicyConsentDetailInterface>) => {
return response.data;
})
.catch((error: HttpError) => {
return Promise.reject(error);
});
};

/**
* Revokes a user consent record via the v2 consents API.
*
Expand Down
1 change: 1 addition & 0 deletions apps/myaccount/src/components/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export * from "./consents";
export * from "./linked-accounts";
export * from "./multi-factor-authentication";
export * from "./overview";
export * from "./preference-management";
export * from "./policy-consent";
export * from "./profile";
export * from "./shared";
Expand Down
25 changes: 17 additions & 8 deletions apps/myaccount/src/components/policy-consent/policy-consent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -88,21 +88,31 @@ export const PolicyConsent: FunctionComponent<PolicyConsentComponentProps> = (
)
);

const items: PolicyConsentItemInterface[] = details.map(
(detail: PolicyConsentDetailInterface, index: number): PolicyConsentItemInterface => {
const policyDetails: PolicyConsentDetailInterface[] = details.filter(
(detail: PolicyConsentDetailInterface) =>
detail.purposes?.some(
(p: ConsentedPurposeInterface) => p.type === "Policy"
)
);

const items: PolicyConsentItemInterface[] = policyDetails.map(
(detail: PolicyConsentDetailInterface): PolicyConsentItemInterface => {
const matchingSummary: PolicyConsentSummaryInterface = summaries.find(
(s: PolicyConsentSummaryInterface) => s.id === detail.id
) ?? summaries[0];
const purpose: ConsentedPurposeInterface | undefined =
Array.isArray(detail.purposes) && detail.purposes.length > 0
? detail.purposes[0]
: undefined;

return {
consentId: summaries[index].id,
consentId: detail.id,
policyUrl: purpose?.properties?.policyUrl ?? null,
purposeId: purpose?.id ?? "",
purposeName: purpose?.name ?? "",
purposeVersionId: purpose?.purposeVersionId ?? "",
purposeVersionId: purpose?.versionId ?? purpose?.purposeVersionId ?? "",
state: detail.state,
timestamp: summaries[index].timestamp,
timestamp: matchingSummary.timestamp,
version: purpose?.version ?? null
};
}
Expand Down Expand Up @@ -192,11 +202,10 @@ export const PolicyConsent: FunctionComponent<PolicyConsentComponentProps> = (
onClose={ handlePolicyRevokeModalClose }
type="warning"
header={ t(
"myAccount:components.policyConsentManagement.modals.revokeModal.heading",
{ policyName: revokingPolicyItem?.purposeName ?? "" }
"myAccount:components.policyConsentManagement.dangerZones.revoke.header"
) }
content={ t(
"myAccount:components.policyConsentManagement.modals.revokeModal.message"
"myAccount:components.policyConsentManagement.dangerZones.revoke.subheader"
) }
/>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,4 @@
* under the License.
*/

/**
* Represents a policy reference stored in the flow API payload.
*/
export interface PolicyConfigItemInterface {
purposeId: string;
}
export { PreferenceManagement } from "./preference-management";
Loading
Loading