diff --git a/.gitignore b/.gitignore index 42833e7ae..12dfb57af 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ .env.test.local .env.production.local .env +.npmrc npm-debug.log* yarn-debug.log* diff --git a/docs/api/authorization.md b/docs/api/authorization.md index cac5b3eb2..8fdbaf80c 100644 --- a/docs/api/authorization.md +++ b/docs/api/authorization.md @@ -59,9 +59,9 @@ Scopes are granular permissions you can add to personal access tokens (PATs) to Scopes contain one or more rights, which are low level permissions that grant access to individual endpoints. This means that a single scope, like `idn:access-request:manage`, can grant access to multiple API endpoints. To determine which scopes a PAT needs, you must first identify which endpoints the PAT needs to invoke. Each endpoint's API specification indicates which scope is necessary to call the endpoint. You can use this approach to curate a list of scopes that must be applied to the credential to call the necessary endpoints. [Learn more about how to find an API's required scopes here](#identifying-necessary-authorization-for-an-endpoint). -By default, each PAT has the scope, `sp:scopes:all`, which grants access to all the rights appropriate for the [user level](https://documentation.sailpoint.com/saas/help/common/users/user_level_matrix.html). For example, a user with the **Admin** user level has access to all APIs, so `sp:scopes:all` grants **Admin** users access to all APIs. A user with the **Cert Admin** user level, however, has access to only a subset of APIs necessary to perform their role, most notably the certification APIs, so `sp:scopes:all` grants **Cert Admin** users access to only that subset of APIs. +By default, each PAT has the scope `sp:scopes:default`, which is the least privileged scope. It only grants access to endpoints that require no authorization at all, such as [List Public Identities](https://developer.sailpoint.com/idn/api/v3/get-public-identities). Access to the endpoint may still be determined by the user's [user level](https://documentation.sailpoint.com/saas/help/common/users/user_level_matrix.html). -Alternatively, `sp:scopes:default` is the least privileged scope that only grants access to endpoints that require no authorization at all, such as [list public identities](https://developer.sailpoint.com/docs/api/v3/get-public-identities). +Alternatively, `sp:scopes:all` grants access to all the rights appropriate for the [user level](https://documentation.sailpoint.com/saas/help/common/users/user_level_matrix.html). For example, a user with the **Admin** user level has access to all APIs, so `sp:scopes:all` grants **Admin** users access to all APIs. A user with the **Cert Admin** user level, however, has access to only a subset of APIs necessary to perform their role, most notably the certification APIs, so `sp:scopes:all` grants **Cert Admin** users access to only that subset of APIs. Scopes are additive, which means the final right set is the intersection of all the rights granted by the scopes assigned to a PAT, excluding any rights that fall outside of the user level. Each scope added to an PAT builds up the credential's permission set, incrementally increasing access to the API. If a PAT has `sp:scopes:all` granted, then any additional scope is ignored because `sp:scopes:all` already contains the complete set of rights available to the user level. diff --git a/docs/api/patch-requests.md b/docs/api/patch-requests.md index ecef7b668..8a2c4c9e0 100644 --- a/docs/api/patch-requests.md +++ b/docs/api/patch-requests.md @@ -16,7 +16,7 @@ You can use the Identity Security Cloud APIs to update existing resources. Many - You can send a **PUT** request to replace the existing resource with a new one. For example, if you wanted to update one of John Doe's source accounts, you could use the [Put Account](https://developer.sailpoint.com/docs/api/v3/put-account) endpoint to replace John Doe's existing source account with a new one. This is a viable way to update a resource, but it requires you to update the entire resource each time. -- You can send a **PATCH** request to make a specific change to the resource. For example, if you wanted to update John Doe's account's associated "city" attribute, you could use the [Patch Account](https://developer.sailpoint.com/docs/api/v3/update-account) endpoint to replace his existing "city" with a new one, all without affecting any of the other source account details. This can be very helpful when you want to make specific updates to resources, but it requires some knowledge of the types of changes, or "operations", that are possible, the specific paths of the fields you want to update, and some understanding of the basic data types. +- You can send a **PATCH** request to make a specific change to the resource. For example, if you wanted to update John Doe's account's associated `identityId` attribute, you could use the [Patch Account](https://developer.sailpoint.com/docs/api/v3/update-account) endpoint to replace his existing `identityId` with a new one, all without affecting any of the other source account details. This can be very helpful when you want to make specific updates to resources, but it requires some knowledge of the types of changes, or "operations", that are possible, the specific paths of the fields you want to update, and some understanding of the basic data types. This guide will focus on the partial update method, PATCH requests. Read this guide to learn how to start sending PATCH requests. diff --git a/docs/connectivity/saas-connectivity/connector-customizers/config.md b/docs/connectivity/saas-connectivity/connector-customizers/config.md new file mode 100644 index 000000000..6054ecb42 --- /dev/null +++ b/docs/connectivity/saas-connectivity/connector-customizers/config.md @@ -0,0 +1,62 @@ +--- +id: connectivity-customizers-config +title: Customizer Config Object +pagination_label: Config Object +sidebar_label: Config Object +sidebar_position: 6.5 +sidebar_class_name: saasConnectivity +keywords: ['connectivity', 'connectors', customizers] +description: The config object in a customizer +slug: /connectivity/saas-connectivity/customizers/config +tags: ['Connectivity'] +--- + +# Customizer Config Object + +The connector config object holds all the config values that are set in the SaaS connector. These can be used to fetch custom settings added by the user, as well as inspect values from the connector instance itself. + +The config object is fetched during initialization of the connector + +```typescript +const config: Config = await readConfig() +``` + +### Example Config Object + +Below is an example object model that can be used to type your config. Any values set by the connector itself are added at the top level json. + +```typescript +export interface Config { + beforeProvisioningRule: any + cloudCacheUpdate: number + cloudDisplayName: string + cloudExternalId: string + connectionType: string + connectorName: string + deleteThresholdPercentage: number + deltaAggregation: DeltaAggregation + deltaAggregationEnabled: boolean + formPath: any + hasFullAggregationCompleted: boolean + healthCheckTimeout: number + healthy: boolean + idnProxyType: string + managementWorkgroup: any + managerCorrelationFilter: any + since: string + "slpt-source-diagnostics": string + sourceConnected: boolean + sourceDescription: string + spConnEnableStatefulCommands: boolean + spConnectorInstanceId: string + spConnectorSpecId: string + status: string + supportsDeltaAgg: boolean + templateApplication: string + } + + export interface DeltaAggregation { + "std:account:list": any + "std:entitlement:list": any + } +``` \ No newline at end of file diff --git a/docs/connectivity/saas-connectivity/limits.md b/docs/connectivity/saas-connectivity/limits.md index 9ee82d3c6..8b217d0f7 100644 --- a/docs/connectivity/saas-connectivity/limits.md +++ b/docs/connectivity/saas-connectivity/limits.md @@ -17,6 +17,6 @@ Below is a list of limits set in SaaS Connectivity: - The actual run time of a connector is not limited at this time, however a response in the form of `res.send()` must be recieved from a command at least every 3 minutes - If you have a long running call, you can use `res.keepAlive()` to send a heartbeat to Identity Security Cloud in between `res.send()` calls to let it know the connector is still running - **Response Size** - - The maximum size of a single `res.send()` call is 256 KiB. Not that some metadata is sent along with the call, so the max size of the payload sent will be slightly less than 256 KiB + - The maximum size of a single `res.send()` call is 256 KiB. Note that some metadata is sent along with the call, so the max size of the payload sent will be slightly less than 256 KiB - **Memory Limits** - Each instance of a running SaaS connector is limited to 512 MB diff --git a/docs/extensibility/configuration-management/configuration-hub.md b/docs/extensibility/configuration-management/configuration-hub.md new file mode 100644 index 000000000..92ddbdd29 --- /dev/null +++ b/docs/extensibility/configuration-management/configuration-hub.md @@ -0,0 +1,23 @@ +--- +id: configuration-hub +title: Configuration Hub +pagination_label: Configuration Hub +sidebar_position: 3 +sidebar_class_name: configurationHub +keywords: ['configuration'] +description: Manage tenant configurations with the ISC UI. +slug: /extensibility/configuration-management/configuration-hub +tags: ['Configuration', 'Hub'] +--- + +## Overview + +The SailPoint Configuration Hub supports management of configuration objects in your Identity Security Cloud (ISC) tenant through backup and deploy operations from the ISC UI. For example, you can back up configurations like sources and identity profiles defined for your business, restore them in the event of configuration errors or loss, or migrate and deploy them to your other tenants. + +To learn more about Configuration Hub, refer to the [Configuration Hub documentation](https://documentation.sailpoint.com/saas/help/confighub/config_hub.html). + +## Discuss + +The most valuable resource for ISC developers is the SailPoint Developer Community itself, where ISC users and experts all over the world come together to ask questions and provide solutions. + +To learn more about the SaiLPoint Configuration Hub and discuss it with SailPoint Developer Community members, go to the [SailPoint Developer Community Forum](https://developer.sailpoint.com/discuss/c/isc/6). \ No newline at end of file diff --git a/docs/extensibility/configuration-management/index.mdx b/docs/extensibility/configuration-management/index.mdx index 9d7a47ff5..fd5a56276 100644 --- a/docs/extensibility/configuration-management/index.mdx +++ b/docs/extensibility/configuration-management/index.mdx @@ -19,9 +19,9 @@ tags: ['Introduction', 'Getting Started'] ## Overview Configuration Management provides you with a form of version control for your tenant configurations. -With Configuration Management, you can export snapshots of your current tenant configurations, downloading them in a JSON. +With Configuration Management, you can export (backup in Configuration Hub) and import (deploy in Configuration Hub) snapshots of your current tenant configurations, downloading them in a JSON. These configurations can serve as different versions of your tenant configuration. -You can then import those configurations into tenants to update, resore, or migrate tenant configurations. +You can then import those configurations into tenants to update, restore, or migrate tenant configurations. ```mdx-code-block import DocCardList from '@theme/DocCardList'; diff --git a/docs/extensibility/configuration-management/saas-configuration.mdx b/docs/extensibility/configuration-management/saas-configuration.mdx index 95a939216..f0451b0b7 100644 --- a/docs/extensibility/configuration-management/saas-configuration.mdx +++ b/docs/extensibility/configuration-management/saas-configuration.mdx @@ -2,10 +2,10 @@ id: saas-configuration title: SaaS Configuration pagination_label: SaaS Configuration -sidebar_position: 3 +sidebar_position: 4 sidebar_class_name: saasConfiguration keywords: ['configuration'] -description: Use SaaS Configuration APIs to import and export configurations. +description: Manage tenant configurations with the SaaS Configuration APIs. slug: /extensibility/configuration-management/saas-configuration tags: ['SaaS Configuration'] --- diff --git a/docs/extensibility/rules/guides/your_first_rule.md b/docs/extensibility/rules/guides/your_first_rule.md index fb8bd7b06..eea2c41a5 100644 --- a/docs/extensibility/rules/guides/your_first_rule.md +++ b/docs/extensibility/rules/guides/your_first_rule.md @@ -428,7 +428,7 @@ return generateUsername( identity.getFirstname(), identity.getLastname() ); Before you send the rule to the professional services team to upload your rule to your tenant for use, you can send it through the rule validator to check for any errors. -Refer to [Rule Validator](https://community.sailpoint.com/t5/Professional-Services/Identity Security Cloud-Rule-Validator/ta-p/166116) for installation. +Refer to [Rule Validator](https://community.sailpoint.com/t5/Professional-Services/IdentityNow-Rule-Validator/ta-p/166116) for installation. Run the rule validator against your newly written rule. diff --git a/docs/extensibility/rules/idn_rule_utility.md b/docs/extensibility/rules/idn_rule_utility.md index 62af2606f..0e0a2ae46 100644 --- a/docs/extensibility/rules/idn_rule_utility.md +++ b/docs/extensibility/rules/idn_rule_utility.md @@ -191,7 +191,7 @@ sailpoint.object.Identity identity = plan.getIdentity(); String sAMAccountName = identity.getAttribute("adUsername"); sailpoint.rule.Identity foundIdentity = idn.getIdentityById("uid"); -String email = foundIdentity.getAttribute("email"); +String email = foundIdentity.getEmail(); ``` The below section provides a full accounting of the methods available to rule writers using the IdnRuleUtil class: diff --git a/docs/extensibility/transforms/operations/date-math.md b/docs/extensibility/transforms/operations/date-math.md index 03555bbe8..5facd3ba7 100644 --- a/docs/extensibility/transforms/operations/date-math.md +++ b/docs/extensibility/transforms/operations/date-math.md @@ -90,7 +90,7 @@ Some examples of expressions are: - `true` indicates the transform rounds up (i.e., truncate the fractional date/time component indicated and then add one unit of that component). - `false` indicates the transform rounds down (i.e., truncate the fractional date/time component indicated). - - `input` - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. ## Examples diff --git a/docs/reporting/secure-data-share/index.md b/docs/reporting/secure-data-share/index.md index fccfea1c0..39b287ffc 100644 --- a/docs/reporting/secure-data-share/index.md +++ b/docs/reporting/secure-data-share/index.md @@ -14,7 +14,23 @@ hide_table_of_contents: true import MermaidViewer from '@site/src/components/MermaidViewer'; -Secure Data Share (SDS) makes your SailPoint identity data available directly in your own AWS Snowflake account. The provided dataset is comprised of structured tables that include identity, audit events, entitlements, roles, access profiles, accounts, and application data. SDS is an alternative to [search](https://documentation.sailpoint.com/saas/help/search/index.html) that gives you direct access to your tenant data, allowing you to connect your favorite data analytics tools, like PowerBI and Tableau. For information on how to use SDS in your environment, see the documentation [here](https://documentation.sailpoint.com/saas/help/secure_data_share/secure_data_share.html). For the entity relationship (ER) diagrams that represent the data model, please see the following pages. +# Secure Data Share + +Secure Data Share (SDS) makes your SailPoint identity data available directly in your own [AWS Snowflake](https://aws.amazon.com/financial-services/partner-solutions/snowflake/) account. The provided dataset comprises structured tables that include identity, audit event, entitlement, role, access profile, account, and application data. Secure Data Share is an alternative to SailPoint's [Search](https://documentation.sailpoint.com/saas/help/search/index.html). SDS uses SQL as the query language, whereas Search uses the [Elasticsearch Query Language](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html). SQL provides certain advantages over Elasticsearch: joining and aggregating data is easier in SQL, and the Snowflake interface has a built-in SQL explorer and allows you to download your search results in CSV format. SDS also allows you to connect your SailPoint data to your favorite data analytics tools, like [PowerBI](https://learn.microsoft.com/en-us/power-bi/connect-data/service-connect-snowflake) and [Tableau](https://help.tableau.com/current/pro/desktop/en-us/examples_snowflake.htm), further enhancing the reporting capabilities for your SailPoint data. + +If you would like to speak to a SailPoint representative about Secure Data Share, please [schedule a meeting here](https://calendly.com/jordan-mandernach/secure_data_share). + +## Requirements + +Secure Data Share is an add-on for Identity Security Cloud. Please contact your sales representative to discuss your SDS options. You must also have an AWS Snowflake account so that SailPoint can synchronize your tenant data with your Snowflake instance. + +## Data Synchronization SLA + +Similar to Search, SDS has a synchronization service-level agreement (SLA) of 24 hours. This means it can take up to 24 hours for operational data in your tenant to be synchronized with your Snowflake database. SailPoint Search and SDS are two separate systems, and there is no guarantee on which service will receive updated data first. In some cases, operational data may appear in Search before SDS, and in other cases SDS may receive the data first. + +## How to use SDS + +For information on how to install and use SDS in your environment, see the documentation [here](https://documentation.sailpoint.com/saas/help/secure_data_share/secure_data_share.html). Because SDS uses SQL as the query language, your tenant data is formatted into relational tables. To view the relationships between these tables, please see the following pages for the entity relationship (ER) diagrams that represent the data model. ```mdx-code-block import DocCardList from '@theme/DocCardList'; @@ -22,3 +38,8 @@ import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; ``` + +## Discuss +The most valuable resource for ISC developers is the SailPoint Developer Community itself, where ISC users and experts all over the world come together to ask questions and provide solutions. + +To learn more about SDS and discuss it with SailPoint Developer Community members, go to the [SailPoint Developer Community Forum](https://developer.sailpoint.com/discuss/c/identity-security-cloud/6). \ No newline at end of file diff --git a/navbar.js b/navbar.js index bdfc31b86..09b10c65b 100644 --- a/navbar.js +++ b/navbar.js @@ -7,34 +7,43 @@ module.exports = { }, items: [ { + type: 'dropdown', + label: 'Documentation', position: 'left', - label: 'Identity Security Cloud', - to: '/docs', + items: [ + {label: 'Identity Security Cloud', to: '/docs'}, + {label: 'IdentityIQ', to: '/docs/iiq'}, + ], + }, + + { + type: 'dropdown', + label: 'Community', + position: 'left', + items: [ + { + label: 'Developer Forum', + to: 'https://developer.sailpoint.com/discuss/', + }, + { + label: 'CoLab Marketplace', + to: '/colab', + }, + + { + label: 'Developer Blog', + to: '/blog', + }, + { + label: 'Ambassador Program', + to: '/ambassadors', + }, + ], }, { position: 'left', - label: 'IdentityIQ', - to: '/docs/iiq', - }, - { - position: 'left', - label: 'CoLab', - to: '/colab', - }, - { - position: 'left', - label: 'Blog', - to: '/blog', - }, - { - position: 'left', - label: 'Ideas', - to: 'https://ideas.sailpoint.com', - }, - { - position: 'left', - label: 'Discuss', - to: 'https://developer.sailpoint.com/discuss/', + label: 'Video Library', + to: '/videos', }, { type: 'dropdown', diff --git a/package-lock.json b/package-lock.json index 1414b8c02..952e18650 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@docusaurus/theme-mermaid": "2.4.3", "@fortawesome/fontawesome-svg-core": "^6.5.1", "@fortawesome/pro-duotone-svg-icons": "^6.5.1", + "@fortawesome/pro-solid-svg-icons": "^6.5.1", "@fortawesome/react-fontawesome": "^0.2.0", "@mdx-js/react": "^1.6.22", "@typeform/embed-react": "^1.21.0", @@ -23,6 +24,7 @@ "docusaurus-plugin-openapi-docs": "^2.0.2", "docusaurus-theme-openapi-docs": "^2.0.2", "docusaurus2-dotenv": "^1.4.0", + "ldrs": "^1.0.1", "prism-react-renderer": "^1.3.1", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -3263,6 +3265,17 @@ "node": ">=6" } }, + "node_modules/@fortawesome/pro-solid-svg-icons": { + "version": "6.5.1", + "resolved": "https://npm.fontawesome.com/@fortawesome/pro-solid-svg-icons/-/6.5.1/pro-solid-svg-icons-6.5.1.tgz", + "integrity": "sha512-UnJzqw7w+RVtEnQ2Bqg09bGYkJEZRkTnbgweZDTznHjtxsJzQdJkD3hJPL6N00c8GbWpRYslNDnTNDGVSd94cQ==", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@fortawesome/react-fontawesome": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", @@ -10614,6 +10627,11 @@ "shell-quote": "^1.8.1" } }, + "node_modules/ldrs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ldrs/-/ldrs-1.0.1.tgz", + "integrity": "sha512-eeCP1XEG72Yz6JX50zlYWRJcEfNBrpp8QSzyjD3HHhxrnt4steLX4iDHF3Dezjbnnj5qtuJn7lr1nln+/kpUIQ==" + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", diff --git a/package.json b/package.json index 2472ac140..36cd8243b 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "@docusaurus/theme-mermaid": "2.4.3", "@fortawesome/fontawesome-svg-core": "^6.5.1", "@fortawesome/pro-duotone-svg-icons": "^6.5.1", + "@fortawesome/pro-solid-svg-icons": "^6.5.1", "@fortawesome/react-fontawesome": "^0.2.0", "@mdx-js/react": "^1.6.22", "@typeform/embed-react": "^1.21.0", @@ -36,6 +37,7 @@ "docusaurus-plugin-openapi-docs": "^2.0.2", "docusaurus-theme-openapi-docs": "^2.0.2", "docusaurus2-dotenv": "^1.4.0", + "ldrs": "^1.0.1", "prism-react-renderer": "^1.3.1", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/plugin-dynamic-routes/index.js b/plugin-dynamic-routes/index.js new file mode 100644 index 000000000..907082275 --- /dev/null +++ b/plugin-dynamic-routes/index.js @@ -0,0 +1,19 @@ +module.exports = function (context, options) { + return { + name: 'plugin-dynamic-routes', + + async contentLoaded({content, actions}) { + const {routes} = options; + const {addRoute} = actions; + + routes.forEach((route) => { + addRoute({ + path: route.path, + exact: route.exact || false, + component: route.component, + customProps: route.customProps || {}, + }); + }); + }, + }; +}; diff --git a/plugins.js b/plugins.js index e22d7846c..cf12bf064 100644 --- a/plugins.js +++ b/plugins.js @@ -23,7 +23,7 @@ module.exports = [ to: '/ambassadors', from: ['/ambassador-program', '/ambassador'], }, - { + { from: ['/idn/docs/saas-configuration'], to: '/docs/extensibility/configuration-management/saas-configuration', }, diff --git a/sidebars.js b/sidebars.js index e051b50ac..abc654639 100644 --- a/sidebars.js +++ b/sidebars.js @@ -12,7 +12,7 @@ const sidebars = { { type: 'category', label: 'API Specifications', - collapsible: true, + collapsible: false, link: { type: 'doc', id: 'api/api-specifications', @@ -202,11 +202,6 @@ const sidebars = { label: 'Product Documentation', href: 'https://documentation.sailpoint.com', }, - { - type: 'link', - label: 'Certifications', - href: 'https://university.sailpoint.com/Saba/Web_spf/NA10P1PRD075/guest/categorydetail/categ000000000003041/true/xxemptyxx/', - }, ], }, ], @@ -223,6 +218,7 @@ const sidebars = { { type: 'category', label: 'API Specifications', + collapsible: false, link: { type: 'generated-index', title: 'API Specifications', @@ -252,11 +248,6 @@ const sidebars = { label: 'Product Documentation', href: 'https://documentation.sailpoint.com/#identityiq', }, - { - type: 'link', - label: 'Certifications', - href: 'https://university.sailpoint.com/Saba/Web_spf/NA10P1PRD075/guest/categorydetail/categ000000000003042/true/xxemptyxx/', - }, ], }, ], diff --git a/src/components/ambassador/AmbassadorCard/index.js b/src/components/ambassador/AmbassadorCard/index.js index 2998d6869..5d208d1db 100644 --- a/src/components/ambassador/AmbassadorCard/index.js +++ b/src/components/ambassador/AmbassadorCard/index.js @@ -4,35 +4,49 @@ import Link from '@docusaurus/Link'; import useBaseUrl from '@docusaurus/useBaseUrl'; import ThemedImage from '@theme/ThemedImage'; import {addDarkToFileName} from '../../../util/util'; -export default function AmbassadorCard({ - data -}) { - +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; +import { + faSquareCheck, + faCalendarClock, +} from '@fortawesome/pro-duotone-svg-icons'; +export default function AmbassadorCard({data}) { return ( - -
- +
{data.name}
-
+
- -
{data.answers} solutions
+ +
+ {data.answers} solutions +
- -
member since {data.member_since}
+ +
+ member since {data.member_since} +
-
- ); } diff --git a/src/components/ambassador/AmbassadorCard/styles.module.css b/src/components/ambassador/AmbassadorCard/styles.module.css index 955c3f917..82e34ec52 100644 --- a/src/components/ambassador/AmbassadorCard/styles.module.css +++ b/src/components/ambassador/AmbassadorCard/styles.module.css @@ -10,16 +10,23 @@ .card { position: relative; margin-top: 20px; - min-height: 500px; - + width: 365px; + min-height: 545px; + /* UI Properties */ - background: var(--dev-card-background); - box-shadow: var(--dev-card-shadow); - border: 1px solid var(--dev-card-background); - border-radius: 40px; - opacity: 1; - transition: all 0.3s; opacity: 1; + transition: all 0.3s; + background: var(--dev-new-car-background); + border-radius: 0.5rem; + --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), + 0 1px 2px -1px var(--tw-shadow-color); + border-radius: 0.5rem; + box-shadow: 0 0 transparent, 0 0 transparent, 0 1px 3px 0 rgba(0, 0, 0, 0.1), + 0 1px 2px -1px rgba(0, 0, 0, 0.1); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + border: 1px solid var(--dev-card-border); } .card:hover { @@ -28,10 +35,6 @@ box-shadow: var(--dev-card-selected); } - - - - .cardFaceContainer { display: flex; margin: 30px; @@ -41,8 +44,8 @@ border-radius: 99px; justify-content: center; display: flex; - height: 100px; - width: 100px; + height: 80px; + width: 80px; } .cardNameContainer { @@ -53,7 +56,7 @@ } .name { - font-size: 25px; + font-size: 22px; font-weight: 500; width: 100%; top: 124px; @@ -89,19 +92,16 @@ width: 20px; } - - .bio { margin: 30px auto; font-size: 16px; font-weight: 500; width: 100%; color: var(--ifm-color-primary); - padding: 30px; + padding: 0px 30px; margin-bottom: 50px; } - .cardData { position: absolute; bottom: 50px; @@ -113,7 +113,8 @@ .cardEye { fill: #96a9bb; /* computed from codepen https://codepen.io/sosuke/pen/Pjoqqp */ - filter: invert(79%) sepia(12%) saturate(484%) hue-rotate(168deg) brightness(84%) contrast(84%); + filter: invert(79%) sepia(12%) saturate(484%) hue-rotate(168deg) + brightness(84%) contrast(84%); margin-left: 5px; height: 18px; width: 18px; @@ -128,10 +129,23 @@ font-size: 16px; } +.cardCommentTextUpper { + color: #96a9ba; + /* computed from codepen https://codepen.io/sosuke/pen/Pjoqqp */ + margin-left: 10px; + margin-bottom: 5px; + height: 20px; + font-size: 16px; +} + .cardDataLower { position: absolute; bottom: 20px; - left: 22px; + left: 20px; display: flex; align-items: center; } + +.docCardIcon { + color: var(--ifm-color-primary); +} diff --git a/src/components/ambassador/AmbassadorCards/index.js b/src/components/ambassador/AmbassadorCards/index.js index d717d8975..3c483ca44 100644 --- a/src/components/ambassador/AmbassadorCards/index.js +++ b/src/components/ambassador/AmbassadorCards/index.js @@ -1,50 +1,56 @@ import React from 'react'; import styles from './styles.module.css'; import AmbassadorCard from '../AmbassadorCard'; -import BounceLoader from 'react-spinners/BounceLoader'; +import NewtonsCradle from '../../newtonsCradle'; import {discourseBaseURL, developerWebsiteDomain} from '../../../util/util'; -import {getAmbassadors, getAmbassadorDetails} from '../../../services/DiscourseService'; -export default function AmbassadorCards({ - expert - }) { +import { + getAmbassadors, + getAmbassadorDetails, +} from '../../../services/DiscourseService'; +export default function AmbassadorCards({expert}) { const [cardData, setCardData] = React.useState(); const [loadingCards, setLoadingCards] = React.useState(true); const getPosts = async () => { let data = await getAmbassadors(expert, 1, 0); - const resultset = [] + const resultset = []; if (data.meta) { - let count = 0 + let count = 0; while (count < data.meta.total) { data = await getAmbassadors(expert, 50, count); - count += 50 + count += 50; if (data.members) { - const memberDetails = await getAmbassadorDetails(data.members.map(item => item.id)) + const memberDetails = await getAmbassadorDetails( + data.members.map((item) => item.id), + ); for (const member of data.members) { - const memberDetail = memberDetails.users.filter(item => item.id === member.id)[0] - if (member.avatar_template.includes("developer.sailpoint.com") && memberDetail.bio_excerpt && memberDetail.bio_excerpt.length > 150) { - resultset.push(await getMemberList(member, memberDetail)) - } + const memberDetail = memberDetails.users.filter( + (item) => item.id === member.id, + )[0]; + if ( + member.avatar_template.includes('developer.sailpoint.com') && + memberDetail.bio_excerpt && + memberDetail.bio_excerpt.length > 150 + ) { + resultset.push(await getMemberList(member, memberDetail)); + } } } } } else { setCardData(undefined); setLoadingCards(false); - return + return; } - - - resultset.sort((a, b) => a.date - b.date) + resultset.sort((a, b) => a.date - b.date); setCardData(resultset); setLoadingCards(false); }; - React.useEffect(() => { getPosts(); setCardData(undefined); @@ -55,25 +61,17 @@ export default function AmbassadorCards({ return (
- {cardData.map(function(a, index){ - return + {cardData.map(function (a, index) { + return ; })}
); } else if (loadingCards) { return ( - +
+ +
); } else { return ( @@ -86,38 +84,37 @@ export default function AmbassadorCards({ } async function getMemberList(member, details) { - return { name: member.name, creatorImage: getavatarURL(member.avatar_template), title: member.title, bio: details.bio_excerpt, - member_since: new Date(member.added_at).toLocaleString('default', {month: 'long'}) + ' ' + new Date(member.added_at).toISOString().slice(0, 4), + member_since: + new Date(member.added_at).toLocaleString('default', {month: 'long'}) + + ' ' + + new Date(member.added_at).toISOString().slice(0, 4), badge_count: details.badge_count, answers: details.accepted_answers, location: details.location, website: details.website_name, - link: - discourseBaseURL() + 'u/' + - member.username + - '/summary', + link: discourseBaseURL() + 'u/' + member.username + '/summary', }; } function getavatarURL(avatar) { if (avatar.includes(developerWebsiteDomain())) { - return "https://" + developerWebsiteDomain() + avatar.replace("{size}", "120") + return ( + 'https://' + developerWebsiteDomain() + avatar.replace('{size}', '120') + ); } else { - return avatar.replace("{size}", "120") + return avatar.replace('{size}', '120'); } - } function styleExcerpt(excerpt) { if (excerpt.length > 150) { - return excerpt.slice(0, 150) + "..." + return excerpt.slice(0, 150) + '...'; } else { - return excerpt.replace("…", "") + return excerpt.replace('…', ''); } } - diff --git a/src/components/ambassador/AmbassadorCards/styles.module.css b/src/components/ambassador/AmbassadorCards/styles.module.css index 6314ea731..ab04a220d 100644 --- a/src/components/ambassador/AmbassadorCards/styles.module.css +++ b/src/components/ambassador/AmbassadorCards/styles.module.css @@ -1,17 +1,16 @@ /* Getting Started Card container */ .gridContainer { - display: grid; - place-content: center; - grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); + display: flex; + flex-wrap: wrap; + grid-template-columns: 1fr 1fr 1fr 1fr; grid-gap: 40px; - margin-left: 40px; - margin-right: 40px; + width: 1620px; } .center { margin: 0px auto; - max-width: 1300px; margin-bottom: 50px; + width: 1620px; } .space { @@ -26,10 +25,38 @@ margin: 50px; } - - .spinnerCenter { - margin: 100px auto; - max-width: 1300px; + margin: auto; + width: 4%; margin-bottom: 50px; -} \ No newline at end of file +} + +@media only screen and (max-width: 1950px) { + .gridContainer { + width: 1215px; + } + + .center { + width: 1215px; + } +} + +@media only screen and (max-width: 1315px) { + .gridContainer { + width: 810px; + } + + .center { + width: 810px; + } +} + +@media only screen and (max-width: 910px) { + .gridContainer { + width: 365px; + } + + .center { + width: 365px; + } +} diff --git a/src/components/blog/BlogBanner/index.js b/src/components/blog/BlogBanner/index.js index e1ae1b386..b76425d36 100644 --- a/src/components/blog/BlogBanner/index.js +++ b/src/components/blog/BlogBanner/index.js @@ -6,14 +6,8 @@ import Link from '@docusaurus/Link'; export default function BlogBanner() { return ( -
- -
- -
- Blog -
-
+
+ {/*

Blog

*/}
); } diff --git a/src/components/blog/BlogBanner/styles.module.css b/src/components/blog/BlogBanner/styles.module.css index 6382c3e3b..4a94cd880 100644 --- a/src/components/blog/BlogBanner/styles.module.css +++ b/src/components/blog/BlogBanner/styles.module.css @@ -1,28 +1,20 @@ - -.blogHeaderText { - position: relative; +.blogTitle { + text-align: center; + margin-bottom: 2%; color: #ffffff; - font-size: 48px; - max-width: 396px; - font-weight: bold; - line-height: 133%; - top: -84px; - left: 59px; + position: relative; + top: 25px; } -.background { +.titleContainer { width: 100%; - object-fit: repeat; - height: 100%; + height: 45px; + background: rgb(0, 51, 161); + background: linear-gradient( + 90deg, + rgba(0, 51, 161, 1) 0%, + rgba(84, 192, 232, 1) 100% + ); + align-content: center; + margin-bottom: 2%; } - -.imageContainer { - width: 100%; - height: 90px; - background: rgb(0,51,161); - background: linear-gradient(90deg, rgba(0,51,161,1) 0%, rgba(84,192,232,1) 100%); -} - -.headerImage { - height: 90px; -} \ No newline at end of file diff --git a/src/components/blog/BlogCard/index.js b/src/components/blog/BlogCard/index.js index 0d9c1f402..e3dd1a5a6 100644 --- a/src/components/blog/BlogCard/index.js +++ b/src/components/blog/BlogCard/index.js @@ -2,55 +2,45 @@ import React from 'react'; import styles from './styles.module.css'; import Link from '@docusaurus/Link'; import useBaseUrl from '@docusaurus/useBaseUrl'; -import ThemedImage from '@theme/ThemedImage'; -import {addDarkToFileName} from '../../../util/util'; export default function BlogCard({ + featured, link, title, tags, creatorImage, + creatorTitle, image, excerpt, name, views, replies, - readTime + readTime, }) { - return ( -
- -
- -
{views}
- -
{replies}
-
- -
- -
{name}
-
- - +
- -
{title}
-
- {tags?.map((tag, index) => { - if (index > 2) { - return ''; - } - return
{tag}
; - })} + +
+ +
+ {title} +
+ +
+ + +
{name}
+
{creatorTitle}
+ +
-
{excerpt}
- - - -
); diff --git a/src/components/blog/BlogCard/styles.module.css b/src/components/blog/BlogCard/styles.module.css index 19eaa3be2..94fcb711d 100644 --- a/src/components/blog/BlogCard/styles.module.css +++ b/src/components/blog/BlogCard/styles.module.css @@ -1,127 +1,197 @@ /* Getting Started Card */ .card { position: relative; - margin-top: 20px; - height: 650px; - /* UI Properties */ - background: var(--dev-card-background); - box-shadow: var(--dev-card-shadow); - border: 1px solid var(--dev-card-background); - border-radius: 40px; + margin-top: 30px; + margin-bottom: 30px; opacity: 1; - transition: all 0.3s; - max-width: 600px; + transition: all 0.3s; + width: 275px; + max-width: 275px; + background: var(--dev-new-car-background); + border-radius: 0.5rem; + --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), + 0 1px 2px -1px var(--tw-shadow-color); + border-radius: 0.5rem; + box-shadow: 0 0 transparent, 0 0 transparent, 0 1px 3px 0 rgba(0, 0, 0, 0.1), + 0 1px 2px -1px rgba(0, 0, 0, 0.1); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + border: 1px solid var(--dev-card-border); } -.card:hover { +.featuredCard { + position: relative; + margin-top: 30px; + margin-bottom: 30px; + opacity: 1; + transition: all 0.3s; + width: 400px; + height: 475px; + background: var(--dev-new-car-background); + border-radius: 0.5rem; + --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), + 0 1px 2px -1px var(--tw-shadow-color); + border-radius: 0.5rem; + box-shadow: 0 0 transparent, 0 0 transparent, 0 1px 3px 0 rgba(0, 0, 0, 0.1), + 0 1px 2px -1px rgba(0, 0, 0, 0.1); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + border: 1px solid var(--dev-card-border); +} + +.featuredCardImage { + overflow: hidden; + position: relative; + width: 400px; + height: 225px; + border-top-left-radius: 0.5rem; + border-top-right-radius: 0.5rem; +} + +a:link { + text-decoration: none; +} +a:visited { + text-decoration: none; +} +a:hover { + text-decoration: none; +} +a:active { + text-decoration: none; +} + +.card:hover, +.featuredCard:hover { cursor: pointer; transform: translate(0px, -5px); box-shadow: var(--dev-card-selected); + text-decoration: none; } - - - - .cardText { - position: absolute; - margin: 22px; - min-width: 170px; - top: 10px; - left: 0; + display: flex; + flex-direction: column; } +.cardImage { + overflow: hidden; + position: relative; + width: 300px; + height: 144px; + border-top-left-radius: 0.5rem; + border-top-right-radius: 0.5rem; +} + +.featuredCardTitle { + font-size: 20px; + font-weight: 500; + display: flex; + gap: 1rem; + margin-top: 1rem; + padding-right: 1rem; + padding-left: 1rem; + text-align: left; + height: 80px; +} .cardTitle { - font-size: 22px; - font-weight: 700; -} - -.cardBody { font-size: 16px; font-weight: 500; - top: 10px; - left: 0; -} - -.tag { - font-size: 16px; - font-weight: 500; - color: var(--dev-secondary-text); - background-color: var(--dev-tag-highlight); - padding: 0px 8px; - margin-left: 5px; - margin-top: 5px; -} - -.tags { - margin: 0px; - width: 100%; display: flex; - flex-wrap: wrap; + gap: 1rem; + margin-top: 1rem; + padding-right: 0.5rem; + padding-left: 0.5rem; + text-align: left; + height: 80px; } - - - - .cardUser { - position: absolute; - bottom: 10px; - left: 25px; - display: flex; + margin-top: 15px; + margin-bottom: 5%; } .cardFace { border-radius: 9999px; - margin: auto; + margin-left: 2%; height: 40px; width: 40px; } +.featuredCardFace { + border-radius: 9999px; + margin-left: 2%; + height: 50px; + width: 50px; +} + .cardName { min-width: 170px; + font-weight: 800; margin-top: 7px; margin-left: 10px; -} - - - - - -.cardData { - position: absolute; - bottom: 50px; - left: 20px; display: flex; - align-items: center; + color: var(--text-color); } -.cardEye { - fill: #96a9bb; - /* computed from codepen https://codepen.io/sosuke/pen/Pjoqqp */ - filter: invert(79%) sepia(12%) saturate(484%) hue-rotate(168deg) brightness(84%) contrast(84%); - margin-left: 5px; - height: 18px; - width: 18px; -} - -.cardComment { +.cardCreatorTitle { + min-width: 170px; margin-left: 10px; - fill: #96a9bb; - /* computed from codepen https://codepen.io/sosuke/pen/Pjoqqp */ - filter: invert(79%) sepia(12%) saturate(484%) hue-rotate(168deg) brightness(84%) contrast(84%); - height: 18px; - width: 18px; - margin-bottom: 4px; + display: flex; + color: var(--text-color); } -.cardCommentText { - color: #96a9ba; - /* computed from codepen https://codepen.io/sosuke/pen/Pjoqqp */ - margin-left: 5px; - margin-bottom: 5px; - height: 20px; - font-size: 16px; +.featuredCardName { + min-width: 170px; + font-weight: 800; + margin-top: 7px; + margin-left: 10px; + display: flex; + color: var(--text-color); } +.featuredCardCreatorTitle { + min-width: 170px; + margin-left: 10px; + display: flex; + color: var(--text-color); +} + +.split { + background: linear-gradient( + 145deg, + rgba(0, 51, 161, 1) 40%, + rgba(0, 79, 181, 1) 65%, + rgba(0, 113, 206, 1) 100% + ); + height: 15px; +} + +@media only screen and (max-width: 550px) { + .cardText { + margin-bottom: 0px; + } + + .featuredCard { + width: 275px; + max-width: 275px; + height: auto; + } + + .featuredCardImage { + width: 275px; + height: 144px; + } + + .featuredCardTitle { + font-size: 16px; + } + + .featuredCardFace { + height: 40px; + width: 40px; + } +} diff --git a/src/components/blog/BlogCards/index.js b/src/components/blog/BlogCards/index.js index a21b33d05..57ecae003 100644 --- a/src/components/blog/BlogCards/index.js +++ b/src/components/blog/BlogCards/index.js @@ -1,18 +1,25 @@ import React from 'react'; import styles from './styles.module.css'; import BlogCard from '../BlogCard'; -import BounceLoader from 'react-spinners/BounceLoader'; +import NewtonsCradle from '../../newtonsCradle'; import {discourseBaseURL, developerWebsiteDomain} from '../../../util/util'; +import {getBlogPosts, getUserTitle} from '../../../services/DiscourseService'; -import {getBlogPosts, getTopic} from '../../../services/DiscourseService'; -export default function BlogCards({filterCallback}) { +export default function BlogCards({filterCallback, limit, featured}) { const [cardData, setCardData] = React.useState(); const [loadingCards, setLoadingCards] = React.useState(true); const getPosts = async () => { - const data = await getBlogPosts(filterCallback.join('+')); + if (!filterCallback) { + filterCallback = ['identity-security-cloud']; + } + if (featured) { + filterCallback = ['featured']; + } + const data = await getBlogPosts(filterCallback.join('+')); const resultset = []; + const titleList = []; if (data.topic_list.topics) { for (const topic of data.topic_list.topics) { if (topic.tags.length > 0) { @@ -21,80 +28,106 @@ export default function BlogCards({filterCallback}) { if (topicUser.description.includes('Original Poster')) { for (let user of data.users) { if (user.id === topicUser.user_id) { + if ( + !titleList.find((x) => x.group === user.primary_group_name) + ) { + let usertitle = await getUserTitle(user.primary_group_name); + titleList.push({ + group: user.primary_group_name, + title: usertitle.group.title, + }); + user.title = usertitle.group.title; + } else { + user.title = titleList.find( + (x) => x.group === user.primary_group_name, + ).title; + } poster = user; } } } } if (topic.category_id !== 57) { - resultset.push(await getPostList(topic, poster)); + if (featured || (!featured && !topic.tags.includes('featured'))) { + resultset.push(await getPostList(topic, poster)); + } } } } - setCardData(resultset); + if (limit) { + setCardData(resultset.slice(0, limit)); + } else { + setCardData(resultset); + } } else { setCardData(undefined); } setLoadingCards(false); }; + function shortenTitle(title) { + if (title.length > 63) { + return title.substring(0, 62) + '...'; + } + return title; + } + React.useEffect(() => { getPosts(); setCardData(undefined); setLoadingCards(true); }, [filterCallback]); - if (cardData && cardData.length > 0) { - return ( -
-
- {cardData.map(function (a, index) { - return ( - - ); - })} + return ( +
+ {loadingCards ? ( + // Show loading icon when data is still loading +
+
-
- ); - } else if (loadingCards) { - return ( - - ); - } else { - return ( -
- {' '} - No Blogposts Found with the Given Search Criteria -
- ); - } + ) : cardData && cardData.length > 0 ? ( + // Show cards if not loading and cardData is available +
+ {cardData.map((a, index) => ( + + ))} +
+ ) : ( + // Show no content message if not loading and no cardData +
+ No Blogposts Found with the Given Search Criteria +
+ )} +
+ ); } async function getPostList(topic, user) { - console.log(topic); return { name: user.name, excerpt: styleExcerpt(topic.excerpt), creatorImage: getavatarURL(user.avatar_template), + creatorTitle: user.title, tags: topic.tags, image: topic.image_url, link: discourseBaseURL() + 't/' + topic.slug + '/' + topic.id, @@ -103,7 +136,7 @@ async function getPostList(topic, user) { liked: topic.like_count, replies: topic.posts_count, solution: topic.has_accepted_answer, - readTime: parseInt(500 / 100), + readTime: parseInt(500 / 200), }; } diff --git a/src/components/blog/BlogCards/styles.module.css b/src/components/blog/BlogCards/styles.module.css index 6dea5ccfc..252721185 100644 --- a/src/components/blog/BlogCards/styles.module.css +++ b/src/components/blog/BlogCards/styles.module.css @@ -1,21 +1,26 @@ /* Getting Started Card container */ +.featuredGridContainer { + display: flex; + margin-left: 9%; + min-height: 600px; +} + .gridContainer { - display: grid; - place-content: center; - grid-template-columns: repeat(auto-fit, minmax(345px, 1fr)); - grid-gap: 40px; - margin-left: 40px; - margin-right: 40px; + display: flex; + /* place-content: center; */ + flex-wrap: wrap; + gap: 23px; + margin-left: 20px; + justify-content: left; + min-height: 600px; + width: 1500px; } .center { margin: 0px auto; - max-width: 1300px; margin-bottom: 50px; -} - -.space { - height: 200px; + width: 50%; + width: 1500px; } .noFound { @@ -26,10 +31,90 @@ margin: 50px; } - +.featuredSpinnerCenter { + width: 50%; + margin: auto; + margin-top: 45%; +} .spinnerCenter { - margin: 100px auto; - max-width: 1300px; - margin-bottom: 50px; -} \ No newline at end of file + position: absolute; + left: 48%; + top: 1025px; +} + +@media only screen and (max-width: 1950px) { + .gridContainer { + width: 1225px; + } + + .center { + width: 1225px; + } +} + +@media only screen and (max-width: 1350px) { + .gridContainer { + width: 950px; + } + + .center { + width: 950px; + } +} + +@media only screen and (max-width: 1050px) { + .gridContainer { + width: 675px; + } + + .center { + width: 675px; + } +} + +@media only screen and (max-width: 700px) { + .gridContainer { + width: 275px; + } + + .center { + width: 275px; + } +} + +@media only screen and (max-width: 550px) { + .featuredGridContainer { + margin-left: 0%; + min-height: 350px; + width: 275px; + margin: auto; + } + .featuredCenter { + width: 275px; + margin: auto; + } + + .gridContainer, + .featuredGridContainer { + justify-content: center; + margin-left: 0px; + } + + .spinnerCenter { + left: 43%; + top: 1225px; + } + + .featuredSpinnerCenter { + width: 20%; + margin: auto; + margin-top: 35%; + } + + .noFound { + width: 350px; + position: absolute; + left: 10px; + } +} diff --git a/src/components/blog/BlogSidebar/index.js b/src/components/blog/BlogSidebar/index.js index 3a86608ca..7d5e2741d 100644 --- a/src/components/blog/BlogSidebar/index.js +++ b/src/components/blog/BlogSidebar/index.js @@ -1,70 +1,56 @@ import React from 'react'; -import clsx from 'clsx'; import styles from './styles.module.css'; -import useBaseUrl from '@docusaurus/useBaseUrl'; -import Link from '@docusaurus/Link'; -import { getTags } from '../../../services/DiscourseService'; -import BlogSidebarButton from './BlogSidebarButton'; +import {getTags} from '../../../services/DiscourseService'; -export default function BlogSidebar({ - filterCallback - }) { +export default function BlogSidebar({filterCallback, defaultValue}) { const [tagProductData, setTagProductData] = React.useState(); - const [tagTechnologyData, setTagTechnologyData] = React.useState(); - const [filterTags, setFilterTags] = React.useState(true); + let initialCheckState = defaultValue === 'Identityiq' ? true : false; + const [isChecked, setIsChecked] = React.useState(initialCheckState); + + const handleChange = () => { + setIsChecked(!isChecked); + let value = isChecked ? 'Identity-Security-Cloud' : 'Identityiq'; + filterCallback(value); + }; const getTagData = async () => { const data = await getTags(); - const tagTechnologyResultset = [] - const tagProductResultset = [] + const tagTechnologyResultset = []; + const tagProductResultset = []; for (const tagGroup of data.extras.tag_groups) { if (tagGroup.id === 45) { for (const tag of tagGroup.tags) { - tagProductResultset.push(tag.text) - } - } - if (tagGroup.id === 17) { - for (const tag of tagGroup.tags) { - tagTechnologyResultset.push(tag.text) + tagProductResultset.push(tag.text); } } } - setTagProductData(tagProductResultset) - setTagTechnologyData(tagTechnologyResultset) + setTagProductData(tagProductResultset); }; - function toggleSeeAll() { - filterTags ? setFilterTags(false) : setFilterTags(true) - } - - React.useEffect(() => { getTagData(); - }, []); + },[]); - const filterText = filterTags ? 'See All Tags' : 'See Less Tags' - - if (tagProductData && tagTechnologyData) { + if (tagProductData) { return ( -
-
Blogs by Product
-
- {tagProductData.map(function(a, index){ - return - })} -
-
Blogs by Identity Governance
-
- {tagTechnologyData.map(function(a, index){ - return
10 && filterTags ? styles.hidden : ''} >
- })} -
-
toggleSeeAll()}> - {filterText} - {/* */} +
+
+ +
- ); } else { return
; diff --git a/src/components/blog/BlogSidebar/styles.module.css b/src/components/blog/BlogSidebar/styles.module.css index 563a05fb1..8a2e27aac 100644 --- a/src/components/blog/BlogSidebar/styles.module.css +++ b/src/components/blog/BlogSidebar/styles.module.css @@ -1,8 +1,31 @@ - .sidebar { - width: 400px; - height: 100%; + margin-top: 50px; margin-left: 50px; + display: flex; +} + +.toggleContainer { + margin: auto; + /* width: 31%; */ + margin-bottom: 3%; +} + +/* @media screen and (max-width: 2100px) { + .toggleContainer { + width: 43%; + } +} + +@media screen and (max-width: 500px) { + .toggleContainer { + width: 82%; + } +} */ + +.title { + margin-left: 2%; + margin-bottom: 2%; + margin-top: 2%; } .tagHeader { @@ -16,7 +39,6 @@ flex-wrap: wrap; } - .hidden { display: none; } @@ -30,7 +52,6 @@ width: 100%; transition: background-color 500ms; text-align: center; - } .seeAll:hover { @@ -38,3 +59,181 @@ background-color: var(--dev-text-color-normal); color: var(--dev-card-background); } + +.dropdownContainer { + position: relative; + display: inline-block; + margin-left: 2%; +} + +.buttonText { + float: left; + margin-left: 5%; + font-size: 16px; + font-weight: 300; +} + +.dropdownButton { + background-color: var( + --dropdown-background + ); /* Dropdown background color */ /* Text color */ + padding: 14px 45px; /* Padding inside the dropdown button */ + border: 2px solid #cccccc; /* Border around the dropdown */ + border-radius: 5px; /* Rounded corners */ + cursor: pointer; /* Change mouse cursor to indicate it's clickable */ + position: relative; /* To position the arrow icon correctly */ + display: inline-block; /* To keep the button's block behavior */ + margin-bottom: 10%; + padding-left: 1%; + width: 220px; + height: 50px; +} + +.dropdownButton:after { + content: '▼'; /* Adds a dropdown arrow after the button text */ + position: absolute; + right: 10px; /* Position the arrow to the right */ + top: 50%; /* Align vertically */ + transform: translateY(-50%); /* Center the arrow vertically */ + pointer-events: none; /* Prevent the arrow from being clickable */ +} + +.dropdownButton:hover { + background-color: var( + --dev-card-background + ); /* Lighter background on hover */ +} + +.dropdownButton:focus { + outline: none; /* Remove default focus outline */ + border-color: #666666; /* Darker border color when focused */ +} + +.dropdownContent { + display: none; + position: absolute; + background-color: var(--dropdown-background); + min-width: 300px; + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); + z-index: 1; + padding: 10px; + border-radius: 5px; + overflow-y: scroll; + max-height: 400px; +} + +.dropdownContainer .dropdownContent label { + display: flex; + margin: 5px 5px; +} + +.dropdownContainer:hover .dropdownContent { + display: block; +} + +.dropdownItem { + display: flex; +} + +.dropdownItem:hover { + --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), + 0 1px 2px -1px var(--tw-shadow-color); + box-shadow: 0 0 transparent, 0 0 transparent, 0 1px 3px 0 rgba(0, 0, 0, 0.1), + 0 1px 2px -1px rgba(0, 0, 0, 0.1); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + background-color: var(--dev-tag-highlight); +} + +.toggleWrapper { + position: relative; + width: 400px; + height: 50px; + border-radius: 25px; + background-color: #ddd; + overflow: hidden; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); +} + +.toggleCheckbox { + display: none; +} + +.toggleCheckbox:checked + .toggleLabel .toggleBackground { + transform: translateX(100%); + background-color: #93d500; /* IIQ color */ +} + +.toggleCheckbox:not(:checked) + .toggleLabel .toggleBackground { + background-color: #cc27b0; +} + +.toggleLabel { + display: flex; + align-items: center; + position: relative; + height: 100%; + cursor: pointer; +} + +.toggleBackground { + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 50%; + background-color: #cc27b0; /* Default color for "Identity Security Cloud" */ + border-radius: 25px; + transition: transform 0.25s ease, background-color 0.25s ease; +} + +.toggleText { + width: 50%; + text-align: center; + z-index: 1; + transition: color 0.25s; +} + +.toggleCheckbox:not(:checked) + .toggleLabel .toggleTextLeft { + width: 50%; + text-align: center; + z-index: 1; + transition: color 0.25s; + color: white; /* "Identity Security Cloud" highlighted */ +} + +.toggleCheckbox:not(:checked) + .toggleLabel .toggleTextRight { + width: 50%; + text-align: center; + z-index: 1; + transition: color 0.25s; + color: #415364; /* "IdentityIQ" not highlighted */ +} + +.toggleCheckbox:checked + .toggleLabel .toggleTextRight { + width: 50%; + text-align: center; + z-index: 1; + transition: color 0.25s; + color: white; /* "IdentityIQ" highlighted */ +} + +.toggleCheckbox:checked + .toggleLabel .toggleTextLeft { + width: 50%; + text-align: center; + z-index: 1; + transition: color 0.25s; + color: #415364; /* "Identity Security Cloud" not highlighted */ +} + +@media only screen and (max-width: 550px) { + .toggleTextLeft { + font-size: 14px; + } + + .toggleWrapper { + width: 325px; + height: 40px; + } +} diff --git a/src/components/homepage/DiscussCard/index.js b/src/components/homepage/DiscussCard/index.js index f9ed059a6..ff51f3bb5 100644 --- a/src/components/homepage/DiscussCard/index.js +++ b/src/components/homepage/DiscussCard/index.js @@ -4,6 +4,8 @@ import Link from '@docusaurus/Link'; import useBaseUrl from '@docusaurus/useBaseUrl'; import ThemedImage from '@theme/ThemedImage'; import {addDarkToFileName} from '../../../util/util'; +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; +import {faSquareCheck, faEye} from '@fortawesome/pro-duotone-svg-icons'; export default function DiscussCard({ link, title, @@ -20,12 +22,11 @@ export default function DiscussCard({ let linkText =
Join the Discussion
; if (solution) { solved = ( - + size="lg" + /> ); linkText =
View the Solution
; } @@ -44,12 +45,7 @@ export default function DiscussCard({ light: useBaseUrl('/homepage/arrow-right.png'), dark: useBaseUrl('/homepage/arrow-right-dark.png'), }}> - + @@ -64,7 +60,11 @@ export default function DiscussCard({ if (index > 2) { return ''; } - return
{tag}
; + return ( +
+ {tag} +
+ ); })}
diff --git a/src/components/homepage/DiscussCard/styles.module.css b/src/components/homepage/DiscussCard/styles.module.css index 03c6c8148..4d41099b6 100644 --- a/src/components/homepage/DiscussCard/styles.module.css +++ b/src/components/homepage/DiscussCard/styles.module.css @@ -4,11 +4,19 @@ margin-top: 20px; height: 300px; /* UI Properties */ - background: var(--dev-card-background); - box-shadow: var(--dev-card-shadow); - border: 1px solid var(--dev-card-background); - border-radius: 40px; opacity: 1; + transition: all 0.3s; + background: var(--dev-new-car-background); + border-radius: 0.5rem; + --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), + 0 1px 2px -1px var(--tw-shadow-color); + border-radius: 0.5rem; + box-shadow: 0 0 transparent, 0 0 transparent, 0 1px 3px 0 rgba(0, 0, 0, 0.1), + 0 1px 2px -1px rgba(0, 0, 0, 0.1); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + border: 1px solid var(--dev-card-border); } .card:hover { @@ -85,6 +93,7 @@ right: 132px; top: 18px; width: 20px; + color: var(--ifm-color-primary); } .cardDiscuss { @@ -99,8 +108,8 @@ .cardEye { position: absolute; margin: 20px; - right: 25px; - top: 0; + right: 28px; + top: -3px; width: 22px; } diff --git a/src/components/homepage/HomepageBasics/index.js b/src/components/homepage/HomepageBasics/index.js index 9a466bb84..a8c3475d0 100644 --- a/src/components/homepage/HomepageBasics/index.js +++ b/src/components/homepage/HomepageBasics/index.js @@ -4,6 +4,12 @@ import Link from '@docusaurus/Link'; import useBaseUrl from '@docusaurus/useBaseUrl'; import {addDarkToFileName} from '../../../util/util'; import ThemedImage from '@theme/ThemedImage'; +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; +import { + faComments, + faPeopleGroup, + faUser, +} from '@fortawesome/pro-duotone-svg-icons'; export default function HomepageBasics({ link, title, @@ -21,14 +27,47 @@ export default function HomepageBasics({
); } + let icon = ''; + if (image) { + switch (image) { + case 'discuss': { + icon = ( + + ); + break; + } + case 'team': { + icon = ( + + ); + break; + } + case 'user': { + icon = ( + + ); + break; + } + default: { + icon = ''; + } + } + } return (
- + {icon}
{title}
- - + {image && ( + <> + + + + + )}
{title}
{product}
diff --git a/src/components/homepage/HomepageCard/styles.module.css b/src/components/homepage/HomepageCard/styles.module.css index ed159a2b3..0c0df1d8c 100644 --- a/src/components/homepage/HomepageCard/styles.module.css +++ b/src/components/homepage/HomepageCard/styles.module.css @@ -1,14 +1,22 @@ /* Getting Started Card */ .card { - position: relative; - margin-top: 20px; height: 200px; - /* UI Properties */ - background: var(--dev-card-background); - box-shadow: var(--dev-card-shadow); - border: 1px solid var(--dev-card-background); - border-radius: 40px; + position: relative; + margin-top: 30px; + margin-bottom: 30px; opacity: 1; + transition: all 0.3s; + background: var(--dev-new-car-background); + border-radius: 0.5rem; + --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), + 0 1px 2px -1px var(--tw-shadow-color); + border-radius: 0.5rem; + box-shadow: 0 0 transparent, 0 0 transparent, 0 1px 3px 0 rgba(0, 0, 0, 0.1), + 0 1px 2px -1px rgba(0, 0, 0, 0.1); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + border: 1px solid var(--dev-card-border); } .card:hover { @@ -32,7 +40,7 @@ margin: 20px; top: 0; left: 0; - width: 38px; + width: 30%; } .cardArrow { @@ -60,3 +68,9 @@ .iiq { color: #60b359; } + +@media only screen and (max-width: 570px) { + .cardIcon { + width: 15%; + } +} diff --git a/src/components/homepage/HomepageDeveloperDays/index.js b/src/components/homepage/HomepageDeveloperDays/index.js new file mode 100644 index 000000000..ceb5de33d --- /dev/null +++ b/src/components/homepage/HomepageDeveloperDays/index.js @@ -0,0 +1,50 @@ +import React from 'react'; +import clsx from 'clsx'; +import styles from './styles.module.css'; +import Link from '@docusaurus/Link'; +import HomepageCard from '../HomepageCard'; +import useBaseUrl from '@docusaurus/useBaseUrl'; +import ThemedImage from '@theme/ThemedImage'; +export default function HomepageGettingStarted() { + return ( +
+
+
+
+
+ SailPoint Developer Days +
+
+ Join us for our annual conference for developers in April! +
+
+ Our largest conference for developers, architects, administrators, + and more is finally here! Explore + cutting-edge technologies, + gain insights from industry leaders, and connect with fellow + developers. +
+
+ +
+
+ +
+
+
+ ); +} diff --git a/src/components/homepage/HomepageDeveloperDays/styles.module.css b/src/components/homepage/HomepageDeveloperDays/styles.module.css new file mode 100644 index 000000000..b8b0698a3 --- /dev/null +++ b/src/components/homepage/HomepageDeveloperDays/styles.module.css @@ -0,0 +1,144 @@ +.mainCard { + display: grid; + grid-gap: 20px; + max-width: 1180px; + justify-content: center; +} + +.gettingStartedText { + margin-top: 50px; + margin-left: 50px; +} + +.gettingStartedOne { + color: var(--ifm-color-primary); + font-size: 30px; + max-width: 396px; + font-weight: bold; + line-height: 100%; +} + +.gettingStartedTwo { + margin-top: 20px; + font-size: 20px; + font-weight: bold; +} + +.gettingStartedThree { + margin-top: 20px; + font-size: 16px; + font-weight: 500; + margin-bottom: 20px; +} + +.bold { + font-weight: bold; +} + +/* Getting Started Card container */ +.gridContainer { + display: grid; + margin-left: 50px; + margin-bottom: 50px; + grid-gap: 20px; + grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); + place-content: center; + margin-right: 40px; +} + +.video { + width: 100%; + height: 300px; + max-width: 520px; +} + +.cardIcon { + width: 90%; + margin-top: 100px; +} +.registerButton { + align-items: center; + background: var(--ifm-color-primary); + border-radius: 0.5rem; + border: none; + color: #eee; + display: inline-flex; + padding: 10px 15px; + margin-right: 45px; + font-size: 16px; + font-weight: bold; +} + +.registerButtonPink { + text-decoration: none; + text-align: center; + margin: 10px auto; + font-size: 20px; + font-weight: bold; + line-height: 100%; + width: 259px; + height: 61px; + line-height: 61px; + background: transparent 0% 0% no-repeat padding-box; + opacity: 1; + box-shadow: 0px 20px 60px #00000015; + border: 2px solid #df61ca; + border-radius: 0.5rem; + color: #df61ca; + padding: 10px 15px; + margin-right: 45px; + font-size: 16px; + font-weight: bold; +} + +.registerButtonPink:hover { + cursor: pointer; + top: -2px; + box-shadow: 0 4px 5px rgba(0, 0, 0, 0.2); + background-color: var(--dev-button-hover); + color: #cc27b0; + text-decoration: none; +} + +@media only screen and (max-width: 1178px) { + .carousel { + margin-top: 0px; + margin-left: 50px; + margin-bottom: 50px; + } + .contentContainer { + width: 600px; + } +} +@media only screen and (min-width: 1179px) { + .carousel { + margin-top: 100px; + } + .mainCard { + grid-template-columns: repeat(auto-fit, minmax(520px, 1fr)); + /* UI Properties */ + background: var(--main-hero-card-background); + box-shadow: var(--dev-main-card-shadow); + border: 1px solid var(--dev-card-background); + border-radius: 40px; + opacity: 1; + margin: 50px auto; + width: calc(100% - 100px); + } +} +@media only screen and (max-width: 1200px) { + .devDaysImageContainer { + display: none; + } +} +@media only screen and (max-width: 570px) { + .video { + display: none; + } + .contentContainer { + width: auto; + } + .carousel { + margin-bottom: 0px; + } +} diff --git a/src/components/homepage/HomepageGettingStarted/index.js b/src/components/homepage/HomepageGettingStarted/index.js index 527b310b6..2c54cd107 100644 --- a/src/components/homepage/HomepageGettingStarted/index.js +++ b/src/components/homepage/HomepageGettingStarted/index.js @@ -25,13 +25,13 @@ export default function HomepageGettingStarted() { + image={'/homepage/SailPointIdentitySecurityCloud.svg'}> + image={'/homepage/IdentityIQ.svg'}>
diff --git a/src/components/homepage/HomepageTeam/index.js b/src/components/homepage/HomepageTeam/index.js index 2b9471e80..2df690932 100644 --- a/src/components/homepage/HomepageTeam/index.js +++ b/src/components/homepage/HomepageTeam/index.js @@ -25,7 +25,7 @@ export default function HomepageTeam() { expertise={'Identity Security Cloud'.toUpperCase()} image={'/homepage/tyler-mairose.png'} /> - -
- -
- - + image={'/homepage/cloud-data.svg'}> + image={'/homepage/process.svg'}> + image={'/homepage/connectivity.svg'}> + image={'/homepage/puzzle.svg'} + isThemedImage={true}>
); diff --git a/src/components/homepage/TeamCard/styles.module.css b/src/components/homepage/TeamCard/styles.module.css index 59372b889..608575e90 100644 --- a/src/components/homepage/TeamCard/styles.module.css +++ b/src/components/homepage/TeamCard/styles.module.css @@ -5,11 +5,19 @@ height: 300px; width: 220px; /* UI Properties */ - background: var(--dev-card-background); - box-shadow: var(--dev-card-shadow); - border: 1px solid var(--dev-card-background); - border-radius: 40px; opacity: 1; + transition: all 0.3s; + background: var(--dev-new-car-background); + border-radius: 0.5rem; + --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), + 0 1px 2px -1px var(--tw-shadow-color); + border-radius: 0.5rem; + box-shadow: 0 0 transparent, 0 0 transparent, 0 1px 3px 0 rgba(0, 0, 0, 0.1), + 0 1px 2px -1px rgba(0, 0, 0, 0.1); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + border: 1px solid var(--dev-card-border); } .card:hover { diff --git a/src/components/marketplace/MarketplaceBanner/index.js b/src/components/marketplace/MarketplaceBanner/index.js index d168be1de..4a5b39e77 100644 --- a/src/components/marketplace/MarketplaceBanner/index.js +++ b/src/components/marketplace/MarketplaceBanner/index.js @@ -1,22 +1,13 @@ import React from 'react'; -import clsx from 'clsx'; import styles from './styles.module.css'; -import useBaseUrl from '@docusaurus/useBaseUrl'; import Link from '@docusaurus/Link'; export default function MarketplaceBanner() { return ( -
- -
- -
- CoLab -
-
- - - -
+ +
+ {/*

CoLab

*/} +
+ ); } diff --git a/src/components/marketplace/MarketplaceBanner/styles.module.css b/src/components/marketplace/MarketplaceBanner/styles.module.css index b4570f741..b417e82b5 100644 --- a/src/components/marketplace/MarketplaceBanner/styles.module.css +++ b/src/components/marketplace/MarketplaceBanner/styles.module.css @@ -1,28 +1,20 @@ - -.blogHeaderText { - position: relative; +.colabTitle { + text-align: center; + margin-bottom: 2%; color: #ffffff; - font-size: 48px; - max-width: 459px; - font-weight: bold; - line-height: 130%; - top: -84px; - left: 101px; + position: relative; + top: 25px; } -.background { +.titleContainer { width: 100%; - object-fit: repeat; - height: 100%; + height: 45px; + background: rgb(0, 51, 161); + background: linear-gradient( + 90deg, + rgba(0, 51, 161, 1) 0%, + rgba(84, 192, 232, 1) 100% + ); + align-content: center; + margin-bottom: 2%; } - -.imageContainer { - width: 100%; - height: 90px; - background: rgb(0,51,161); - background: linear-gradient(90deg, rgba(0,51,161,1) 0%, rgba(84,192,232,1) 100%); -} - -.headerImage { - height: 90px; -} \ No newline at end of file diff --git a/src/components/marketplace/MarketplaceCard/index.js b/src/components/marketplace/MarketplaceCard/index.js index 2251ad8aa..49129eaaf 100644 --- a/src/components/marketplace/MarketplaceCard/index.js +++ b/src/components/marketplace/MarketplaceCard/index.js @@ -1,84 +1,64 @@ import React from 'react'; import styles from './styles.module.css'; -import Link from '@docusaurus/Link'; import useBaseUrl from '@docusaurus/useBaseUrl'; -import ThemedImage from '@theme/ThemedImage'; -import {addDarkToFileName} from '../../../util/util'; -import ReactMarkdown from 'react-markdown' -export default function MarketplaceCard({ - post, - openDialogFunc, -}) { +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; +import {faShieldCheck, faAward} from '@fortawesome/pro-solid-svg-icons'; +import Link from '@docusaurus/Link'; - function setFilters(e) { - openDialogFunc({"title": post.title, "image": post.image, "link": post.link, "id": post.id}); - } - - let badge = ( -
- ); - if (post.tags.includes("sailpoint-developed")) { +export default function MarketplaceCard({post, featured}) { + let badge =
; + if (post.tags.includes('sailpoint-developed')) { badge = (
- + SailPoint Developed
- ); - } else if (post.tags.includes("sailpoint-certified")) { + } else if (post.tags.includes('sailpoint-certified')) { badge = ( -
- - SailPoint Certified +
+
+
+
); } - return ( -
setFilters(e)}> -
- + + {/*
setFilters(e)}> */} +
- -
{post.title}
-
- {post.tags?.map((tag, index) => { - - if (index > 2 || tag == 'sailpoint-certified' || tag == 'sailpoint-authored') { - return ''; - } - return
{tag}
; - })} + +
+
+ {post.title} +
+ +
+ + +
{post.creatorName}
+
{post.creatorTitle}
+ +
-
{post.excerpt}
-
- -
{post.views}
- -
{post.replies}
-
- - {/*
- -
{post.name}
-
*/} - - {badge} - - - - - -
-
+ {/*
*/} + ); } diff --git a/src/components/marketplace/MarketplaceCard/styles.module.css b/src/components/marketplace/MarketplaceCard/styles.module.css index 93ceb9711..fb648485e 100644 --- a/src/components/marketplace/MarketplaceCard/styles.module.css +++ b/src/components/marketplace/MarketplaceCard/styles.module.css @@ -1,16 +1,53 @@ /* Getting Started Card */ .card { position: relative; - margin-top: 20px; - height: 500px; - /* UI Properties */ - background: var(--dev-card-background); - box-shadow: var(--dev-card-shadow); - border: 1px solid var(--dev-card-background); - border-radius: 40px; + margin-top: 30px; + margin-bottom: 30px; opacity: 1; - transition: all 0.3s; - max-width: 400px; + transition: all 0.3s; + width: 275px; + height: 393.17px; + background: var(--dev-new-car-background); + border-radius: 0.5rem; + --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), + 0 1px 2px -1px var(--tw-shadow-color); + border-radius: 0.5rem; + box-shadow: 0 0 transparent, 0 0 transparent, 0 1px 3px 0 rgba(0, 0, 0, 0.1), + 0 1px 2px -1px rgba(0, 0, 0, 0.1); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + border: 1px solid var(--dev-card-border); +} + +.featuredCard { + position: relative; + margin-top: 30px; + margin-bottom: 30px; + opacity: 1; + transition: all 0.3s; + width: 400px; + height: 475px; + background: var(--dev-new-car-background); + border-radius: 0.5rem; + --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), + 0 1px 2px -1px var(--tw-shadow-color); + border-radius: 0.5rem; + box-shadow: 0 0 transparent, 0 0 transparent, 0 1px 3px 0 rgba(0, 0, 0, 0.1), + 0 1px 2px -1px rgba(0, 0, 0, 0.1); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + border: 1px solid var(--dev-card-border); +} + +.featuredCardImage { + overflow: hidden; + position: relative; + width: 400px; + height: 225px; + border-top-left-radius: 0.5rem; + border-top-right-radius: 0.5rem; } .card:hover { @@ -19,131 +56,98 @@ box-shadow: var(--dev-card-selected); } - - - - .cardText { display: flex; flex-direction: column; - margin: 22px; - min-width: 170px; - margin-bottom: 75px; } - .cardImage { - border-radius: 4px; - justify-content: center; + overflow: hidden; + position: relative; + height: 144px; + border-top-left-radius: 0.5rem; + border-top-right-radius: 0.5rem; aspect-ratio: 16/9; } +.split { + background: linear-gradient( + 145deg, + rgba(0, 51, 161, 1) 40%, + rgba(0, 79, 181, 1) 65%, + rgba(0, 113, 206, 1) 100% + ); + height: 15px; +} +.featuredCardTitle { + font-size: 20px; + font-weight: 500; + display: flex; + gap: 1rem; + margin-top: 1rem; + padding-right: 1rem; + padding-left: 1rem; + text-align: left; + height: 80px; +} .cardTitle { - font-size: 22px; - font-weight: 700; + font-size: 16px; + font-weight: 500; + display: flex; + gap: 1rem; + margin-top: 1rem; + padding-right: 0.5rem; + padding-left: 0.5rem; + text-align: left; + height: 80px; + color: var(--ifm-color-primary); } .cardBody { - font-size: 16px; - font-weight: 500; - top: 10px; - left: 0; + font-size: 14px; + font-weight: 400; + height: 80px; + margin-top: 1rem; + padding-right: 0.5rem; + padding-left: 0.5rem; + text-align: left; } -.tag { - font-size: 16px; - font-weight: 500; - color: var(--dev-secondary-text); - background-color: var(--dev-tag-highlight); - padding: 0px 8px; - margin-right: 5px; - margin-top: 5px; -} - -.tags { - margin: 0px; - width: 100%; - display: flex; - flex-wrap: wrap; - margin-bottom: 10px; -} - - - - - .cardUser { - position: absolute; - bottom: 10px; - left: 25px; - display: flex; + margin-top: 15px; + margin-bottom: 5%; +} + +.featuredCardFace { + border-radius: 9999px; + margin-left: 2%; + height: 50px; + width: 50px; } .cardFace { border-radius: 9999px; - margin: auto; + margin-left: 2%; height: 40px; width: 40px; } .cardName { min-width: 170px; + font-weight: 800; margin-top: 7px; margin-left: 10px; -} - - - - - -.cardData { - position: absolute; - bottom: 20px; - left: 20px; display: flex; - align-items: center; + color: var(--text-color); } -.cardEye { - fill: #96a9bb; - /* computed from codepen https://codepen.io/sosuke/pen/Pjoqqp */ - filter: invert(79%) sepia(12%) saturate(484%) hue-rotate(168deg) brightness(84%) contrast(84%); - margin-left: 5px; - height: 18px; - width: 18px; -} - -.cardComment { +.cardCreatorTitle { + min-width: 170px; margin-left: 10px; - fill: #96a9bb; - /* computed from codepen https://codepen.io/sosuke/pen/Pjoqqp */ - filter: invert(79%) sepia(12%) saturate(484%) hue-rotate(168deg) brightness(84%) contrast(84%); - height: 18px; - width: 18px; - margin-bottom: 4px; + display: flex; + color: var(--text-color); } -.cardCommentText { - color: #96a9ba; - /* computed from codepen https://codepen.io/sosuke/pen/Pjoqqp */ - margin-left: 5px; - margin-bottom: 5px; - height: 20px; - font-size: 16px; -} - - - - -/* .cardBadge { - position: absolute; - right: 5px; - bottom: 0px; - margin-left: 5px; - height: 80px; - width: 80px; -} */ - .cardBadge { position: absolute; display: flex; @@ -161,20 +165,24 @@ width: 80px; } -.cardBadgeText { - margin-left: -19px; - margin-top: 15px; +.certifiedText { + position: absolute; + top: 107px; + left: 95px; + color: var(--dev-text-color-secondary); + visibility: hidden; } +.cardBadgeText { + margin-top: 15px; + color: var(--dev-text-color-secondary); +} .cardBadgeCertified { position: absolute; - display: flex; - right: 85px; - bottom: 15px; - margin-left: 5px; - height: 50px; - width: 50px; + width: 250px; + left: 225px; + bottom: 10px; color: var(--dev-text-color-secondary); } @@ -183,4 +191,45 @@ height: 50px; width: 50px; filter: var(--dev-icon-color-primary); -} \ No newline at end of file +} + +.docCardIcon { + margin-right: 0.5em; + color: var(--ifm-color-primary); + padding-top: 4%; + padding-left: 4%; +} + +.badgeText { + margin-top: 6%; +} + +.badgeContainer:hover .certifiedText { + visibility: visible; +} + +@media only screen and (max-width: 550px) { + .cardText { + margin-bottom: 0px; + } + + .featuredCard { + width: 275px; + max-width: 275px; + height: 393.17px; + } + + .featuredCardImage { + width: 275px; + height: 144px; + } + + .featuredCardTitle { + font-size: 16px; + } + + .featuredCardFace { + height: 40px; + width: 40px; + } +} diff --git a/src/components/marketplace/MarketplaceCards/index.js b/src/components/marketplace/MarketplaceCards/index.js index 69273cf37..f3092e311 100644 --- a/src/components/marketplace/MarketplaceCards/index.js +++ b/src/components/marketplace/MarketplaceCards/index.js @@ -3,39 +3,71 @@ import styles from './styles.module.css'; import MarketplaceCard from '../MarketplaceCard'; import Modal from 'react-modal'; import useBaseUrl from '@docusaurus/useBaseUrl'; -import BounceLoader from 'react-spinners/BounceLoader'; +import NewtonsCradle from '../../newtonsCradle'; import {discourseBaseURL, developerWebsiteDomain} from '../../../util/util'; import { getMarketplacePosts, getMarketplaceTopic, getMarketplaceTopicRaw, + getUserTitle, } from '../../../services/DiscourseService'; import MarketplaceCardDetail from '../MarketplaceCardDetail'; -export default function MarketplaceCards({filterCallback}) { +export default function MarketplaceCards({ + filterCallback, + featured, + limit, + multiple, +}) { const [cardData, setCardData] = React.useState(); const [detailsOpen, setDetailsOpen] = React.useState(false); const [details, setDetails] = React.useState(''); const [loadingCards, setLoadingCards] = React.useState(true); - - - const handleCloseModal = () => { - setDetailsOpen(false); - } + const xImage = useBaseUrl('/icons/circle-xmark-regular.svg'); const getPosts = async () => { - const data = await getMarketplacePosts(filterCallback.tags.join('+'), filterCallback.category); - + let tags = filterCallback.tags; + if (featured) { + tags = ['featured']; + } + const data = await getMarketplacePosts( + tags ? tags.join('+') : '', + filterCallback.category, + ); + const resultset = []; + const titleList = []; if (data.topic_list) { for (const topic of data.topic_list.topics) { if (topic.tags.length > 0) { - let poster = {} + let poster = {}; for (let topicUser of topic.posters) { - if (topicUser.description.includes("Original Poster")) { + if (topicUser.description.includes('Original Poster')) { for (let user of data.users) { if (user.id === topicUser.user_id) { - poster = user + if ( + !titleList.find((x) => x.group === user.primary_group_name) + ) { + let usertitle = await getUserTitle(user.primary_group_name); + + if (usertitle.group === undefined) { + titleList.push({ + group: user.primary_group_name, + title: '', + }); + } else { + titleList.push({ + group: user.primary_group_name, + title: usertitle.group.title || '', + }); + user.title = usertitle.group.title; + } + } else { + user.title = titleList.find( + (x) => x.group === user.primary_group_name, + ).title; + } + poster = user; } } } @@ -44,7 +76,11 @@ export default function MarketplaceCards({filterCallback}) { resultset.push(await getPostList(topic, poster)); } } - setCardData(resultset); + if (limit) { + setCardData(resultset.slice(0, limit)); + } else { + setCardData(resultset); + } } else { setCardData(undefined); } @@ -68,82 +104,104 @@ export default function MarketplaceCards({filterCallback}) { Modal.setAppElement('#__docusaurus'); React.useEffect(() => { getPosts(); + setCardData(undefined); setLoadingCards(true); }, [filterCallback]); - - const xImage = useBaseUrl('/icons/circle-xmark-regular.svg') - - if (cardData && cardData.length > 0) { - return ( -
-
- {cardData.map(function (a, index) { - return ( - - ); - })} -
- -
-
- + return ( +
+ {loadingCards ? ( + // Show loading icon when data is still loading +
+ {featured ? ( +
+
- { - setDetailsOpen(false); - }}> + ) : ( +
+ +
+ )} +
+ ) : cardData && cardData.length > 0 ? ( + <> + {multiple ? ( +
+ {cardData.map(function (a, index) { + return ( + + ); + })} +
+ ) : ( +
+ {cardData.map(function (a, index) { + return ( + + ); + })} +
+ )} + + ) : ( +
+
+ {' '} + Hey there, looks like no integrations match your search criteria. + Check out our{' '} + + getting started guide + + , and consider being the first to contribute this integration!
- -
- ); - } else if (loadingCards) { - return ( - - ); - } else { - return ( -
- {' '} - Hey there, looks like no integrations match your search criteria. Check out our getting started guide, and consider being the first to contribute this integration! -
- ); +
+ )} +
+ ); +} + +function shortenTitle(title) { + if (title.length > 63) { + return title.substring(0, 62) + '...'; } + return title; +} + +function shortenDesc(desc) { + if (desc.length > 93) { + return desc.substring(0, 93) + '...'; + } + return desc; } async function getPostList(topic, user) { return { id: topic.id, - name: user.name, - excerpt: styleExcerpt(topic.excerpt), + creatorName: user.name, + excerpt: shortenDesc(styleExcerpt(topic.excerpt)), creatorImage: getavatarURL(user.avatar_template), + creatorTitle: user.title, tags: topic.tags, image: topic.image_url, - link: - discourseBaseURL() + 't/' + - topic.slug + - '/' + - topic.id, - title: topic.title, + link: discourseBaseURL() + 't/' + topic.slug + '/' + topic.id, + title: shortenTitle(topic.title), views: topic.views, liked: topic.like_count, replies: topic.posts_count, @@ -154,9 +212,11 @@ async function getPostList(topic, user) { function getavatarURL(avatar) { if (avatar.includes(developerWebsiteDomain())) { - return "https://" + developerWebsiteDomain() + avatar.replace("{size}", "120") + return ( + 'https://' + developerWebsiteDomain() + avatar.replace('{size}', '120') + ); } else { - return avatar.replace("{size}", "120") + return avatar.replace('{size}', '120'); } } @@ -165,9 +225,9 @@ function styleExcerpt(excerpt) { // remove any strings that have colons between them excerpt = excerpt.replace(/:[^:]*:/g, ''); // get text between "Description" and "Legal Agreement" - const match = excerpt.match(/Description([\s\S]*?)Legal Agreement/) + const match = excerpt.match(/Description([\s\S]*?)Legal Agreement/); if (match) { - excerpt = match[1].trim() + excerpt = match[1].trim(); } if (excerpt.length > 150) { return excerpt.slice(0, 100) + '...'; diff --git a/src/components/marketplace/MarketplaceCards/styles.module.css b/src/components/marketplace/MarketplaceCards/styles.module.css index df851e091..647006b59 100644 --- a/src/components/marketplace/MarketplaceCards/styles.module.css +++ b/src/components/marketplace/MarketplaceCards/styles.module.css @@ -1,31 +1,35 @@ /* Getting Started Card container */ +.featuredGridContainer { + display: flex; + /* place-content: center; */ + grid-template-columns: 1fr; + flex-wrap: wrap; + min-height: 500px; + margin-left: 9%; +} +.multipleGridContainer { + display: flex; + /* place-content: center; */ + flex-wrap: wrap; + gap: 23px; + width: 1500px; +} .gridContainer { display: flex; /* place-content: center; */ flex-wrap: wrap; - gap: 40px; - margin-left: 40px; - margin-right: 40px; + gap: 23px; + width: 1500px; } -.gridContainer::after { - content: ""; +/* .gridContainer::after { + content: ''; flex: auto; -} - -@media only screen and (max-width: 870px) { - .gridContainer { - place-content: center; - } - .gridContainer::after { - display: none; - } -} - - +} */ .center { margin: 0px auto; margin-bottom: 50px; + width: 1500px; } .space { @@ -40,41 +44,18 @@ margin: 50px; } - - - -.modal { - position: absolute; - top: 50%; - left: 50%; - right: auto; - bottom: auto; - margin-right: -50%; - transform: translate(-50%, -50%); - box-shadow: 2px 3px 10px rgba(0, 0, 0, 0.25); - border-radius: 20px; - background-color: var(--dev-popup-background); - max-height: 80%; - max-width: 90%; - min-height: 80%; - scroll-behavior: auto; - overflow-y: auto; -} - - - - .cardExit { position: absolute; top: 6px; right: 6px; fill: #96a9bb; /* computed from codepen https://codepen.io/sosuke/pen/Pjoqqp */ - filter: invert(79%) sepia(12%) saturate(484%) hue-rotate(168deg) brightness(84%) contrast(84%); + filter: invert(79%) sepia(12%) saturate(484%) hue-rotate(168deg) + brightness(84%) contrast(84%); margin-left: 5px; height: 24px; width: 24px; - transition: all 0.2s; + transition: all 0.2s; } .cardExit:hover { @@ -84,9 +65,128 @@ width: 23px; } +.featuredSpinnerCenter { + width: 50%; + margin: auto; + margin-top: 45%; +} -.spinnerCenter { - margin: 100px auto; - max-width: 1300px; - margin-bottom: 50px; -} \ No newline at end of file +.spinnerCenterMultiple { + position: absolute; + left: 50%; +} + +.spinnerCenterSingle { + position: absolute; + top: 300px; + left: 50%; +} + +@media only screen and (max-width: 1950px) { + .multipleGridContainer { + width: 1225px; + } + + .gridContainer { + width: 1225px; + } + + .center { + width: 1225px; + } + + .multipleGridContainer > a:nth-child(5) { + display: none; + } +} + +@media only screen and (max-width: 1350px) { + .multipleGridContainer { + width: 950px; + } + .multipleGridContainer > a:nth-child(4), + .multipleGridContainer > a:nth-child(5) { + display: none; + } + .gridContainer { + width: 950px; + } + + .center { + width: 950px; + } +} + +@media only screen and (max-width: 1050px) { + .multipleGridContainer { + width: 675px; + } + .multipleGridContainer > a:nth-child(3), + .multipleGridContainer > a:nth-child(4), + .multipleGridContainer > a:nth-child(5) { + display: none; + } + .multipleGridContainer { + place-content: center; + } + .gridContainer::after { + display: none; + } + .gridContainer { + width: 675px; + } + + .center { + width: 675px; + } +} + +@media only screen and (max-width: 700px) { + .multipleGridContainer { + width: 275px; + } + + .multipleGridContainer > a:nth-child(2), + .multipleGridContainer > a:nth-child(3), + .multipleGridContainer > a:nth-child(4), + .multipleGridContainer > a:nth-child(5) { + display: none; + } + .multipleGridContainer { + place-content: center; + } + .gridContainer::after { + display: none; + } + .gridContainer { + width: 275px; + } + + .center { + width: 275px; + } +} + +@media only screen and (max-width: 550px) { + .featuredGridContainer { + min-height: 350px; + width: 275px; + margin: auto; + } + + .featuredSpinnerCenter { + width: 20%; + margin: auto; + margin-top: 35%; + } + + .spinnerCenterMultiple, + .spinnerCenterSingle { + left: 43%; + } + .noFound { + width: 350px; + position: absolute; + left: 10px; + } +} diff --git a/src/components/newtonsCradle/index.js b/src/components/newtonsCradle/index.js new file mode 100644 index 000000000..0703fd039 --- /dev/null +++ b/src/components/newtonsCradle/index.js @@ -0,0 +1,23 @@ +import React from 'react'; +import Styles from './styles.module.css'; + +export default function NewtonsCradle() { + return ( + <> +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + ); +} diff --git a/src/components/newtonsCradle/styles.module.css b/src/components/newtonsCradle/styles.module.css new file mode 100644 index 000000000..1b664bdf9 --- /dev/null +++ b/src/components/newtonsCradle/styles.module.css @@ -0,0 +1,124 @@ +.container { + --uib-size: 100px; + --uib-color: var(--ifm-color-primary); + --uib-speed: 1s; + --uib-stroke: 3px; + position: relative; + display: flex; + align-items: center; + justify-content: flex-start; + height: var(--uib-size); + width: var(--uib-size); +} + +.line { + position: absolute; + top: 0; + left: calc(50% - var(--uib-stroke) / 2); + display: flex; + align-items: flex-start; + height: 100%; + width: var(--uib-stroke); +} + +.line::before { + content: ''; + height: 22%; + width: 100%; + border-radius: calc(var(--uib-stroke) / 2); + background-color: var(--uib-color); + animation: pulse calc(var(--uib-speed)) ease-in-out infinite; + transition: background-color 0.3s ease; + transform-origin: center bottom; +} + +.line:nth-child(1) { + transform: rotate(calc(360deg / -12 * 1)); + + &::before { + animation-delay: calc(var(--uib-speed) / -12 * 1); + } +} +.line:nth-child(2) { + transform: rotate(calc(360deg / -12 * 2)); + + &::before { + animation-delay: calc(var(--uib-speed) / -12 * 2); + } +} +.line:nth-child(3) { + transform: rotate(calc(360deg / -12 * 3)); + + &::before { + animation-delay: calc(var(--uib-speed) / -12 * 3); + } +} +.line:nth-child(4) { + transform: rotate(calc(360deg / -12 * 4)); + + &::before { + animation-delay: calc(var(--uib-speed) / -12 * 4); + } +} +.line:nth-child(5) { + transform: rotate(calc(360deg / -12 * 5)); + + &::before { + animation-delay: calc(var(--uib-speed) / -12 * 5); + } +} +.line:nth-child(6) { + transform: rotate(calc(360deg / -12 * 6)); + + &::before { + animation-delay: calc(var(--uib-speed) / -12 * 6); + } +} +.line:nth-child(7) { + transform: rotate(calc(360deg / -12 * 7)); + + &::before { + animation-delay: calc(var(--uib-speed) / -12 * 7); + } +} +.line:nth-child(8) { + transform: rotate(calc(360deg / -12 * 8)); + + &::before { + animation-delay: calc(var(--uib-speed) / -12 * 8); + } +} +.line:nth-child(9) { + transform: rotate(calc(360deg / -12 * 9)); + + &::before { + animation-delay: calc(var(--uib-speed) / -12 * 9); + } +} +.line:nth-child(10) { + transform: rotate(calc(360deg / -12 * 10)); + + &::before { + animation-delay: calc(var(--uib-speed) / -12 * 10); + } +} +.line:nth-child(11) { + transform: rotate(calc(360deg / -12 * 11)); + + &::before { + animation-delay: calc(var(--uib-speed) / -12 * 11); + } +} + +@keyframes pulse { + 0%, + 80%, + 100% { + transform: scaleY(0.75); + opacity: 0; + } + 20% { + transform: scaleY(1); + opacity: 1; + } +} diff --git a/src/components/video-library/VideoCard/index.js b/src/components/video-library/VideoCard/index.js new file mode 100644 index 000000000..9e8de9704 --- /dev/null +++ b/src/components/video-library/VideoCard/index.js @@ -0,0 +1,60 @@ +import React from 'react'; +import styles from './styles.module.css'; +import Link from '@docusaurus/Link'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +export default function VideoCard({ + featured, + videoURL, + thumbnail, + title, + body, + avatar, + username, + tags, +}) { + return ( + +
+
+
+ +
+ +
+
+ +
+ +
+ {title} +
+
+
+ {tags?.map((tag, index) => { + return ( +
+ {tag} +
+ ); + })} +
+
+
+ + ); +} diff --git a/src/components/video-library/VideoCard/styles.module.css b/src/components/video-library/VideoCard/styles.module.css new file mode 100644 index 000000000..4c4f0f3fd --- /dev/null +++ b/src/components/video-library/VideoCard/styles.module.css @@ -0,0 +1,165 @@ +/* Getting Started Card */ +.card { + position: relative; + margin-top: 30px; + opacity: 1; + transition: all 0.3s; + max-width: 300px; +} + +.featuredCard { + position: relative; + margin-top: 30px; + opacity: 1; + transition: all 0.3s; + width: 400px; + height: 225px; +} + +.card:hover .thumbContainer { + cursor: pointer; + transform: translate(0px, -5px); + box-shadow: var(--dev-card-selected); +} + +.cardText { + display: flex; + flex-direction: column; + margin: 22px; + min-width: 170px; + margin-bottom: 75px; +} + +.featuredThumbContainer { + border: 1px solid var(--dev-card-border); + --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), + 0 1px 2px -1px var(--tw-shadow-color); + border-radius: 0.5rem; + box-shadow: 0 0 transparent, 0 0 transparent, 0 1px 3px 0 rgba(0, 0, 0, 0.1), + 0 1px 2px -1px rgba(0, 0, 0, 0.1); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + overflow: hidden; + position: relative; + height: 225px; +} + +.thumbContainer { + border: 1px solid var(--dev-card-border); + --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), + 0 1px 2px -1px var(--tw-shadow-color); + border-radius: 0.5rem; + box-shadow: 0 0 transparent, 0 0 transparent, 0 1px 3px 0 rgba(0, 0, 0, 0.1), + 0 1px 2px -1px rgba(0, 0, 0, 0.1); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + overflow: hidden; + position: relative; + height: 144px; +} + +.featuredCardImage { + height: auto; + max-width: 100%; + width: 400px; + height: 225px; + border-radius: 0.5rem; +} + +.cardImage { + height: auto; + max-width: 100%; + width: 256px; + height: 144px; + border-radius: 0.5rem; +} + +.avatarContainer { + padding-left: 2rem; + position: relative; + width: 2.125rem; +} + +.avatar { + --tw-border-opacity: 1; + --w: 2.125rem; + border-color: #f1f1e7; + border-color: rgb(241 241 231 / var(--tw-border-opacity)); + border-radius: 9999px; + border-width: 2px; + left: 0; + max-width: 2.125rem; + max-width: var(--w); + min-width: 2.125rem; + min-width: var(--w); + position: absolute; + width: var(--w); + z-index: 10; +} + +.featuredTitleContainer { + height: 50px; +} + +.titleContainer { + height: 50px; +} + +.featuredCardTitle { + font-size: 16px; + font-weight: 500; + display: flex; + gap: 1rem; + margin-top: 1rem; + padding-right: 0.5rem; + text-align: left; +} + +.cardTitle { + font-size: 12px; + font-weight: 400; + display: flex; + gap: 1rem; + margin-top: 1rem; + padding-right: 0.5rem; + text-align: left; +} + +.cardBody { + font-size: 16px; + font-weight: 500; + left: 0; + margin-top: 5px; + padding: 10px; +} + +.tag { + font-size: 10px; + font-weight: 300; + color: var(--dev-secondary-text); + background-color: var(--dev-tag-highlight); + padding: 0px 8px; + margin-right: 5px; + margin-top: 5px; +} + +.tags { + margin: 0px; + width: 100%; + display: flex; + flex-wrap: wrap; + margin-bottom: 10px; + margin-top: 5px; +} + +@media only screen and (max-width: 550px) { + .cardText { + margin-bottom: 0px; + } + + .tags { + margin-top: 2px; + } +} diff --git a/src/components/video-library/VideoCardDetails/index.js b/src/components/video-library/VideoCardDetails/index.js new file mode 100644 index 000000000..3afc382a9 --- /dev/null +++ b/src/components/video-library/VideoCardDetails/index.js @@ -0,0 +1,50 @@ +import React, {useEffect} from 'react'; +import Video from '../../Video.js'; +import styles from './styles.module.css'; +import Layout from '@theme/Layout'; +import DiscourseEmbed from '../VideoComments/index.js'; + +const VideoCardDetail = (props) => { + const base = 'https://play.vidyard.com/'; + + useEffect(() => { + // This code would be part of your iframe's JavaScript + window.addEventListener('message', (event) => { + // console.log(event); + if (event.origin === 'https://developer.identitysoon.com') { + // The data that was sent from the iframe + // console.log(event.data); + // setIframeStyle(); + } + }); + }, []); + + return ( + +
+
+ +
+

+ {props.route.customProps.title} +

+
+
+

+ {props.route.customProps.body} +

+
+
+ +
+
+
+
+ ); +}; + +export default VideoCardDetail; diff --git a/src/components/video-library/VideoCardDetails/styles.module.css b/src/components/video-library/VideoCardDetails/styles.module.css new file mode 100644 index 000000000..d4b901cba --- /dev/null +++ b/src/components/video-library/VideoCardDetails/styles.module.css @@ -0,0 +1,11 @@ +.videoPlayer { + width: 40%; + height: 40%; + align-content: center; + margin: auto; +} + +.discourseContainer { + border-radius: 0.5em; + height: 400px; +} diff --git a/src/components/video-library/VideoCards/index.js b/src/components/video-library/VideoCards/index.js new file mode 100644 index 000000000..425b3186d --- /dev/null +++ b/src/components/video-library/VideoCards/index.js @@ -0,0 +1,158 @@ +import React from 'react'; +import styles from './styles.module.css'; +import VideoCard from '../VideoCard'; +import { + videoBaseURL, + discourseBaseURL, + developerWebsiteDomain, +} from '../../../util/util'; +import NewtonsCradle from '../../newtonsCradle'; +import {getVideoPosts} from '../../../services/DiscourseService'; + +export default function VideoCards({filterCallback, limit, featured}) { + const [cardData, setCardData] = React.useState(); + const [loadingCards, setLoadingCards] = React.useState(true); + + function buildTopicUrl(slug, id) { + return discourseBaseURL() + `t/${slug}/${id}`; + } + + function parseVideoDetails(inputStr) { + // Split the string by the known separator for the description + const parts = inputStr.split('\n\nDescription\n'); + const videoUrl = parts[0].trim(); // Get the video URL, trimming any whitespace( + const lastSegment = videoUrl.split('/').pop(); + const page = lastSegment.replace('.html', ''); + const description = parts.length > 1 ? parts[1].trim() : ''; // Get the description if it exists + return { + videoUrl, + description, + page, + }; + } + + function shortenTitle(title) { + if (title.length > 63) { + return title.substring(0, 62) + '...'; + } + return title; + } + + const getVideoTopics = async () => { + let tags = featured ? ['featured'] : filterCallback.tags; + + const data = await getVideoPosts(tags ? tags : ''); + const resultset = []; + if (data.topic_list) { + for (const topic of data.topic_list.topics) { + if (topic.tags.length > 0) { + let {videoUrl, description} = parseVideoDetails(topic.excerpt); + let thumbnail = videoUrl.replace('.html', '.jpg'); + let avatar = ''; + let username = ''; + let ogPoster = ''; + for (const poster of topic.posters) { + if (poster.description.includes('Original Poster')) { + ogPoster = poster; + break; + } + } + + for (const user of data.users) { + if (user.id === ogPoster.user_id) { + username = user.name; + avatar = getavatarURL(user.avatar_template); + break; + } + } + + if (!description) { + thumbnail = topic.image_url; + } + + if (featured || (!featured && !topic.tags.includes('featured'))) { + resultset.push({ + key: topic.id, + title: shortenTitle(topic.title), + tags: topic.tags, + body: description | topic.excerpt, + thumbnail: thumbnail, + avatar: avatar, + username: username, + url: buildTopicUrl(topic.slug, topic.id), + }); + } + } + } + } else { + setCardData(undefined); + } + if (limit) { + setCardData(resultset.slice(0, limit)); + } else { + setCardData(resultset); + } + setLoadingCards(false); + }; + + React.useEffect(() => { + getVideoTopics(); + setCardData(undefined); + setLoadingCards(true); + }, [filterCallback]); + + return ( +
+ {loadingCards ? ( + // Show loading icon when data is still loading +
+ +
+ ) : cardData && cardData.length > 0 ? ( +
+ {cardData.map(function (a, index) { + return ( + + ); + })} +
+ ) : ( +
+
+ {' '} + Hey there, looks like no integrations match your search criteria. + Check out our{' '} + + getting started guide + + , and consider being the first to contribute this integration! +
+
+ )} +
+ ); +} + +function getavatarURL(avatar) { + if (avatar.includes(developerWebsiteDomain())) { + return ( + 'https://' + developerWebsiteDomain() + avatar.replace('{size}', '120') + ); + } else { + return avatar.replace('{size}', '120'); + } +} diff --git a/src/components/video-library/VideoCards/styles.module.css b/src/components/video-library/VideoCards/styles.module.css new file mode 100644 index 000000000..0aa607a98 --- /dev/null +++ b/src/components/video-library/VideoCards/styles.module.css @@ -0,0 +1,155 @@ +/* Getting Started Card container */ +.featuredGridContainer { + min-height: 300px; +} + +.gridContainer { + display: flex; + /* place-content: center; */ + flex-wrap: wrap; + gap: 5px; + margin-left: 20px; + justify-content: left; + width: 1525px; +} +/* .gridContainer::after { + content: ''; + flex: auto; +} +.gridContainer::before { + content: ''; + flex: auto; +} */ + +.center { + margin: 0px auto; + margin-bottom: 50px; + width: 50%; + width: 1525px; +} + +.space { + height: 200px; +} + +.noFound { + font-size: 28px; + font-weight: 500; + color: var(--dev-secondary-text); + padding: 8px; + margin: 50px; +} + +.modal { + position: absolute; + top: 50%; + left: 50%; + right: auto; + bottom: auto; + margin-right: -50%; + transform: translate(-50%, -50%); + box-shadow: 2px 3px 10px rgba(0, 0, 0, 0.25); + border-radius: 20px; + background-color: var(--dev-popup-background); + max-height: 80%; + max-width: 90%; + min-height: 80%; + scroll-behavior: auto; + overflow-y: auto; +} + +.cardExit { + position: absolute; + top: 6px; + right: 6px; + fill: #96a9bb; + /* computed from codepen https://codepen.io/sosuke/pen/Pjoqqp */ + filter: invert(79%) sepia(12%) saturate(484%) hue-rotate(168deg) + brightness(84%) contrast(84%); + margin-left: 5px; + height: 24px; + width: 24px; + transition: all 0.2s; +} + +.cardExit:hover { + top: 8px; + cursor: pointer; + height: 23px; + width: 23px; +} + +.featuredSpinnerCenter { + width: 50%; + margin: auto; + margin-top: 25%; +} + +.spinnerCenter { + position: absolute; + left: 50%; + top: 725px; +} + +@media only screen and (max-width: 1950px) { + .gridContainer { + width: 1225px; + } + + .center { + width: 1225px; + } +} + +@media only screen and (max-width: 1350px) { + .gridContainer { + width: 925px; + } + + .center { + width: 925px; + } +} + +@media only screen and (max-width: 1050px) { + .gridContainer { + width: 650px; + } + + .center { + width: 650px; + } +} + +@media only screen and (max-width: 775px) { + .gridContainer { + width: 300px; + } + + .center { + width: 300px; + } +} + +@media only screen and (max-width: 958px) { + .spinnerCenter { + left: 47%; + top: 855px; + } +} + +@media only screen and (max-width: 550px) { + .gridContainer { + margin-left: 0px; + } + + .featuredSpinnerCenter { + width: 100%; + margin-top: 30%; + } + + .spinnerCenter { + left: 40%; + top: 825px; + } +} diff --git a/src/components/video-library/VideoComments/index.js b/src/components/video-library/VideoComments/index.js new file mode 100644 index 000000000..9a551b08c --- /dev/null +++ b/src/components/video-library/VideoComments/index.js @@ -0,0 +1,54 @@ +import React, {useEffect} from 'react'; + +const DiscourseEmbed = ({discourseEmbedUrl, topicId}) => { + useEffect(() => { + const discourseUrl = 'https://developer.sailpoint.com/discuss/'; + const embedUrl = `https://d1vrqvoe9hgpx0.cloudfront.net/videos/${discourseEmbedUrl}/index.html`; + + // Set up Discourse Embed + + window.DiscourseEmbed = { + discourseUrl, + topicId: topicId, + // discourseEmbedUrl: embedUrl, + className: 'EMBEDDED_BODY', + }; + + // Create and append meta tag for discourse username + + const metaTag = document.createElement('meta'); + metaTag.name = 'discourse-username'; + metaTag.content = 'Darrell'; // Replace with your Discourse username + metaTag.setAttribute('discourse-embed-url', embedUrl); // Add attribute to meta tag for Discourse Embed URL + metaTag.setAttribute('discourse-embed-class-name', 'EMBEDDED_BODY'); // Add attribute to meta tag for Discourse Embed class name (optional) + metaTag.setAttribute('discourse-embed-title', 'SailPoint Developer Community'); // Add attribute to meta tag for Discourse Embed title (optional) + metaTag.setAttribute('discourse-embed-description', 'The SailPoint Developer Community has everything you need to build, extend, and automate scalable identity solutions.'); // Add attribute to meta tag for Discourse Embed description (optional) + metaTag.setAttribute('discourse-embed-color', '#00A2E8'); // Add attribute to meta tag for Discourse Embed color (optional) + document.getElementsByTagName('head')[0].appendChild(metaTag); // Append to head to avoid duplicating if component re-renders + + // Create and append Discourse embed script + const scriptTag = document.createElement('script'); + scriptTag.type = 'text/javascript'; + scriptTag.async = true; + scriptTag.src = `${discourseUrl}javascripts/embed.js`; + document.body.appendChild(scriptTag); // Append to body to avoid duplicating if component re-renders + + // Cleanup on component unmount + return () => { + scriptTag.remove(); // Remove script tag + if (metaTag.parentNode) { + metaTag.parentNode.removeChild(metaTag); // Remove meta tag if it has been appended + } + }; + }, [discourseEmbedUrl]); // Effect dependency array includes discourseEmbedUrl + + return ( + <> + + +
+ + ); // Container for the Discourse comments +}; + +export default DiscourseEmbed; diff --git a/src/components/video-library/VideoSidebar/VideoSidebarButton/index.js b/src/components/video-library/VideoSidebar/VideoSidebarButton/index.js new file mode 100644 index 000000000..13d8cb687 --- /dev/null +++ b/src/components/video-library/VideoSidebar/VideoSidebarButton/index.js @@ -0,0 +1,27 @@ +import React from 'react'; +import styles from './styles.module.css'; + +export default function MarketplaceSidebarButton({ + filterCallback, + text, + id, + isCategory, + category, +}) { + const [isActive, setIsActive] = React.useState(false); + const activeClass = isActive ? styles.tagSelected : ''; + + function setFilters(e, id) { + filterCallback({tag: id}); + setIsActive((current) => !current); + } + + return ( +
setFilters(e, id)} + className={activeClass + ' ' + styles.tag}> + {text} +
+ ); +} diff --git a/src/components/video-library/VideoSidebar/VideoSidebarButton/styles.module.css b/src/components/video-library/VideoSidebar/VideoSidebarButton/styles.module.css new file mode 100644 index 000000000..0dbc6945d --- /dev/null +++ b/src/components/video-library/VideoSidebar/VideoSidebarButton/styles.module.css @@ -0,0 +1,35 @@ +.tag { + font-size: 13px; + font-weight: 300; + color: var(--dev-secondary-text); + text-align: center; + margin-right: 0.5%; + margin-top: 0.5%; + padding: 1%; + border-style: solid; + border-width: 1px; + border-color: var(--dev-text-color-normal); + transition: background-color 500ms; + border-radius: 0.5rem; +} + +.tagSelected { + font-size: 13px; + font-weight: 300; + background-color: var(--dev-secondary-text); + color: var(--dev-card-background); + text-align: center; + margin-right: 0.5%; + margin-top: 0.5%; + padding: 1%; + border-style: solid; + border-width: 1px; + border-color: var(--dev-text-color-normal); + transition: background-color 500ms; +} + +.tag:hover { + cursor: pointer; + background-color: var(--dev-text-color-normal); + color: var(--dev-card-background); +} diff --git a/src/components/video-library/VideoSidebar/index.js b/src/components/video-library/VideoSidebar/index.js new file mode 100644 index 000000000..4cc449cc0 --- /dev/null +++ b/src/components/video-library/VideoSidebar/index.js @@ -0,0 +1,182 @@ +import React from 'react'; +import styles from './styles.module.css'; +import {getVideoPosts, getTags} from '../../../services/DiscourseService'; +import {forEach} from 'lodash'; + +export default function MarketplaceSidebar({filterCallback}) { + const [tagProductData, setTagProductData] = React.useState(); + const [videoTag, setVideoTag] = React.useState(); + const [isOpen, setIsOpen] = React.useState(false); + const [productTags, setProductTags] = React.useState('Filter by Product'); + const [videoTags, setVideoTags] = React.useState('Filter by Video Type'); + const [checkedItemsProdcut, setCheckedItemsProduct] = React.useState({}); + const [checkedItemsVideo, setCheckedItemsVideo] = React.useState(null); + const toggleDropdown = () => setIsOpen(!isOpen); + + const handleCheckboxChangeProduct = (event) => { + setCheckedItemsProduct({ + ...checkedItemsProdcut, + [event.target.name]: event.target.checked, + }); + + let product = ''; + + if (event.target.checked) { + product = event.target.name; + } else { + console.log('productTags', productTags); + console.log('event.target.name', event.target.name); + product = productTags.replace(event.target.name, ''); + console.log('product', product); + } + + let filters = []; + if (event.target.checked) { + filters.push(event.target.name); + } + + forEach(checkedItemsProdcut, (value, key) => { + if (key !== event.target.name && value === true) { + filters.push(key); + if (!product.includes(key)) product = product + ' ' + key; + } + }); + + if (checkedItemsVideo) { + filters.push(checkedItemsVideo); + } + + if (event.target.checked && product !== '') { + setProductTags(product); + } else { + setProductTags(product); + } + + if (product === '') { + setProductTags('Filter by Product'); + } + + filterCallback({tag: filters}); + }; + + const handleCheckboxChangeVideo = (event) => { + const newCheckedItems = event.target.checked ? event.target.name : null; + setCheckedItemsVideo(newCheckedItems); + if (event.target.checked) { + setVideoTags(event.target.name); + } else { + setVideoTags('Filter by Video Type'); + } + if (!checkedItemsProdcut) { + filterCallback({tag: newCheckedItems}); + } else { + let filters = []; + if (newCheckedItems) filters.push(newCheckedItems); + forEach(checkedItemsProdcut, (value, key) => { + if (value === true) filters.push(key); + }); + filterCallback({tag: filters}); + } + }; + + const getTagData = async () => { + const uniqueProductTags = new Set(); + const uniqueTags = new Set(); + const data = await getTags(); + + if (data.extras.tag_groups) { + for (const tagGroup of data.extras.tag_groups) { + if (tagGroup.name === 'Products') { + for (const tag of tagGroup.tags) { + uniqueProductTags.add(tag.name); + } + } + + if (tagGroup.name === 'Video Library') { + for (const tag of tagGroup.tags) { + uniqueTags.add(tag.name); + } + } + } + } + setTagProductData(Array.from(uniqueProductTags)); + setVideoTag(Array.from(uniqueTags)); + }; + + function displayText(text) { + if (text === 'identity-security-cloud') { + return 'Identity Security Cloud'; + } + if (text === 'access-intelligence-center') { + return 'Access Intelligence Center'; + } + if (text === 'developer-days-2023-iiq') { + return 'Developer Days 2023 iiq'; + } + + return text; + } + + React.useEffect(() => { + getTagData(); + }, []); + + if (tagProductData) { + return ( +
+
+
+ + {isOpen && ( +
+ {tagProductData.map(function (a, index) { + return ( +
+ + +
+ ); + })} +
+ )} +
+
+
+
+ + {isOpen && ( +
+ {videoTag.map(function (a, index) { + return ( +
+ + +
+ ); + })} +
+ )} +
+
+
+ ); + } else { + return
; + } +} diff --git a/src/components/video-library/VideoSidebar/styles.module.css b/src/components/video-library/VideoSidebar/styles.module.css new file mode 100644 index 000000000..0763c1b28 --- /dev/null +++ b/src/components/video-library/VideoSidebar/styles.module.css @@ -0,0 +1,181 @@ +.sidebar { + width: 400px; + height: 100%; + margin-left: 50px; +} + +.filterBy { + margin-top: 1%; +} + +.tagHeader { + margin-top: 30px; + font-size: 22px; + font-weight: 700; +} + +.hidden { + display: none; +} + +.seeAll { + margin-top: 5px; + margin-bottom: 10px; + color: var(--dev-secondary-text); + border-style: solid; + border-width: 1px; + width: 100%; + transition: background-color 500ms; + text-align: center; +} + +.seeAll:hover { + cursor: pointer; + background-color: var(--dev-text-color-normal); + color: var(--dev-card-background); +} + +.tagContainer { + margin: auto; + width: 59%; + display: flex; +} + +.dropdownContainer { + position: relative; + display: inline-block; +} + +.videoTypeFilter { + margin-left: 2%; +} + +.dropdownButton { + background-color: var( + --dropdown-background + ); /* Dropdown background color */ /* Text color */ + padding: 5px 15px; /* Padding inside the dropdown button */ + border: 0.5px solid #cccccc; /* Border around the dropdown */ + border-radius: 5px; /* Rounded corners */ + cursor: pointer; /* Change mouse cursor to indicate it's clickable */ + position: relative; /* To position the arrow icon correctly */ + display: inline-block; /* To keep the button's block behavior */ + width: 200px; + height: 50px; + text-align: left; +} + +.dropdownButton:after { + content: '▼'; /* Adds a dropdown arrow after the button text */ + position: absolute; + right: 10px; /* Position the arrow to the right */ + top: 50%; /* Align vertically */ + transform: translateY(-50%); /* Center the arrow vertically */ + pointer-events: none; /* Prevent the arrow from being clickable */ +} + +.dropdownButton:hover { + background-color: var( + --dev-card-background + ); /* Lighter background on hover */ +} + +.dropdownButton:focus { + outline: none; /* Remove default focus outline */ + border-color: #666666; /* Darker border color when focused */ +} + +.dropdownContent { + display: none; + position: absolute; + background-color: var(--dropdown-background); + min-width: 300px; + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); + z-index: 25; + padding: 10px; + border-radius: 5px; +} + +.dropdownContainer .dropdownContent label { + display: flex; + margin: 5px 5px; +} + +.dropdownContainer:hover .dropdownContent { + display: block; +} + +.dropdownItem { + display: flex; +} + +.dropdownItem:hover { + --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), + 0 1px 2px -1px var(--tw-shadow-color); + box-shadow: 0 0 transparent, 0 0 transparent, 0 1px 3px 0 rgba(0, 0, 0, 0.1), + 0 1px 2px -1px rgba(0, 0, 0, 0.1); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + background-color: var(--dev-tag-highlight); +} + +@media only screen and (max-width: 1920px) { + .tagContainer { + width: 61%; + } +} + +@media only screen and (max-width: 1447px) { + .tagContainer { + width: 69%; + } +} + +@media only screen and (max-width: 1278px) { + .tagContainer { + width: 68%; + } +} + +@media only screen and (max-width: 1179px) { + .tagContainer { + margin-top: 10%; + width: 83%; + } +} + +@media only screen and (max-width: 1085px) { + .tagContainer { + margin-top: 10%; + width: 100%; + } +} + +@media only screen and (max-width: 958px) { + .tagContainer { + width: 72%; + } +} + +@media only screen and (max-width: 550px) { + .tagContainer { + margin-top: 12%; + margin-bottom: 3%; + width: 100%; + justify-content: center; + align-items: center; + align-content: center; + } +} + +@media only screen and (max-width: 450px) { + .tagContainer { + display: block; + width: 50%; + } + .videoTypeFilter { + margin-top: 5%; + margin-left: 0%; + } +} diff --git a/src/css/custom.css b/src/css/custom.css index a9c5c4307..5ecc400a9 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -243,14 +243,20 @@ --dev-boarder-color-theme: black; --dev-text-color-normal: #415364; --dev-text-color-secondary: #0033a1; - --dev-icon-color-primary: invert(12%) sepia(90%) saturate(3876%) hue-rotate(221deg) brightness(89%) contrast(102%); + --dev-icon-color-primary: invert(12%) sepia(90%) saturate(3876%) + hue-rotate(221deg) brightness(89%) contrast(102%); --dev-secondary-text: #415364; --dev-tag-highlight: #eaeef1; --text-on-primary: #ffffff; + --text-color: black; + + + --dropdown-background: #ffffff; /*card css*/ + --dev-card-border: #dadce0; --dev-card-background: #e9e9e963; --dev-tag-selected-text: #ffffffef; --dev-popup-background: #fdfdfd; @@ -259,6 +265,8 @@ --dev-card-selected: 0 4px 5px rgba(0, 0, 0, 0.2); --dev-button-hover: #c552ae10; + --dev-new-car-background: #ffffff; + --ifm-github-logo: url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E"); --ifm-medium-logo: url('data:image/svg+xml;utf8,'); --dev-sailpoint-small-logo: url('../../static/img/SailPoint-Logo-RGB-Color.png'); @@ -286,11 +294,18 @@ --dev-sailpoint-small-logo: url('../../static/img/SailPoint-Logo-RGB-Inverse.png'); --dev-text-color-normal: #dae1e9; --dev-text-color-secondary: #54c0e8; - --dev-icon-color-primary: invert(87%) sepia(26%) saturate(6104%) hue-rotate(165deg) brightness(96%) contrast(89%); + --dev-icon-color-primary: invert(87%) sepia(26%) saturate(6104%) + hue-rotate(165deg) brightness(96%) contrast(89%); --text-on-primary: #ffffff; + --text-color: #ffffff; + + --dropdown-background: #2a2b2d; + /*card css*/ + --dev-card-border: rgba(218,220,224,0.3); + --dev-new-car-background: #2a2b2d; --dev-card-background: #2a2b2d; --dev-popup-background: #2a2b2d; --dev-card-shadow: 0 0px 0px rgba(0, 0, 0, 0.2); @@ -460,14 +475,24 @@ ul { } div[class^='announcementBar_'] { - background: repeating-linear-gradient(145deg,rgba(0,51,161,1),rgba(0,79,181,1),rgba(0,113,206,1)); + background: repeating-linear-gradient( + 145deg, + rgba(0, 51, 161, 1), + rgba(0, 79, 181, 1), + rgba(0, 113, 206, 1) + ); color: #ffffff; height: 35px; } @media screen and (max-width: 750px) { div[class^='announcementBar_'] { - background: repeating-linear-gradient(145deg,rgba(0,51,161,1),rgba(0,79,181,1),rgba(0,113,206,1)); + background: repeating-linear-gradient( + 145deg, + rgba(0, 51, 161, 1), + rgba(0, 79, 181, 1), + rgba(0, 113, 206, 1) + ); color: #ffffff; height: 52.5px; } @@ -488,6 +513,25 @@ code[class^='openapi-explorer__code-block'] { max-height: 400px !important; } -iframe#webpack-dev-server-client-overlay{ - display:none!important +iframe#webpack-dev-server-client-overlay { + display: none !important; } + +iframe[id^='discourse-embed-frame'] { + border-radius: 0.5em !important; + border: solid; + border-width: thin; + margin: auto; + padding-bottom: -15%; + align-items: center; +} + +div[id^='discourseContainer'] { + border-radius: 0.5em; +} + +div[id^='discourse-comments'] { + display: flex; + padding-bottom: 2%; +} + diff --git a/src/pages/blog.js b/src/pages/blog.js index b8e30ec62..82cadfbe7 100644 --- a/src/pages/blog.js +++ b/src/pages/blog.js @@ -8,33 +8,70 @@ import BlogBanner from '../components/blog/BlogBanner'; import styles from './blog.module.css'; import BlogCards from '../components/blog/BlogCards'; import BlogSidebar from '../components/blog/BlogSidebar'; +import useBaseUrl from '@docusaurus/useBaseUrl'; export default function Blog() { const [filteredProduct, setFilteredProduct] = React.useState([]); - const {siteConfig} = useDocusaurusContext(); - const handleClick = (data) => { - var tempFilter = filteredProduct.slice() + var tempFilter = []; const index = tempFilter.indexOf(data); if (index !== -1) { tempFilter.splice(index, 1); } else { - tempFilter.push(data) + tempFilter.push(data); } - setFilteredProduct(tempFilter) + setFilteredProduct(tempFilter); }; + return ( -
- -
-
-
-
- +
+ +
+
+
+
+
Community Blog
+ +
+ + Our community blog is a collection of technical writings + provided by members of our community—your peers—discussing + detailed walkthroughs, challenges faced (and how they were + overcome), and thoughts on managing identity in a meaningful + way. + {' '} +
+
+ + Become an author → + +
+
+
+
+
+
Featured
+
+ +
+
+
+
+
+ +
+
+ +
+
); diff --git a/src/pages/blog.module.css b/src/pages/blog.module.css index d16546f19..a5eae1c3f 100644 --- a/src/pages/blog.module.css +++ b/src/pages/blog.module.css @@ -1,17 +1,141 @@ .blogContainer { - display: flex; + min-height: 600px; +} + +.mainCard { + display: grid; + grid-gap: 20px; + max-width: 1180px; + justify-content: center; + min-height: 587.22px; +} + +.featuredGettingStartedText { + display: none; +} + +.gettingStartedText, +.featuredGettingStartedText { + margin-top: 50px; + margin-left: 50px; +} + +.gettingStartedOne { + color: var(--ifm-color-primary); + font-size: 30px; + max-width: 396px; + font-weight: bold; + line-height: 100%; +} + +.gettingStartedTwo { + margin-top: 20px; + font-size: 20px; + font-weight: bold; +} + +.gettingStartedThree { + margin-top: 20px; + font-size: 16px; + font-weight: 500; +} + +.bold { + font-weight: bold; +} + +/* Getting Started Card container */ +.gridContainer { + display: grid; + margin-left: 50px; + margin-bottom: 50px; + grid-gap: 20px; + grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); + place-content: center; + margin-right: 40px; +} + +.video { + width: 100%; + height: 300px; + max-width: 520px; } .blogSidbarContainer { - flex: 5%; + margin: auto; + width: 400px; } -@media only screen and (max-width: 870px) { - .blogSidbarContainer { - display: none; - } +.featuredBlogContainer { + margin-left: 8%; } -.blogCardContainer { - flex: 95%; -} \ No newline at end of file +.contentContainer { + margin-left: 5%; +} + +@media only screen and (max-width: 1178px) { + .carousel { + margin-top: 0px; + margin-left: 50px; + margin-bottom: 50px; + } + .contentContainer { + width: 600px; + margin-left: 10%; + } + + .featuredGettingStartedText { + display: flex; + } +} + +@media only screen and (min-width: 1179px) { + .carousel { + margin-top: 35px; + padding-bottom: 5%; + } + .mainCard { + grid-template-columns: repeat(auto-fit, minmax(520px, 1fr)); + /* UI Properties */ + background: var(--main-hero-card-background); + box-shadow: var(--dev-main-card-shadow); + border: 1px solid var(--dev-card-background); + border-radius: 40px; + opacity: 1; + margin: 50px auto; + width: calc(100% - 100px); + height: 545px; + min-height: 535px; + } + + +} + +@media only screen and (max-width: 570px) { + + + .gettingStartedThree { + padding-right: 15%; + } + + .contentContainer { + margin-left: 0%; + width: auto; + } + .featuredBlogContainer { + margin-left: 0%; + } + .video { + display: none; + } + .carousel { + margin-bottom: 0px; + } +} + +@media screen and (max-width: 500px) { + .blogSidbarContainer { + width: 325px; + } +} diff --git a/src/pages/colab.js b/src/pages/colab.js index b470d58c4..721fcf5fa 100644 --- a/src/pages/colab.js +++ b/src/pages/colab.js @@ -1,48 +1,173 @@ import React from 'react'; -import clsx from 'clsx'; -import Link from '@docusaurus/Link'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Layout from '@theme/Layout'; import MarketplaceBanner from '../components/marketplace/MarketplaceBanner'; - +import Link from '@docusaurus/Link'; import styles from './exchange.module.css'; import MarketplaceCards from '../components/marketplace/MarketplaceCards'; -import MarketplaceSidebar from '../components/marketplace/MarketplaceSidebar'; +import HomepageCard from '../components/homepage/HomepageCard'; export default function Marketplace() { - const [filteredProduct, setFilteredProduct] = React.useState({"category": "colab", "tags": []}); + const [plugins] = React.useState({ + category: 'colab-iiq-plugins', + tags: [], + }); - const {siteConfig} = useDocusaurusContext(); + const [rules] = React.useState({ + category: 'colab-rules', + tags: ['identity-security-cloud'], + }); - const handleClick = (data) => { - var tempFilter = filteredProduct.tags.slice() + const [saas] = React.useState({ + category: 'colab-saas-connectors', + tags: [], + }); - if (data.tag) { - const index = tempFilter.indexOf(data.tag); - if (index !== -1) { - tempFilter.splice(index, 1); - } else { - tempFilter.push(data.tag) - } - } + const [transforms] = React.useState({ + category: 'colab-transforms', + tags: [], + }); - if (data.category) { - setFilteredProduct({"category": data.category, "tags": tempFilter}) - } else { - setFilteredProduct({"category": filteredProduct.category, "tags": tempFilter}) - } + const [workflows] = React.useState({ + category: 'colab', + tags: ['workflows'], + }); + + const [communityTools] = React.useState({ + category: 'colab-community-tools', + tags: [], + }); - - }; return (
- -
-
-
-
- + +
+
+
+
+
+ CoLab Marketplace +
+
+ What is the CoLab? +
+
+ + The community CoLab is a place where members of our + community can build fully-featured solutions on our platform + and share those solutions with each other. Users collaborate + on these solutions to benefit both themselves and the + community at large. + {' '} +
+
+ + Get started with the CoLab → + +
+
+
+
+
Featured
+
+
+
+ +
+
+
+
+
+
+
+
+

Workflows

+ + View All → + +
+ +
+ +
+
+

SaaS Connectors

+ + View All → + +
+ +
+ +
+
+

Community Tools

+ + View All → + +
+ +
+ +
+
+

Rules

+ + View All → + +
+ +
+ +
+
+

Transforms

+ + View All → + +
+ +
+ +
+
+

IIQ Plugins

+ + View All → + +
+ +
+
+
); diff --git a/src/pages/colab/communitytools.js b/src/pages/colab/communitytools.js new file mode 100644 index 000000000..60bcf8cb9 --- /dev/null +++ b/src/pages/colab/communitytools.js @@ -0,0 +1,44 @@ +import React from 'react'; +import Layout from '@theme/Layout'; +import styles from './filter.module.css'; +import BlogSidebar from '../../components/blog/BlogSidebar'; +import MarketplaceCards from '../../components/marketplace/MarketplaceCards'; +import MarketplaceBanner from '../../components/marketplace/MarketplaceBanner'; + +export default function CommunityTools() { + const [filteredProduct, setFilteredProduct] = React.useState({ + category: 'colab-community-tools', + tags: ['identity-security-cloud'], + }); + + const handleClick = (data) => { + var tempFilter = []; + + const index = tempFilter.indexOf(data); + if (index !== -1) { + tempFilter.splice(index, 1); + } else { + tempFilter.push(data); + } + + setFilteredProduct({ + category: 'colab-community-tools', + tags: tempFilter, + }); + }; + return ( + +
+ +
+
+ +
+
+ +
+
+
+
+ ); +} diff --git a/src/pages/colab/filter.module.css b/src/pages/colab/filter.module.css new file mode 100644 index 000000000..723be48ae --- /dev/null +++ b/src/pages/colab/filter.module.css @@ -0,0 +1,20 @@ +.colabContainer { + min-height: 600px; +} + +.filterContainer { + margin: auto; + width: 400px; + margin-top: 3%; +} + +@media screen and (max-width: 550px) { + .filterContainer { + width: 325px; + } +} + +.cardContainer { + width: 63%; + margin: auto; +} diff --git a/src/pages/colab/plugins.js b/src/pages/colab/plugins.js new file mode 100644 index 000000000..83c9f2c18 --- /dev/null +++ b/src/pages/colab/plugins.js @@ -0,0 +1,25 @@ +import React from 'react'; +import Layout from '@theme/Layout'; +import styles from './filter.module.css'; +import MarketplaceCards from '../../components/marketplace/MarketplaceCards'; +import MarketplaceBanner from '../../components/marketplace/MarketplaceBanner'; + +export default function Workflows() { + const [filteredProduct] = React.useState({ + category: 'colab-iiq-plugins', + tags: ['Identityiq'], + }); + + return ( + +
+ +
+
+ +
+
+
+
+ ); +} diff --git a/src/pages/colab/rules.js b/src/pages/colab/rules.js new file mode 100644 index 000000000..34591b5cd --- /dev/null +++ b/src/pages/colab/rules.js @@ -0,0 +1,46 @@ +import React from 'react'; +import Layout from '@theme/Layout'; + +import styles from './filter.module.css'; + +import BlogSidebar from '../../components/blog/BlogSidebar'; +import MarketplaceCards from '../../components/marketplace/MarketplaceCards'; +import MarketplaceBanner from '../../components/marketplace/MarketplaceBanner'; + +export default function Rules() { + const [filteredProduct, setFilteredProduct] = React.useState({ + category: 'colab-rules', + tags: ['identity-security-cloud'], + }); + + const handleClick = (data) => { + var tempFilter = []; + + const index = tempFilter.indexOf(data); + if (index !== -1) { + tempFilter.splice(index, 1); + } else { + tempFilter.push(data); + } + + setFilteredProduct({ + category: 'colab-rules', + tags: tempFilter, + }); + }; + return ( + +
+ +
+
+ +
+
+ +
+
+
+
+ ); +} diff --git a/src/pages/colab/saasconnectors.js b/src/pages/colab/saasconnectors.js new file mode 100644 index 000000000..285efa69c --- /dev/null +++ b/src/pages/colab/saasconnectors.js @@ -0,0 +1,46 @@ +import React from 'react'; +import Layout from '@theme/Layout'; + +import styles from './filter.module.css'; + +import BlogSidebar from '../../components/blog/BlogSidebar'; +import MarketplaceCards from '../../components/marketplace/MarketplaceCards'; +import MarketplaceBanner from '../../components/marketplace/MarketplaceBanner'; + +export default function SaasConnector() { + const [filteredProduct, setFilteredProduct] = React.useState({ + category: 'colab-saas-connectors', + tags: [], + }); + + const handleClick = (data) => { + var tempFilter = []; + + const index = tempFilter.indexOf(data); + if (index !== -1) { + tempFilter.splice(index, 1); + } else { + tempFilter.push(data); + } + + setFilteredProduct({ + category: 'colab-saas-connectors', + tags: tempFilter, + }); + }; + return ( + +
+ +
+
+ +
+
+ +
+
+
+
+ ); +} diff --git a/src/pages/colab/transforms.js b/src/pages/colab/transforms.js new file mode 100644 index 000000000..c8f3af448 --- /dev/null +++ b/src/pages/colab/transforms.js @@ -0,0 +1,46 @@ +import React from 'react'; +import Layout from '@theme/Layout'; + +import styles from './filter.module.css'; + +import BlogSidebar from '../../components/blog/BlogSidebar'; +import MarketplaceCards from '../../components/marketplace/MarketplaceCards'; +import MarketplaceBanner from '../../components/marketplace/MarketplaceBanner'; + +export default function Transforms() { + const [filteredProduct, setFilteredProduct] = React.useState({ + category: 'colab-transforms', + tags: ['identity-security-cloud'], + }); + + const handleClick = (data) => { + var tempFilter = []; + + const index = tempFilter.indexOf(data); + if (index !== -1) { + tempFilter.splice(index, 1); + } else { + tempFilter.push(data); + } + + setFilteredProduct({ + category: 'colab-transforms', + tags: tempFilter, + }); + }; + return ( + +
+ +
+
+ +
+
+ +
+
+
+
+ ); +} diff --git a/src/pages/colab/workflows.js b/src/pages/colab/workflows.js new file mode 100644 index 000000000..2b0430f1c --- /dev/null +++ b/src/pages/colab/workflows.js @@ -0,0 +1,46 @@ +import React from 'react'; +import Layout from '@theme/Layout'; + +import styles from './filter.module.css'; + +import BlogSidebar from '../../components/blog/BlogSidebar'; +import MarketplaceCards from '../../components/marketplace/MarketplaceCards'; +import MarketplaceBanner from '../../components/marketplace/MarketplaceBanner'; + +export default function Workflows() { + const [filteredProduct, setFilteredProduct] = React.useState({ + category: 'colab', + tags: ['workflows'], + }); + + const handleClick = (data) => { + var tempFilter = []; + + const index = tempFilter.indexOf(data); + if (index !== -1) { + tempFilter.splice(index, 1); + } else { + tempFilter.push(data); + } + + setFilteredProduct({ + category: 'colab-workflows', + tags: tempFilter, + }); + }; + return ( + +
+ +
+
+ +
+
+ +
+
+
+
+ ); +} diff --git a/src/pages/exchange.module.css b/src/pages/exchange.module.css index d16546f19..9da682119 100644 --- a/src/pages/exchange.module.css +++ b/src/pages/exchange.module.css @@ -1,17 +1,176 @@ -.blogContainer { +.cardContainer { + min-height: 400px; + width: 1500px; +} + +.container { + display: flex; + margin: auto; + width: 1500px; +} + +.featured { + margin-left: 8%; +} + +.discourseContainer { + border-radius: 0.5em; + height: 100%; +} + +.title { + margin-top: 1%; + width: 300px; +} + +.link { + margin-top: 3%; + margin-left: 1%; +} + +.mainCard { + display: grid; + grid-gap: 20px; + max-width: 1180px; + justify-content: center; + min-height: 535px; +} + +.featuredGettingStartedText { + display: none; +} + +.gettingStartedText, +.featuredGettingStartedText { + margin-top: 50px; + margin-left: 50px; +} + +.gettingStartedOne { + color: var(--ifm-color-primary); + font-size: 30px; + max-width: 396px; + font-weight: bold; + line-height: 100%; +} + +.gettingStartedTwo { + margin-top: 20px; + font-size: 20px; + font-weight: bold; +} + +.gettingStartedThree { + margin-top: 20px; + font-size: 16px; + font-weight: 500; +} + +.bold { + font-weight: bold; +} + +/* Getting Started Card container */ +.gridContainer { + display: grid; + margin-left: 50px; + margin-bottom: 50px; + grid-gap: 20px; + grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); + place-content: center; + margin-right: 40px; +} + +.video { + width: 100%; + height: 300px; + max-width: 520px; +} + +.contentContainer { + margin-left: 5%; +} + +@media only screen and (max-width: 1950px) { + .container { + width: 1225px; + } + .cardContainer { + width: 1225px; + } +} + +@media only screen and (max-width: 1350px) { + .container { + width: 950px; + } + .cardContainer { + width: 950px; + } +} + +@media only screen and (max-width: 1050px) { + .container { + width: 675px; + } + .cardContainer { + width: 675px; + } +} + +@media only screen and (max-width: 700px) { + .container { + width: 275px; + } + + .cardContainer { + width: 275px; + } +} + +@media only screen and (max-width: 1178px) { + .carousel { + margin-top: 0px; + margin-left: 50px; + margin-bottom: 50px; + } + .contentContainer { + width: 600px; + margin-left: 10%; + } +} +@media only screen and (min-width: 1179px) { + .mainCard { + grid-template-columns: repeat(auto-fit, minmax(520px, 1fr)); + /* UI Properties */ + background: var(--main-hero-card-background); + box-shadow: var(--dev-main-card-shadow); + border: 1px solid var(--dev-card-background); + border-radius: 40px; + opacity: 1; + margin: 50px auto; + width: calc(100% - 100px); + height: 535px; + min-height: 535px; + } +} +@media only screen and (max-width: 570px) { + .featured { + margin-left: 0%; + } + + .gettingStartedThree { + padding-right: 15%; + } + + .featuredGettingStartedText { display: flex; + } + .contentContainer { + width: auto; + margin-left: 0%; + } + .carousel { + margin: auto; + } } - -.blogSidbarContainer { - flex: 5%; -} - -@media only screen and (max-width: 870px) { - .blogSidbarContainer { - display: none; - } -} - -.blogCardContainer { - flex: 95%; -} \ No newline at end of file diff --git a/src/pages/index.js b/src/pages/index.js index cd823fbd1..770b371aa 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -4,6 +4,7 @@ import Link from '@docusaurus/Link'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Layout from '@theme/Layout'; import HomepageGettingStarted from '@site/src/components/homepage/HomepageGettingStarted'; +import HomepageDeveloperDays from '@site/src/components/homepage/HomepageDeveloperDays'; import HomepageBasics from '../components/homepage/HomepageBasics'; import HomepageTrainingGuides from '../components/homepage/HomepageTrainingGuides'; import HomepageDiscuss from '../components/homepage/HomepageDiscuss'; @@ -16,14 +17,15 @@ export default function Home() { return (
- + {/* */} + Getting Started Guides below, or see what our platform has to offer." } link={'https://www.sailpoint.com/products/IdentityNow/'} title={'Start With the Basics'} - image={'/homepage/person-head.png'} + image={'user'} buttonText={'Explore our platform'} /> @@ -33,19 +35,22 @@ export default function Home() { } link={'https://developer.sailpoint.com/discuss/'} title={'What is the Community saying?'} - image={'/homepage/discuss.png'} + image={'discuss'} buttonText={'Join the Discussion'} /> + - contact our team directly." - } - title={'Meet Our Team'} - image={'/homepage/team.png'} - buttonText={''} - /> - +
+ contact our team directly." + } + title={'Meet Our Team'} + image={'team'} + buttonText={''} + /> + +
); diff --git a/src/pages/index.module.css b/src/pages/index.module.css index 9f71a5da7..578d3bc07 100644 --- a/src/pages/index.module.css +++ b/src/pages/index.module.css @@ -21,3 +21,5 @@ align-items: center; justify-content: center; } + + diff --git a/src/pages/videos.js b/src/pages/videos.js new file mode 100644 index 000000000..34b399a50 --- /dev/null +++ b/src/pages/videos.js @@ -0,0 +1,70 @@ +import React from 'react'; +import Layout from '@theme/Layout'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import VideoCards from '../components/video-library/VideoCards'; +import VideoSidebar from '../components/video-library/VideoSidebar'; +import DiscourseEmbed from '../components/video-library/VideoComments'; +import styles from './videos.module.css'; + +export default function VideoLibrary() { + const [filteredProduct, setFilteredProduct] = React.useState({ + tags: [], + }); + const {siteConfig} = useDocusaurusContext(); + + const handleClick = (data) => { + setFilteredProduct({tags: data.tag}); + }; + + return ( + +
+
+
+
+
+
+
+
Video Library
+
+ + Our video library is a collection of educational videos + from our Developer Relations team, live streams, + conferences, and other community members. + {' '} +
+
+ + Contribute to our library → + +
+
+
+
Featured
+
+
+ +
+ +
+
+ +
+
+ +
+ +
+
+
+
+
+ ); +} diff --git a/src/pages/videos.module.css b/src/pages/videos.module.css new file mode 100644 index 000000000..812279ead --- /dev/null +++ b/src/pages/videos.module.css @@ -0,0 +1,147 @@ +.videosCardContainer { + flex: 95%; + min-height: 600px; +} + +.featuredVideo { + margin-left: 75px; +} + +.videosTitle { + text-align: center; + margin-bottom: 2%; + color: #ffffff; + position: relative; + top: 25px; +} + +.titleContainer { + width: 100%; + height: 45px; + background: rgb(0, 51, 161); + background: linear-gradient( + 90deg, + rgba(0, 51, 161, 1) 0%, + rgba(84, 192, 232, 1) 100% + ); + align-content: center; + margin-bottom: 2%; +} + +.mainCard { + display: grid; + grid-gap: 20px; + max-width: 1180px; + justify-content: center; + min-height: 400px; +} + +.featuredGettingStartedText { + display: none; +} + +.gettingStartedText, +.featuredGettingStartedText { + margin-top: 50px; + margin-left: 50px; +} + +.gettingStartedOne { + color: var(--ifm-color-primary); + font-size: 30px; + max-width: 396px; + font-weight: bold; + line-height: 100%; +} + +.gettingStartedTwo { + margin-top: 20px; + font-size: 20px; + font-weight: bold; +} + +.gettingStartedThree { + margin-top: 20px; + font-size: 16px; + font-weight: 500; +} + +.bold { + font-weight: bold; +} +.video { + width: 100%; + height: 300px; + max-width: 520px; +} + +.contentContainer { + margin-left: 75px; +} + +@media only screen and (max-width: 1178px) { + .carousel { + margin-top: 0px; + margin-left: 50px; + margin-bottom: 50px; + } + .contentContainer { + width: 600px; + margin-left: 75px; + } + + .featuredVideo { + margin-left: 175px; + } + .videoSideBar { + margin-left: 5%; + } + + .featuredGettingStartedText { + display: flex; + } + + +} +@media only screen and (min-width: 1179px) { + .carousel { + margin-top: 35px; + padding-bottom: 5%; + } + .mainCard { + grid-template-columns: repeat(auto-fit, minmax(520px, 1fr)); + /* UI Properties */ + background: var(--main-hero-card-background); + box-shadow: var(--dev-main-card-shadow); + border: 1px solid var(--dev-card-background); + border-radius: 40px; + opacity: 1; + margin: 50px auto; + width: calc(100% - 100px); + } +} +@media only screen and (max-width: 900px) { + .videoSideBar { + margin-left: 0%; + } + .featuredVideo { + margin: auto; + } + .carousel { + margin-bottom: 1%; + } + + .gettingStartedThree { + padding-right: 15%; + } +} +@media only screen and (max-width: 570px) { + + .contentContainer { + width: auto; + margin: auto; + } + .carousel { + margin-bottom: 0px; + } +} diff --git a/src/services/DiscourseService.js b/src/services/DiscourseService.js index ae62be006..3f313a600 100644 --- a/src/services/DiscourseService.js +++ b/src/services/DiscourseService.js @@ -57,9 +57,52 @@ export async function checkImage(url) { export async function getBlogPosts(tags) { let url = ''; if (tags) { - url = discourseBaseURL() + 'c/blog/l/latest.json?tags=' + tags; + url = + discourseBaseURL() + + 'c/content/community-blog/l/latest.json?tags=' + + tags; } else { - url = discourseBaseURL() + 'c/blog/l/latest.json'; + url = discourseBaseURL() + 'c/content/community-blog/l/latest.json'; + } + try { + const response = await fetch(url); + return await response.json(); + } catch (error) { + return []; + } +} + +export async function getUserTitle(primary_group_name) { + let url = discourseBaseURL() + 'g/' + primary_group_name + '.json'; + + try { + const response = await fetch(url); + return await response.json(); + } catch (error) { + console.log(error); + return []; + } +} + +export async function getVideoPosts(tags) { + let url = ''; + if (tags) { + if (tags.length < 1) { + url = discourseBaseURL() + 'c/content/video-library/l/latest.json'; + } + if (tags.length === 1) { + url = + discourseBaseURL() + + 'c/content/video-library/l/latest.json?tags=' + + tags; + } + if (tags.length === 2) { + url = + discourseBaseURL() + + `filter.json?q=category%3Avideo-library%20tag%3A${tags[0]}%2B${tags[1]}`; + } + } else { + url = discourseBaseURL() + 'c/content/video-library/l/latest.json'; } try { const response = await fetch(url); diff --git a/src/theme/DocCard/index.js b/src/theme/DocCard/index.js index dbbcfa835..696b64b0e 100644 --- a/src/theme/DocCard/index.js +++ b/src/theme/DocCard/index.js @@ -9,8 +9,7 @@ import isInternalUrl from '@docusaurus/isInternalUrl'; import {translate} from '@docusaurus/Translate'; import styles from './styles.module.css'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -import { faFolderOpen, faLink, faBook, faArrowUpRightFromSquare } from '@fortawesome/pro-duotone-svg-icons' -import { useColorMode } from '@docusaurus/theme-common'; +import { faFolderOpen, faBook, faArrowUpRightFromSquare } from '@fortawesome/pro-duotone-svg-icons' function CardContainer({href, children}) { return ( @@ -39,10 +38,6 @@ function CardLayout({href, icon, title, description}) { } function CardCategory({item}) { const href = findFirstCategoryLink(item); - const {colorMode} = useColorMode(); - //const icon = colorMode === 'dark' ? : ; - //const icon = ; - //console.log(item) // Unexpected: categories that don't have a link have been filtered upfront if (!href) { return null; @@ -50,7 +45,7 @@ function CardCategory({item}) { return ( } + icon={} //icon={icon} title={item.label} description={ @@ -69,8 +64,7 @@ function CardCategory({item}) { ); } function CardLink({item}) { - const {colorMode} = useColorMode(); - const icon = isInternalUrl(item.href) ? : ; + const icon = isInternalUrl(item.href) ? : ; const doc = useDocById(item.docId ?? undefined); return ( - - Use this endpoint to update an account with a PATCH request. + This updates account details. + A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. - The request must provide a JSONPatch payload. - - A token with ORG_ADMIN authority is required to call this API. + This endpoint supports updating an account's correlation. It can only modify the identityId and manuallyCorrelated + attributes. To re-assign an account from one identity to another, replace the current identityId with a new value. + If the account you're assigning was provisioned by IdentityNow, it's possible IdentityNow could create a new account + for the previous identity as soon as the account is moved. If the account you're assigning is authoritative, + this will cause the previous identity to become uncorrelated and could even result in its deletion. All accounts + that are are reassigned will be set to manuallyCorrelated: true. security: - UserContextAuth: [idn:accounts:manage] parameters: @@ -180,4 +184,4 @@ delete: "429": $ref: "../../v3/responses/429.yaml" "500": - $ref: "../../v3/responses/500.yaml" \ No newline at end of file + $ref: "../../v3/responses/500.yaml" diff --git a/static/api-specs/idn/beta/paths/accounts-id-unlock.yaml b/static/api-specs/idn/beta/paths/accounts-id-unlock.yaml index 5c2c27c1c..86df268ac 100644 --- a/static/api-specs/idn/beta/paths/accounts-id-unlock.yaml +++ b/static/api-specs/idn/beta/paths/accounts-id-unlock.yaml @@ -6,16 +6,18 @@ post: description: >- This API submits a task to unlock an account and returns the task ID. + To use this endpoint to unlock an account that has the `forceProvisioning` option set to true, the `idn:accounts-provisioning:manage` scope is required. + A token with ORG_ADMIN authority is required to call this API. security: - - UserContextAuth: [idn:accounts-state:manage] + - UserContextAuth: [idn:accounts-state:manage, idn:accounts-provisioning:manage] parameters: - in: path name: id schema: type: string required: true - description: The account id + description: The account ID. example: ef38f94347e94562b5bb8424a56397d8 requestBody: required: true diff --git a/static/api-specs/idn/beta/paths/auth-profile.yaml b/static/api-specs/idn/beta/paths/auth-profile.yaml index 7d395e978..d1b73d49a 100644 --- a/static/api-specs/idn/beta/paths/auth-profile.yaml +++ b/static/api-specs/idn/beta/paths/auth-profile.yaml @@ -26,38 +26,6 @@ get: $ref: '../../v3/responses/429.yaml' '500': $ref: '../../v3/responses/500.yaml' -post: - operationId: createProfileConfig - tags: - - Auth Profile - summary: Create Auth Profile. - description: >- - This API creates an auth profile. - security: - - UserContextAuth: [sp:auth-profile:create] - requestBody: - required: true - content: - application/json: - schema: - $ref: "../schemas/AuthProfileRequest.yaml" - responses: - '202': - description: Auth Profile details - content: - application/json: - schema: - $ref: '../schemas/AuthProfile.yaml' - '400': - $ref: '../../v3/responses/400.yaml' - '401': - $ref: '../../v3/responses/401.yaml' - '403': - $ref: '../../v3/responses/403.yaml' - '429': - $ref: '../../v3/responses/429.yaml' - '500': - $ref: '../../v3/responses/500.yaml' patch: operationId: patchProfileConfig tags: @@ -70,7 +38,7 @@ patch: parameters: - name: id in: path - description: ID of the Auth Profile to patch + description: ID of the Auth Profile to patch. required: true schema: type: string @@ -85,7 +53,7 @@ patch: required: true responses: '200': - description: Responds with the Access Profile as updated. + description: Responds with the Auth Profile as updated. content: application/json: schema: @@ -102,33 +70,3 @@ patch: $ref: '../../v3/responses/500.yaml' security: - UserContextAuth: [sp:auth-profile:update] -delete: - operationId: deleteProfileConfig - tags: - - Auth Profile - summary: Delete the specified Auth Profile - description: >- - This API deletes an existing Auth Profile. - parameters: - - name: id - in: path - description: ID of the Access Profile to delete - required: true - schema: - type: string - example: 2c91808a7813090a017814121919ecca - responses: - '204': - $ref: "../../v3/responses/204.yaml" - '400': - $ref: '../../v3/responses/400.yaml' - '401': - $ref: '../../v3/responses/401.yaml' - '403': - $ref: '../../v3/responses/403.yaml' - '429': - $ref: '../../v3/responses/429.yaml' - '500': - $ref: '../../v3/responses/500.yaml' - security: - - UserContextAuth: [sp:auth-profile:delete] diff --git a/static/api-specs/idn/beta/paths/discovered-applications.yaml b/static/api-specs/idn/beta/paths/discovered-applications.yaml new file mode 100644 index 000000000..4b4ac5a76 --- /dev/null +++ b/static/api-specs/idn/beta/paths/discovered-applications.yaml @@ -0,0 +1,61 @@ +get: + operationId: getDiscoveredApplications + tags: + - Discovered Applications + summary: Retrieve discovered applications for tenant + description: > + Fetches a list of applications that have been identified within the environment. This includes details such as application names, discovery dates, potential correlated saas_vendors and related suggested connectors. + security: + - UserContextAuth: + - 'idn:application-discovery:read' + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - in: query + name: filter + schema: + type: string + description: > + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/idn/api/standard-collection-parameters#filtering-results) + + + Filtering is supported for the following fields and operators: + + + **name**: *eq, sw, co* + + + **description**: *eq, sw, co* + example: name eq "Okta" and description co "Okta" + required: false + style: form + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/idn/api/standard-collection-parameters#sorting-results) + + + Sorting is supported for the following fields: **name, description, discoveredAt, discoverySource** + example: name + responses: + '200': + description: Successfully retrieved list of discovered applications. + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/DiscoveredApplications.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/api-specs/idn/beta/paths/icon.yaml b/static/api-specs/idn/beta/paths/icon.yaml new file mode 100644 index 000000000..f2f3e1848 --- /dev/null +++ b/static/api-specs/idn/beta/paths/icon.yaml @@ -0,0 +1,103 @@ +put: + operationId: setIcon + tags: + - Icons + summary: Update an icon + description: >- + This API endpoint updates an icon by object type and object id. + A token with ORG_ADMIN authority is required to call this API. + parameters: + - in: path + name: objectType + schema: + type: string + required: true + description: Object type. Available options ['application'] + example: application + - in: path + name: objectId + schema: + type: string + required: true + description: Object id. + example: a291e870-48c3-4953-b656-fb5ce2a93169 + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + required: + - image + properties: + image: + type: string + format: binary + description: file with icon. Allowed mime-types ['image/png', 'image/jpeg'] + example: \x00\x00\x00\x02 + security: + - UserContextAuth: [ ] + responses: + '200': + description: Icon updated + content: + application/json: + schema: + type: object + properties: + icon: + type: string + description: url to file with icon + example: "" + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteIcon + tags: + - Icons + summary: Delete an icon + description: >- + This API endpoint delete an icon by object type and object id. + A token with ORG_ADMIN authority is required to call this API. + parameters: + - in: path + name: objectType + schema: + type: string + required: true + description: Object type. Available options ['application'] + example: application + - in: path + name: objectId + schema: + type: string + required: true + description: Object id. + example: a291e870-48c3-4953-b656-fb5ce2a93169 + security: + - UserContextAuth: [ ] + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/api-specs/idn/beta/paths/identities-process.yaml b/static/api-specs/idn/beta/paths/identities-process.yaml index e25c0d8b5..7e453ca65 100644 --- a/static/api-specs/idn/beta/paths/identities-process.yaml +++ b/static/api-specs/idn/beta/paths/identities-process.yaml @@ -4,16 +4,19 @@ post: - Identities summary: Process a list of identityIds description: | - You could use this endpoint to: + This operation should not be used to schedule your own identity processing or to perform system wide identity refreshes. The system will use a combination of [event-based processing](https://documentation.sailpoint.com/saas/help/setup/identity_processing.html?h=process#event-based-processing) and [scheduled processing](https://documentation.sailpoint.com/saas/help/setup/identity_processing.html?h=process#scheduled-processing) that runs every day at 8:00 AM and 8:00 PM in the tenant's timezone to keep your identities synchronized. + + This endpoint will perform the following tasks: 1. Calculate identity attributes, including applying or running any rules or transforms (e.g. calculate Lifecycle State at a point-in-time it's expected to change). 2. Evaluate role assignments, leading to assignment of new roles and removal of existing roles. 3. Enforce provisioning for any assigned accesses that haven't been fulfilled (e.g. failure due to source health). 4. Recalculate manager relationships. 5. Potentially clean-up identity processing errors, assuming the error has been resolved. - To learn more, refer to the [identity processing documentation](https://documentation.sailpoint.com/saas/help/setup/identity_processing.html). - A token with ORG_ADMIN or HELPDESK authority is required to call this API. + externalDocs: + description: 'Learn more about manually processing identities here' + url: 'https://documentation.sailpoint.com/saas/help/setup/identity_processing.html' security: - UserContextAuth: - "idn:identity:manage" diff --git a/static/api-specs/idn/beta/paths/identities.yaml b/static/api-specs/idn/beta/paths/identities.yaml index 9121515ea..5d29f2f4f 100644 --- a/static/api-specs/idn/beta/paths/identities.yaml +++ b/static/api-specs/idn/beta/paths/identities.yaml @@ -5,6 +5,10 @@ get: summary: List Identities description: >- This API returns a list of identities. + security: + - UserContextAuth: + - "idn:identity:read" + - "idn:identity:manage" parameters: - in: query name: filters diff --git a/static/api-specs/idn/beta/paths/identity-profile-process-identities.yaml b/static/api-specs/idn/beta/paths/identity-profile-process-identities.yaml index 438410438..265491c74 100644 --- a/static/api-specs/idn/beta/paths/identity-profile-process-identities.yaml +++ b/static/api-specs/idn/beta/paths/identity-profile-process-identities.yaml @@ -6,8 +6,21 @@ post: description: >- Process identities under the profile + This operation should not be used to schedule your own identity processing or to perform system wide identity refreshes. The system will use a combination of [event-based processing](https://documentation.sailpoint.com/saas/help/setup/identity_processing.html?h=process#event-based-processing) and [scheduled processing](https://documentation.sailpoint.com/saas/help/setup/identity_processing.html?h=process#scheduled-processing) that runs every day at 8:00 AM and 8:00 PM in the tenant's timezone to keep your identities synchronized. + + This should only be run on identity profiles that have the `identityRefreshRequired` attribute set to `true`. If `identityRefreshRequired` is false, then there is no benefit to running this operation. Typically, this operation is performed when a change is made to the identity profile or its related lifecycle states that requires a refresh. + + This operation will perform the following activities on all identities under the identity profile. + + 1. Updates identity attribute according to the identity profile mappings. + 2. Determines the identity's correct manager through manager correlation. + 3. Updates the identity's access according to their assigned lifecycle state. + 4. Updates the identity's access based on role assignment criteria. A token with ORG_ADMIN authority is required to call this API. + externalDocs: + description: 'Learn more about manually processing identities here' + url: 'https://documentation.sailpoint.com/saas/help/setup/identity_processing.html' parameters: - in: path name: identity-profile-id diff --git a/static/api-specs/idn/beta/paths/identity-reset.yaml b/static/api-specs/idn/beta/paths/identity-reset.yaml new file mode 100644 index 000000000..b4c39fd3f --- /dev/null +++ b/static/api-specs/idn/beta/paths/identity-reset.yaml @@ -0,0 +1,34 @@ +post: + operationId: resetIdentity + tags: + - Identities + summary: Reset an identity + description: >- + Use this endpoint to reset a user's identity if they have forgotten their authentication information like their answers to knowledge-based questions. + Resetting an identity de-registers the user and removes any elevated user levels they have. + security: + - UserContextAuth: + - "idn:identity:update" + parameters: + - in: path + name: identityId + schema: + type: string + required: true + description: Identity Id + example: "ef38f94347e94562b5bb8424a56397d8" + responses: + "202": + description: Accepted. The reset request accepted and is in progress. + "400": + $ref: "../../v3/responses/400.yaml" + "401": + $ref: "../../v3/responses/401.yaml" + "403": + $ref: "../../v3/responses/403.yaml" + "404": + $ref: "../../v3/responses/404.yaml" + "429": + $ref: "../../v3/responses/429.yaml" + "500": + $ref: "../../v3/responses/500.yaml" diff --git a/static/api-specs/idn/beta/paths/identity-set-lifecycle-state.yaml b/static/api-specs/idn/beta/paths/identity-set-lifecycle-state.yaml index 2c36eb014..5c2d14c95 100644 --- a/static/api-specs/idn/beta/paths/identity-set-lifecycle-state.yaml +++ b/static/api-specs/idn/beta/paths/identity-set-lifecycle-state.yaml @@ -4,14 +4,14 @@ post: - Lifecycle States summary: Set Lifecycle State description: | - This endpoint will set/update an identity's lifecycle state to the one provided and updates the corresponding Identity Profile. + This endpoint will set/update an identity's lifecycle state to the one provided and updates the corresponding identity profile. A token with ORG_ADMIN or API authority is required to call this API. parameters: - in: path name: identity-id description: >- - The ID of the identity to update + The ID of the identity to update. required: true example: 2c9180857893f1290178944561990364 schema: @@ -27,7 +27,7 @@ post: lifecycleStateId: type: string format: uuid - description: The ID of the lifecycle state to set + description: The ID of the lifecycle state to set. example: 2c9180877a86e408017a8c19fefe046c responses: '200': @@ -41,7 +41,7 @@ post: type: string format: uuid example: 2c9180837ab5b716017ab7c6c9ef1e20 - description: The ID of the IdentityRequest object that was generated when the workflow launches + description: The ID of the IdentityRequest object that is generated when the workflow launches. To follow the IdentityRequest, you can provide this ID with a [Get Account Activity request](https://developer.sailpoint.com/docs/api/beta/get-account-activity/). The response will contain relevant information about the IdentityRequest, such as its status. '401': $ref: '../../v3/responses/401.yaml' '403': diff --git a/static/api-specs/idn/beta/paths/identity.yaml b/static/api-specs/idn/beta/paths/identity.yaml index fe8c8d27f..309930911 100644 --- a/static/api-specs/idn/beta/paths/identity.yaml +++ b/static/api-specs/idn/beta/paths/identity.yaml @@ -8,6 +8,7 @@ get: security: - UserContextAuth: - "idn:identity:read" + - "idn:identity:manage" parameters: - in: path name: id diff --git a/static/api-specs/idn/beta/paths/load-entitlements.yaml b/static/api-specs/idn/beta/paths/load-entitlements.yaml index f0c2c9d4e..e806774f3 100644 --- a/static/api-specs/idn/beta/paths/load-entitlements.yaml +++ b/static/api-specs/idn/beta/paths/load-entitlements.yaml @@ -1,11 +1,14 @@ post: tags: - Entitlements - summary: Import Entitlement CSV File - operationId: importEntitlementCsv + summary: Aggregate Entitlements + operationId: importEntitlements description: >- - Uploads a comma separated file (CSV) to a delimited file source and starts an entitlement aggregation on the source. - + Starts an entitlement aggregation on the specified source. + + If the target source is a direct connection, then the request body must be empty. You will also need to make sure the Content-Type header is not set. If you set the Content-Type header without specifying a body, then you will receive a 500 error. + + If the target source is a delimited file source, then the CSV file needs to be included in the request body. You will also need to set the Content-Type header to `multipart/form-data`. parameters: - in: path name: id @@ -27,7 +30,7 @@ post: - csvFile responses: "202": - description: Load Entitlements Task + description: Aggregate Entitlements Task content: application/json: schema: diff --git a/static/api-specs/idn/beta/paths/managed-client-status.yaml b/static/api-specs/idn/beta/paths/managed-client-status.yaml index 25fa96f4d..bd000d10f 100644 --- a/static/api-specs/idn/beta/paths/managed-client-status.yaml +++ b/static/api-specs/idn/beta/paths/managed-client-status.yaml @@ -3,6 +3,7 @@ get: - Managed Clients summary: Specified Managed Client Status. description: Retrieve Managed Client Status by ID. + deprecated: true operationId: getManagedClientStatus parameters: - name: id @@ -45,6 +46,7 @@ post: - Managed Clients summary: Handle status request from client description: Update a status detail passed in from the client + deprecated: true operationId: updateManagedClientStatus parameters: - name: id diff --git a/static/api-specs/idn/beta/paths/managed-cluster-log-config.yaml b/static/api-specs/idn/beta/paths/managed-cluster-log-config.yaml index 3dcf1186e..feebcffa5 100644 --- a/static/api-specs/idn/beta/paths/managed-cluster-log-config.yaml +++ b/static/api-specs/idn/beta/paths/managed-cluster-log-config.yaml @@ -3,6 +3,7 @@ get: - Managed Clusters summary: Get managed cluster's log configuration description: Get managed cluster's log configuration. + deprecated: true operationId: getClientLogConfiguration parameters: - name: id @@ -40,6 +41,7 @@ put: - Managed Clusters summary: Update managed cluster's log configuration description: Update managed cluster's log configuration + deprecated: true operationId: putClientLogConfiguration parameters: - name: id diff --git a/static/api-specs/idn/beta/paths/managed-cluster-path.yaml b/static/api-specs/idn/beta/paths/managed-cluster-path.yaml index 3e3db2b0d..8a6f3538f 100644 --- a/static/api-specs/idn/beta/paths/managed-cluster-path.yaml +++ b/static/api-specs/idn/beta/paths/managed-cluster-path.yaml @@ -3,6 +3,7 @@ get: - Managed Clusters summary: Get a specified ManagedCluster. description: Retrieve a ManagedCluster by ID. + deprecated: true operationId: getManagedCluster parameters: - name: id diff --git a/static/api-specs/idn/beta/paths/managed-clusters.yaml b/static/api-specs/idn/beta/paths/managed-clusters.yaml index 04131d40b..fe8c28fca 100644 --- a/static/api-specs/idn/beta/paths/managed-clusters.yaml +++ b/static/api-specs/idn/beta/paths/managed-clusters.yaml @@ -3,6 +3,7 @@ get: - Managed Clusters summary: Retrieve all Managed Clusters. description: Retrieve all Managed Clusters for the current Org, based on request context. + deprecated: true operationId: getManagedClusters parameters: - $ref: '../../v3/parameters/offset.yaml' diff --git a/static/api-specs/idn/beta/paths/manual-discover-applications-template.yaml b/static/api-specs/idn/beta/paths/manual-discover-applications-template.yaml new file mode 100644 index 000000000..b43b040b8 --- /dev/null +++ b/static/api-specs/idn/beta/paths/manual-discover-applications-template.yaml @@ -0,0 +1,28 @@ +get: + summary: CSV template download for discovery + tags: + - Manual Discover Applications Template + description: > + Allows the user to download an example CSV file with two columns `application_name` and `domain`. + The CSV file contains a single row with the values 'Example Application' and 'Example Description'. + security: + - UserContextAuth: + - 'idn:application-discovery:read' + operationId: getManualDiscoverApplicationsCsvTemplate + responses: + '200': + description: A CSV file download was successful. + content: + text/csv: + schema: + $ref: '../schemas/ManualDiscoverApplicationsTemplate.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/api-specs/idn/beta/paths/manual-discover-applications.yaml b/static/api-specs/idn/beta/paths/manual-discover-applications.yaml new file mode 100644 index 000000000..2835ab674 --- /dev/null +++ b/static/api-specs/idn/beta/paths/manual-discover-applications.yaml @@ -0,0 +1,43 @@ +post: + summary: CSV Upload to discover applications + tags: + - Manual Discover Applications + description: >- + This API allows for the upload of a CSV file containing application data to + be manually correlated to potential IDN connector(s). + security: + - UserContextAuth: + - 'idn:application-discovery:write' + operationId: sendManualDiscoverApplicationsCsvTemplate + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + csvFile: + type: string + format: binary + required: + - csvFile + responses: + '200': + description: The CSV has been successfully processed. + content: + multipart/form-data: + schema: + $ref: '../schemas/ManualDiscoverApplications.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + description: > + Bad request - There was an error with the CSV format or validation + failed (e.g., `application_name` missing). Error message should be + provided in response. + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/api-specs/idn/beta/paths/notification-preference.yaml b/static/api-specs/idn/beta/paths/notification-preference.yaml new file mode 100644 index 000000000..62cc3f6e3 --- /dev/null +++ b/static/api-specs/idn/beta/paths/notification-preference.yaml @@ -0,0 +1,81 @@ +get: + operationId: getNotificationPreference + tags: + - Notifications + summary: Get Notification Preference details + description: >- + Returns the notification preference details for tenant. Note that if the key doesn't exist, then a 404 will be returned. + + security: + - UserContextAuth: [ idn:notification-preferences:read ] + parameters: + - in: path + name: key + required: true + example: cloud_manual_work_item_summary + schema: + type: string + description: The notification key. + responses: + '200': + description: Return preference for the given notification key. + content: + application/json: + schema: + $ref: '../schemas/PreferencesDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: putNotificationPreference + tags: + - Notifications + summary: Overwrite preferences notification key. + description: >- + Allows admins to opt in to or out of certain notifications for their org. The default state is opted in. `key` is optional but if it is provided and doesn't match the key in the URI, then a 400 will be thrown. + + security: + - UserContextAuth: [ idn:notification-preferences:create ] + + parameters: + - in: path + name: key + required: true + example: cloud_manual_work_item_summary + schema: + type: string + description: The notification key. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/PreferencesDto.yaml' + responses: + '200': + description: The preferences were successfully replaced, and an echo of the new preferences are sent back to caller. + content: + application/json: + schema: + $ref: '../schemas/PreferencesDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/api-specs/idn/beta/paths/notification-preferences.yaml b/static/api-specs/idn/beta/paths/notification-preferences.yaml index 581f8fa33..cb9c8281c 100644 --- a/static/api-specs/idn/beta/paths/notification-preferences.yaml +++ b/static/api-specs/idn/beta/paths/notification-preferences.yaml @@ -1,27 +1,20 @@ get: - operationId: getNotificationPreference + operationId: listNotificationPreferences tags: - Notifications - summary: Get Notification Preferences for tenant. + summary: List Notification Preferences for tenant. description: >- - Returns the notification preferences for tenant. Note that if the key doesn't exist, then a 404 will be returned. - + Returns a list of notification preferences for tenant. security: - UserContextAuth: [ idn:notification-preferences:read ] - parameters: - - in: path - name: key - required: true - example: cloud_manual_work_item_summary - schema: - type: string - description: The notification key. responses: '200': description: Return preference for the given notification key. content: application/json: schema: + type: array + items: $ref: '../schemas/PreferencesDto.yaml' '400': $ref: '../../v3/responses/400.yaml' @@ -34,48 +27,4 @@ get: '429': $ref: '../../v3/responses/429.yaml' '500': - $ref: '../../v3/responses/500.yaml' -put: - operationId: putNotificationPreference - tags: - - Notifications - summary: Overwrite preferences notification key. - description: >- - Allows admins to opt in to or out of certain notifications for their org. The default state is opted in. `key` is optional but if it is provided and doesn't match the key in the URI, then a 400 will be thrown. - - security: - - UserContextAuth: [ idn:notification-preferences:create ] - - parameters: - - in: path - name: key - required: true - example: cloud_manual_work_item_summary - schema: - type: string - description: The notification key. - requestBody: - required: true - content: - application/json: - schema: - $ref: '../schemas/PreferencesDto.yaml' - responses: - '200': - description: The preferences were successfully replaced, and an echo of the new preferences are sent back to caller. - content: - application/json: - schema: - $ref: '../schemas/PreferencesDto.yaml' - '400': - $ref: '../../v3/responses/400.yaml' - '401': - $ref: '../../v3/responses/401.yaml' - '403': - $ref: '../../v3/responses/403.yaml' - '404': - $ref: '../../v3/responses/404.yaml' - '429': - $ref: '../../v3/responses/429.yaml' - '500': - $ref: '../../v3/responses/500.yaml' + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/api-specs/idn/beta/paths/remove-account.yaml b/static/api-specs/idn/beta/paths/remove-account.yaml new file mode 100644 index 000000000..1ecb586c1 --- /dev/null +++ b/static/api-specs/idn/beta/paths/remove-account.yaml @@ -0,0 +1,46 @@ +post: + operationId: deleteAccountAsync + summary: Remove Account + tags: + - Accounts + description: | + Use this endpoint to remove accounts from the system without provisioning changes to the source. Accounts that are removed could be re-created during the next aggregation. + + This endpoint is good for: + * Removing accounts that no longer exist on the source. + * Removing accounts that won't be aggregated following updates to the source configuration. + * Forcing accounts to be re-created following the next aggregation to re-run account processing, support testing, etc. + + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account id + example: c350d6aa4f104c61b062cb632421ad10 + responses: + "202": + description: Accepted. Returns task result details of removal request. + content: + application/json: + schema: + $ref: "../../v3/schemas/TaskResultDto.yaml" + example: + { + "type": "TASK_RESULT", + "id": "464ae7bf791e49fdb74606a2e4a89635", + "name": null + } + "400": + $ref: "../../v3/responses/400.yaml" + "401": + $ref: "../../v3/responses/401.yaml" + "403": + $ref: "../../v3/responses/403.yaml" + "429": + $ref: "../../v3/responses/429.yaml" + "500": + $ref: "../../v3/responses/500.yaml" + security: + - UserContextAuth: [ idn:account:remove ] \ No newline at end of file diff --git a/static/api-specs/idn/beta/paths/remove-accounts.yaml b/static/api-specs/idn/beta/paths/remove-accounts.yaml new file mode 100644 index 000000000..c54de3c20 --- /dev/null +++ b/static/api-specs/idn/beta/paths/remove-accounts.yaml @@ -0,0 +1,46 @@ +post: + operationId: deleteAccountsAsync + summary: Remove All Accounts + tags: + - Accounts + description: | + Use this endpoint to remove all accounts from the system without provisioning changes to the source. Accounts that are removed could be re-created during the next aggregation. + + This endpoint is good for: + * Removing accounts that no longer exist on the source. + * Removing accounts that won't be aggregated following updates to the source configuration. + * Forcing accounts to be re-created following the next aggregation to re-run account processing, support testing, etc. + + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The source id + example: ebbf35756e1140699ce52b233121384a + responses: + "202": + description: Accepted. Returns task result details of removal request. + content: + application/json: + schema: + $ref: "../../v3/schemas/TaskResultDto.yaml" + example: + { + "type": "TASK_RESULT", + "id": "464ae7bf791e49fdb74606a2e4a89635", + "name": null + } + "400": + $ref: "../../v3/responses/400.yaml" + "401": + $ref: "../../v3/responses/401.yaml" + "403": + $ref: "../../v3/responses/403.yaml" + "429": + $ref: "../../v3/responses/429.yaml" + "500": + $ref: "../../v3/responses/500.yaml" + security: + - UserContextAuth: [ idn:account:remove ] \ No newline at end of file diff --git a/static/api-specs/idn/beta/paths/role.yaml b/static/api-specs/idn/beta/paths/role.yaml index f9f24e2bc..eee384c96 100644 --- a/static/api-specs/idn/beta/paths/role.yaml +++ b/static/api-specs/idn/beta/paths/role.yaml @@ -44,19 +44,28 @@ patch: - Roles summary: Patch a specified Role description: >- - This API updates an existing Role using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax. - + This API updates an existing role using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax. The following fields are patchable: - **name**, **description**, **enabled**, **owner**, **accessProfiles**, **membership**, **requestable**, - **accessRequestConfig**, **revokeRequestConfig**, **segments** + * name + * description + * enabled + * owner + * accessProfiles + * membership + * requestable + * accessRequestConfig + * revokeRequestConfig + * segments A token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a - token with ROLE_SUBADMIN authority may only call this API if all Access Profiles included in the Role are associated + token with ROLE_SUBADMIN authority may only call this API if all access profiles included in the role are associated to Sources with management workgroups of which the ROLE_SUBADMIN is a member. The maximum supported length for the description field is 2000 characters. Longer descriptions will be preserved for existing roles, however, any new roles as well as any updates to existing descriptions will be limited to 2000 characters. + + When you use this API to modify a role's membership identities, you can only modify up to a limit of 500 membership identities at a time. parameters: - name: id in: path diff --git a/static/api-specs/idn/beta/paths/set-password.yaml b/static/api-specs/idn/beta/paths/set-password.yaml index 0ec0ffa71..e9db06242 100644 --- a/static/api-specs/idn/beta/paths/set-password.yaml +++ b/static/api-specs/idn/beta/paths/set-password.yaml @@ -6,11 +6,13 @@ post: description: | This API is used to set a password for an identity. - An identity can change their own password (as well as any of their accounts' passwords) if they use a token generated by their IDN user, such as a [personal access token](https://developer.sailpoint.com/idn/api/authentication#personal-access-tokens) or ["authorization_code" derived OAuth token](https://developer.sailpoint.com/idn/api/authentication#authorization-code-grant-flow). + An identity can change their own password (as well as any of their accounts' passwords) if they use a token generated by their ISC user, such as a [personal access token](https://developer.sailpoint.com/idn/api/authentication#personal-access-tokens) or ["authorization_code" derived OAuth token](https://developer.sailpoint.com/idn/api/authentication#authorization-code-grant-flow). A token with [API authority](https://developer.sailpoint.com/idn/api/authentication#client-credentials-grant-flow) can be used to change **any** identity's password or the password of any of the identity's accounts. "API authority" refers to a token that only has the "client_credentials" grant type. + >**Note: If you want to set an identity's source account password, you must enable `PASSWORD` as one of the source's features. You can use the [PATCH Source endpoint](https://developer.sailpoint.com/docs/api/v3/update-source) to add the `PASSWORD` feature.** + You can use this endpoint to generate an `encryptedPassword` (RSA encrypted using publicKey). To do so, follow these steps: diff --git a/static/api-specs/idn/beta/paths/sources.yaml b/static/api-specs/idn/beta/paths/sources.yaml index 6fe555a10..be2aca510 100644 --- a/static/api-specs/idn/beta/paths/sources.yaml +++ b/static/api-specs/idn/beta/paths/sources.yaml @@ -66,6 +66,9 @@ get: **connectorName**: *eq, ge, gt, in, ne, isnull, sw* + + + **category**: *co, eq, ge, gt, in, le, lt, ne, sw* - in: query name: sorters schema: diff --git a/static/api-specs/idn/beta/paths/system-notification-config.yaml b/static/api-specs/idn/beta/paths/system-notification-config.yaml new file mode 100644 index 000000000..41b2662f6 --- /dev/null +++ b/static/api-specs/idn/beta/paths/system-notification-config.yaml @@ -0,0 +1,65 @@ +get: + operationId: getSystemNotificationConfiguration + tags: + - Notifications + summary: Get System Notification Configuration + description: >- + Returns the system notification configuration for a tenant. + security: + - UserContextAuth: [ idn:notification-preferences:read ] + responses: + '200': + description: List of Email Status + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/SystemNotificationConfigDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +put: + operationId: putSystemNotificationConfiguration + tags: + - Notifications + summary: Update the System Notification configuration + description: >- + Updates the System Notification configuration. + security: + - UserContextAuth: [ idn:notification-preferences:create ] + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/SystemNotificationConfigDto.yaml' + example: + recipientType: "OVERRIDE_EMAILS" + overrideEmails: ["notified@example.com"] + + responses: + '200': + description: Update System Notification configuration + content: + application/json: + schema: + $ref: '../schemas/SystemNotificationConfigDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/api-specs/idn/beta/paths/vendor-connector-mappings.yaml b/static/api-specs/idn/beta/paths/vendor-connector-mappings.yaml new file mode 100644 index 000000000..b4f4f5af0 --- /dev/null +++ b/static/api-specs/idn/beta/paths/vendor-connector-mappings.yaml @@ -0,0 +1,143 @@ +get: + security: + - UserContextAuth: + - 'idn:application-discovery:read' + operationId: getVendorConnectorMappings + tags: + - Vendor Connector Mappings + summary: List vendor connector mappings + description: > + Retrieves a list of mappings between SaaS vendors and IDN connectors, detailing the connections established for correlation. + responses: + '200': + description: Successfully retrieved list. + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/VendorConnectorMapping.yaml' + example: + - id: "78733556-9ea3-4f59-bf69-e5cd92b011b4" + vendor: "Example Vendor" + connector: "Example Connector" + createdAt: "2024-03-13T12:56:19.391294Z" + createdBy: "admin" + updatedAt: + Time: "2024-03-14T12:56:19.391294Z" + Valid: true + updatedBy: + String: "user-67891" + Valid: true + deletedAt: + Time: "0001-01-01T00:00:00Z" + Valid: false + deletedBy: + String: "" + Valid: false + - id: "78733556-9ea3-4f59-bf69-e5cd92b011b5" + vendor: "Another Corporation" + connector: "Another Connector" + createdAt: "2024-04-13T11:46:19.391294Z" + createdBy: "admin" + updatedAt: + Time: "0001-01-01T00:00:00Z" + Valid: false + updatedBy: + String: "" + Valid: false + deletedAt: + Time: "0001-01-01T00:00:00Z" + Valid: false + deletedBy: + String: "" + Valid: false + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '405': + $ref: '../../v3/responses/405.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +post: + security: + - UserContextAuth: + - 'idn:application-discovery:write' + operationId: createVendorConnectorMapping + tags: + - Vendor Connector Mappings + summary: Create a vendor connector mapping + description: > + Creates a new mapping between a SaaS vendor and an IDN connector to establish correlation paths. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../../beta/schemas/VendorConnectorMapping.yaml' + responses: + '200': + description: Successfully created a new vendor connector mapping. + content: + application/json: + schema: + $ref: '../../beta/schemas/VendorConnectorMapping.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '405': + $ref: '../../v3/responses/405.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +delete: + security: + - UserContextAuth: + - 'idn:application-discovery:write' + operationId: deleteVendorConnectorMapping + tags: + - Vendor Connector Mappings + summary: Delete a vendor connector mapping + description: > + Soft deletes a mapping between a SaaS vendor and an IDN connector, removing the established correlation. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../../beta/schemas/VendorConnectorMapping.yaml' + responses: + '200': + description: Successfully deleted the specified vendor connector mapping. + content: + application/json: + schema: + type: object + properties: + count: + type: integer + description: The number of vendor connector mappings successfully deleted. + example: 1 + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/api-specs/idn/beta/paths/workgroups/workgroup-members.yaml b/static/api-specs/idn/beta/paths/workgroups/workgroup-members.yaml index 54bb5dff4..1235893c0 100644 --- a/static/api-specs/idn/beta/paths/workgroups/workgroup-members.yaml +++ b/static/api-specs/idn/beta/paths/workgroups/workgroup-members.yaml @@ -52,6 +52,10 @@ get: type: string description: Workgroup member identity display name. example: Michael Michaels + email: + type: string + description: Workgroup member identity email. + example: michael.michaels@sailpoint.com '400': $ref: '../../../v3/responses/400.yaml' '401': diff --git a/static/api-specs/idn/beta/schemas/DiscoveredApplications.yaml b/static/api-specs/idn/beta/schemas/DiscoveredApplications.yaml new file mode 100644 index 000000000..fab14da10 --- /dev/null +++ b/static/api-specs/idn/beta/schemas/DiscoveredApplications.yaml @@ -0,0 +1,45 @@ +type: array +description: An array of discovered applications for a given tenant +example: + - id: "app-123" + name: "ExampleApp" + discoverySource: "CSV" + discoveredVendor: "ExampleVendor" + description: "An application for managing examples." + recommendedConnectors: ["ConnectorA", "ConnectorB"] + discoveredTimestamp: "2023-01-01T12:00:00Z" +items: + type: object + properties: + id: + type: string + format: uuid + description: Unique identifier for the discovered application. + example: 2d9180835d2e5168015d32f890ca1581 + name: + type: string + description: Name of the discovered application. + example: "ExampleApp" + discoverySource: + type: string + description: Source from which the application was discovered. + example: "CSV" + discoveredVendor: + type: string + description: The vendor associated with the discovered application. + example: "ExampleVendor" + description: + type: string + description: A brief description of the discovered application. + example: "An application for managing examples." + recommendedConnectors: + type: array + items: + type: string + description: List of recommended connectors for the application. + example: ["ConnectorA", "ConnectorB"] + discoveredTimestamp: + type: string + format: date-time + description: The timestamp when the application was discovered, in ISO 8601 format. + example: "2023-01-01T12:00:00Z" \ No newline at end of file diff --git a/static/api-specs/idn/beta/schemas/IdentityAttributePreview.yaml b/static/api-specs/idn/beta/schemas/IdentityAttributePreview.yaml index 4a746ae9b..0dd42d7f1 100644 --- a/static/api-specs/idn/beta/schemas/IdentityAttributePreview.yaml +++ b/static/api-specs/idn/beta/schemas/IdentityAttributePreview.yaml @@ -5,11 +5,11 @@ properties: description: Name of the attribute that is being previewed. example: email value: - type: object + type: string description: Value that was derived during the preview. example: email@mail.com previousValue: - type: object + type: string description: The value of the attribute before the preview. example: oldEmail@mail.com errorMessages: diff --git a/static/api-specs/idn/beta/schemas/ManagerCorrelationMapping.yaml b/static/api-specs/idn/beta/schemas/ManagerCorrelationMapping.yaml index 6ebdf4a8a..3c6a7807d 100644 --- a/static/api-specs/idn/beta/schemas/ManagerCorrelationMapping.yaml +++ b/static/api-specs/idn/beta/schemas/ManagerCorrelationMapping.yaml @@ -1,12 +1,12 @@ type: object properties: - accountAttribute: + accountAttributeName: type: string description: >- Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity. example: "manager" - identityAttribute: + identityAttributeName: type: string description: >- Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute. diff --git a/static/api-specs/idn/beta/schemas/ManualDiscoverApplications.yaml b/static/api-specs/idn/beta/schemas/ManualDiscoverApplications.yaml new file mode 100644 index 000000000..73f8908f6 --- /dev/null +++ b/static/api-specs/idn/beta/schemas/ManualDiscoverApplications.yaml @@ -0,0 +1,12 @@ +type: object +properties: + file: + type: string + format: binary + description: The CSV file to upload containing `application_name` and `description` columns. Each row represents an application to be discovered. + example: |- + application_name,description + "Sample App","This is a sample description for Sample App." + "Another App","Description for Another App." +required: + - file diff --git a/static/api-specs/idn/beta/schemas/ManualDiscoverApplicationsTemplate.yaml b/static/api-specs/idn/beta/schemas/ManualDiscoverApplicationsTemplate.yaml new file mode 100644 index 000000000..68ced4509 --- /dev/null +++ b/static/api-specs/idn/beta/schemas/ManualDiscoverApplicationsTemplate.yaml @@ -0,0 +1,10 @@ +type: object +properties: + application_name: + type: string + description: Name of the example application. + example: "Example Application" + domain: + type: string + description: Description of the example application's domain. + example: "Example Description" diff --git a/static/api-specs/idn/beta/schemas/Source.yaml b/static/api-specs/idn/beta/schemas/Source.yaml index 4dc20414f..9c8119b80 100644 --- a/static/api-specs/idn/beta/schemas/Source.yaml +++ b/static/api-specs/idn/beta/schemas/Source.yaml @@ -303,6 +303,19 @@ properties: description: The date-time when the source was last modified format: date-time example: 2024-01-23T18:08:50.897Z + credentialProviderEnabled: + type: boolean + description: >- + Enables credential provider for this source. If credentialProvider is turned on + then source can use credential provider(s) to fetch credentials. + default: false + example: false + category: + type: string + nullable: true + default: null + description: The category of source (e.g. null, CredentialProvider) + example: "CredentialProvider" required: - name - owner diff --git a/static/api-specs/idn/beta/schemas/SystemNotificationConfigDto.yaml b/static/api-specs/idn/beta/schemas/SystemNotificationConfigDto.yaml new file mode 100644 index 000000000..8e372bc07 --- /dev/null +++ b/static/api-specs/idn/beta/schemas/SystemNotificationConfigDto.yaml @@ -0,0 +1,16 @@ +type: object +description: >- + Configures System Notification preferences +properties: + recipientType: + type: string + description: Determines which recipients will recieve System Notifications. ALL_ADMINS will send System Notifications to + all ORG_ADMIN email addresses. OVERRIDE_EMAILS will send to the emails in `overrideEmails`. + example: "ALL_ADMINS" + enum: + - ALL_ADMINS + - OVERRIDE_EMAILS + overrideEmails: + type: array + description: List of valid email addresses that System Notifications will be sent to when `recipientType` is OVERRIDE_EMAILS. + example: ["notified1@example.com", "notified2@example.com"] diff --git a/static/api-specs/idn/beta/schemas/VendorConnectorMapping.yaml b/static/api-specs/idn/beta/schemas/VendorConnectorMapping.yaml new file mode 100644 index 000000000..40b9dc13d --- /dev/null +++ b/static/api-specs/idn/beta/schemas/VendorConnectorMapping.yaml @@ -0,0 +1,81 @@ +type: object +properties: + id: + type: string + description: The unique identifier for the vendor-connector mapping. + example: "78733556-9ea3-4f59-bf69-e5cd92b011b4" + vendor: + type: string + description: The name of the vendor. + example: "Example vendor" + connector: + type: string + description: The name of the connector. + example: "Example connector" + createdAt: + type: string + format: date-time + description: The creation timestamp of the mapping. + example: "2024-03-13T12:56:19.391294Z" + createdBy: + type: string + description: The identifier of the user who created the mapping. + example: "admin" + updatedAt: + type: object + nullable: true + properties: + Time: + type: string + format: date-time + description: The timestamp when the mapping was last updated, represented in ISO 8601 format. + example: "2024-03-14T12:56:19.391294Z" + Valid: + type: boolean + description: A flag indicating if the 'Time' field is set and valid. + default: false + example: true + description: An object representing the nullable timestamp of the last update. + updatedBy: + type: object + nullable: true + properties: + String: + type: string + description: The identifier of the user who last updated the mapping, if available. + example: "user-67891" + Valid: + type: boolean + description: A flag indicating if the 'String' field is set and valid. + default: false + example: true + description: An object representing the nullable identifier of the user who last updated the mapping. + deletedAt: + type: object + nullable: true + properties: + Time: + type: string + format: date-time + description: The timestamp when the mapping was deleted, represented in ISO 8601 format, if applicable. + example: "0001-01-01T00:00:00Z" + Valid: + type: boolean + description: A flag indicating if the 'Time' field is set and valid, i.e., if the mapping has been deleted. + default: false + example: false + description: An object representing the nullable timestamp of when the mapping was deleted. + deletedBy: + type: object + nullable: true + properties: + String: + type: string + description: The identifier of the user who deleted the mapping, if applicable. + example: "" + Valid: + type: boolean + description: A flag indicating if the 'String' field is set and valid, i.e., if the mapping has been deleted. + default: false + example: false + description: An object representing the nullable identifier of the user who deleted the mapping. diff --git a/static/api-specs/idn/beta/schemas/workgroups/WorkgroupDto.yaml b/static/api-specs/idn/beta/schemas/workgroups/WorkgroupDto.yaml index 9baa84d63..25b872d57 100644 --- a/static/api-specs/idn/beta/schemas/workgroups/WorkgroupDto.yaml +++ b/static/api-specs/idn/beta/schemas/workgroups/WorkgroupDto.yaml @@ -1,8 +1,21 @@ type: object properties: owner: - $ref: '../../../v3/schemas/OwnerDto.yaml' - description: Governance group owner. + allOf: + - $ref: '../../../v3/schemas/OwnerDto.yaml' + - type: object + properties: + displayName: + readOnly: true + description: The display name of the identity + type: string + example: Support + emailAddress: + readOnly: true + description: The primary email address of the identity + type: string + example: support@sailpoint.com + description: Governance group owner. id: type: string description: Governance group ID. @@ -27,4 +40,4 @@ properties: format: int64 example: 1641498673000 description: Number of connections in the governance group. - readOnly: true \ No newline at end of file + readOnly: true diff --git a/static/api-specs/idn/sailpoint-api.beta.yaml b/static/api-specs/idn/sailpoint-api.beta.yaml index 4dc833323..dab332467 100644 --- a/static/api-specs/idn/sailpoint-api.beta.yaml +++ b/static/api-specs/idn/sailpoint-api.beta.yaml @@ -1,7 +1,7 @@ openapi: 3.0.1 info: - title: IdentityNow Beta API - description: "Use these APIs to interact with the IdentityNow platform to achieve repeatable, automated processes with greater scalability. These APIs are in beta and are subject to change. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs." + title: Identity Security Cloud Beta API + description: "Use these APIs to interact with the Identity Security Cloud platform to achieve repeatable, automated processes with greater scalability. These APIs are in beta and are subject to change. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs." termsOfService: https://developer.sailpoint.com/discuss/tos contact: name: Developer Relations @@ -27,11 +27,11 @@ tags: - name: Access Profiles description: | Use this API to implement and customize access profile functionality. - With this functionality in place, administrators can create access profiles and configure them for use throughout IdentityNow, enabling users to get the access they need quickly and securely. + With this functionality in place, administrators can create access profiles and configure them for use throughout Identity Security Cloud, enabling users to get the access they need quickly and securely. Access profiles group entitlements, which represent access rights on sources. - For example, an Active Directory source in IdentityNow can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. + For example, an Active Directory source in Identity Security Cloud can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. An administrator can then create a broader set of access in the form of an access profile, 'AD Developers' grouping the 'Employees' entitlement with the 'Developers' entitlement. @@ -39,7 +39,7 @@ tags: When users need both Active Directory employee and developer access, they can request access to the 'AD Developers' access profile. - Access profiles are the most important units of access in IdentityNow. IdentityNow uses access profiles in many features, including the following: + Access profiles are the most important units of access in Identity Security Cloud. Identity Security Cloud uses access profiles in many features, including the following: - Provisioning: When you use the Provisioning Service, lifecycle states and roles both grant access to users in the form of access profiles. @@ -49,7 +49,7 @@ tags: - Roles: You can group one or more access profiles into a role to quickly assign access items based on an identity's role. - In IdentityNow, administrators can use the Access drop-down menu and select Access Profiles to view, configure, and delete existing access profiles, as well as create new ones. + In Identity Security Cloud, administrators can use the Access drop-down menu and select Access Profiles to view, configure, and delete existing access profiles, as well as create new ones. Administrators can enable and disable an access profile, and they can also make the following configurations: - Manage Entitlements: Manage the profile's access by adding and removing entitlements. @@ -57,60 +57,89 @@ tags: - Access Requests: Configure access profiles to be requestable and establish an approval process for any requests that the access profile be granted or revoked. Do not configure an access profile to be requestable without first establishing a secure access request approval process for the access profile. - - Multiple Account Options: Define the logic IdentityNow uses to provision access to an identity with multiple accounts on the source. + - Multiple Account Options: Define the logic Identity Security Cloud uses to provision access to an identity with multiple accounts on the source. Refer to [Managing Access Profiles](https://documentation.sailpoint.com/saas/help/access/access-profiles.html) for more information about access profiles. - - name: Access Request Approvals - description: | - Use this API to implement and customize access request approval functionality. - With this functionality in place, administrators can delegate qualified users to review users' requests for access or managers' requests to revoke team members' access to applications, entitlements, or roles. - This enables more qualified users to review access requests and the others to spend their time on other tasks. - - In IdentityNow, users can request access to applications, entitlements, and roles, and managers can request that team members' access be revoked. - For applications and entitlements, administrators can set access profiles to require approval from the access profile owner, the application owner, the source owner, the requesting user's manager, or a governance group for access to be granted or revoked. - For roles, administrators can also set roles to allow access requests and require approval from the role owner, the requesting user's manager, or a governance group for access to be granted or revoked. - If the administrator designates a governance group as the required approver, any governance group member can approve the requests. - - When a user submits an access request, IdentityNow sends the first required approver in the queue an email notification, based on the access request configuration's approval and reminder escalation configuration. - - In Approvals in IdentityNow, required approvers can view pending access requests under the Requested tab and approve or deny them, or the approvers can reassign the requests to different reviewers for approval. - If the required approver approves the request and is the only reviewer required, IdentityNow grants or revokes access, based on the request. - If multiple reviewers are required, IdentityNow sends the request to the next reviewer in the queue, based on the access request configuration's approval reminder and escalation configuration. - The required approver can then view any completed access requests under the Reviewed tab. - - Refer to [Access Requests](https://documentation.sailpoint.com/saas/help/requests/index.html) for more information about access request approvals. - name: Access Requests description: | Use this API to implement and customize access request functionality. With this functionality in place, users can request access to applications, entitlements, or roles, and managers can request that team members' access be revoked. This allows users to get access to the tools they need quickly and securely, and it allows managers to take away access to those tools. - IdentityNow's Access Request service allows end users to request access that requires approval before it can be granted to users and enables qualified users to review those requests and approve or deny them. + Identity Security Cloud's Access Request service allows end users to request access that requires approval before it can be granted to users and enables qualified users to review those requests and approve or deny them. - In the Request Center in IdentityNow, users can view available applications, roles, and entitlements and request access to them. + In the Request Center in Identity Security Cloud, users can view available applications, roles, and entitlements and request access to them. If the requested tools requires approval, the requests appear as 'Pending' under the My Requests tab until the required approver approves, rejects, or cancels them. Users can use My Requests to track and/or cancel the requests. - In My Team on the IdentityNow Home, managers can submit requests to revoke their team members' access. + In My Team on the Identity Security Cloud Home, managers can submit requests to revoke their team members' access. They can use the My Requests tab under Request Center to track and/or cancel the requests. Refer to [Requesting Access](https://documentation.sailpoint.com/saas/user-help/requests/requesting_access.html) for more information about access requests. + - name: Access Request Approvals + description: | + Use this API to implement and customize access request approval functionality. + With this functionality in place, administrators can delegate qualified users to review users' requests for access or managers' requests to revoke team members' access to applications, entitlements, or roles. + This enables more qualified users to review access requests and the others to spend their time on other tasks. + + In Identity Security Cloud, users can request access to applications, entitlements, and roles, and managers can request that team members' access be revoked. + For applications and entitlements, administrators can set access profiles to require approval from the access profile owner, the application owner, the source owner, the requesting user's manager, or a governance group for access to be granted or revoked. + For roles, administrators can also set roles to allow access requests and require approval from the role owner, the requesting user's manager, or a governance group for access to be granted or revoked. + If the administrator designates a governance group as the required approver, any governance group member can approve the requests. + + When a user submits an access request, Identity Security Cloud sends the first required approver in the queue an email notification, based on the access request configuration's approval and reminder escalation configuration. + + In Approvals in Identity Security Cloud, required approvers can view pending access requests under the Requested tab and approve or deny them, or the approvers can reassign the requests to different reviewers for approval. + If the required approver approves the request and is the only reviewer required, Identity Security Cloud grants or revokes access, based on the request. + If multiple reviewers are required, Identity Security Cloud sends the request to the next reviewer in the queue, based on the access request configuration's approval reminder and escalation configuration. + The required approver can then view any completed access requests under the Reviewed tab. + + Refer to [Access Requests](https://documentation.sailpoint.com/saas/help/requests/index.html) for more information about access request approvals. - name: Access Request Identity Metrics description: | Use this API to implement access request identity metrics functionality. With this functionality in place, access request reviewers can see relevant details about the requested access item and associated source activity. This allows reviewers to see how many of the identities who share a manager with the access requester have this same type of access and how many of them have had activity in the related source. This additional context about whether the access has been granted before and how often it has been used can help those approving access requests make more informed decisions. + - name: Accounts + description: | + Use this API to implement and customize account functionality. + With this functionality in place, administrators can manage users' access across sources in Identity Security Cloud. + + In Identity Security Cloud, an account refers to a user's account on a supported source. + This typically includes a unique identifier for the user, a unique password, a set of permissions associated with the source and a set of attributes. Identity Security Cloud loads accounts through the creation of sources in Identity Security Cloud. + + Administrators can correlate users' identities with the users' accounts on the different sources they use. + This allows Identity Security Cloud to govern the access of identities and all their correlated accounts securely and cohesively. + + To view the accounts on a source and their correlated identities, administrators can use the Connections drop-down menu, select Sources, select the relevant source, and select its Account tab. + + To view and edit source account statuses for an identity in Identity Security Cloud, administrators can use the Identities drop-down menu, select Identity List, select the relevant identity, and select its Accounts tab. + Administrators can toggle an account's Actions to aggregate the account, enable/disable it, unlock it, or remove it from the identity. + + Accounts can have the following statuses: + + - Enabled: The account is enabled. The user can access it. + + - Disabled: The account is disabled, and the user cannot access it, but the identity is not disabled in Identity Security Cloud. This can occur when an administrator disables the account or when the user's lifecycle state changes. + + - Locked: The account is locked. This may occur when someone has entered an incorrect password for the account too many times. + + - Pending: The account is currently updating. This status typically lasts seconds. + + Administrators can select the source account to view its attributes, entitlements, and the last time the account's password was changed. + + Refer to [Managing User Accounts](https://documentation.sailpoint.com/saas/help/common/users/user_access.html#managing-user-accounts) for more information about accounts. - name: Account Activities description: | Use this API to implement account activity tracking functionality. - With this functionality in place, users can track source account activity in IdentityNow, which greatly improves traceability in the system. + With this functionality in place, users can track source account activity in Identity Security Cloud, which greatly improves traceability in the system. An account activity refers to a log of each action performed on a source account. This is useful for auditing the changes that occur on an account throughout its life. - In IdentityNow's Search, users can search for account activities and select the activity's row to get an overview of the activity's account action and view its progress, its involved sources, and its most basic metadata, such as the identity requesting the option and the recipient. + In Identity Security Cloud's Search, users can search for account activities and select the activity's row to get an overview of the activity's account action and view its progress, its involved sources, and its most basic metadata, such as the identity requesting the option and the recipient. - Account activity includes most actions IdentityNow completes on source accounts. Users can search in IdentityNow for the following account action types: + Account activity includes most actions Identity Security Cloud completes on source accounts. Users can search in Identity Security Cloud for the following account action types: - Access Request: These include any access requests the source account is involved in. @@ -121,14 +150,14 @@ tags: - Certification: These include actions removing an entitlement from an account on a source as a result of the entitlement's revocation during a certification. - Cloud Automated `Lifecyclestate`: These include automated lifecycle state changes that result in a source account's correlated identity being assigned to a different lifecycle state. - IdentityNow replaces the `Lifecyclestate` variable with the name of the lifecycle state it has moved the account's identity to. + Identity Security Cloud replaces the `Lifecyclestate` variable with the name of the lifecycle state it has moved the account's identity to. - Identity Attribute Update: These include updates to a source account's correlated identity attributes as the result of a provisioning action. When you update an identity attribute that also updates an identity's lifecycle state, the cloud automated `Lifecyclestate` event also displays. Account Activity does not include attribute updates that occur as a result of aggregation. - Identity Refresh: These include correlated identity refreshes that occur for an account on a source whenever the account's correlated identity profile gets a new role or updates. - These also include refreshes that occur whenever IdentityNow assigns an application to the account's correlated identity based on the application's being assigned to All Users From Source or Specific Users From Source. + These also include refreshes that occur whenever Identity Security Cloud assigns an application to the account's correlated identity based on the application's being assigned to All Users From Source or Specific Users From Source. - Lifecycle State Refresh: These include the actions that took place when a lifecycle state changed. This event only occurs after a cloud automated `Lifecyclestate` change or a lifecycle state change. @@ -142,9 +171,9 @@ tags: Use this API to implement account aggregation progress tracking functionality. With this functionality in place, administrators can view in-progress account aggregations, their statuses, and their relevant details. - An account aggregation refers to the process IdentityNow uses to gather and load account data from a source into IdentityNow. + An account aggregation refers to the process Identity Security Cloud uses to gather and load account data from a source into Identity Security Cloud. - Whenever IdentityNow is in the process of aggregating a source, it adds an entry to the Aggregation Activity Log, along with its relevant details. + Whenever Identity Security Cloud is in the process of aggregating a source, it adds an entry to the Aggregation Activity Log, along with its relevant details. To view aggregation activity, administrators can select the Connections drop-down menu, select Sources, and select the relevant source, select its Import Data tab, and select Account Aggregation. In Account Aggregation, administrators can view the account aggregations' statuses and details in the Account Activity Log. @@ -154,68 +183,61 @@ tags: Use this API to implement account usage insight functionality. With this functionality in place, administrators can gather information and insights about how their tenants' source accounts are being used. This allows organizations to get the information they need to start optimizing and securing source account usage. - - name: Accounts + - name: Auth Profile description: | - Use this API to implement and customize account functionality. - With this functionality in place, administrators can manage users' access across sources in IdentityNow. + Auth Profile - Represents authentication configuration for an Identity Profile. This object gets created when an Identity Profile is created. - In IdentityNow, an account refers to a user's account on a supported source. - This typically includes a unique identifier for the user, a unique password, a set of permissions associated with the source and a set of attributes. IdentityNow loads accounts through the creation of sources in IdentityNow. + APIs can be used to retrieve and update Auth Profiles. + - name: Certifications + description: | + Use this API to implement certification functionality. + This API provides specific functionality that improves an organization's ability to manage its certification process. - Administrators can correlate users' identities with the users' accounts on the different sources they use. - This allows IdentityNow to govern the access of identities and all their correlated accounts securely and cohesively. + A certification refers to Identity Security Cloud's mechanism for reviewing a user's access to entitlements (sets of permissions) and approving or removing that access. + These certifications serve as a way of showing that a user's access has been reviewed and approved. + Multiple certifications by different reviewers are often required to approve a user's access. + A set of multiple certifications is called a certification campaign. - To view the accounts on a source and their correlated identities, administrators can use the Connections drop-down menu, select Sources, select the relevant source, and select its Account tab. + For example, an organization may use a Manager Certification as a way of showing that a user's access has been reviewed and approved by their manager, or if the certification is part of a campaign, that the user's access has been reviewed and approved by multiple managers. + Once this certification has been completed, Identity Security Cloud would provision all the access the user needs, nothing more. - To view and edit source account statuses for an identity in IdentityNow, administrators can use the Identities drop-down menu, select Identity List, select the relevant identity, and select its Accounts tab. - Administrators can toggle an account's Actions to aggregate the account, enable/disable it, unlock it, or remove it from the identity. - - Accounts can have the following statuses: - - - Enabled: The account is enabled. The user can access it. - - - Disabled: The account is disabled, and the user cannot access it, but the identity is not disabled in IdentityNow. This can occur when an administrator disables the account or when the user's lifecycle state changes. - - - Locked: The account is locked. This may occur when someone has entered an incorrect password for the account too many times. - - - Pending: The account is currently updating. This status typically lasts seconds. - - Administrators can select the source account to view its attributes, entitlements, and the last time the account's password was changed. + This API enables administrators and reviewers to get useful information about certifications at a high level, such as the reviewers involved, and at a more granular level, such as the permissions affected by changes to entitlements within those certifications. + It also provides the useful ability to reassign identities and items within certifications to other reviewers, rather than [reassigning the entire certifications themselves](https://developer.sailpoint.com/idn/api/beta/submit-reassign-certs-async/). Refer to [Managing User Accounts](https://documentation.sailpoint.com/saas/help/common/users/user_access.html#managing-user-accounts) for more information about accounts. - name: Certification Campaigns description: | Use this API to implement certification campaign functionality. With this functionality in place, administrators can create, customize, and manage certification campaigns for their organizations' use. - Certification campaigns provide IdentityNow users with an interactive review process they can use to identify and verify access to systems. + Certification campaigns provide Identity Security Cloud users with an interactive review process they can use to identify and verify access to systems. Campaigns help organizations reduce risk of inappropriate access and satisfy audit requirements. - A certification refers to IdentityNow's mechanism for reviewing a user's access to entitlements (sets of permissions) and approving or removing that access. + A certification refers to Identity Security Cloud's mechanism for reviewing a user's access to entitlements (sets of permissions) and approving or removing that access. These certifications serve as a way of showing that a user's access has been reviewed and approved. Multiple certifications by different reviewers are often required to approve a user's access. A set of multiple certifications is called a certification campaign. For example, an organization may use a Manager Certification campaign as a way of showing that a user's access has been reviewed and approved by multiple managers. - Once this campaign has been completed, IdentityNow would provision all the access the user needs, nothing more. + Once this campaign has been completed, Identity Security Cloud would provision all the access the user needs, nothing more. - IdentityNow provides two simple campaign types users can create without using search queries, Manager and Source Owner campaigns: + Identity Security Cloud provides two simple campaign types users can create without using search queries, Manager and Source Owner campaigns: - You can create these types of campaigns without using any search queries in IdentityNow: + You can create these types of campaigns without using any search queries in Identity Security Cloud: - - ManagerCampaign: IdentityNow provides this campaign type as a way to ensure that an identity's access is certified by their managers. + - ManagerCampaign: Identity Security Cloud provides this campaign type as a way to ensure that an identity's access is certified by their managers. You only need to provide a name and description to create one. - - Source Owner Campaign: IdentityNow provides this campaign type as a way to ensure that an identity's access to a source is certified by its source owners. + - Source Owner Campaign: Identity Security Cloud provides this campaign type as a way to ensure that an identity's access to a source is certified by its source owners. You only need to provide a name and description to create one. You can specify the sources whose owners you want involved or just run it across all sources. For more information about these campaign types, refer to [Starting a Manager or Source Owner Campaign](https://documentation.sailpoint.com/saas/help/certs/starting_campaign.html). - One useful way to create certification campaigns in IdentityNow is to use a specific search and then run a campaign on the results returned by that search. + One useful way to create certification campaigns in Identity Security Cloud is to use a specific search and then run a campaign on the results returned by that search. This allows you to be much more specific about whom you are certifying in your campaigns and what access you are certifying in your campaigns. For example, you can search for all identities who are managed by "Amanda.Ross" and also have the access to the "Accounting" role and then run a certification campaign based on that search to ensure that the returned identities are appropriately certified. - You can use IdentityNow search queries to create these types of campaigns: + You can use Identity Security Cloud search queries to create these types of campaigns: - Identities: Use this campaign type to review and revoke access items for specific identities. You can either build a search query and create a campaign certifying all identities returned by that query, or you can search for individual identities and add those identities to the certification campaign. @@ -226,7 +248,7 @@ tags: - Role Composition: Use this campaign type to review a role's composition, including its title, description, and membership criteria. You can either build a search query and create a campaign certifying all roles returned by that query, or you can search for individual roles and add those roles to the certification campaign. - - Uncorrelated Accounts: Use this campaign type to certify source accounts that aren't linked to an authoritative identity in IdentityNow. + - Uncorrelated Accounts: Use this campaign type to certify source accounts that aren't linked to an authoritative identity in Identity Security Cloud. You can use this campaign type to view all the uncorrelated accounts for a source and certify them. For more information about search-based campaigns, refer to [Starting a Campaign from Search](https://documentation.sailpoint.com/saas/help/certs/starting_search_campaign.html). @@ -234,7 +256,7 @@ tags: Once you have generated your campaign, it becomes available for preview. An administrator can review the campaign and make changes, or if it's ready and accurate, activate it. - Once the campaign is active, organization administrators or certification administrators can designate other IdentityNow users as certification reviewers. + Once the campaign is active, organization administrators or certification administrators can designate other Identity Security Cloud users as certification reviewers. Those reviewers can view any of the certifications they either need to review (active) or have already reviewed (completed). When a certification campaign is in progress, certification reviewers see the listed active certifications whose involved identities they can review. @@ -250,38 +272,23 @@ tags: The end of a certification campaign is determined by its deadline, its completion status, or by an administrator's decision. For more information about certifications and certification campaigns, refer to [Certifications](https://documentation.sailpoint.com/saas/user-help/certifications.html). - - name: Certifications - description: | - Use this API to implement certification functionality. - This API provides specific functionality that improves an organization's ability to manage its certification process. - - A certification refers to IdentityNow's mechanism for reviewing a user's access to entitlements (sets of permissions) and approving or removing that access. - These certifications serve as a way of showing that a user's access has been reviewed and approved. - Multiple certifications by different reviewers are often required to approve a user's access. - A set of multiple certifications is called a certification campaign. - - For example, an organization may use a Manager Certification as a way of showing that a user's access has been reviewed and approved by their manager, or if the certification is part of a campaign, that the user's access has been reviewed and approved by multiple managers. - Once this certification has been completed, IdentityNow would provision all the access the user needs, nothing more. - - This API enables administrators and reviewers to get useful information about certifications at a high level, such as the reviewers involved, and at a more granular level, such as the permissions affected by changes to entitlements within those certifications. - It also provides the useful ability to reassign identities and items within certifications to other reviewers, rather than [reassigning the entire certifications themselves](https://developer.sailpoint.com/idn/api/beta/submit-reassign-certs-async/). - - name: Connector Rule Management - name: Connectors description: | Use this API to implement connector functionality. With this functionality in place, administrators can view available connectors. - Connectors are the bridges IdentityNow uses to communicate with and aggregate data from sources. - For example, if it is necessary to set up a connection between IdentityNow and the Active Directory source, a connector can bridge the two and enable IdentityNow to synchronize data between the systems. + Connectors are the bridges Identity Security Cloud uses to communicate with and aggregate data from sources. + For example, if it is necessary to set up a connection between Identity Security Cloud and the Active Directory source, a connector can bridge the two and enable Identity Security Cloud to synchronize data between the systems. This ensures account entitlements and states are correct throughout the organization. - In IdentityNow, administrators can use the Connections drop-down menu and select Sources to view the available source connectors. + In Identity Security Cloud, administrators can use the Connections drop-down menu and select Sources to view the available source connectors. - Refer to [IdentityNow Connectors](https://documentation.sailpoint.com/connectors/identitynow/landingpages/help/landingpages/identitynow_connectivity_landing.html) for more information about the connectors available in IdentityNow. + Refer to [Identity Security Cloud Connectors](https://documentation.sailpoint.com/connectors/identitynow/landingpages/help/landingpages/identitynow_connectivity_landing.html) for more information about the connectors available in Identity Security Cloud. - Refer to [SaaS Connectivity](https://developer.sailpoint.com/idn/docs/saas-connectivity) for more information about the SaaS custom connectors that do not need VAs (virtual appliances) to communicate with their sources. + Refer to [SaaS Connectivity](https://developer.sailpoint.com/docs/connectivity/saas-connectivity) for more information about the SaaS custom connectors that do not need VAs (virtual appliances) to communicate with their sources. - Refer to [Managing Sources](https://documentation.sailpoint.com/saas/help/sources/managing_sources.html) for more information about using connectors in IdentityNow. + Refer to [Managing Sources](https://documentation.sailpoint.com/saas/help/sources/managing_sources.html) for more information about using connectors in Identity Security Cloud. + - name: Connector Rule Management - name: Custom Forms description: | Use this API to build and manage custom forms. @@ -291,32 +298,35 @@ tags: Forms can be used within workflows as an action or as a trigger. The Form Action allows you to assign a form as a step in a running workflow, suspending the workflow until the form is submitted or times out, and the workflow resumes. The Form Submitted Trigger initiates a workflow when a form is submitted. The trigger can be configured to initiate on submission of a full form, a form element with any value, or a form element with a particular value. - Refer to [Forms](https://documentation.sailpoint.com/saas/help/forms/index.html) for more information about using forms in IdentityNow. + Refer to [Forms](https://documentation.sailpoint.com/saas/help/forms/index.html) for more information about using forms in Identity Security Cloud. - name: Custom Password Instructions description: | Use this API to implement custom password instruction functionality. With this functionality in place, administrators can create custom password instructions to help users reset their passwords, change them, unlock their accounts, or recover their usernames. This allows administrators to emphasize password policies or provide organization-specific instructions. - Administrators must first use [Update Password Org Config](https://developer.sailpoint.com/idn/api/beta/put-password-org-config) to set `customInstructionsEnabled` to `true`. + Administrators must first use [Update Password Org Config](https://developer.sailpoint.com/docs/api/beta/put-password-org-config/) to set `customInstructionsEnabled` to `true`. - Once they have enabled custom instructions, they can use [Create Custom Password Instructions](https://developer.sailpoint.com/idn/api/beta/create-custom-password-instructions) to create custom page content for the specific pageId they select. + Once they have enabled custom instructions, they can use [Create Custom Password Instructions](https://developer.sailpoint.com/docs/api/beta/create-custom-password-instructions/) to create custom page content for the specific pageId they select. For example, an administrator can use the pageId forget-username:user-email to set the custom text for the case when users forget their usernames and must enter their emails. Refer to [Creating Custom Instruction Text](https://documentation.sailpoint.com/saas/help/pwd/pwd_reset.html#creating-custom-instruction-text) for more information about creating custom password instructions. + - name: Discovered Applications + description: | + Use this API to retrieve all the available discovered apps for a given tenant id. - name: Entitlements description: | Use this API to implement and customize entitlement functionality. - With this functionality in place, administrators can view entitlements and configure them for use throughout IdentityNow in certifications, access profiles, and roles. - Administrators in IdentityNow can then grant users access to the entitlements or configure them so users themselves can request access to the entitlements whenever they need them. + With this functionality in place, administrators can view entitlements and configure them for use throughout Identity Security Cloud in certifications, access profiles, and roles. + Administrators in Identity Security Cloud can then grant users access to the entitlements or configure them so users themselves can request access to the entitlements whenever they need them. With a good approval process, this entitlement functionality allows users to gain the specific access they need on sources quickly and securely. Entitlements represent access rights on sources. - Entitlements are the most granular form of access in IdentityNow. - Entitlements are often grouped into access profiles, and access profiles themselves are often grouped into roles, the broadest form of access in IdentityNow. + Entitlements are the most granular form of access in Identity Security Cloud. + Entitlements are often grouped into access profiles, and access profiles themselves are often grouped into roles, the broadest form of access in Identity Security Cloud. - For example, an Active Directory source in IdentityNow can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. + For example, an Active Directory source in Identity Security Cloud can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. An administrator can then create a broader set of access in the form of an access profile, 'AD Developers' grouping the 'Employees' entitlement with the 'Developers' entitlement. @@ -340,17 +350,17 @@ tags: - Type: This is the entitlement's type. Some sources support multiple types, each with a different attribute schema. - IdentityNow uses entitlements in many features, including the following: + Identity Security Cloud uses entitlements in many features, including the following: - Certifications: Entitlements can be revoked from an identity that no longer needs them. - Roles: Roles can group access profiles which themselves group entitlements. You can grant and revoke access on a broad level with roles. Role membership criteria can grant roles to identities based on whether they have certain entitlements or attributes. - Access Profiles: Access profiles group entitlements. - They are the most important units of access in IdentityNow. - IdentityNow uses them in provisioning, certifications, and access requests, and administrators can configure them to grant very broad or very granular access. + They are the most important units of access in Identity Security Cloud. + Identity Security Cloud uses them in provisioning, certifications, and access requests, and administrators can configure them to grant very broad or very granular access. - You cannot delete entitlements directly from IdentityNow. + You cannot delete entitlements directly from Identity Security Cloud. Entitlements are deleted based on their inclusion in aggregations. Refer to [Deleting Entitlements](https://documentation.sailpoint.com/saas/help/access/entitlements.html#deleting-entitlements) more information about deleting entitlements. @@ -358,30 +368,34 @@ tags: Refer to [Entitlements](https://documentation.sailpoint.com/saas/help/access/entitlements.html) for more information about entitlements. - name: Governance Groups description: | - Use this API to implement and customize Governance Group functionality. With this functionality in place, administrators can create Governance Groups and configure them for use throughout IdentityNow. + Use this API to implement and customize Governance Group functionality. With this functionality in place, administrators can create Governance Groups and configure them for use throughout Identity Security Cloud. A governance group is a group of users that can make governance decisions about access. If your organization has the Access Request or Certifications service, you can configure governance groups to review access requests or certifications. A governance group can determine whether specific access is appropriate for a user. - Refer to [Creating and Managing Governance Groups](https://documentation.sailpoint.com/saas/help/common/users/governance_groups.html) for more information about how to build Governance Groups in the visual builder in the IdentityNow UI. - - name: IAI Message Catalogs + Refer to [Creating and Managing Governance Groups](https://documentation.sailpoint.com/saas/help/common/users/governance_groups.html) for more information about how to build Governance Groups in the visual builder in the Identity Security Cloud UI. - name: IAI Access Request Recommendations - name: IAI Common Access + - name: IAI Message Catalogs - name: IAI Outliers - name: IAI Peer Group Strategies - name: IAI Recommendations - name: IAI Role Mining + - name: Icons + description: | + Use this API to implement functionality related to object icons (application icons for example). + With this functionality in place, administrators can set or remove an icon for specific object type for use throughout Identity Security Cloud. - name: Identities description: | Use this API to implement identity functionality. With this functionality in place, administrators can synchronize an identity's attributes with its various source attributes. - IdentityNow uses identities as users' authoritative accounts. Identities can own other accounts, entitlements, and attributes. + Identity Security Cloud uses identities as users' authoritative accounts. Identities can own other accounts, entitlements, and attributes. An identity has a variety of attributes, such as an account name, an email address, a job title, and more. These identity attributes can be correlated with different attributes on different sources. - For example, the identity John.Smith can own an account in the GitHub source with the account name John-Smith-Org, and IdentityNow knows they are the same person with the same access and attributes. + For example, the identity John.Smith can own an account in the GitHub source with the account name John-Smith-Org, and Identity Security Cloud knows they are the same person with the same access and attributes. - In IdentityNow, administrators often set up these synchronizations to get triggered automatically with a change or to run on a schedule. + In Identity Security Cloud, administrators often set up these synchronizations to get triggered automatically with a change or to run on a schedule. To manually synchronize attributes for an identity, administrators can use the Identities drop-down menu and select Identity List to view the list of identities. They can then select the identity they want to manually synchronize and use the hamburger menu to select 'Synchronize Attributes.' Doing so immediately begins the attribute synchronization and analyzes all accounts for the selected identity. @@ -392,12 +406,12 @@ tags: - name: Identity Profiles description: | Use this API to implement and customize identity profile functionality. - With this functionality in place, administrators can manage identity profiles and configure them for use by identities throughout IdentityNow. + With this functionality in place, administrators can manage identity profiles and configure them for use by identities throughout Identity Security Cloud. Identity profiles represent the configurations that can be applied to identities as a way of granting them a set of security and access, as well as defining the mappings between their identity attributes and their source attributes. This allows administrators to save time by applying identity profiles to any number of similar identities rather than configuring each one individually. - In IdentityNow, administrators can use the Identities drop-down menu and select Identity Profiles to view the list of identity profiles. + In Identity Security Cloud, administrators can use the Identities drop-down menu and select Identity Profiles to view the list of identity profiles. This list shows some details about each identity profile, along with its status. They can select an identity profile to view and modify its settings, its mappings between identity attributes and correlating source account attributes, and its provisioning settings. Administrators can also use this page to create new identity profiles or delete existing ones. @@ -407,14 +421,14 @@ tags: Use this API to implement and customize lifecycle state functionality. With this functionality in place, administrators can view and configure custom lifecycle states for use across their organizations, which is key to controlling which users have access, when they have access, and the access they have. - A lifecycle state describes a user's status in a company. For example, two lifecycle states come by default with IdentityNow: 'Active' and 'Inactive.' + A lifecycle state describes a user's status in a company. For example, two lifecycle states come by default with Identity Security Cloud: 'Active' and 'Inactive.' When an active employee takes an extended leave of absence from a company, his or her lifecycle state may change to 'Inactive,' for security purposes. The inactive employee would lose access to all the applications, sources, and sensitive data during the leave of absence, but when the employee returns and becomes active again, all that access would be restored. This saves administrators the time that would otherwise be spent provisioning the employee's access to each individual tool, reviewing the employee's certification history, etc. - Administrators must define the criteria for being in each lifecycle state, and they must define how IdentityNow manages users' access to apps and sources for each lifecycle state. + Administrators must define the criteria for being in each lifecycle state, and they must define how Identity Security Cloud manages users' access to apps and sources for each lifecycle state. - In IdentityNow, administrators can manage lifecycle states by going to Admin > Identities > Identity Profile, selecting the identity profile whose lifecycle states they want to manage, selecting the 'Provisioning' tab, and using the left panel to select the lifecycle state they want to modify. + In Identity Security Cloud, administrators can manage lifecycle states by going to Admin > Identities > Identity Profile, selecting the identity profile whose lifecycle states they want to manage, selecting the 'Provisioning' tab, and using the left panel to select the lifecycle state they want to modify. In the 'Provisioning' tab, administrators can make the following access changes to an identity profile's lifecycle state: @@ -430,10 +444,10 @@ tags: To maintain access across multiple lifecycle states, administrators must grant the access profiles in each lifecycle state. For example, if an administrator wants users with the 'HR Employee' identity profile to maintain their building access in both the 'Active' and 'Leave of Absence' lifecycle states, the administrator must grant the access profile for that building access to both lifecycle states. - During scheduled refreshes, IdentityNow evaluates lifecycle states to determine whether their assigned identities have the access defined in the lifecycle states' access profiles. - If the identities are missing access, IdentityNow provisions that access. + During scheduled refreshes, Identity Security Cloud evaluates lifecycle states to determine whether their assigned identities have the access defined in the lifecycle states' access profiles. + If the identities are missing access, Identity Security Cloud provisions that access. - Administrators can also use the 'Provisioning' tab to configure email notifications for IdentityNow to send whenever an identity with that identity profile has a lifecycle state change. + Administrators can also use the 'Provisioning' tab to configure email notifications for Identity Security Cloud to send whenever an identity with that identity profile has a lifecycle state change. Refer to [Configuring Lifecycle State Notifications](https://documentation.sailpoint.com/saas/help/provisioning/lifecycle.html#configuring-lifecycle-state-notifications) for more information on how to do so. An identity's lifecycle state can have four different statuses: the lifecycle state's status can be 'Active,' it can be 'Not Set,' it can be 'Not Valid,' or it 'Does Not Match Technical Name Case.' @@ -444,6 +458,12 @@ tags: description: Read and write operations for managing client data and statuses - name: Managed Clusters description: Operations for accessing and managing client Clusters, including Log Configuration + - name: Manual Discover Applications + description: | + Use this API to manually upload application names to be correlated to an ISC connector. + - name: Manual Discover Applications Template + description: | + Use this API to download the CSV template to send to the application discovery service. - name: MFA Configuration description: Configure and test multifactor authentication (MFA) methods - name: MFA Controller @@ -455,23 +475,23 @@ tags: This allows organizations to provide secure access to non-employees and control that access. The 'non-employee' term refers to any consultant, contractor, intern, or other user in an organization who is not a full-time permanent employee. - Organizations can track non-employees' access and activity in IdentityNow by creating and maintaining non-employee sources. + Organizations can track non-employees' access and activity in Identity Security Cloud by creating and maintaining non-employee sources. Organizations can have a maximum of 50 non-employee sources. By using SailPoint's Non-Employee Lifecycle Management functionality, you agree to the following: - SailPoint is not responsible for storing sensitive data. - You may only add account attributes to non-employee identities that are necessary for business operations and are consistent with your contractual limitations on data that may be sent or stored in IdentityNow. + You may only add account attributes to non-employee identities that are necessary for business operations and are consistent with your contractual limitations on data that may be sent or stored in Identity Security Cloud. - You are responsible for regularly downloading your list of non-employee accounts for all the sources you create and storing this list of accounts in a managed location to maintain an authoritative system of record and backup data for these accounts. - To manage non-employees in IdentityNow, administrators must create a non-employee source and add accounts to the source. + To manage non-employees in Identity Security Cloud, administrators must create a non-employee source and add accounts to the source. - To create a non-employee source in IdentityNow, administrators must use the Admin panel to go to Connections > Sources. + To create a non-employee source in Identity Security Cloud, administrators must use the Admin panel to go to Connections > Sources. They must then specify 'Non-Employee' in the 'Source Type' field. Refer to [Creating a Non-Employee Source](https://documentation.sailpoint.com/saas/help/common/non-employee-mgmt.html#creating-a-non-employee-source) for more details about how to create non-employee sources. - To add accounts to a non-employee source in IdentityNow, administrators can select the non-employee source and add the accounts. + To add accounts to a non-employee source in Identity Security Cloud, administrators can select the non-employee source and add the accounts. They can also use the 'Manage Non-Employees' widget on their user dashboards to reach the list of sources and then select the non-employee source they want to add the accounts to. Administrators can either add accounts individually or in bulk. Each non-employee source can have a maximum of 20,000 accounts. @@ -485,8 +505,8 @@ tags: - name: OAuth Clients description: | Use this API to implement OAuth client functionality. - With this functionality in place, users with the appropriate security scopes can create and configure OAuth clients to use as a way to obtain authorization to use the IdentityNow REST API. - Refer to [Authentication](https://developer.sailpoint.com/idn/api/authentication) for more information about OAuth and how it works with the IdentityNow REST API. + With this functionality in place, users with the appropriate security scopes can create and configure OAuth clients to use as a way to obtain authorization to use the Identity Security Cloud REST API. + Refer to [Authentication](https://developer.sailpoint.com/docs/api/authentication/) for more information about OAuth and how it works with the Identity Security Cloud REST API. - name: Org Config description: Operations for managing org configuration settings (eg. time zone) - name: Password Configuration @@ -541,7 +561,7 @@ tags: Refer to this list https://docs.oracle.com/cd/E13214_01/wli/docs92/xref/xqisocodes.html to see all the available ISO 639-1 language codes and ISO 3166-1 country codes. - - Upload the .txt file to IdentityNow with [Update Password Dictionary](https://developer.sailpoint.com/idn/api/beta/update-password-dictionary). Uploading a new file always overwrites the previous dictionary file. + - Upload the .txt file to Identity Security Cloud with [Update Password Dictionary](https://developer.sailpoint.com/docs/api/beta/put-password-dictionary). Uploading a new file always overwrites the previous dictionary file. Administrators can then specify which password policies check new passwords against the password dictionary by doing the following: In the Admin panel, they can use the Password Mgmt dropdown menu to select Policies, select the policy, and select the 'Prevent use of words in this site's password dictionary' checkbox beside it. @@ -551,7 +571,7 @@ tags: Use this API to implement password management functionality. With this functionality in place, users can manage their identity passwords for all their applications. - In IdentityNow, users can select their names in the upper right corner of the page and use the drop-down menu to select Password Manager. + In Identity Security Cloud, users can select their names in the upper right corner of the page and use the drop-down menu to select Password Manager. Password Manager lists the user's identity's applications, possibly grouped to share passwords. Users can then select 'Change Password' to update their passwords. @@ -583,18 +603,18 @@ tags: For example, an administrator can group the ActiveDirectory, GitHub, and G Suite sources together so that all those sources' applications can also be grouped to share a password. A user can then update his or her password for ActiveDirectory, GitHub, Gmail, Google Drive, and Google Calendar all at once, rather then updating each one individually. - The following are required for administrators to create a password sync group in IdentityNow: + The following are required for administrators to create a password sync group in Identity Security Cloud: - - At least two direct connect sources connected to IdentityNow and configured for Password Management. + - At least two direct connect sources connected to Identity Security Cloud and configured for Password Management. - Each authentication source in a sync group must have at least one application. Refer to [Adding and Resetting Application Passwords](https://documentation.sailpoint.com/saas/help/pwd/adv_config.html#adding-and-resetting-application-passwords) for more information about adding applications to sources. - At least one password policy. Refer to [Managing Password Policies](https://documentation.sailpoint.com/saas/help/pwd/policies.html) for more information about password policies. - In the Admin panel in IdentityNow, administrators can use the Password Mgmt dropdown menu to select Sync Groups. + In the Admin panel in Identity Security Cloud, administrators can use the Password Mgmt dropdown menu to select Sync Groups. To create a sync group, administrators must provide a name, choose a password policy to be enforced across the sources in the sync group, and select the sources to include in the sync group. - Administrators can also delete sync groups in IdentityNow, but they should know the following before they do: + Administrators can also delete sync groups in Identity Security Cloud, but they should know the following before they do: - Passwords related to the associated sources will become independent, so changing one will not change the others anymore. @@ -609,12 +629,12 @@ tags: - name: Personal Access Tokens description: | Use this API to implement personal access token (PAT) functionality. - With this functionality in place, users can use PATs as an alternative to passwords for authentication in IdentityNow. + With this functionality in place, users can use PATs as an alternative to passwords for authentication in Identity Security Cloud. PATs embed user information into the client ID and secret. - This replaces the API clients' need to store and provide a username and password to establish a connection, improving IdentityNow organizations' integration security. + This replaces the API clients' need to store and provide a username and password to establish a connection, improving Identity Security Cloud organizations' integration security. - In IdentityNow, users can do the following to create and manage their PATs: Select the dropdown menu under their names, select Preferences, and then select Personal Access Tokens. + In Identity Security Cloud, users can do the following to create and manage their PATs: Select the dropdown menu under their names, select Preferences, and then select Personal Access Tokens. They must then provide a description about the token's purpose. They can then select 'Create Token' at the bottom of the page to generate and view the Secret and Client ID. @@ -630,24 +650,23 @@ tags: Administrators can use this API to make those necessary identity attributes public to non-administrators. For example, a non-administrator deciding whether to approve another identity's request for access to the Workday application, whose access may be restricted to members of the HR department, would want to know whether the identity is a member of the HR department. - If an administrator has used [Update Public Identity Config](https://developer.sailpoint.com/idn/api/beta/update-public-identity-config) to make the "department" attribute public, the approver can see the department and make a decision without requesting any more information. + If an administrator has used [Update Public Identity Config](https://developer.sailpoint.com/docs/api/beta/update-public-identity-config/) to make the "department" attribute public, the approver can see the department and make a decision without requesting any more information. - name: Requestable Objects description: | Use this API to implement requestable object functionality. - With this functionality in place, administrators can determine which access items can be requested with the [Access Request APIs](https://developer.sailpoint.com/idn/api/beta/access-requests), along with their statuses. + With this functionality in place, administrators can determine which access items can be requested with the [Access Request APIs](https://developer.sailpoint.com/docs/api/beta/access-requests/), along with their statuses. This can be helpful for administrators who are implementing and customizing access request functionality as a way of checking which items are requestable as they are created, assigned, and made available. - - name: Role Insights - name: Roles description: | Use this API to implement and customize role functionality. - With this functionality in place, administrators can create roles and configure them for use throughout IdentityNow. - IdentityNow can use established criteria to automatically assign the roles to qualified users. This enables users to get all the access they need quickly and securely and administrators to spend their time on other tasks. + With this functionality in place, administrators can create roles and configure them for use throughout Identity Security Cloud. + Identity Security Cloud can use established criteria to automatically assign the roles to qualified users. This enables users to get all the access they need quickly and securely and administrators to spend their time on other tasks. - Entitlements represent the most granular level of access in IdentityNow. + Entitlements represent the most granular level of access in Identity Security Cloud. Access profiles represent the next level and often group entitlements. Roles represent the broadest level of access and often group access profiles. - For example, an Active Directory source in IdentityNow can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. + For example, an Active Directory source in Identity Security Cloud can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. An administrator can then create a broader set of access in the form of an access profile, 'AD Developers' grouping the 'Employees' entitlement with the 'Developers' entitlement. @@ -663,12 +682,12 @@ tags: For example, an organization's accountant can access all the tools the organization's accountants need with the 'Accountant' role. If the accountant switches to engineering, a qualified member of the organization can quickly revoke the accountant's 'Accountant' access and grant access to the 'Engineer' role instead, granting access to all the tools the organization's engineers need. - In IdentityNow, adminstrators can use the Access drop-down menu and select Roles to view, configure, and delete existing roles, as well as create new ones. + In Identity Security Cloud, adminstrators can use the Access drop-down menu and select Roles to view, configure, and delete existing roles, as well as create new ones. Administrators can enable and disable the role, and they can also make the following configurations: - Manage Access: Manage the role's access by adding or removing access profiles. - - Define Assignment: Define the criteria IdentityNow uses to assign the role to identities. + - Define Assignment: Define the criteria Identity Security Cloud uses to assign the role to identities. Use the first option, 'Standard Criteria,' to provide specific criteria for assignment like specific account attributes, entitlements, or identity attributes. Use the second, 'Identity List,' to specify the identities for assignment. @@ -676,6 +695,7 @@ tags: Do not configure a role to be requestable without establishing a secure access request approval process for that role first. Refer to [Working with Roles](https://documentation.sailpoint.com/saas/help/access/roles.html) for more information about roles. + - name: Role Insights - name: Search Attribute Configuration - name: Segments description: | @@ -687,7 +707,7 @@ tags: For example, administrators could group all their organization's London office employees into one segment, "London Office Employees," by their shared location. The administrators could then define the access items the London employees would need, and the identities in the "London Office Employees" would then only be able to see and access those items. - In IdentityNow, administrators can use the 'Access' drop-down menu and select 'Segments' to reach the 'Access Requests Segments' page. + In Identity Security Cloud, administrators can use the 'Access' drop-down menu and select 'Segments' to reach the 'Access Requests Segments' page. This page lists all the existing access request segments, along with their statuses, enabled or disabled. Administrators can use this page to create, edit, enable, disable, and delete segments. To create a segment, an administrator must provide a name, define the identities grouped in the segment, and define the items the identities in the segment can access. @@ -695,16 +715,16 @@ tags: When administrators use the API to create and manage segments, they use a JSON expression in the `visibilityCriteria` object to define the segment's identities and access items. - Refer to [Managing Access Request Segments](https://documentation.sailpoint.com/saas/help/requests/segments.html) for more information about segments in IdentityNow. + Refer to [Managing Access Request Segments](https://documentation.sailpoint.com/saas/help/requests/segments.html) for more information about segments in Identity Security Cloud. - name: Service Desk Integration description: | - Use this API to build an integration between IdentityNow and a service desk ITSM (IT service management) solution. - Once an administrator builds this integration between IdentityNow and a service desk, users can use IdentityNow to raise and track tickets that are synchronized between IdentityNow and the service desk. + Use this API to build an integration between Identity Security Cloud and a service desk ITSM (IT service management) solution. + Once an administrator builds this integration between Identity Security Cloud and a service desk, users can use Identity Security Cloud to raise and track tickets that are synchronized between Identity Security Cloud and the service desk. - In IdentityNow, administrators can create a service desk integration (sometimes also called an SDIM, or Service Desk Integration Module) by going to Admin > Connections > Service Desk and selecting 'Create.' + In Identity Security Cloud, administrators can create a service desk integration (sometimes also called an SDIM, or Service Desk Integration Module) by going to Admin > Connections > Service Desk and selecting 'Create.' To create a Generic Service Desk integration, for example, administrators must provide the required information on the General Settings page, the Connectivity and Authentication information, Ticket Creation information, Status Mapping information, and Requester Source information on the Configure page. - Refer to [Integrating SailPoint with Generic Service Desk](https://documentation.sailpoint.com/connectors/generic_sd/help/integrating_generic_service_desk/intro.html) for more information about the process of setting up a Generic Service Desk in IdentityNow. + Refer to [Integrating SailPoint with Generic Service Desk](https://documentation.sailpoint.com/connectors/generic_sd/help/integrating_generic_service_desk/intro.html) for more information about the process of setting up a Generic Service Desk in Identity Security Cloud. Administrators can create various service desk integrations, all with their own nuances. The following service desk integrations are available: @@ -722,7 +742,7 @@ tags: - [ServiceNow Service Desk](https://documentation.sailpoint.com/connectors/servicenow/sdim/help/integrating_servicenow_sdim/intro.html) - [Zendesk Service Desk](https://documentation.sailpoint.com/connectors/zendesk/help/integrating_zendesk_sd/introduction.html) - - name: SOD Policy + - name: SOD Policies description: | Use this API to implement and manage "separation of duties" (SOD) policies. With SOD policy functionality in place, administrators can organize the access in their tenants to prevent individuals from gaining conflicting or excessive access. @@ -734,7 +754,7 @@ tags: Organizations can use "separation of duties" (SOD) policies to enforce and track their internal security rules throughout their tenants. These SOD policies limit each user's involvement in important processes and protects the organization from individuals gaining excessive access. - To create SOD policies in IdentityNow, administrators use 'Search' and then access 'Policies'. + To create SOD policies in Identity Security Cloud, administrators use 'Search' and then access 'Policies'. To create a policy, they must configure two lists of access items. Each access item can only be added to one of the two lists. They can search for the entitlements they want to add to these access lists. @@ -744,12 +764,12 @@ tags: These violations are included in SOD violation reports that other users will see in emails at regular intervals if they're subscribed to the SOD policy. The other users can then better help to enforce these SOD policies. - To create a subscription to a SOD policy in IdentityNow, administrators use 'Search' and then access 'Layers'. + To create a subscription to a SOD policy in Identity Security Cloud, administrators use 'Search' and then access 'Layers'. They can create a subscription to the policy and schedule it to run at a regular interval. Refer to [Managing Policies](https://documentation.sailpoint.com/saas/help/sod/manage-policies.html) for more information about SOD policies. - Refer to [Subscribe to a SOD Policy](https://documentation.sailpoint.com/saas/help/sod/policy-violations.html#subscribe-to-an-sod-policy) for more information about SOD policy subscriptions. + Refer to [Subscribe to a SOD Policy](https://documentation.sailpoint.com/saas/help/sod/policy-violations.html#subscribe-to-an-sod-policy) for more information about SOD policy subscriptions. - name: SOD Violations description: | Use this API to check for current "separation of duties" (SOD) policy violations as well as potential future SOD policy violations. @@ -769,26 +789,21 @@ tags: Administrators can use the SOD violations APIs to check a set of identities for any current SOD violations, and they can use them to check whether adding an access item would potentially trigger a SOD violation. This second option is a good way to prevent SOD violations from triggering at all. - Refer to [Handling Policy Violations](https://documentation.sailpoint.com/saas/help/sod/policy-violations.html) for more information about SOD policy violations. - - name: Source Usages - description: | - Use this API to implement source usage insight functionality. - With this functionality in place, administrators can gather information and insights about how their tenants' sources are being used. - This allows organizations to get the information they need to start optimizing and securing source usage. + Refer to [Handling Policy Violations](https://documentation.sailpoint.com/saas/help/sod/policy-violations.html) for more information about SOD policy violations. - name: Sources description: | Use this API to implement and customize source functionality. - With source functionality in place, organizations can use IdentityNow to connect their various sources and user data sets and manage access across all those different sources in a secure, scalable way. + With source functionality in place, organizations can use Identity Security Cloud to connect their various sources and user data sets and manage access across all those different sources in a secure, scalable way. - [Sources](https://documentation.sailpoint.com/saas/help/sources/managing_sources.html) refer to the IdentityNow representations for external applications, databases, and directory management systems that maintain their own sets of users, like Dropbox, GitHub, and Workday, for example. + [Sources](https://documentation.sailpoint.com/saas/help/sources/managing_sources.html) refer to the Identity Security Cloud representations for external applications, databases, and directory management systems that maintain their own sets of users, like Dropbox, GitHub, and Workday, for example. Organizations may use hundreds, if not thousands, of different source systems, and any one employee within an organization likely has a different user record on each source, often with different permissions on many of those records. - Connecting these sources to IdentityNow makes it possible to manage user access across them all. - Then, if a new hire starts at an organization, IdentityNow can grant the new hire access to all the sources they need. - If an employee moves to a new department and needs access to new sources but no longer needs access to others, IdentityNow can grant the necessary access and revoke the unnecessary access for all the employee's various sources. - If an employee leaves the company, IdentityNow can revoke access to all the employee's various source accounts immediately. + Connecting these sources to Identity Security Cloud makes it possible to manage user access across them all. + Then, if a new hire starts at an organization, Identity Security Cloud can grant the new hire access to all the sources they need. + If an employee moves to a new department and needs access to new sources but no longer needs access to others, Identity Security Cloud can grant the necessary access and revoke the unnecessary access for all the employee's various sources. + If an employee leaves the company, Identity Security Cloud can revoke access to all the employee's various source accounts immediately. These are just a few examples of the many ways that source functionality makes identity governance easier, more efficient, and more secure. - In IdentityNow, administrators can create configure, manage, and edit sources, and they can designate other users as source admins to be able to do so. + In Identity Security Cloud, administrators can create configure, manage, and edit sources, and they can designate other users as source admins to be able to do so. They can also designate users as source sub-admins, who can perform the same source actions but only on sources associated with their governance groups. Admins go to Connections > Sources to see a list of the existing source representations in their organizations. They can create new sources or select existing ones. @@ -796,17 +811,17 @@ tags: To create a new source, the following must be specified: Source Name, Description, Source Owner, and Connection Type. Refer to [Configuring a Source](https://documentation.sailpoint.com/saas/help/accounts/loading_data.html#configuring-a-source) for more information about the source configuration process. - IdentityNow connects with its sources either by a direct communication with the source server (connection information specific to the source must be provided) or a flat file feed, a CSV file containing all the relevant information about the accounts to be loaded in. - Different sources use different connectors to share data with IdentityNow, and each connector's setup process is specific to that connector. + Identity Security Cloud connects with its sources either by a direct communication with the source server (connection information specific to the source must be provided) or a flat file feed, a CSV file containing all the relevant information about the accounts to be loaded in. + Different sources use different connectors to share data with Identity Security Cloud, and each connector's setup process is specific to that connector. SailPoint has built a number of connectors to come out of the box and connect to the most common sources, and SailPoint actively maintains these connectors. - Refer to [IdentityNow Connectors](https://documentation.sailpoint.com/connectors/identitynow/landingpages/help/landingpages/identitynow_connectivity_landing.html) for more information about these SailPoint supported connectors. + Refer to [Identity Security Cloud Connectors](https://documentation.sailpoint.com/connectors/identitynow/landingpages/help/landingpages/identitynow_connectivity_landing.html) for more information about these SailPoint supported connectors. Refer to the following links for more information about two useful connectors: - [JDBC Connector](https://documentation.sailpoint.com/connectors/jdbc/help/integrating_jdbc/introduction.html): This customizable connector an directly connect to databases that support JDBC (Java Database Connectivity). - [Web Services Connector](https://documentation.sailpoint.com/connectors/webservices/help/integrating_webservices/introduction.html): This connector can directly connect to databases that support Web Services. - Refer to [SaaS Connectivity](https://developer.sailpoint.com/idn/docs/saas-connectivity) for more information about SailPoint's new connectivity framework that makes it easy to build and manage custom connectors to SaaS sources. + Refer to [SaaS Connectivity](https://developer.sailpoint.com/docs/connectivity/saas-connectivity/) for more information about SailPoint's new connectivity framework that makes it easy to build and manage custom connectors to SaaS sources. When admins select existing sources, they can view the following information about the source: @@ -819,12 +834,12 @@ tags: - Associated access profiles (groupings of entitlements). The user account data and the entitlements update with each data aggregation from the source. - Organizations generally run scheduled, automated data aggregations to ensure that their data is always in sync between their sources and their IdentityNow tenants so an access change on a source is detected quickly in IdentityNow. + Organizations generally run scheduled, automated data aggregations to ensure that their data is always in sync between their sources and their Identity Security Cloud tenants so an access change on a source is detected quickly in Identity Security Cloud. Admins can view a history of these aggregations, and they can also run manual imports. Refer to [Loading Account Data](https://documentation.sailpoint.com/saas/help/accounts/loading_data.html) for more information about manual and scheduled aggregations. - Admins can also make changes to determine which user account data IdentityNow collects from the source and how it correlates that account data with identity data. - To define which account attributes the source shares with IdentityNow, admins can edit the account schema on the source. + Admins can also make changes to determine which user account data Identity Security Cloud collects from the source and how it correlates that account data with identity data. + To define which account attributes the source shares with Identity Security Cloud, admins can edit the account schema on the source. Refer to [Managing Source Account Schemas](https://documentation.sailpoint.com/saas/help/accounts/schema.html) for more information about source account schemas and how to edit them. To define the mapping between the source account attributes and their correlating identity attributes, admins can edit the correlation configuration on the source. Refer to [Assigning Source Accounts to Identities](https://documentation.sailpoint.com/saas/help/accounts/correlation.html) for more information about this correlation process between source accounts and identities. @@ -832,16 +847,21 @@ tags: Admins can also delete sources, but they must first ensure that the sources no longer have any active connections: the source must not be associated with any identity profile or any app, and it must not be referenced by any transform. Refer to [Deleting Sources](https://documentation.sailpoint.com/saas/help/sources/managing_sources.html#deleting-sources) for more information about deleting sources. - Well organized, mapped out connections between sources and IdentityNow are essential to achieving comprehensive identity access governance across all the source systems organizations need. + Well organized, mapped out connections between sources and Identity Security Cloud are essential to achieving comprehensive identity access governance across all the source systems organizations need. Refer to [Managing Sources](https://documentation.sailpoint.com/saas/help/sources/managing_sources.html) for more information about all the different things admins can do with sources once they are connected. + - name: Source Usages + description: | + Use this API to implement source usage insight functionality. + With this functionality in place, administrators can gather information and insights about how their tenants' sources are being used. + This allows organizations to get the information they need to start optimizing and securing source usage. - name: SP-Config description: Import and export configuration for some objects between tenants. - name: Tagged Objects description: | Use this API to implement object tagging functionality. - With object tagging functionality in place, any user in an organization can use tags as a way to group objects together and find them more quickly when the user searches IdentityNow. + With object tagging functionality in place, any user in an organization can use tags as a way to group objects together and find them more quickly when the user searches Identity Security Cloud. - In IdentityNow, users can search their tenants for information and add tags objects they find. + In Identity Security Cloud, users can search their tenants for information and add tags objects they find. Tagging an object provides users with a way of grouping objects together and makes it easier to find these objects in the future. For example, if a user is searching for an entitlement that grants a risky level of access to Active Directory, it's possible that the user may have to search through hundreds of entitlements to find the correct one. @@ -849,7 +869,7 @@ tags: The user can add the same tag to multiple objects the user wants to group together for an easy future search, and the user can also do so in bulk. When the user wants to find that tagged entitlement again, the user can search for "tags:AD_RISKY" to find all objects with that tag. - With the API, you can tag even more different object types than you can in IdentityNow (access profiles, entitlements, identities, and roles). + With the API, you can tag even more different object types than you can in Identity Security Cloud (access profiles, entitlements, identities, and roles). You can use the API to tag all these objects: - Access profiles @@ -878,7 +898,7 @@ tags: - You can have up to 10,000 tag associations, pairings of 1 tag to 1 object, in your tenant. - Because of these limits, it is recommended that you work with your governance experts and security teams to establish a list of tags that are most expressive of governance objects and access managed by IdentityNow. + Because of these limits, it is recommended that you work with your governance experts and security teams to establish a list of tags that are most expressive of governance objects and access managed by Identity Security Cloud. These are the types of information often expressed in tags: @@ -890,15 +910,15 @@ tags: - Risk levels - Refer to [Tagging Items in Search](https://documentation.sailpoint.com/saas/help/search/index.html?h=tags#tagging-items-in-search) for more information about tagging objects in IdentityNow. + Refer to [Tagging Items in Search](https://documentation.sailpoint.com/saas/help/search/index.html?h=tags#tagging-items-in-search) for more information about tagging objects in Identity Security Cloud. - name: Task Management - name: Tenant description: API for reading tenant details. - name: Transforms - description: Operations for creating, managing, and deleting transforms + description: Operations for creating, managing, and deleting transforms. - name: Triggers description: | - Event Triggers provide real-time updates to changes in IdentityNow so you can take action as soon as an event occurs, rather than poll an API endpoint for updates. IdentityNow provides a user interface within the admin console to create and manage trigger subscriptions. These endpoints allow for programatically creating and managing trigger subscriptions. + Event Triggers provide real-time updates to changes in Identity Security Cloud so you can take action as soon as an event occurs, rather than poll an API endpoint for updates. Identity Security Cloud provides a user interface within the admin console to create and manage trigger subscriptions. These endpoints allow for programatically creating and managing trigger subscriptions. There are two types of event triggers: * `FIRE_AND_FORGET`: This trigger type will send a payload to each subscriber without needing a response. Each trigger of this type has a limit of **50 subscriptions**. @@ -909,10 +929,10 @@ tags: | Name | ID | Type | Trigger condition | |-|-|-|-| - | [Access Request Dynamic Approval](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/access-request-dynamic-approval) | idn:access-request-dynamic-approver | REQUEST_RESPONSE |After an access request is submitted. Expects the subscriber to respond with the ID of an identity or workgroup to add to the approval workflow. | - | [Access Request Decision](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/access-request-decision) | idn:access-request-post-approval | FIRE_AND_FORGET | After an access request is approved. | - | [Access Request Submitted](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/access-request-submitted) | idn:access-request-pre-approval | REQUEST_RESPONSE | After an access request is submitted. Expects the subscriber to respond with an approval decision. | - | [Account Aggregation Completed](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/account-aggregation-completed) | idn:account-aggregation-completed | FIRE_AND_FORGET | After an account aggregation completed, terminated, failed. | + | [Access Request Dynamic Approval](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/access-request-dynamic-approval/) | idn:access-request-dynamic-approver | REQUEST_RESPONSE |After an access request is submitted. Expects the subscriber to respond with the ID of an identity or workgroup to add to the approval workflow. | + | [Access Request Decision](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/access-request-decision/) | idn:access-request-post-approval | FIRE_AND_FORGET | After an access request is approved. | + | [Access Request Submitted](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/access-request-submitted/) | idn:access-request-pre-approval | REQUEST_RESPONSE | After an access request is submitted. Expects the subscriber to respond with an approval decision. | + | [Account Aggregation Completed](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/account-aggregation-completed/) | idn:account-aggregation-completed | FIRE_AND_FORGET | After an account aggregation completed, terminated, failed. | | Account Attributes Changed | idn:account-attributes-changed | FIRE_AND_FORGET | After an account aggregation, and one or more account attributes have changed. | | Account Correlated | idn:account-correlated | FIRE_AND_FORGET | After an account is added to an identity. | | Accounts Collected for Aggregation | idn:aggregation-accounts-collected | FIRE_AND_FORGET | New, changed, and deleted accounts have been gathered during an aggregation and are being processed. | @@ -921,32 +941,35 @@ tags: | Campaign Ended | idn:campaign-ended | FIRE_AND_FORGET | After a campaign ends. | | Campaign Generated | idn:campaign-generated | FIRE_AND_FORGET | After a campaign finishes generating. | | Certification Signed Off | idn:certification-signed-off | FIRE_AND_FORGET | After a certification is signed off by its reviewer. | - | [Identity Attributes Changed](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/account-aggregation-completed) | idn:identity-attributes-changed | FIRE_AND_FORGET | After One or more identity attributes changed. | - | [Identity Created](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/identity-created) | idn:identity-created | FIRE_AND_FORGET | After an identity is created. | - | [Provisioning Action Completed](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/provisioning-completed) | idn:post-provisioning | FIRE_AND_FORGET | After a provisioning action completed on a source. | - | [Scheduled Search](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/scheduled-search) | idn:saved-search-complete | FIRE_AND_FORGET | After a scheduled search completed. | - | [Source Created](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/source-created) | idn:source-created | FIRE_AND_FORGET | After a source is created. | - | [Source Deleted](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/source-deleted) | idn:source-deleted | FIRE_AND_FORGET | After a source is deleted. | - | [Source Updated](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/source-updated) | idn:source-updated | FIRE_AND_FORGET | After configuration changes have been made to a source. | - | [VA Cluster Status Change](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/va-cluster-status-change) | idn:va-cluster-status-change | FIRE_AND_FORGET | After the status of a VA cluster has changed. | + | [Identity Attributes Changed](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/account-aggregation-completed/) | idn:identity-attributes-changed | FIRE_AND_FORGET | After One or more identity attributes changed. | + | [Identity Created](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/identity-created/) | idn:identity-created | FIRE_AND_FORGET | After an identity is created. | + | [Provisioning Action Completed](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/provisioning-completed/) | idn:post-provisioning | FIRE_AND_FORGET | After a provisioning action completed on a source. | + | [Scheduled Search](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/scheduled-search/) | idn:saved-search-complete | FIRE_AND_FORGET | After a scheduled search completed. | + | [Source Created](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/source-created/) | idn:source-created | FIRE_AND_FORGET | After a source is created. | + | [Source Deleted](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/source-deleted/) | idn:source-deleted | FIRE_AND_FORGET | After a source is deleted. | + | [Source Updated](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/source-updated/) | idn:source-updated | FIRE_AND_FORGET | After configuration changes have been made to a source. | + | [VA Cluster Status Change](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/va-cluster-status-change/) | idn:va-cluster-status-change | FIRE_AND_FORGET | After the status of a VA cluster has changed. | ## Early Access Event Triggers Triggers that are in-development and not ready for production use. Please contact support to enable these triggers in your tenant. | Name | ID | Type | Trigger condition | |-|-|-|-| - | [Identity Deleted](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/identity-deleted) | idn:identity-deleted | FIRE_AND_FORGET | After an identity is deleted. | - | [Source Account Created](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/source-account-created) | idn:source-account-created | FIRE_AND_FORGET | After a source account is created. | - | [Source Account Deleted](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/source-account-deleted) | idn:source-account-deleted | FIRE_AND_FORGET | After a source account is deleted. | - | [Source Account Updated](https://developer.sailpoint.com/idn/docs/event-triggers/triggers/source-account-updated) | idn:source-account-updated | FIRE_AND_FORGET | After a source account is changed. | + | [Identity Deleted](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/identity-deleted/) | idn:identity-deleted | FIRE_AND_FORGET | After an identity is deleted. | + | [Source Account Created](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/source-account-created/) | idn:source-account-created | FIRE_AND_FORGET | After a source account is created. | + | [Source Account Deleted](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/source-account-deleted/) | idn:source-account-deleted | FIRE_AND_FORGET | After a source account is deleted. | + | [Source Account Updated](https://developer.sailpoint.com/docs/extensibility/event-triggers/triggers/source-account-updated/) | idn:source-account-updated | FIRE_AND_FORGET | After a source account is changed. | - Refer to [Event Triggers](https://developer.sailpoint.com/idn/docs/event-triggers/) for more information about event triggers. + Refer to [Event Triggers](https://developer.sailpoint.com/docs/extensibility/event-triggers/) for more information about event triggers. + - name: Vendor Connector Mappings + description: | + Use this API to manage mappings between various SaaS vendors and Identity Security Cloud (ISC) connectors. - name: Work Items description: | Use this API to implement work item functionality. With this functionality in place, users can manage their work items (tasks). - Work items refer to the tasks users see in IdentityNow's Task Manager. + Work items refer to the tasks users see in Identity Security Cloud's Task Manager. They can see the pending work items they need to complete, as well as the work items they have already completed. Task Manager lists the work items along with the involved sources, identities, accounts, and the timestamp when the work item was created. For example, a user may see a pending 'Create an Account' work item for the identity Fred.Astaire in GitHub for Fred's GitHub account, fred-astaire-sp. @@ -971,7 +994,8 @@ tags: Refer to [Work Reassignment](https://documentation.sailpoint.com/saas/help/users/work_reassignment.html) for more information about this topic. - name: Workflows description: | - Workflows allow administrators to create custom automation scripts directly within IdentityNow. These automation scripts respond to [event triggers](https://developer.sailpoint.com/idn/docs/event-triggers#how-to-get-started-with-event-triggers) and perform a series of actions to perform tasks that are either too cumbersome or not available in the IdentityNow UI. Workflows can be configured via a graphical user interface within IdentityNow, or by creating and uploading a JSON formatted script to the Workflow service. The Workflows API collection provides the necessary functionality to create, manage, and test your workflows via REST. + Workflows allow administrators to create custom automation scripts directly within Identity Security Cloud. These automation scripts respond to [event triggers](https://developer.sailpoint.com/docs/extensibility/event-triggers/#how-to-get-started-with-event-triggers) and perform a series of actions to perform tasks that are either too cumbersome or not available in the Identity Security Cloud UI. Workflows can be configured via a graphical user interface within Identity Security Cloud, or by creating and uploading a JSON formatted script to the Workflow service. The Workflows API collection provides the necessary functionality to create, manage, and test your workflows via REST. + security: - UserContextAuth: [ ] @@ -981,14 +1005,14 @@ components: type: oauth2 description: | OAuth2 Bearer token (JWT) generated using either a Personal Access token or through the Authorization Code flow. - See [IdentityNow REST API Authentication](https://developer.sailpoint.com/idn/api/authentication) for more information. - - Directions for generating a [personal access token](https://developer.sailpoint.com/idn/api/authentication#personal-access-tokens) - - Directions using [client credentials flow](https://developer.sailpoint.com/idn/api/authentication#client-credentials-grant-flow) - - Directions for using [authorization code flow](https://developer.sailpoint.com/idn/api/authentication#authorization-code-grant-flow) + See [Identity Security Cloud REST API Authentication](https://developer.sailpoint.com/docs/api/authentication/) for more information. + - Directions for generating a [personal access token](https://developer.sailpoint.com/docs/api/authentication/#personal-access-tokens) + - Directions using [client credentials flow](https://developer.sailpoint.com/docs/api/authentication/#client-credentials-grant-flow) + - Directions for using [authorization code flow](https://developer.sailpoint.com/docs/api/authentication/#authorization-code-grant-flow) - Which authentication method should I choose? See our [guide](https://developer.sailpoint.com/idn/api/authentication#which-oauth-20-grant-flow-should-i-use) + Which authentication method should I choose? See the [guide](https://developer.sailpoint.com/docs/api/authentication/#which-oauth-20-grant-flow-should-i-use). - Learn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/idn/api/authentication#find-your-tenants-oauth-details) + Learn more about how to find your `tokenUrl` and `authorizationUrl` [in the docs](https://developer.sailpoint.com/docs/api/authentication/#find-your-tenants-oauth-details). flows: clientCredentials: tokenUrl: https://tenant.api.identitynow.com/oauth/token @@ -1005,12 +1029,12 @@ components: type: oauth2 description: | OAuth2 Bearer token (JWT) generated using client credentials flow. - See [IdentityNow REST API Authentication](https://developer.sailpoint.com/idn/api/authentication) for more information. - - Directions using [client credentials flow](https://developer.sailpoint.com/idn/api/authentication#client-credentials-grant-flow) + See [Identity Security Cloud REST API Authentication](https://developer.sailpoint.com/docs/api/authentication/) for more information. + - Directions using [client credentials flow](https://developer.sailpoint.com/docs/api/authentication/#client-credentials-grant-flow) - Which authentication method should I choose? See our [guide](https://developer.sailpoint.com/idn/api/authentication#which-oauth-20-grant-flow-should-i-use) + Which authentication method should I choose? See the [guide](https://developer.sailpoint.com/docs/api/authentication/#which-oauth-20-grant-flow-should-i-use). - Learn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/idn/api/authentication#find-your-tenants-oauth-details) + Learn more about how to find your `tokenUrl` and `authorizationUrl` [in the docs](https://developer.sailpoint.com/docs/api/authentication/#find-your-tenants-oauth-details). flows: clientCredentials: tokenUrl: https://tenant.api.identitynow.com/oauth/token @@ -1121,6 +1145,8 @@ paths: $ref: './beta/paths/accounts-id-disable.yaml' /accounts/{id}/unlock: $ref: './beta/paths/accounts-id-unlock.yaml' + /accounts/{id}/remove: + $ref: './beta/paths/remove-account.yaml' /identities-accounts/{id}/enable: $ref: './beta/paths/identity-accounts-id-enable.yaml' /identities-accounts/{id}/disable: @@ -1247,6 +1273,8 @@ paths: $ref: './beta/paths/identity.yaml' /identities/process: $ref: './beta/paths/identities-process.yaml' + /identities/{id}/reset: + $ref: './beta/paths/identity-reset.yaml' /identities/{identityId}/role-assignments/{assignmentId}: $ref: './beta/paths/identities-role-assignment.yaml' /identities/{identityId}/role-assignments: @@ -1543,6 +1571,8 @@ paths: $ref: './v3/paths/provisioning-policy.yaml' /sources/{sourceId}/provisioning-policies/bulk-update: $ref: './v3/paths/provisioning-policies-bulk-update.yaml' + /sources/{id}/remove-accounts: + $ref: './beta/paths/remove-accounts.yaml' /sources/{sourceId}/schemas: $ref: './beta/paths/schemas.yaml' /sources/{sourceId}/schemas/{schemaId}: @@ -1723,3 +1753,13 @@ paths: $ref: "./beta/paths/account-usages.yaml" /access-request-identity-metrics/{identityId}/requested-objects/{requestedObjectId}/type/{type}: $ref: "./beta/paths/access-request-identity-metrics.yaml" + /manual-discover-applications: + $ref: "./beta/paths/manual-discover-applications.yaml" + /manual-discover-applications-template: + $ref: "./beta/paths/manual-discover-applications-template.yaml" + /discovered-applications: + $ref: "./beta/paths/discovered-applications.yaml" + /vendor-connector-mappings: + $ref: "./beta/paths/vendor-connector-mappings.yaml" + /icons/{objectType}/{objectId}: + $ref: './beta/paths/icon.yaml' diff --git a/static/api-specs/idn/sailpoint-api.v3.yaml b/static/api-specs/idn/sailpoint-api.v3.yaml index 47f4a52f7..15f2f6842 100644 --- a/static/api-specs/idn/sailpoint-api.v3.yaml +++ b/static/api-specs/idn/sailpoint-api.v3.yaml @@ -1,8 +1,8 @@ openapi: 3.0.1 info: - title: IdentityNow V3 API + title: Identity Security Cloud V3 API description: - "Use these APIs to interact with the IdentityNow platform to achieve + "Use these APIs to interact with the Identity Security Cloud platform to achieve repeatable, automated processes with greater scalability. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers @@ -34,11 +34,11 @@ tags: - name: Access Profiles description: | Use this API to implement and customize access profile functionality. - With this functionality in place, administrators can create access profiles and configure them for use throughout IdentityNow, enabling users to get the access they need quickly and securely. + With this functionality in place, administrators can create access profiles and configure them for use throughout Identity Security Cloud, enabling users to get the access they need quickly and securely. Access profiles group entitlements, which represent access rights on sources. - For example, an Active Directory source in IdentityNow can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. + For example, an Active Directory source in Identity Security Cloud can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. An administrator can then create a broader set of access in the form of an access profile, 'AD Developers' grouping the 'Employees' entitlement with the 'Developers' entitlement. @@ -46,7 +46,7 @@ tags: When users need both Active Directory employee and developer access, they can request access to the 'AD Developers' access profile. - Access profiles are the most important units of access in IdentityNow. IdentityNow uses access profiles in many features, including the following: + Access profiles are the most important units of access in Identity Security Cloud. Identity Security Cloud uses access profiles in many features, including the following: - Provisioning: When you use the Provisioning Service, lifecycle states and roles both grant access to users in the form of access profiles. @@ -56,7 +56,7 @@ tags: - Roles: You can group one or more access profiles into a role to quickly assign access items based on an identity's role. - In IdentityNow, administrators can use the Access drop-down menu and select Access Profiles to view, configure, and delete existing access profiles, as well as create new ones. + In Identity Security Cloud, administrators can use the Access drop-down menu and select Access Profiles to view, configure, and delete existing access profiles, as well as create new ones. Administrators can enable and disable an access profile, and they can also make the following configurations: - Manage Entitlements: Manage the profile's access by adding and removing entitlements. @@ -64,71 +64,66 @@ tags: - Access Requests: Configure access profiles to be requestable and establish an approval process for any requests that the access profile be granted or revoked. Do not configure an access profile to be requestable without first establishing a secure access request approval process for the access profile. - - Multiple Account Options: Define the logic IdentityNow uses to provision access to an identity with multiple accounts on the source. + - Multiple Account Options: Define the logic Identity Security Cloud uses to provision access to an identity with multiple accounts on the source. Refer to [Managing Access Profiles](https://documentation.sailpoint.com/saas/help/access/access-profiles.html) for more information about access profiles. - - name: Access Request Approvals - description: | - Use this API to implement and customize access request approval functionality. - With this functionality in place, administrators can delegate qualified users to review users' requests for access or managers' requests to revoke team members' access to applications, entitlements, or roles. - This enables more qualified users to review access requests and the others to spend their time on other tasks. - - In IdentityNow, users can request access to applications, entitlements, and roles, and managers can request that team members' access be revoked. - For applications and entitlements, administrators can set access profiles to require approval from the access profile owner, the application owner, the source owner, the requesting user's manager, or a governance group for access to be granted or revoked. - For roles, administrators can also set roles to allow access requests and require approval from the role owner, the requesting user's manager, or a governance group for access to be granted or revoked. - If the administrator designates a governance group as the required approver, any governance group member can approve the requests. - - When a user submits an access request, IdentityNow sends the first required approver in the queue an email notification, based on the access request configuration's approval and reminder escalation configuration. - - In Approvals in IdentityNow, required approvers can view pending access requests under the Requested tab and approve or deny them, or the approvers can reassign the requests to different reviewers for approval. - If the required approver approves the request and is the only reviewer required, IdentityNow grants or revokes access, based on the request. - If multiple reviewers are required, IdentityNow sends the request to the next reviewer in the queue, based on the access request configuration's approval reminder and escalation configuration. - The required approver can then view any completed access requests under the Reviewed tab. - - Refer to [Access Requests](https://documentation.sailpoint.com/saas/help/requests/index.html) for more information about access request approvals. - name: Access Requests description: | Use this API to implement and customize access request functionality. With this functionality in place, users can request access to applications, entitlements, or roles, and managers can request that team members' access be revoked. This allows users to get access to the tools they need quickly and securely, and it allows managers to take away access to those tools. - IdentityNow's Access Request service allows end users to request access that requires approval before it can be granted to users and enables qualified users to review those requests and approve or deny them. + Identity Security Cloud's Access Request service allows end users to request access that requires approval before it can be granted to users and enables qualified users to review those requests and approve or deny them. - In the Request Center in IdentityNow, users can view available applications, roles, and entitlements and request access to them. + In the Request Center in Identity Security Cloud, users can view available applications, roles, and entitlements and request access to them. If the requested tools requires approval, the requests appear as 'Pending' under the My Requests tab until the required approver approves, rejects, or cancels them. Users can use My Requests to track and/or cancel the requests. - In My Team on the IdentityNow Home, managers can submit requests to revoke their team members' access. + In My Team on the Identity Security Cloud Home, managers can submit requests to revoke their team members' access. They can use the My Requests tab under Request Center to track and/or cancel the requests. Refer to [Requesting Access](https://documentation.sailpoint.com/saas/user-help/requests/requesting_access.html) for more information about access requests. - - name: Account Usages + - name: Access Request Approvals description: | - Use this API to implement account usage insight functionality. - With this functionality in place, administrators can gather information and insights about how their tenants' source accounts are being used. - This allows organizations to get the information they need to start optimizing and securing source account usage. + Use this API to implement and customize access request approval functionality. + With this functionality in place, administrators can delegate qualified users to review users' requests for access or managers' requests to revoke team members' access to applications, entitlements, or roles. + This enables more qualified users to review access requests and the others to spend their time on other tasks. + + In Identity Security Cloud, users can request access to applications, entitlements, and roles, and managers can request that team members' access be revoked. + For applications and entitlements, administrators can set access profiles to require approval from the access profile owner, the application owner, the source owner, the requesting user's manager, or a governance group for access to be granted or revoked. + For roles, administrators can also set roles to allow access requests and require approval from the role owner, the requesting user's manager, or a governance group for access to be granted or revoked. + If the administrator designates a governance group as the required approver, any governance group member can approve the requests. + + When a user submits an access request, Identity Security Cloud sends the first required approver in the queue an email notification, based on the access request configuration's approval and reminder escalation configuration. + + In Approvals in Identity Security Cloud, required approvers can view pending access requests under the Requested tab and approve or deny them, or the approvers can reassign the requests to different reviewers for approval. + If the required approver approves the request and is the only reviewer required, Identity Security Cloud grants or revokes access, based on the request. + If multiple reviewers are required, Identity Security Cloud sends the request to the next reviewer in the queue, based on the access request configuration's approval reminder and escalation configuration. + The required approver can then view any completed access requests under the Reviewed tab. + + Refer to [Access Requests](https://documentation.sailpoint.com/saas/help/requests/index.html) for more information about access request approvals. - name: Accounts description: | Use this API to implement and customize account functionality. - With this functionality in place, administrators can manage users' access across sources in IdentityNow. + With this functionality in place, administrators can manage users' access across sources in Identity Security Cloud. - In IdentityNow, an account refers to a user's account on a supported source. - This typically includes a unique identifier for the user, a unique password, a set of permissions associated with the source and a set of attributes. IdentityNow loads accounts through the creation of sources in IdentityNow. + In Identity Security Cloud, an account refers to a user's account on a supported source. + This typically includes a unique identifier for the user, a unique password, a set of permissions associated with the source and a set of attributes. Identity Security Cloud loads accounts through the creation of sources in Identity Security Cloud. Administrators can correlate users' identities with the users' accounts on the different sources they use. - This allows IdentityNow to govern the access of identities and all their correlated accounts securely and cohesively. + This allows Identity Security Cloud to govern the access of identities and all their correlated accounts securely and cohesively. To view the accounts on a source and their correlated identities, administrators can use the Connections drop-down menu, select Sources, select the relevant source, and select its Account tab. - To view and edit source account statuses for an identity in IdentityNow, administrators can use the Identities drop-down menu, select Identity List, select the relevant identity, and select its Accounts tab. + To view and edit source account statuses for an identity in Identity Security Cloud, administrators can use the Identities drop-down menu, select Identity List, select the relevant identity, and select its Accounts tab. Administrators can toggle an account's Actions to aggregate the account, enable/disable it, unlock it, or remove it from the identity. Accounts can have the following statuses: - Enabled: The account is enabled. The user can access it. - - Disabled: The account is disabled, and the user cannot access it, but the identity is not disabled in IdentityNow. This can occur when an administrator disables the account or when the user's lifecycle state changes. + - Disabled: The account is disabled, and the user cannot access it, but the identity is not disabled in Identity Security Cloud. This can occur when an administrator disables the account or when the user's lifecycle state changes. - Locked: The account is locked. This may occur when someone has entered an incorrect password for the account too many times. @@ -140,12 +135,12 @@ tags: - name: Account Activities description: | Use this API to implement account activity tracking functionality. - With this functionality in place, users can track source account activity in IdentityNow, which greatly improves traceability in the system. + With this functionality in place, users can track source account activity in Identity Security Cloud, which greatly improves traceability in the system. An account activity refers to a log of each action performed on a source account. This is useful for auditing the changes performed on an account throughout its life. - In IdentityNow's Search, users can search for account activities and select the activity's row to get an overview of the activity's account action and view its progress, its involved sources, and its most basic metadata, such as the identity requesting the option and the recipient. + In Identity Security Cloud's Search, users can search for account activities and select the activity's row to get an overview of the activity's account action and view its progress, its involved sources, and its most basic metadata, such as the identity requesting the option and the recipient. - Account activity includes most actions IdentityNow completes on source accounts. Users can search in IdentityNow for the following account action types: + Account activity includes most actions Identity Security Cloud completes on source accounts. Users can search in Identity Security Cloud for the following account action types: - Access Request: These include any access requests the source account is involved in. @@ -156,14 +151,14 @@ tags: - Certification: These include actions removing an entitlement from an account on a source as a result of the entitlement's revocation during a certification. - Cloud Automated `Lifecyclestate`: These include automated lifecycle state changes that result in a source account's correlated identity being assigned to a different lifecycle state. - IdentityNow replaces the `Lifecyclestate` variable with the name of the lifecycle state it has moved the account's identity to. + Identity Security Cloud replaces the `Lifecyclestate` variable with the name of the lifecycle state it has moved the account's identity to. - Identity Attribute Update: These include updates to a source account's correlated identity attributes as the result of a provisioning action. When you update an identity attribute that also updates an identity's lifecycle state, the cloud automated `Lifecyclestate` event also displays. Account Activity does not include attribute updates that occur as a result of aggregation. - Identity Refresh: These include correlated identity refreshes that occur for an account on a source whenever the account's correlated identity profile gets a new role or updates. - These also include refreshes that occur whenever IdentityNow assigns an application to the account's correlated identity based on the application's being assigned to All Users From Source or Specific Users From Source. + These also include refreshes that occur whenever Identity Security Cloud assigns an application to the account's correlated identity based on the application's being assigned to All Users From Source or Specific Users From Source. - Lifecycle State Refresh: These include the actions that took place when a lifecycle state changed. This event only occurs after a cloud automated `Lifecyclestate` change or a lifecycle state change. @@ -172,7 +167,12 @@ tags: - Password Change: These include password changes on sources. Refer to [Account Activity](https://documentation.sailpoint.com/saas/help/search/index.html#account-activity) for more information about account activities. - - name: Auth User + - name: Account Usages + description: | + Use this API to implement account usage insight functionality. + With this functionality in place, administrators can gather information and insights about how their tenants' source accounts are being used. + This allows organizations to get the information they need to start optimizing and securing source account usage. + - name: Auth Users description: | Use this API to implement user authentication system functionality. With this functionality in place, users can get a user's authentication system details, including their capabilities, and modify those capabilities. @@ -182,41 +182,69 @@ tags: - name: Branding description: | Use this API to implement and customize branding functionality. - With this functionality in place, administrators can get list of existing branding items, create new branding and configure them for use throughout IdentityNow. - It allows to customise color of navigation bar, action buttons, logo and emailFromAddress. + With this functionality in place, administrators can get and manage existing branding items, and they can also create new branding items and configure them for use throughout Identity Security Cloud. + The Branding APIs provide administrators with a way to customize branding items. + This customization includes details like their colors, logos, and other information. + - name: Certifications + description: | + Use this API to implement certification functionality. + With this functionality in place, administrators and designated certification reviewers can review users' access certifications and decide whether to approve access, revoke it, or reassign the review to another reviewer. + Implementing certifications improves organizations' data security by reducing inappropriate access through a distributed review process and helping them satisfy audit and regulatory requirements. + + A certification refers to Identity Security Cloud's mechanism for reviewing a user's access to entitlements (sets of permissions) and approving or removing that access. + These serve as a way of showing that a user's access has been reviewed and approved. + Multiple certifications by different reviewers are often required to approve a user's access. + A set of multiple certifications is called a certification campaign. + + For example, an organization may use a Manager Certification as a way of showing that a user's access has been reviewed and approved by their manager, or if the certification is part of a campaign, that the user's access has been reviewed and approved by multiple managers. + Once this certification has been completed, Identity Security Cloud would provision all the access the user needs, nothing more. + + Organization administrators or certification administrators can designate other Identity Security Cloud users as certification reviewers. + Those reviewers can select the 'Certifications' tab to view any of the certifications they either need to review or have already reviewed under the 'Active' and 'Completed' tabs, respectively. + + When a certification campaign is in progress, certification reviewers will see certifications listed under 'Active,' where they can review the involved identities. + Under the 'Decision' column on the right, next to each access item, reviewers can select the checkmark to approve access, select the 'X' to revoke access, or they can toggle the 'More Options' menu to reassign the certification to another reviewer and provide a reason for reassignment in the form of a comment. + + Once a reviewer has made decisions on all the certification's involved access items, he or she must select 'Sign Off' to complete the review process. + Doing so converts the certification into read-only status, preventing any further changes to the review decisions and deleting the work item (task) from the reviewer's list of work items. + + Once all the reviewers have signed off, the certification campaign either completes or, if any reviewers decided to revoke access for any of the involved identities, it moves into a remediation phase. In the remediation phase, identities' entitlements are altered to remove any entitlements marked for revocation. + In this situation, the certification campaign completes once all the remediation requests are completed. + + Refer to [Certifications](https://documentation.sailpoint.com/saas/user-help/certifications.html) for more information about certifications. - name: Certification Campaigns description: | Use this API to implement certification campaign functionality. With this functionality in place, administrators can create, customize, and manage certification campaigns for their organizations' use. - Certification campaigns provide IdentityNow users with an interactive review process they can use to identify and verify access to systems. + Certification campaigns provide Identity Security Cloud users with an interactive review process they can use to identify and verify access to systems. Campaigns help organizations reduce risk of inappropriate access and satisfy audit requirements. - A certification refers to IdentityNow's mechanism for reviewing a user's access to entitlements (sets of permissions) and approving or removing that access. + A certification refers to Identity Security Cloud's mechanism for reviewing a user's access to entitlements (sets of permissions) and approving or removing that access. These certifications serve as a way of showing that a user's access has been reviewed and approved. Multiple certifications by different reviewers are often required to approve a user's access. A set of multiple certifications is called a certification campaign. For example, an organization may use a Manager Certification campaign as a way of showing that a user's access has been reviewed and approved by multiple managers. - Once this campaign has been completed, IdentityNow would provision all the access the user needs, nothing more. + Once this campaign has been completed, Identity Security Cloud would provision all the access the user needs, nothing more. - IdentityNow provides two simple campaign types users can create without using search queries, Manager and Source Owner campaigns: + Identity Security Cloud provides two simple campaign types users can create without using search queries, Manager and Source Owner campaigns: - You can create these types of campaigns without using any search queries in IdentityNow: + You can create these types of campaigns without using any search queries in Identity Security Cloud: - - ManagerCampaign: IdentityNow provides this campaign type as a way to ensure that an identity's access is certified by their managers. + - ManagerCampaign: Identity Security Cloud provides this campaign type as a way to ensure that an identity's access is certified by their managers. You only need to provide a name and description to create one. - - Source Owner Campaign: IdentityNow provides this campaign type as a way to ensure that an identity's access to a source is certified by its source owners. + - Source Owner Campaign: Identity Security Cloud provides this campaign type as a way to ensure that an identity's access to a source is certified by its source owners. You only need to provide a name and description to create one. You can specify the sources whose owners you want involved or just run it across all sources. For more information about these campaign types, refer to [Starting a Manager or Source Owner Campaign](https://documentation.sailpoint.com/saas/help/certs/starting_campaign.html). - One useful way to create certification campaigns in IdentityNow is to use a specific search and then run a campaign on the results returned by that search. + One useful way to create certification campaigns in Identity Security Cloud is to use a specific search and then run a campaign on the results returned by that search. This allows you to be much more specific about whom you are certifying in your campaigns and what access you are certifying in your campaigns. For example, you can search for all identities who are managed by "Amanda.Ross" and also have the access to the "Accounting" role and then run a certification campaign based on that search to ensure that the returned identities are appropriately certified. - You can use IdentityNow search queries to create these types of campaigns: + You can use Identity Security Cloud search queries to create these types of campaigns: - Identities: Use this campaign type to review and revoke access items for specific identities. You can either build a search query and create a campaign certifying all identities returned by that query, or you can search for individual identities and add those identities to the certification campaign. @@ -227,7 +255,7 @@ tags: - Role Composition: Use this campaign type to review a role's composition, including its title, description, and membership criteria. You can either build a search query and create a campaign certifying all roles returned by that query, or you can search for individual roles and add those roles to the certification campaign. - - Uncorrelated Accounts: Use this campaign type to certify source accounts that aren't linked to an authoritative identity in IdentityNow. + - Uncorrelated Accounts: Use this campaign type to certify source accounts that aren't linked to an authoritative identity in Identity Security Cloud. You can use this campaign type to view all the uncorrelated accounts for a source and certify them. For more information about search-based campaigns, refer to [Starting a Campaign from Search](https://documentation.sailpoint.com/saas/help/certs/starting_search_campaign.html). @@ -235,7 +263,7 @@ tags: Once you have generated your campaign, it becomes available for preview. An administrator can review the campaign and make changes, or if it's ready and accurate, activate it. - Once the campaign is active, organization administrators or certification administrators can designate other IdentityNow users as certification reviewers. + Once the campaign is active, organization administrators or certification administrators can designate other Identity Security Cloud users as certification reviewers. Those reviewers can view any of the certifications they either need to review (active) or have already reviewed (completed). When a certification campaign is in progress, certification reviewers see the listed active certifications whose involved identities they can review. @@ -251,49 +279,6 @@ tags: The end of a certification campaign is determined by its deadline, its completion status, or by an administrator's decision. For more information about certifications and certification campaigns, refer to [Certifications](https://documentation.sailpoint.com/saas/user-help/certifications.html). - - name: Certifications - description: | - Use this API to implement certification functionality. - With this functionality in place, administrators and designated certification reviewers can review users' access certifications and decide whether to approve access, revoke it, or reassign the review to another reviewer. - Implementing certifications improves organizations' data security by reducing inappropriate access through a distributed review process and helping them satisfy audit and regulatory requirements. - - A certification refers to IdentityNow's mechanism for reviewing a user's access to entitlements (sets of permissions) and approving or removing that access. - These serve as a way of showing that a user's access has been reviewed and approved. - Multiple certifications by different reviewers are often required to approve a user's access. - A set of multiple certifications is called a certification campaign. - - For example, an organization may use a Manager Certification as a way of showing that a user's access has been reviewed and approved by their manager, or if the certification is part of a campaign, that the user's access has been reviewed and approved by multiple managers. - Once this certification has been completed, IdentityNow would provision all the access the user needs, nothing more. - - Organization administrators or certification administrators can designate other IdentityNow users as certification reviewers. - Those reviewers can select the 'Certifications' tab to view any of the certifications they either need to review or have already reviewed under the 'Active' and 'Completed' tabs, respectively. - - When a certification campaign is in progress, certification reviewers will see certifications listed under 'Active,' where they can review the involved identities. - Under the 'Decision' column on the right, next to each access item, reviewers can select the checkmark to approve access, select the 'X' to revoke access, or they can toggle the 'More Options' menu to reassign the certification to another reviewer and provide a reason for reassignment in the form of a comment. - - Once a reviewer has made decisions on all the certification's involved access items, he or she must select 'Sign Off' to complete the review process. - Doing so converts the certification into read-only status, preventing any further changes to the review decisions and deleting the work item (task) from the reviewer's list of work items. - - Once all the reviewers have signed off, the certification campaign either completes or, if any reviewers decided to revoke access for any of the involved identities, it moves into a remediation phase. In the remediation phase, identities' entitlements are altered to remove any entitlements marked for revocation. - In this situation, the certification campaign completes once all the remediation requests are completed. - - Refer to [Certifications](https://documentation.sailpoint.com/saas/user-help/certifications.html) for more information about certifications. - - name: Certification Summaries - description: | - Use this API to implement certification summary functionality. - With this functionality in place, administrators and designated certification reviewers can review summaries of identity certification campaigns and draw conclusions about the campaigns' scope, security, and effectiveness. - Implementing certification summary functionality improves organizations' ability to review their [certifications](https://documentation.sailpoint.com/saas/user-help/certifications.html) and helps them satisfy audit and regulatory requirements by enabling them to trace access changes and the decisions made in their review processes. - - A certification refers to IdentityNow's mechanism for reviewing a user's access to entitlements (sets of permissions) and approving or removing that access. - These certifications serve as a way of showing that a user's access has been reviewed and approved. - Multiple certifications by different reviewers are often required to approve a user's access. - A set of multiple certifications is called a certification campaign. - - For example, an organization may use a Manager Certification as a way of showing that a user's access has been reviewed and approved by their manager, or if the certification is part of a campaign, that the user's access has been reviewed and approved by multiple managers. - Once this certification has been completed, IdentityNow would provision all the access the user needs, nothing more. - - Certification summaries provide information about identity certification campaigns such as the identities involved, the number of decisions made, and the access changed. - For example, an administrator or designated certification reviewer can examine the Manager Certification campaign to get an overview of how many entitlement decisions are made in that campaign as opposed to role decisions, which identities would be affected by changes to the campaign, and how those identities' access would be affected. - name: Certification Campaign Filters description: | Use this API to implement the certification campaign filter functionality. These filters can be used to create a certification campaign that includes a subset of your entitlements or users to certify. @@ -323,42 +308,73 @@ tags: Once the campaign filter is created, it can be linked while creating the campaign. The generated campaign will have the items to review as per the campaign filter. For example, An inclusion campaign filter is created with a source of Source 1, an operation of Equals, and an entitlement of Entitlement 1. When this filter is selected, only users who have Entitlement 1 are included in the campaign, and only Entitlement 1 is shown in the certification. + - name: Certification Summaries + description: | + Use this API to implement certification summary functionality. + With this functionality in place, administrators and designated certification reviewers can review summaries of identity certification campaigns and draw conclusions about the campaigns' scope, security, and effectiveness. + Implementing certification summary functionality improves organizations' ability to review their [certifications](https://documentation.sailpoint.com/saas/user-help/certifications.html) and helps them satisfy audit and regulatory requirements by enabling them to trace access changes and the decisions made in their review processes. + + A certification refers to Identity Security Cloud's mechanism for reviewing a user's access to entitlements (sets of permissions) and approving or removing that access. + These certifications serve as a way of showing that a user's access has been reviewed and approved. + Multiple certifications by different reviewers are often required to approve a user's access. + A set of multiple certifications is called a certification campaign. + + For example, an organization may use a Manager Certification as a way of showing that a user's access has been reviewed and approved by their manager, or if the certification is part of a campaign, that the user's access has been reviewed and approved by multiple managers. + Once this certification has been completed, Identity Security Cloud would provision all the access the user needs, nothing more. + + Certification summaries provide information about identity certification campaigns such as the identities involved, the number of decisions made, and the access changed. + For example, an administrator or designated certification reviewer can examine the Manager Certification campaign to get an overview of how many entitlement decisions are made in that campaign as opposed to role decisions, which identities would be affected by changes to the campaign, and how those identities' access would be affected. + - name: Configuration Hub + description: | + Upload configurations and manage object mappings between tenants. - name: Connectors description: | Use this API to implement connector functionality. With this functionality in place, administrators can view available connectors. - Connectors are the bridges IdentityNow uses to communicate with and aggregate data from sources. - For example, if it is necessary to set up a connection between IdentityNow and the Active Directory source, a connector can bridge the two and enable IdentityNow to synchronize data between the systems. + Connectors are the bridges Identity Security Cloud uses to communicate with and aggregate data from sources. + For example, if it is necessary to set up a connection between Identity Security Cloud and the Active Directory source, a connector can bridge the two and enable Identity Security Cloud to synchronize data between the systems. This ensures account entitlements and states are correct throughout the organization. - In IdentityNow, administrators can use the Connections drop-down menu and select Sources to view the available source connectors. + In Identity Security Cloud, administrators can use the Connections drop-down menu and select Sources to view the available source connectors. - Refer to [IdentityNow Connectors](https://documentation.sailpoint.com/connectors/identitynow/landingpages/help/landingpages/identitynow_connectivity_landing.html) for more information about the connectors available in IdentityNow. + Refer to [Identity Security Cloud Connectors](https://documentation.sailpoint.com/connectors/identitynow/landingpages/help/landingpages/identitynow_connectivity_landing.html) for more information about the connectors available in Identity Security Cloud. - Refer to [SaaS Connectivity](https://developer.sailpoint.com/idn/docs/saas-connectivity) for more information about the SaaS custom connectors that do not need VAs (virtual appliances) to communicate with their sources. + Refer to [SaaS Connectivity](https://developer.sailpoint.com/docs/connectivity/saas-connectivity/) for more information about the SaaS custom connectors that do not need VAs (virtual appliances) to communicate with their sources. - Refer to [Managing Sources](https://documentation.sailpoint.com/saas/help/sources/managing_sources.html) for more information about using connectors in IdentityNow. + Refer to [Managing Sources](https://documentation.sailpoint.com/saas/help/sources/managing_sources.html) for more information about using connectors in Identity Security Cloud. - name: Global Tenant Security Settings description: | Use this API to implement and customize global tenant security settings. With this functionality in place, administrators can manage the global security settings that a tenant/org has. - This API can be used to configure the networks and Geographies allowed to access IdentityNow URLs. + This API can be used to configure the networks and Geographies allowed to access Identity Security Cloud URLs. + - name: Identity Profiles + description: | + Use this API to implement identity profile functionality. + With this functionality in place, administrators can view identity profiles and their configurations. + + Identity profiles represent the configurations that can be applied to identities as a way of granting them a set of security and access, as well as defining the mappings between their identity attributes and their source attributes. + + In Identity Security Cloud, administrators can use the Identities drop-down menu and select Identity Profiles to view the list of identity profiles. + This list shows some details about each identity profile, along with its status. + They can select an identity profile to view its settings, its mappings between identity attributes and correlating source account attributes, and its provisioning settings. + + Refer to [Creating Identity Profiles](https://documentation.sailpoint.com/saas/help/setup/identity_profiles.html) for more information about identity profiles. - name: Lifecycle States description: | Use this API to implement and customize lifecycle state functionality. With this functionality in place, administrators can create and configure custom lifecycle states for use across their organizations, which is key to controlling which users have access, when they have access, and the access they have. - A lifecycle state describes a user's status in a company. For example, two lifecycle states come by default with IdentityNow: 'Active' and 'Inactive.' + A lifecycle state describes a user's status in a company. For example, two lifecycle states come by default with Identity Security Cloud: 'Active' and 'Inactive.' When an active employee takes an extended leave of absence from a company, his or her lifecycle state may change to 'Inactive,' for security purposes. The inactive employee would lose access to all the applications, sources, and sensitive data during the leave of absence, but when the employee returns and becomes active again, all that access would be restored. This saves administrators the time that would otherwise be spent provisioning the employee's access to each individual tool, reviewing the employee's certification history, etc. Administrators can create a variety of custom lifecycle states. Refer to [Planning New Lifecycle States](https://documentation.sailpoint.com/saas/help/provisioning/lifecycle.html#planning-new-lifecycle-states) for some custom lifecycle state ideas. - Administrators must define the criteria for being in each lifecycle state, and they must define how IdentityNow manages users' access to apps and sources for each lifecycle state. + Administrators must define the criteria for being in each lifecycle state, and they must define how Identity Security Cloud manages users' access to apps and sources for each lifecycle state. - In IdentityNow, administrators can manage lifecycle states by going to Admin > Identities > Identity Profile, selecting the identity profile whose lifecycle states they want to manage, selecting the 'Provisioning' tab, and using the left panel to either select the lifecycle state they want to modify or create a new lifecycle state. + In Identity Security Cloud, administrators can manage lifecycle states by going to Admin > Identities > Identity Profile, selecting the identity profile whose lifecycle states they want to manage, selecting the 'Provisioning' tab, and using the left panel to either select the lifecycle state they want to modify or create a new lifecycle state. In the 'Provisioning' tab, administrators can make the following access changes to an identity profile's lifecycle state: @@ -374,28 +390,16 @@ tags: To maintain access across multiple lifecycle states, administrators must grant the access profiles in each lifecycle state. For example, if an administrator wants users with the 'HR Employee' identity profile to maintain their building access in both the 'Active' and 'Leave of Absence' lifecycle states, the administrator must grant the access profile for that building access to both lifecycle states. - During scheduled refreshes, IdentityNow evaluates lifecycle states to determine whether their assigned identities have the access defined in the lifecycle states' access profiles. - If the identities are missing access, IdentityNow provisions that access. + During scheduled refreshes, Identity Security Cloud evaluates lifecycle states to determine whether their assigned identities have the access defined in the lifecycle states' access profiles. + If the identities are missing access, Identity Security Cloud provisions that access. - Administrators can also use the 'Provisioning' tab to configure email notifications for IdentityNow to send whenever an identity with that identity profile has a lifecycle state change. + Administrators can also use the 'Provisioning' tab to configure email notifications for Identity Security Cloud to send whenever an identity with that identity profile has a lifecycle state change. Refer to [Configuring Lifecycle State Notifications](https://documentation.sailpoint.com/saas/help/provisioning/lifecycle.html#configuring-lifecycle-state-notifications) for more information on how to do so. An identity's lifecycle state can have four different statuses: the lifecycle state's status can be 'Active,' it can be 'Not Set,' it can be 'Not Valid,' or it 'Does Not Match Technical Name Case.' Refer to [Moving Identities into Lifecycle States](https://documentation.sailpoint.com/saas/help/provisioning/lifecycle.html#moving-identities-into-lifecycle-states) for more information about these different lifecycle state statuses. Refer to [Setting Up Lifecycle States](https://documentation.sailpoint.com/saas/help/provisioning/lifecycle.html) for more information about lifecycle states. - - name: Identity Profiles - description: | - Use this API to implement identity profile functionality. - With this functionality in place, administrators can view identity profiles and their configurations. - - Identity profiles represent the configurations that can be applied to identities as a way of granting them a set of security and access, as well as defining the mappings between their identity attributes and their source attributes. - - In IdentityNow, administrators can use the Identities drop-down menu and select Identity Profiles to view the list of identity profiles. - This list shows some details about each identity profile, along with its status. - They can select an identity profile to view its settings, its mappings between identity attributes and correlating source account attributes, and its provisioning settings. - - Refer to [Creating Identity Profiles](https://documentation.sailpoint.com/saas/help/setup/identity_profiles.html) for more information about identity profiles. - name: Non-Employee Lifecycle Management description: | Use this API to implement non-employee lifecycle management functionality. @@ -403,23 +407,23 @@ tags: This allows organizations to provide secure access to non-employees and control that access. The 'non-employee' term refers to any consultant, contractor, intern, or other user in an organization who is not a full-time permanent employee. - Organizations can track non-employees' access and activity in IdentityNow by creating and maintaining non-employee sources. + Organizations can track non-employees' access and activity in Identity Security Cloud by creating and maintaining non-employee sources. Organizations can have a maximum of 50 non-employee sources. By using SailPoint's Non-Employee Lifecycle Management functionality, you agree to the following: - SailPoint is not responsible for storing sensitive data. - You may only add account attributes to non-employee identities that are necessary for business operations and are consistent with your contractual limitations on data that may be sent or stored in IdentityNow. + You may only add account attributes to non-employee identities that are necessary for business operations and are consistent with your contractual limitations on data that may be sent or stored in Identity Security Cloud. - You are responsible for regularly downloading your list of non-employee accounts for all the sources you create and storing this list of accounts in a managed location to maintain an authoritative system of record and backup data for these accounts. - To manage non-employees in IdentityNow, administrators must create a non-employee source and add accounts to the source. + To manage non-employees in Identity Security Cloud, administrators must create a non-employee source and add accounts to the source. - To create a non-employee source in IdentityNow, administrators must use the Admin panel to go to Connections > Sources. + To create a non-employee source in Identity Security Cloud, administrators must use the Admin panel to go to Connections > Sources. They must then specify 'Non-Employee' in the 'Source Type' field. Refer to [Creating a Non-Employee Source](https://documentation.sailpoint.com/saas/help/common/non-employee-mgmt.html#creating-a-non-employee-source) for more details about how to create non-employee sources. - To add accounts to a non-employee source in IdentityNow, administrators can select the non-employee source and add the accounts. + To add accounts to a non-employee source in Identity Security Cloud, administrators can select the non-employee source and add the accounts. They can also use the 'Manage Non-Employees' widget on their user dashboards to reach the list of sources and then select the non-employee source they want to add the accounts to. Administrators can either add accounts individually or in bulk. Each non-employee source can have a maximum of 20,000 accounts. @@ -432,8 +436,8 @@ tags: - name: OAuth Clients description: | Use this API to implement OAuth client functionality. - With this functionality in place, users with the appropriate security scopes can create and configure OAuth clients to use as a way to obtain authorization to use the IdentityNow REST API. - Refer to [Authentication](https://developer.sailpoint.com/idn/api/authentication) for more information about OAuth and how it works with the IdentityNow REST API. + With this functionality in place, users with the appropriate security scopes can create and configure OAuth clients to use as a way to obtain authorization to use the Identity Security Cloud REST API. + Refer to [Authentication](https://developer.sailpoint.com/docs/api/authentication/) for more information about OAuth and how it works with the Identity Security Cloud REST API. - name: Password Configuration description: | Use this API to implement organization password configuration functionality. @@ -442,32 +446,6 @@ tags: These configurations include details like custom password instructions, as well as digit token length and duration. Refer to [Configuring User Authentication for Password Resets](https://documentation.sailpoint.com/saas/help/pwd/pwd_reset.html) for more information about organization password configuration functionality. - - name: Password Management - description: | - Use this API to implement password management functionality. - With this functionality in place, users can manage their identity passwords for all their applications. - - In IdentityNow, users can select their names in the upper right corner of the page and use the drop-down menu to select Password Manager. - Password Manager lists the user's identity's applications, possibly grouped to share passwords. - Users can then select 'Change Password' to update their passwords. - - Grouping passwords allows users to update their passwords more broadly, rather than requiring them to update each password individually. - Password Manager may list the applications and sources in the following groups: - - - Password Group: This refers to a group of applications that share a password. - For example, a user can use the same password for Google Drive, Google Mail, and YouTube. - Updating the password for the password group updates the password for all its included applications. - - - Multi-Application Source: This refers to a source with multiple applications that share a password. - For example, a user can have a source, G Suite, that includes the Google Calendar, Google Drive, and Google Mail applications. - Updating the password for the multi-application source updates the password for all its included applications. - - - Applications: These are applications that do not share passwords with other applications. - - An organization may require some authentication for users to update their passwords. - Users may be required to answer security questions or use a third-party authenticator before they can confirm their updates. - - Refer to [Managing Passwords](https://documentation.sailpoint.com/saas/user-help/accounts/passwords.html) for more information about password management. - name: Password Dictionary description: | Use this API to implement password dictionary functionality. @@ -512,11 +490,37 @@ tags: Refer to this list https://docs.oracle.com/cd/E13214_01/wli/docs92/xref/xqisocodes.html to see all the available ISO 639-1 language codes and ISO 3166-1 country codes. - - Upload the .txt file to IdentityNow with [Update Password Dictionary](https://developer.sailpoint.com/idn/api/v3/update-password-dictionary). Uploading a new file always overwrites the previous dictionary file. + - Upload the .txt file to Identity Security Cloud with [Update Password Dictionary](https://developer.sailpoint.com/docs/api/v3/put-password-dictionary). Uploading a new file always overwrites the previous dictionary file. Administrators can then specify which password policies check new passwords against the password dictionary by doing the following: In the Admin panel, they can use the Password Mgmt dropdown menu to select Policies, select the policy, and select the 'Prevent use of words in this site's password dictionary' checkbox beside it. Refer to [Configuring Advanced Password Management Options](https://documentation.sailpoint.com/saas/help/pwd/adv_config.html) for more information about password dictionaries. + - name: Password Management + description: | + Use this API to implement password management functionality. + With this functionality in place, users can manage their identity passwords for all their applications. + + In Identity Security Cloud, users can select their names in the upper right corner of the page and use the drop-down menu to select Password Manager. + Password Manager lists the user's identity's applications, possibly grouped to share passwords. + Users can then select 'Change Password' to update their passwords. + + Grouping passwords allows users to update their passwords more broadly, rather than requiring them to update each password individually. + Password Manager may list the applications and sources in the following groups: + + - Password Group: This refers to a group of applications that share a password. + For example, a user can use the same password for Google Drive, Google Mail, and YouTube. + Updating the password for the password group updates the password for all its included applications. + + - Multi-Application Source: This refers to a source with multiple applications that share a password. + For example, a user can have a source, G Suite, that includes the Google Calendar, Google Drive, and Google Mail applications. + Updating the password for the multi-application source updates the password for all its included applications. + + - Applications: These are applications that do not share passwords with other applications. + + An organization may require some authentication for users to update their passwords. + Users may be required to answer security questions or use a third-party authenticator before they can confirm their updates. + + Refer to [Managing Passwords](https://documentation.sailpoint.com/saas/user-help/accounts/passwords.html) for more information about password management. - name: Password Sync Groups description: | Use this API to implement password sync group functionality. @@ -528,18 +532,18 @@ tags: For example, an administrator can group the ActiveDirectory, GitHub, and G Suite sources together so that all those sources' applications can also be grouped to share a password. A user can then update his or her password for ActiveDirectory, GitHub, Gmail, Google Drive, and Google Calendar all at once, rather then updating each one individually. - The following are required for administrators to create a password sync group in IdentityNow: + The following are required for administrators to create a password sync group in Identity Security Cloud: - - At least two direct connect sources connected to IdentityNow and configured for Password Management. + - At least two direct connect sources connected to Identity Security Cloud and configured for Password Management. - Each authentication source in a sync group must have at least one application. Refer to [Adding and Resetting Application Passwords](https://documentation.sailpoint.com/saas/help/pwd/adv_config.html#adding-and-resetting-application-passwords) for more information about adding applications to sources. - At least one password policy. Refer to [Managing Password Policies](https://documentation.sailpoint.com/saas/help/pwd/policies.html) for more information about password policies. - In the Admin panel in IdentityNow, administrators can use the Password Mgmt dropdown menu to select Sync Groups. + In the Admin panel in Identity Security Cloud, administrators can use the Password Mgmt dropdown menu to select Sync Groups. To create a sync group, administrators must provide a name, choose a password policy to be enforced across the sources in the sync group, and select the sources to include in the sync group. - Administrators can also delete sync groups in IdentityNow, but they should know the following before they do: + Administrators can also delete sync groups in Identity Security Cloud, but they should know the following before they do: - Passwords related to the associated sources will become independent, so changing one will not change the others anymore. @@ -554,19 +558,19 @@ tags: - name: Personal Access Tokens description: | Use this API to implement personal access token (PAT) functionality. - With this functionality in place, users can use PATs as an alternative to passwords for authentication in IdentityNow. + With this functionality in place, users can use PATs as an alternative to passwords for authentication in Identity Security Cloud. PATs embed user information into the client ID and secret. - This replaces the API clients' need to store and provide a username and password to establish a connection, improving IdentityNow organizations' integration security. + This replaces the API clients' need to store and provide a username and password to establish a connection, improving Identity Security Cloud organizations' integration security. - In IdentityNow, users can do the following to create and manage their PATs: Select the dropdown menu under their names, select Preferences, and then select Personal Access Tokens. + In Identity Security Cloud, users can do the following to create and manage their PATs: Select the dropdown menu under their names, select Preferences, and then select Personal Access Tokens. They must then provide a description about the token's purpose. They can then select 'Create Token' at the bottom of the page to generate and view the Secret and Client ID. Refer to [Managing Personal Access Tokens](https://documentation.sailpoint.com/saas/help/common/generate_tokens.html) for more information about PATs. - name: Public Identities description: | - Use this API in conjunction with [Public Identites Config](https://developer.sailpoint.com/idn/api/v3/public-identities-config) to enable non-administrators to view identities' publicly visible attributes. + Use this API in conjunction with [Public Identites Config](https://developer.sailpoint.com/docs/api/v3/public-identities-config/) to enable non-administrators to view identities' publicly visible attributes. With this functionality in place, non-administrators can view identity attributes other than the default attributes (email, lifecycle state, and manager), depending on which identity attributes their organization administrators have made public. This can be helpful for access approvers, certification reviewers, managers viewing their direct reports' access, and source owners viewing their tasks. - name: Public Identities Config @@ -580,7 +584,7 @@ tags: Administrators can use this API to make those necessary identity attributes public to non-administrators. For example, a non-administrator deciding whether to approve another identity's request for access to the Workday application, whose access may be restricted to members of the HR department, would want to know whether the identity is a member of the HR department. - If an administrator has used [Update Public Identity Config](https://developer.sailpoint.com/idn/api/v3/update-public-identity-config) to make the "department" attribute public, the approver can see the department and make a decision without requesting any more information. + If an administrator has used [Update Public Identity Config](https://developer.sailpoint.com/docs/api/v3/update-public-identity-config/) to make the "department" attribute public, the approver can see the department and make a decision without requesting any more information. - name: Reports Data Extraction description: | Use this API to implement reports lifecycle managing and monitoring. @@ -589,19 +593,19 @@ tags: - name: Requestable Objects description: | Use this API to implement requestable object functionality. - With this functionality in place, administrators can determine which access items can be requested with the [Access Request APIs](https://developer.sailpoint.com/idn/api/v3/access-requests), along with their statuses. + With this functionality in place, administrators can determine which access items can be requested with the [Access Request APIs](https://developer.sailpoint.com/docs/api/v3/access-requests/), along with their statuses. This can be helpful for administrators who are implementing and customizing access request functionality as a way of checking which items are requestable as they are created, assigned, and made available. - name: Roles description: | Use this API to implement and customize role functionality. - With this functionality in place, administrators can create roles and configure them for use throughout IdentityNow. - IdentityNow can use established criteria to automatically assign the roles to qualified users. This enables users to get all the access they need quickly and securely and administrators to spend their time on other tasks. + With this functionality in place, administrators can create roles and configure them for use throughout Identity Security Cloud. + Identity Security Cloud can use established criteria to automatically assign the roles to qualified users. This enables users to get all the access they need quickly and securely and administrators to spend their time on other tasks. - Entitlements represent the most granular level of access in IdentityNow. + Entitlements represent the most granular level of access in Identity Security Cloud. Access profiles represent the next level and often group entitlements. Roles represent the broadest level of access and often group access profiles. - For example, an Active Directory source in IdentityNow can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. + For example, an Active Directory source in Identity Security Cloud can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. An administrator can then create a broader set of access in the form of an access profile, 'AD Developers' grouping the 'Employees' entitlement with the 'Developers' entitlement. @@ -617,12 +621,12 @@ tags: For example, an organization's accountant can access all the tools the organization's accountants need with the 'Accountant' role. If the accountant switches to engineering, a qualified member of the organization can quickly revoke the accountant's 'Accountant' access and grant access to the 'Engineer' role instead, granting access to all the tools the organization's engineers need. - In IdentityNow, adminstrators can use the Access drop-down menu and select Roles to view, configure, and delete existing roles, as well as create new ones. + In Identity Security Cloud, adminstrators can use the Access drop-down menu and select Roles to view, configure, and delete existing roles, as well as create new ones. Administrators can enable and disable the role, and they can also make the following configurations: - Manage Access: Manage the role's access by adding or removing access profiles. - - Define Assignment: Define the criteria IdentityNow uses to assign the role to identities. + - Define Assignment: Define the criteria Identity Security Cloud uses to assign the role to identities. Use the first option, 'Standard Criteria,' to provide specific criteria for assignment like specific account attributes, entitlements, or identity attributes. Use the second, 'Identity List,' to specify the identities for assignment. @@ -635,25 +639,25 @@ tags: Use this API to implement saved search functionality. With saved search functionality in place, users can save search queries and then view those saved searches, as well as rerun them. - Search queries in IdentityNow can grow very long and specific, which can make reconstructing them difficult or tedious, so it can be especially helpful to save search queries. - It also opens the possibility to configure IdentityNow to run the saved queries on a schedule, which is essential to detecting user information and access changes throughout an organization's tenant and across all its sources. - Refer to [Scheduled Search](https://developer.sailpoint.com/idn/api/v3/scheduled-search) for more information about running saved searches on a schedule. + Search queries in Identity Security Cloud can grow very long and specific, which can make reconstructing them difficult or tedious, so it can be especially helpful to save search queries. + It also opens the possibility to configure Identity Security Cloud to run the saved queries on a schedule, which is essential to detecting user information and access changes throughout an organization's tenant and across all its sources. + Refer to [Scheduled Search](https://developer.sailpoint.com/docs/api/v3/scheduled-search/) for more information about running saved searches on a schedule. - In IdentityNow, users can save searches under a name, and then they can access that saved search and run it again when they want. + In Identity Security Cloud, users can save searches under a name, and then they can access that saved search and run it again when they want. Refer to [Managing Saved Searches](https://documentation.sailpoint.com/saas/help/search/saved-searches.html) for more information about saving searches and using them. - name: Scheduled Search description: | Use this API to implement scheduled search functionality. - With scheduled search functionality in place, users can run saved search queries on their tenants on a schedule, and IdentityNow emails them the search results. + With scheduled search functionality in place, users can run saved search queries on their tenants on a schedule, and Identity Security Cloud emails them the search results. Users can also share these search results with other users by email by adding those users as subscribers, or those users can subscribe themselves. One of the greatest benefits of saving searches is the ability to run those searches on a schedule. This is essential for organizations to constantly detect any changes to user information or access throughout their tenants and across all their sources. For example, the manager Amanda Ross can schedule a saved search "manager.name:amanda.ross AND attributes.location:austin" on a schedule to regularly stay aware of changes with the Austin employees reporting to her. - IdentityNow emails her the search results when the search runs, so she can work on other tasks instead of actively running this search. + Identity Security Cloud emails her the search results when the search runs, so she can work on other tasks instead of actively running this search. - In IdentityNow, scheduling a search involves a subscription. + In Identity Security Cloud, scheduling a search involves a subscription. Users can create a subscription for a saved search and schedule it to run daily, weekly, or monthly (you can only use one schedule option at a time). The user can add other identities as subscribers so when the scheduled search runs, the subscribers and the user all receive emails. @@ -661,7 +665,7 @@ tags: Including detailed results about user access in an email may expose sensitive information. However, the subscription creator can choose to include the information in the emails. - By default, IdentityNow sends emails to the subscribers even when the searches do not return new results. + By default, Identity Security Cloud sends emails to the subscribers even when the searches do not return new results. However, the subscription creator can choose to suppress these empty emails. Users can also subscribe to saved searches that already have existing subscriptions so they receive emails when the searches run. @@ -675,7 +679,7 @@ tags: Use this API to implement search functionality. With search functionality in place, users can search their tenants for nearly any information from throughout their organizations. - IdentityNow enables organizations to store user data from across all their connected sources and manage the users' access, so the ability to query and filter that data is essential. + Identity Security Cloud enables organizations to store user data from across all their connected sources and manage the users' access, so the ability to query and filter that data is essential. Its search goes through all those sources and finds the results quickly and specifically. The search query is flexible - it can be very broad or very narrow. @@ -683,11 +687,11 @@ tags: The following objects are searchable: identities, roles, access profiles, entitlements, events, and account activities. By default, no filter is applied, so a search for "Ad" returns both the identity "Adam.Archer" as well as the role "Administrator." - Users can further narrow their results by using IdentityNow's specific syntax and punctuation to structure their queries. + Users can further narrow their results by using Identity Security Cloud's specific syntax and punctuation to structure their queries. For example, the query "attributes.location:austin AND NOT manager.name:amanda.ross" returns all results associated with the Austin location, but it excludes those associated with the manager Amanda Ross. Refer to [Building a Search Query](https://documentation.sailpoint.com/saas/help/search/building-query.html) for more information about how to construct specific search queries. - Refer to [Using Search](https://documentation.sailpoint.com/saas/help/search/index.html) for more information about IdentityNow's search and its different possibilities. + Refer to [Using Search](https://documentation.sailpoint.com/saas/help/search/index.html) for more information about Identity Security Cloud's search and its different possibilities. The search feature uses Elasticsearch as a datastore and query engine. The power of Elasticsearch makes this feature suitable for ad-hoc reporting. @@ -705,7 +709,7 @@ tags: For example, administrators could group all their organization's London office employees into one segment, "London Office Employees," by their shared location. The administrators could then define the access items the London employees would need, and the identities in the "London Office Employees" would then only be able to see and access those items. - In IdentityNow, administrators can use the 'Access' drop-down menu and select 'Segments' to reach the 'Access Requests Segments' page. + In Identity Security Cloud, administrators can use the 'Access' drop-down menu and select 'Segments' to reach the 'Access Requests Segments' page. This page lists all the existing access request segments, along with their statuses, enabled or disabled. Administrators can use this page to create, edit, enable, disable, and delete segments. To create a segment, an administrator must provide a name, define the identities grouped in the segment, and define the items the identities in the segment can access. @@ -713,16 +717,16 @@ tags: When administrators use the API to create and manage segments, they use a JSON expression in the `visibilityCriteria` object to define the segment's identities and access items. - Refer to [Managing Access Request Segments](https://documentation.sailpoint.com/saas/help/requests/segments.html) for more information about segments in IdentityNow. + Refer to [Managing Access Request Segments](https://documentation.sailpoint.com/saas/help/requests/segments.html) for more information about segments in Identity Security Cloud. - name: Service Desk Integration description: | - Use this API to build an integration between IdentityNow and a service desk ITSM (IT service management) solution. - Once an administrator builds this integration between IdentityNow and a service desk, users can use IdentityNow to raise and track tickets that are synchronized between IdentityNow and the service desk. + Use this API to build an integration between Identity Security Cloud and a service desk ITSM (IT service management) solution. + Once an administrator builds this integration between Identity Security Cloud and a service desk, users can use Identity Security Cloud to raise and track tickets that are synchronized between Identity Security Cloud and the service desk. - In IdentityNow, administrators can create a service desk integration (sometimes also called an SDIM, or Service Desk Integration Module) by going to Admin > Connections > Service Desk and selecting 'Create.' + In Identity Security Cloud, administrators can create a service desk integration (sometimes also called an SDIM, or Service Desk Integration Module) by going to Admin > Connections > Service Desk and selecting 'Create.' To create a Generic Service Desk integration, for example, administrators must provide the required information on the General Settings page, the Connectivity and Authentication information, Ticket Creation information, Status Mapping information, and Requester Source information on the Configure page. - Refer to [Integrating SailPoint with Generic Service Desk](https://documentation.sailpoint.com/connectors/generic_sd/help/integrating_generic_service_desk/intro.html) for more information about the process of setting up a Generic Service Desk in IdentityNow. + Refer to [Integrating SailPoint with Generic Service Desk](https://documentation.sailpoint.com/connectors/generic_sd/help/integrating_generic_service_desk/intro.html) for more information about the process of setting up a Generic Service Desk in Identity Security Cloud. Administrators can create various service desk integrations, all with their own nuances. The following service desk integrations are available: @@ -740,7 +744,7 @@ tags: - [ServiceNow Service Desk](https://documentation.sailpoint.com/connectors/servicenow/sdim/help/integrating_servicenow_sdim/intro.html) - [Zendesk Service Desk](https://documentation.sailpoint.com/connectors/zendesk/help/integrating_zendesk_sd/introduction.html) - - name: SOD Policy + - name: SOD Policies description: | Use this API to implement and manage "separation of duties" (SOD) policies. With SOD policy functionality in place, administrators can organize the access in their tenants to prevent individuals from gaining conflicting or excessive access. @@ -752,7 +756,7 @@ tags: Organizations can use "separation of duties" (SOD) policies to enforce and track their internal security rules throughout their tenants. These SOD policies limit each user's involvement in important processes and protects the organization from individuals gaining excessive access. - To create SOD policies in IdentityNow, administrators use 'Search' and then access 'Policies'. + To create SOD policies in Identity Security Cloud, administrators use 'Search' and then access 'Policies'. To create a policy, they must configure two lists of access items. Each access item can only be added to one of the two lists. They can search for the entitlements they want to add to these access lists. @@ -762,7 +766,7 @@ tags: These violations are included in SOD violation reports that other users will see in emails at regular intervals if they're subscribed to the SOD policy. The other users can then better help to enforce these SOD policies. - To create a subscription to a SOD policy in IdentityNow, administrators use 'Search' and then access 'Layers'. + To create a subscription to a SOD policy in Identity Security Cloud, administrators use 'Search' and then access 'Layers'. They can create a subscription to the policy and schedule it to run at a regular interval. Refer to [Managing Policies](https://documentation.sailpoint.com/saas/help/sod/manage-policies.html) for more information about SOD policies. @@ -788,25 +792,20 @@ tags: This second option is a good way to prevent SOD violations from triggering at all. Refer to [Handling Policy Violations](https://documentation.sailpoint.com/saas/help/sod/policy-violations.html) for more information about SOD policy violations. - - name: Source Usages - description: | - Use this API to implement source usage insight functionality. - With this functionality in place, administrators can gather information and insights about how their tenants' sources are being used. - This allows organizations to get the information they need to start optimizing and securing source usage. - name: Sources description: | Use this API to implement and customize source functionality. - With source functionality in place, organizations can use IdentityNow to connect their various sources and user data sets and manage access across all those different sources in a secure, scalable way. + With source functionality in place, organizations can use Identity Security Cloud to connect their various sources and user data sets and manage access across all those different sources in a secure, scalable way. - [Sources](https://documentation.sailpoint.com/saas/help/sources/managing_sources.html) refer to the IdentityNow representations for external applications, databases, and directory management systems that maintain their own sets of users, like Dropbox, GitHub, and Workday, for example. + [Sources](https://documentation.sailpoint.com/saas/help/sources/managing_sources.html) refer to the Identity Security Cloud representations for external applications, databases, and directory management systems that maintain their own sets of users, like Dropbox, GitHub, and Workday, for example. Organizations may use hundreds, if not thousands, of different source systems, and any one employee within an organization likely has a different user record on each source, often with different permissions on many of those records. - Connecting these sources to IdentityNow makes it possible to manage user access across them all. - Then, if a new hire starts at an organization, IdentityNow can grant the new hire access to all the sources they need. - If an employee moves to a new department and needs access to new sources but no longer needs access to others, IdentityNow can grant the necessary access and revoke the unnecessary access for all the employee's various sources. - If an employee leaves the company, IdentityNow can revoke access to all the employee's various source accounts immediately. + Connecting these sources to Identity Security Cloud makes it possible to manage user access across them all. + Then, if a new hire starts at an organization, Identity Security Cloud can grant the new hire access to all the sources they need. + If an employee moves to a new department and needs access to new sources but no longer needs access to others, Identity Security Cloud can grant the necessary access and revoke the unnecessary access for all the employee's various sources. + If an employee leaves the company, Identity Security Cloud can revoke access to all the employee's various source accounts immediately. These are just a few examples of the many ways that source functionality makes identity governance easier, more efficient, and more secure. - In IdentityNow, administrators can create configure, manage, and edit sources, and they can designate other users as source admins to be able to do so. + In Identity Security Cloud, administrators can create configure, manage, and edit sources, and they can designate other users as source admins to be able to do so. They can also designate users as source sub-admins, who can perform the same source actions but only on sources associated with their governance groups. Admins go to Connections > Sources to see a list of the existing source representations in their organizations. They can create new sources or select existing ones. @@ -814,17 +813,17 @@ tags: To create a new source, the following must be specified: Source Name, Description, Source Owner, and Connection Type. Refer to [Configuring a Source](https://documentation.sailpoint.com/saas/help/accounts/loading_data.html#configuring-a-source) for more information about the source configuration process. - IdentityNow connects with its sources either by a direct communication with the source server (connection information specific to the source must be provided) or a flat file feed, a CSV file containing all the relevant information about the accounts to be loaded in. - Different sources use different connectors to share data with IdentityNow, and each connector's setup process is specific to that connector. + Identity Security Cloud connects with its sources either by a direct communication with the source server (connection information specific to the source must be provided) or a flat file feed, a CSV file containing all the relevant information about the accounts to be loaded in. + Different sources use different connectors to share data with Identity Security Cloud, and each connector's setup process is specific to that connector. SailPoint has built a number of connectors to come out of the box and connect to the most common sources, and SailPoint actively maintains these connectors. - Refer to [IdentityNow Connectors](https://documentation.sailpoint.com/connectors/identitynow/landingpages/help/landingpages/identitynow_connectivity_landing.html) for more information about these SailPoint supported connectors. + Refer to [Identity Security Cloud Connectors](https://documentation.sailpoint.com/connectors/identitynow/landingpages/help/landingpages/identitynow_connectivity_landing.html) for more information about these SailPoint supported connectors. Refer to the following links for more information about two useful connectors: - [JDBC Connector](https://documentation.sailpoint.com/connectors/jdbc/help/integrating_jdbc/introduction.html): This customizable connector an directly connect to databases that support JDBC (Java Database Connectivity). - [Web Services Connector](https://documentation.sailpoint.com/connectors/webservices/help/integrating_webservices/introduction.html): This connector can directly connect to databases that support Web Services. - Refer to [SaaS Connectivity](https://developer.sailpoint.com/idn/docs/saas-connectivity) for more information about SailPoint's new connectivity framework that makes it easy to build and manage custom connectors to SaaS sources. + Refer to [SaaS Connectivity](https://developer.sailpoint.com/docs/connectivity/saas-connectivity/) for more information about SailPoint's new connectivity framework that makes it easy to build and manage custom connectors to SaaS sources. When admins select existing sources, they can view the following information about the source: @@ -837,12 +836,12 @@ tags: - Associated access profiles (groupings of entitlements). The user account data and the entitlements update with each data aggregation from the source. - Organizations generally run scheduled, automated data aggregations to ensure that their data is always in sync between their sources and their IdentityNow tenants so an access change on a source is detected quickly in IdentityNow. + Organizations generally run scheduled, automated data aggregations to ensure that their data is always in sync between their sources and their Identity Security Cloud tenants so an access change on a source is detected quickly in Identity Security Cloud. Admins can view a history of these aggregations, and they can also run manual imports. Refer to [Loading Account Data](https://documentation.sailpoint.com/saas/help/accounts/loading_data.html) for more information about manual and scheduled aggregations. - Admins can also make changes to determine which user account data IdentityNow collects from the source and how it correlates that account data with identity data. - To define which account attributes the source shares with IdentityNow, admins can edit the account schema on the source. + Admins can also make changes to determine which user account data Identity Security Cloud collects from the source and how it correlates that account data with identity data. + To define which account attributes the source shares with Identity Security Cloud, admins can edit the account schema on the source. Refer to [Managing Source Account Schemas](https://documentation.sailpoint.com/saas/help/accounts/schema.html) for more information about source account schemas and how to edit them. To define the mapping between the source account attributes and their correlating identity attributes, admins can edit the correlation configuration on the source. Refer to [Assigning Source Accounts to Identities](https://documentation.sailpoint.com/saas/help/accounts/correlation.html) for more information about this correlation process between source accounts and identities. @@ -850,14 +849,19 @@ tags: Admins can also delete sources, but they must first ensure that the sources no longer have any active connections: the source must not be associated with any identity profile or any app, and it must not be referenced by any transform. Refer to [Deleting Sources](https://documentation.sailpoint.com/saas/help/sources/managing_sources.html#deleting-sources) for more information about deleting sources. - Well organized, mapped out connections between sources and IdentityNow are essential to achieving comprehensive identity access governance across all the source systems organizations need. + Well organized, mapped out connections between sources and Identity Security Cloud are essential to achieving comprehensive identity access governance across all the source systems organizations need. Refer to [Managing Sources](https://documentation.sailpoint.com/saas/help/sources/managing_sources.html) for more information about all the different things admins can do with sources once they are connected. + - name: Source Usages + description: | + Use this API to implement source usage insight functionality. + With this functionality in place, administrators can gather information and insights about how their tenants' sources are being used. + This allows organizations to get the information they need to start optimizing and securing source usage. - name: Tagged Objects description: | Use this API to implement object tagging functionality. - With object tagging functionality in place, any user in an organization can use tags as a way to group objects together and find them more quickly when the user searches IdentityNow. + With object tagging functionality in place, any user in an organization can use tags as a way to group objects together and find them more quickly when the user searches Identity Security Cloud. - In IdentityNow, users can search their tenants for information and add tags objects they find. + In Identity Security Cloud, users can search their tenants for information and add tags objects they find. Tagging an object provides users with a way of grouping objects together and makes it easier to find these objects in the future. For example, if a user is searching for an entitlement that grants a risky level of access to Active Directory, it's possible that the user may have to search through hundreds of entitlements to find the correct one. @@ -865,7 +869,7 @@ tags: The user can add the same tag to multiple objects the user wants to group together for an easy future search, and the user can also do so in bulk. When the user wants to find that tagged entitlement again, the user can search for "tags:AD_RISKY" to find all objects with that tag. - With the API, you can tag even more different object types than you can in IdentityNow (access profiles, entitlements, identities, and roles). + With the API, you can tag even more different object types than you can in Identity Security Cloud (access profiles, entitlements, identities, and roles). You can use the API to tag all these objects: - Access profiles @@ -894,7 +898,7 @@ tags: - You can have up to 10,000 tag associations, pairings of 1 tag to 1 object, in your tenant. - Because of these limits, it is recommended that you work with your governance experts and security teams to establish a list of tags that are most expressive of governance objects and access managed by IdentityNow. + Because of these limits, it is recommended that you work with your governance experts and security teams to establish a list of tags that are most expressive of governance objects and access managed by Identity Security Cloud. These are the types of information often expressed in tags: @@ -906,7 +910,7 @@ tags: - Risk levels - Refer to [Tagging Items in Search](https://documentation.sailpoint.com/saas/help/search/index.html?h=tags#tagging-items-in-search) for more information about tagging objects in IdentityNow. + Refer to [Tagging Items in Search](https://documentation.sailpoint.com/saas/help/search/index.html?h=tags#tagging-items-in-search) for more information about tagging objects in Identity Security Cloud. - name: Transforms description: | The purpose of this API is to expose functionality for the manipulation of Transform objects. @@ -914,13 +918,13 @@ tags: to write code. These endpoints don't require API calls to other resources, audit service is used for keeping track of which users have made changes to the Transforms. - Refer to [Transforms](https://developer.sailpoint.com/idn/docs/transforms) for more information about transforms. + Refer to [Transforms](https://developer.sailpoint.com/docs/extensibility/transforms/) for more information about transforms. - name: Work Items description: | Use this API to implement work item functionality. With this functionality in place, users can manage their work items (tasks). - Work items refer to the tasks users see in IdentityNow's Task Manager. + Work items refer to the tasks users see in Identity Security Cloud's Task Manager. They can see the pending work items they need to complete, as well as the work items they have already completed. Task Manager lists the work items along with the involved sources, identities, accounts, and the timestamp when the work item was created. For example, a user may see a pending 'Create an Account' work item for the identity Fred.Astaire in GitHub for Fred's GitHub account, fred-astaire-sp. @@ -933,7 +937,7 @@ tags: Refer to [Task Manager](https://documentation.sailpoint.com/saas/user-help/task_manager.html) for more information about work items, including the different types of work items users may need to complete. - name: Workflows description: | - Workflows allow administrators to create custom automation scripts directly within IdentityNow. These automation scripts respond to [event triggers](https://developer.sailpoint.com/idn/docs/event-triggers#how-to-get-started-with-event-triggers) and perform a series of actions to perform tasks that are either too cumbersome or not available in the IdentityNow UI. Workflows can be configured via a graphical user interface within IdentityNow, or by creating and uploading a JSON formatted script to the Workflow service. The Workflows API collection provides the necessary functionality to create, manage, and test your workflows via REST. + Workflows allow administrators to create custom automation scripts directly within Identity Security Cloud. These automation scripts respond to [event triggers](https://developer.sailpoint.com/docs/extensibility/event-triggers/#how-to-get-started-with-event-triggers) and perform a series of actions to perform tasks that are either too cumbersome or not available in the Identity Security Cloud UI. Workflows can be configured via a graphical user interface within Identity Security Cloud, or by creating and uploading a JSON formatted script to the Workflow service. The Workflows API collection provides the necessary functionality to create, manage, and test your workflows via REST. paths: /access-profiles: $ref: './v3/paths/access-profiles.yaml' @@ -1053,6 +1057,14 @@ paths: $ref: "./v3/paths/certification-task.yaml" /certification-tasks: $ref: "./v3/paths/certification-tasks.yaml" + /configuration-hub/object-mappings/{sourceOrg}: + $ref: './v3/paths/configuration-hub/object-mapping.yaml' + /configuration-hub/object-mappings/{sourceOrg}/{objectMappingId}: + $ref: './v3/paths/configuration-hub/object-mapping-delete.yaml' + /configuration-hub/object-mappings/{sourceOrg}/bulk-create: + $ref: './v3/paths/configuration-hub/object-mapping-bulk-create.yaml' + /configuration-hub/object-mappings/{sourceOrg}/bulk-patch: + $ref: './v3/paths/configuration-hub/object-mapping-bulk-update.yaml' /connectors/{scriptName}: $ref: './v3/paths/connectors.yaml' /connectors/{scriptName}/source-config: @@ -1329,14 +1341,14 @@ components: type: oauth2 description: | OAuth2 Bearer token (JWT) generated using either a Personal Access token or through the Authorization Code flow. - See [IdentityNow REST API Authentication](https://developer.sailpoint.com/idn/api/authentication) for more information. - - Directions for generating a [personal access token](https://developer.sailpoint.com/idn/api/authentication#personal-access-tokens) - - Directions using [client credentials flow](https://developer.sailpoint.com/idn/api/authentication#client-credentials-grant-flow) - - Directions for using [authorization code flow](https://developer.sailpoint.com/idn/api/authentication#authorization-code-grant-flow) + See [Identity Security Cloud REST API Authentication](https://developer.sailpoint.com/docs/api/authentication/) for more information. + - Directions for generating a [personal access token](https://developer.sailpoint.com/docs/api/authentication/#personal-access-tokens) + - Directions using [client credentials flow](https://developer.sailpoint.com/docs/api/authentication/#client-credentials-grant-flow) + - Directions for using [authorization code flow](https://developer.sailpoint.com/docs/api/authentication/#authorization-code-grant-flow) - Which authentication method should I choose? See our [guide](https://developer.sailpoint.com/idn/api/authentication#which-oauth-20-grant-flow-should-i-use) + Which authentication method should I choose? See the [guide](https://developer.sailpoint.com/docs/api/authentication/#which-oauth-20-grant-flow-should-i-use). - Learn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/idn/api/authentication#find-your-tenants-oauth-details) + Learn more about how to find your `tokenUrl` and `authorizationUrl` [in the docs](https://developer.sailpoint.com/docs/api/authentication/#find-your-tenants-oauth-details). flows: clientCredentials: tokenUrl: https://tenant.api.identitynow.com/oauth/token @@ -1353,12 +1365,12 @@ components: type: oauth2 description: | OAuth2 Bearer token (JWT) generated using client credentials flow. - See [IdentityNow REST API Authentication](https://developer.sailpoint.com/idn/api/authentication) for more information. - - Directions using [client credentials flow](https://developer.sailpoint.com/idn/api/authentication#client-credentials-grant-flow) + See [Identity Security Cloud REST API Authentication](https://developer.sailpoint.com/docs/api/authentication/) for more information. + - Directions using [client credentials flow](https://developer.sailpoint.com/docs/api/authentication/#client-credentials-grant-flow) - Which authentication method should I choose? See our [guide](https://developer.sailpoint.com/idn/api/authentication#which-oauth-20-grant-flow-should-i-use) + Which authentication method should I choose? See the [guide](https://developer.sailpoint.com/docs/api/authentication/#which-oauth-20-grant-flow-should-i-use). - Learn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/idn/api/authentication#find-your-tenants-oauth-details) + Learn more about how to find your `tokenUrl` and `authorizationUrl` [in the docs](https://developer.sailpoint.com/docs/api/authentication/#find-your-tenants-oauth-details). flows: clientCredentials: tokenUrl: https://tenant.api.identitynow.com/oauth/token diff --git a/static/api-specs/idn/v3/paths/account.yaml b/static/api-specs/idn/v3/paths/account.yaml index 0fc59bef2..34b2aab0b 100644 --- a/static/api-specs/idn/v3/paths/account.yaml +++ b/static/api-specs/idn/v3/paths/account.yaml @@ -42,17 +42,15 @@ patch: - Accounts summary: Update Account description: >- - Use this API to update the account with a PATCH request. - - This endpoint can only modify these fields: + This updates account details. + A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. - * `identityId` - - * `manuallyCorrelated` - - The request must provide a JSONPatch payload. - - A token with ORG_ADMIN authority is required to call this API. + This endpoint supports updating an account's correlation. It can only modify the identityId and manuallyCorrelated + attributes. To re-assign an account from one identity to another, replace the current identityId with a new value. + If the account you're assigning was provisioned by IdentityNow, it's possible IdentityNow could create a new account + for the previous identity as soon as the account is moved. If the account you're assigning is authoritative, + this will cause the previous identity to become uncorrelated and could even result in its deletion. All accounts + that are are reassigned will be set to manuallyCorrelated: true. security: - UserContextAuth: [idn:accounts:manage] parameters: diff --git a/static/api-specs/idn/v3/paths/accounts-id-unlock.yaml b/static/api-specs/idn/v3/paths/accounts-id-unlock.yaml index 23f607db3..611322c8e 100644 --- a/static/api-specs/idn/v3/paths/accounts-id-unlock.yaml +++ b/static/api-specs/idn/v3/paths/accounts-id-unlock.yaml @@ -6,16 +6,18 @@ post: description: >- This API submits a task to unlock an account and returns the task ID. + To use this endpoint to unlock an account that has the `forceProvisioning` option set to true, the `idn:accounts-provisioning:manage` scope is required. + A token with ORG_ADMIN authority is required to call this API. security: - - UserContextAuth: [idn:accounts-state:manage] + - UserContextAuth: [idn:accounts-state:manage, idn:accounts-provisioning:manage] parameters: - in: path name: id schema: type: string required: true - description: The account id + description: The account ID. example: ef38f94347e94562b5bb8424a56397d8 requestBody: required: true diff --git a/static/api-specs/idn/v3/paths/branding.yaml b/static/api-specs/idn/v3/paths/branding.yaml index c4eb7b6f6..e7a23bfa1 100644 --- a/static/api-specs/idn/v3/paths/branding.yaml +++ b/static/api-specs/idn/v3/paths/branding.yaml @@ -8,7 +8,7 @@ get: A token with API, ORG_ADMIN authority is required to call this API. security: - - UserContextAuth: [ idn:branding:read ] + - UserContextAuth: [ ] parameters: - in: path name: name @@ -60,7 +60,7 @@ put: schema: $ref: '../schemas/BrandingItemCreate.yaml' security: - - UserContextAuth: [ idn:branding:write ] + - UserContextAuth: [ ] responses: '200': description: Branding item updated @@ -90,7 +90,7 @@ delete: A token with API, ORG_ADMIN authority is required to call this API. security: - - UserContextAuth: [ idn:branding:write ] + - UserContextAuth: [ ] parameters: - in: path name: name diff --git a/static/api-specs/idn/v3/paths/brandings.yaml b/static/api-specs/idn/v3/paths/brandings.yaml index 8e061aa71..41d19b4c5 100644 --- a/static/api-specs/idn/v3/paths/brandings.yaml +++ b/static/api-specs/idn/v3/paths/brandings.yaml @@ -9,7 +9,7 @@ get: A token with API, ORG_ADMIN authority is required to call this API. security: - - UserContextAuth: [ idn:branding:read ] + - UserContextAuth: [ ] responses: '200': description: A list of branding items. @@ -45,7 +45,7 @@ post: schema: $ref: '../schemas/BrandingItemCreate.yaml' security: - - UserContextAuth: [ idn:branding:write ] + - UserContextAuth: [ ] responses: '201': description: Branding item created diff --git a/static/api-specs/idn/v3/paths/configuration-hub/object-mapping-bulk-create.yaml b/static/api-specs/idn/v3/paths/configuration-hub/object-mapping-bulk-create.yaml new file mode 100644 index 000000000..3e0647744 --- /dev/null +++ b/static/api-specs/idn/v3/paths/configuration-hub/object-mapping-bulk-create.yaml @@ -0,0 +1,93 @@ +post: + operationId: createObjectMappings + security: + - UserContextAuth: [sp:config-object-mapping:manage] + tags: + - Configuration Hub + summary: Bulk creates object mappings + description: >- + This creates a set of object mappings (Max 25) between current org and source org. + + The request will need the following security scope: + + - sp:config-object-mapping:manage + parameters: + - in: path + name: sourceOrg + schema: + type: string + required: true + description: The name of the source org. + example: source-org + requestBody: + description: >- + The bulk create object mapping request body. + required: true + content: + application/json: + schema: + $ref: '../../schemas/configuration-hub/ObjectMappingBulkCreateRequest.yaml' + example: + { + "newObjectsMappings": [ + { + "objectType": "SOURCE", + "jsonPath": "$.name", + "sourceValue": "Original SOURCE Name", + "targetValue": "New SOURCE Name", + "enabled": true + }, + { + "objectType": "IDENTITY", + "jsonPath": "$.name", + "sourceValue": "Original IDENTITY Name", + "targetValue": "New IDENTITY Name ", + "enabled": true + } + ] + } + responses: + '200': + description: >- + The created object mapping between current org and source org. + content: + application/json: + schema: + $ref: '../../schemas/configuration-hub/ObjectMappingBulkCreateResponse.yaml' + example: + { + "addedObjects": [ + { + "objectMappingId": "603b1a61-d03d-4ed1-864f-a508fbd1995d", + "objectType": "SOURCE", + "jsonPath": "$.name", + "sourceValue": "Original SOURCE Name", + "targetValue": "New SOURCE Name", + "enabled": true, + "created": "2024-03-25T15:50:41.314Z", + "modified": "2024-03-25T15:50:41.299Z" + }, + { + "objectMappingId": "00bece34-f50d-4227-8878-76f620b5a971", + "objectType": "IDENTITY", + "jsonPath": "$.name", + "sourceValue": "Original IDENTITY Name", + "targetValue": "New IDENTITY Name ", + "enabled": true, + "created": "2024-03-25T15:50:41.316Z", + "modified": "2024-03-25T15:50:41.316Z" + } + ] + } + '400': + $ref: '../../responses/400.yaml' + '401': + $ref: '../../responses/401.yaml' + '403': + $ref: '../../responses/403.yaml' + '404': + $ref: '../../responses/404.yaml' + '429': + $ref: '../../responses/429.yaml' + '500': + $ref: '../../responses/500.yaml' \ No newline at end of file diff --git a/static/api-specs/idn/v3/paths/configuration-hub/object-mapping-bulk-update.yaml b/static/api-specs/idn/v3/paths/configuration-hub/object-mapping-bulk-update.yaml new file mode 100644 index 000000000..f914ac6a8 --- /dev/null +++ b/static/api-specs/idn/v3/paths/configuration-hub/object-mapping-bulk-update.yaml @@ -0,0 +1,93 @@ +post: + operationId: updateObjectMappings + security: + - UserContextAuth: [sp:config-object-mapping:manage] + tags: + - Configuration Hub + summary: Bulk updates object mappings + description: >- + This updates a set of object mappings, only enabled and targetValue fields can be updated. + + The request will need the following security scope: + + - sp:config-object-mapping:manage + parameters: + - in: path + name: sourceOrg + schema: + type: string + required: true + description: The name of the source org. + example: source-org + requestBody: + description: >- + The object mapping request body. + required: true + content: + application/json: + schema: + $ref: '../../schemas/configuration-hub/ObjectMappingBulkPatchRequest.yaml' + example: + { + "patches": { + "603b1a61-d03d-4ed1-864f-a508fbd1995d": [ + { + "op": "replace", + "path": "/enabled", + "value": true + } + ], + "00bece34-f50d-4227-8878-76f620b5a971": [ + { + "op": "replace", + "path": "/targetValue", + "value": "New Target Value" + } + ] + } + } + responses: + '200': + description: >- + The updated object mappings. + content: + application/json: + schema: + $ref: '../../schemas/configuration-hub/ObjectMappingBulkPatchResponse.yaml' + example: + { + "patchedObjects": [ + { + "objectMappingId": "603b1a61-d03d-4ed1-864f-a508fbd1995d", + "objectType": "SOURCE", + "jsonPath": "$.name", + "sourceValue": "Original SOURCE Name", + "targetValue": "New SOURCE Name", + "enabled": true, + "created": "2024-03-25T15:50:41.314Z", + "modified": "2024-03-25T15:50:41.299Z" + }, + { + "objectMappingId": "00bece34-f50d-4227-8878-76f620b5a971", + "objectType": "IDENTITY", + "jsonPath": "$.name", + "sourceValue": "Original IDENTITY Name", + "targetValue": "New IDENTITY Name ", + "enabled": true, + "created": "2024-03-25T15:50:41.316Z", + "modified": "2024-03-25T15:50:41.316Z" + } + ] + } + '400': + $ref: '../../responses/400.yaml' + '401': + $ref: '../../responses/401.yaml' + '403': + $ref: '../../responses/403.yaml' + '404': + $ref: '../../responses/404.yaml' + '429': + $ref: '../../responses/429.yaml' + '500': + $ref: '../../responses/500.yaml' \ No newline at end of file diff --git a/static/api-specs/idn/v3/paths/configuration-hub/object-mapping-delete.yaml b/static/api-specs/idn/v3/paths/configuration-hub/object-mapping-delete.yaml new file mode 100644 index 000000000..7f22b4ea1 --- /dev/null +++ b/static/api-specs/idn/v3/paths/configuration-hub/object-mapping-delete.yaml @@ -0,0 +1,43 @@ +delete: + operationId: deleteObjectMapping + security: + - UserContextAuth: [sp:config-object-mapping:manage] + tags: + - Configuration Hub + summary: Deletes an object mapping + description: >- + This deletes an existing object mapping. + + The request will need the following security scope: + + - sp:config-object-mapping:manage + parameters: + - in: path + name: sourceOrg + schema: + type: string + required: true + description: The name of the source org. + example: source-org + - in: path + name: objectMappingId + schema: + type: string + required: true + description: The id of the object mapping to be deleted. + example: 3d6e0144-963f-4bd6-8d8d-d77b4e507ce4 + responses: + '204': + $ref: '../../responses/204.yaml' + '400': + $ref: '../../responses/400.yaml' + '401': + $ref: '../../responses/401.yaml' + '403': + $ref: '../../responses/403.yaml' + '404': + $ref: '../../responses/404.yaml' + '429': + $ref: '../../responses/429.yaml' + '500': + $ref: '../../responses/500.yaml' \ No newline at end of file diff --git a/static/api-specs/idn/v3/paths/configuration-hub/object-mapping.yaml b/static/api-specs/idn/v3/paths/configuration-hub/object-mapping.yaml new file mode 100644 index 000000000..b13e14d31 --- /dev/null +++ b/static/api-specs/idn/v3/paths/configuration-hub/object-mapping.yaml @@ -0,0 +1,134 @@ +get: + operationId: getObjectMappings + security: + - UserContextAuth: [sp:config-object-mapping:read, sp:config-object-mapping:manage] + tags: + - Configuration Hub + summary: Gets list of object mappings + description: >- + This gets a list of existing object mappings between current org and source org. + + The request will need the following security scope: + + - sp:config-object-mapping:read + parameters: + - in: path + name: sourceOrg + schema: + type: string + required: true + description: The name of the source org. + example: source-org + responses: + '200': + description: >- + List of existing object mappings between current org and source org. + content: + application/json: + schema: + type: array + items: + $ref: '../../schemas/configuration-hub/ObjectMappingResponse.yaml' + example: + [ + { + "objectMappingId": "3d6e0144-963f-4bd6-8d8d-d77b4e507ce4", + "objectType": "GOVERNANCE_GROUP", + "jsonPath": "$.description", + "sourceValue": "Sample Governance Group", + "targetValue": "Sample Governance Group - Updated", + "enabled": true, + "created": "2024-03-19T23:18:53.732Z", + "modified": "2024-03-19T23:18:53.732Z" + }, + { + "objectMappingId": "e1d5cb80-65e2-4f92-ae2e-9588f61cc4cd", + "objectType": "IDENTITY", + "jsonPath": "$.name", + "sourceValue": "SailPoint Support", + "targetValue": "john.doe", + "enabled": false, + "created": "2024-03-19T23:18:06.238Z", + "modified": "2024-03-19T23:18:06.238Z" + } + ] + '400': + $ref: '../../responses/400.yaml' + '401': + $ref: '../../responses/401.yaml' + '403': + $ref: '../../responses/403.yaml' + '404': + $ref: '../../responses/404.yaml' + '429': + $ref: '../../responses/429.yaml' + '500': + $ref: '../../responses/500.yaml' +post: + operationId: createObjectMapping + security: + - UserContextAuth: [sp:config-object-mapping:manage] + tags: + - Configuration Hub + summary: Creates an object mapping + description: >- + This creates an object mapping between current org and source org. + + The request will need the following security scope: + + - sp:config-object-mapping:manage + parameters: + - in: path + name: sourceOrg + schema: + type: string + required: true + description: The name of the source org. + example: source-org + requestBody: + description: >- + The object mapping request body. + required: true + content: + application/json: + schema: + $ref: '../../schemas/configuration-hub/ObjectMappingRequest.yaml' + example: + { + "objectType": "GOVERNANCE_GROUP", + "jsonPath": "$.description", + "sourceValue": "Sample Governance Group", + "targetValue": "Sample Governance Group - Updated", + "enabled": true + } + responses: + '200': + description: >- + The created object mapping between current org and source org. + content: + application/json: + schema: + $ref: '../../schemas/configuration-hub/ObjectMappingResponse.yaml' + example: + { + "objectMappingId": "3d6e0144-963f-4bd6-8d8d-d77b4e507ce4", + "objectType": "GOVERNANCE_GROUP", + "jsonPath": "$.description", + "sourceValue": "Sample Governance Group", + "targetValue": "Sample Governance Group - Updated", + "enabled": true, + "created": "2024-03-19T23:18:53.732Z", + "modified": "2024-03-19T23:18:53.732Z" + } + '400': + $ref: '../../responses/400.yaml' + '401': + $ref: '../../responses/401.yaml' + '403': + $ref: '../../responses/403.yaml' + '404': + $ref: '../../responses/404.yaml' + '429': + $ref: '../../responses/429.yaml' + '500': + $ref: '../../responses/500.yaml' \ No newline at end of file diff --git a/static/api-specs/idn/v3/paths/identity-profile-process-identities.yaml b/static/api-specs/idn/v3/paths/identity-profile-process-identities.yaml index 8372a8c25..34547dce2 100644 --- a/static/api-specs/idn/v3/paths/identity-profile-process-identities.yaml +++ b/static/api-specs/idn/v3/paths/identity-profile-process-identities.yaml @@ -6,8 +6,21 @@ post: description: >- Process identities under the profile + This operation should not be used to schedule your own identity processing or to perform system wide identity refreshes. The system will use a combination of [event-based processing](https://documentation.sailpoint.com/saas/help/setup/identity_processing.html?h=process#event-based-processing) and [scheduled processing](https://documentation.sailpoint.com/saas/help/setup/identity_processing.html?h=process#scheduled-processing) that runs every day at 8:00 AM and 8:00 PM in the tenant's timezone to keep your identities synchronized. + + This should only be run on identity profiles that have the `identityRefreshRequired` attribute set to `true`. If `identityRefreshRequired` is false, then there is no benefit to running this operation. Typically, this operation is performed when a change is made to the identity profile or its related lifecycle states that requires a refresh. + + This operation will perform the following activities on all identities under the identity profile. + + 1. Updates identity attribute according to the identity profile mappings. + 2. Determines the identity's correct manager through manager correlation. + 3. Updates the identity's access according to their assigned lifecycle state. + 4. Updates the identity's access based on role assignment criteria. A token with ORG_ADMIN authority is required to call this API. + externalDocs: + description: 'Learn more about manually processing identities here' + url: 'https://documentation.sailpoint.com/saas/help/setup/identity_processing.html' parameters: - in: path name: identity-profile-id diff --git a/static/api-specs/idn/v3/paths/identity-set-lifecycle-state.yaml b/static/api-specs/idn/v3/paths/identity-set-lifecycle-state.yaml index b83e0bc00..7c9f9c20d 100644 --- a/static/api-specs/idn/v3/paths/identity-set-lifecycle-state.yaml +++ b/static/api-specs/idn/v3/paths/identity-set-lifecycle-state.yaml @@ -4,7 +4,7 @@ post: - Lifecycle States summary: Set Lifecycle State description: >- - This endpoint will set/update an identity's lifecycle state to the one provided and updates the corresponding Identity Profile. + This endpoint will set/update an identity's lifecycle state to the one provided and updates the corresponding identity profile. A token with ORG_ADMIN or API authority is required to call this API. security: @@ -13,7 +13,7 @@ post: - in: path name: identity-id description: >- - The ID of the identity to update + The ID of the identity to update. required: true example: 2c9180857893f1290178944561990364 schema: @@ -27,7 +27,7 @@ post: properties: lifecycleStateId: type: string - description: The ID of the lifecycle state to set + description: The ID of the lifecycle state to set. example: 2c9180877a86e408017a8c19fefe046c responses: '200': @@ -40,7 +40,7 @@ post: accountActivityId: type: string example: 2c9180837ab5b716017ab7c6c9ef1e20 - description: The ID of the IdentityRequest object that was generated when the workflow launches + description: The ID of the IdentityRequest object that is generated when the workflow launches. To follow the IdentityRequest, you can provide this ID with a [Get Account Activity request](https://developer.sailpoint.com/docs/api/v3/get-account-activity/). The response will contain relevant information about the IdentityRequest, such as its status. '400': $ref: '../responses/400.yaml' '401': diff --git a/static/api-specs/idn/v3/paths/role.yaml b/static/api-specs/idn/v3/paths/role.yaml index 2cda51441..d0cce05d4 100644 --- a/static/api-specs/idn/v3/paths/role.yaml +++ b/static/api-specs/idn/v3/paths/role.yaml @@ -44,19 +44,28 @@ patch: - Roles summary: Patch a specified Role description: >- - This API updates an existing Role using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax. - + This API updates an existing role using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax. The following fields are patchable: - **name**, **description**, **enabled**, **owner**, **accessProfiles**, **membership**, **requestable**, - **accessRequestConfig**, **revokeRequestConfig**, **segments** + * name + * description + * enabled + * owner + * accessProfiles + * membership + * requestable + * accessRequestConfig + * revokeRequestConfig + * segments A token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a - token with ROLE_SUBADMIN authority may only call this API if all Access Profiles included in the Role are associated + token with ROLE_SUBADMIN authority may only call this API if all access profiles included in the role are associated to Sources with management workgroups of which the ROLE_SUBADMIN is a member. The maximum supported length for the description field is 2000 characters. Longer descriptions will be preserved for existing roles, however, any new roles as well as any updates to existing descriptions will be limited to 2000 characters. + + When you use this API to modify a role's membership identities, you can only modify up to a limit of 500 membership identities at a time. parameters: - name: id in: path diff --git a/static/api-specs/idn/v3/paths/set-password.yaml b/static/api-specs/idn/v3/paths/set-password.yaml index efa8b7856..fa1928fba 100644 --- a/static/api-specs/idn/v3/paths/set-password.yaml +++ b/static/api-specs/idn/v3/paths/set-password.yaml @@ -6,11 +6,13 @@ post: description: | This API is used to set a password for an identity. - An identity can change their own password (as well as any of their accounts' passwords) if they use a token generated by their IDN user, such as a [personal access token](https://developer.sailpoint.com/idn/api/authentication#personal-access-tokens) or ["authorization_code" derived OAuth token](https://developer.sailpoint.com/idn/api/authentication#authorization-code-grant-flow). + An identity can change their own password (as well as any of their accounts' passwords) if they use a token generated by their ISC user, such as a [personal access token](https://developer.sailpoint.com/idn/api/authentication#personal-access-tokens) or ["authorization_code" derived OAuth token](https://developer.sailpoint.com/idn/api/authentication#authorization-code-grant-flow). A token with [API authority](https://developer.sailpoint.com/idn/api/authentication#client-credentials-grant-flow) can be used to change **any** identity's password or the password of any of the identity's accounts. "API authority" refers to a token that only has the "client_credentials" grant type. + >**Note: If you want to set an identity's source account password, you must enable `PASSWORD` as one of the source's features. You can use the [PATCH Source endpoint](https://developer.sailpoint.com/docs/api/v3/update-source) to add the `PASSWORD` feature.** + You can use this endpoint to generate an `encryptedPassword` (RSA encrypted using publicKey). To do so, follow these steps: diff --git a/static/api-specs/idn/v3/paths/sources.yaml b/static/api-specs/idn/v3/paths/sources.yaml index 64c1ee466..995eb6ea8 100644 --- a/static/api-specs/idn/v3/paths/sources.yaml +++ b/static/api-specs/idn/v3/paths/sources.yaml @@ -65,6 +65,9 @@ get: **connectorName**: *eq, ge, gt, in, ne, isnull, sw* + + + **category**: *co, eq, ge, gt, in, le, lt, ne, sw* - in: query name: sorters schema: diff --git a/static/api-specs/idn/v3/schemas/OwnerDto.yaml b/static/api-specs/idn/v3/schemas/OwnerDto.yaml index 9d9695641..9ed10ef28 100644 --- a/static/api-specs/idn/v3/schemas/OwnerDto.yaml +++ b/static/api-specs/idn/v3/schemas/OwnerDto.yaml @@ -13,5 +13,5 @@ properties: example: 2c9180a46faadee4016fb4e018c20639 name: type: string - description: Owner's display name. + description: Owner's name. example: Support diff --git a/static/api-specs/idn/v3/schemas/Source.yaml b/static/api-specs/idn/v3/schemas/Source.yaml index 16f304b07..0942c615f 100644 --- a/static/api-specs/idn/v3/schemas/Source.yaml +++ b/static/api-specs/idn/v3/schemas/Source.yaml @@ -312,6 +312,19 @@ properties: description: The date-time when the source was last modified format: date-time example: 2024-01-23T18:08:50.897Z + credentialProviderEnabled: + type: boolean + description: >- + Enables credential provider for this source. If credentialProvider is turned on + then source can use credential provider(s) to fetch credentials. + default: false + example: false + category: + type: string + nullable: true + default: null + description: The category of source (e.g. null, CredentialProvider) + example: "CredentialProvider" required: - name - owner diff --git a/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingBulkCreateRequest.yaml b/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingBulkCreateRequest.yaml new file mode 100644 index 000000000..79ec30657 --- /dev/null +++ b/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingBulkCreateRequest.yaml @@ -0,0 +1,9 @@ +type: object +title: Bulk Create Object Mapping Request +required: + - newObjectMappings +properties: + newObjectMappings: + type: array + items: + $ref: '../../../v3/schemas/configuration-hub/ObjectMappingRequest.yaml' \ No newline at end of file diff --git a/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingBulkCreateResponse.yaml b/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingBulkCreateResponse.yaml new file mode 100644 index 000000000..0aa66f8fc --- /dev/null +++ b/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingBulkCreateResponse.yaml @@ -0,0 +1,7 @@ +type: object +title: Bulk Create Object Mapping Response +properties: + addedObjects: + type: array + items: + $ref: '../../../v3/schemas/configuration-hub/ObjectMappingResponse.yaml' \ No newline at end of file diff --git a/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingBulkPatchRequest.yaml b/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingBulkPatchRequest.yaml new file mode 100644 index 000000000..f1bc7477a --- /dev/null +++ b/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingBulkPatchRequest.yaml @@ -0,0 +1,30 @@ +type: object +title: Bulk Update Object Mapping Request +required: + - patches +properties: + patches: + description: >- + Map of id of the object mapping to a JsonPatchOperation describing what to patch on that object mapping. + type: object + additionalProperties: + type: array + items: + $ref: '../../schemas/JsonPatchOperation.yaml' + example: + { + "603b1a61-d03d-4ed1-864f-a508fbd1995d": [ + { + "op": "replace", + "path": "/enabled", + "value": true + } + ], + "00bece34-f50d-4227-8878-76f620b5a971": [ + { + "op": "replace", + "path": "/targetValue", + "value": "New Target Value" + } + ] + } diff --git a/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingBulkPatchResponse.yaml b/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingBulkPatchResponse.yaml new file mode 100644 index 000000000..bda7d9e76 --- /dev/null +++ b/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingBulkPatchResponse.yaml @@ -0,0 +1,7 @@ +type: object +title: Bulk Update Object Mapping Response +properties: + patchedObjects: + type: array + items: + $ref: '../../../v3/schemas/configuration-hub/ObjectMappingResponse.yaml' \ No newline at end of file diff --git a/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingRequest.yaml b/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingRequest.yaml new file mode 100644 index 000000000..ddea1e67f --- /dev/null +++ b/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingRequest.yaml @@ -0,0 +1,56 @@ +type: object +title: Object Mapping Request +required: + - objectType + - jsonPath + - sourceValue + - targetValue +properties: + objectType: + type: string + description: Type of the object the mapping value applies to, must be one from enum + example: IDENTITY + enum: + - ACCESS_PROFILE + - ACCESS_REQUEST_CONFIG + - ATTR_SYNC_SOURCE_CONFIG + - AUTH_ORG + - CAMPAIGN_FILTER + - ENTITLEMENT + - FORM_DEFINITION + - GOVERNANCE_GROUP + - IDENTITY + - IDENTITY_OBJECT_CONFIG + - IDENTITY_PROFILE + - LIFECYCLE_STATE + - NOTIFICATION_TEMPLATE + - PASSWORD_POLICY + - PASSWORD_SYNC_GROUP + - PUBLIC_IDENTITIES_CONFIG + - ROLE + - RULE + - SEGMENT + - SERVICE_DESK_INTEGRATION + - SOD_POLICY + - SOURCE + - TAG + - TRANSFORM + - TRIGGER_SUBSCRIPTION + - WORKFLOW + jsonPath: + type: string + description: JSONPath expression denoting the path within the object where the mapping value should be applied + example: $.name + sourceValue: + type: string + description: Original value at the jsonPath location within the object + example: My Governance Group Name + targetValue: + type: string + description: Value to be assigned at the jsonPath location within the object + example: My New Governance Group Name + enabled: + type: boolean + description: Whether or not this object mapping is enabled + default: false + example: false \ No newline at end of file diff --git a/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingResponse.yaml b/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingResponse.yaml new file mode 100644 index 000000000..c15350aef --- /dev/null +++ b/static/api-specs/idn/v3/schemas/configuration-hub/ObjectMappingResponse.yaml @@ -0,0 +1,63 @@ +type: object +title: Object Mapping Response +properties: + objectMappingId: + type: string + description: Id of the object mapping + example: 3d6e0144-963f-4bd6-8d8d-d77b4e507ce4 + objectType: + type: string + description: Type of the object the mapping value applies to + example: IDENTITY + enum: + - ACCESS_PROFILE + - ACCESS_REQUEST_CONFIG + - ATTR_SYNC_SOURCE_CONFIG + - AUTH_ORG + - CAMPAIGN_FILTER + - ENTITLEMENT + - FORM_DEFINITION + - GOVERNANCE_GROUP + - IDENTITY + - IDENTITY_OBJECT_CONFIG + - IDENTITY_PROFILE + - LIFECYCLE_STATE + - NOTIFICATION_TEMPLATE + - PASSWORD_POLICY + - PASSWORD_SYNC_GROUP + - PUBLIC_IDENTITIES_CONFIG + - ROLE + - RULE + - SEGMENT + - SERVICE_DESK_INTEGRATION + - SOD_POLICY + - SOURCE + - TAG + - TRANSFORM + - TRIGGER_SUBSCRIPTION + - WORKFLOW + jsonPath: + type: string + description: JSONPath expression denoting the path within the object where the mapping value should be applied + example: $.name + sourceValue: + type: string + description: Original value at the jsonPath location within the object + example: My Governance Group Name + targetValue: + type: string + description: Value to be assigned at the jsonPath location within the object + example: My New Governance Group Name + enabled: + type: boolean + description: Whether or not this object mapping is enabled + default: false + example: false + created: + type: string + description: Object mapping creation timestamp + example: 2024-03-19T23:18:53.732Z + modified: + type: string + description: Object mapping latest update timestamp + example: 2024-03-19T23:18:53.732Z \ No newline at end of file diff --git a/static/api-specs/idn/v3/schemas/identity-attributes/IdentityAttribute.yaml b/static/api-specs/idn/v3/schemas/identity-attributes/IdentityAttribute.yaml index 274058962..a00f8c244 100644 --- a/static/api-specs/idn/v3/schemas/identity-attributes/IdentityAttribute.yaml +++ b/static/api-specs/idn/v3/schemas/identity-attributes/IdentityAttribute.yaml @@ -1,39 +1,41 @@ type: object +required: + - name properties: name: type: string - description: The technical name of the identity attribute + description: Identity attribute's technical name. example: 'uid' displayName: type: string - description: The business-friendly name of the identity attribute - example: 'IdentityNow Username' + description: Identity attribute's business-friendly name. + example: 'Identity Security Cloud Username' standard: type: boolean - description: Shows if the attribute is 'standard' or default + description: Indicates whether the attribute is 'standard' or 'default'. default: false example: true type: type: string - description: The type of the identity attribute + description: Identity attribute's type. example: 'string' multi: type: boolean - description: Shows if the identity attribute is multi-valued + description: Indicates whether the identity attribute is multi-valued. default: false example: false searchable: type: boolean - description: Shows if the identity attribute is searchable + description: Indicates whether the identity attribute is searchable. default: false example: true system: type: boolean - description: Shows this is 'system' identity attribute that does not have a source and is not configurable. + description: Indicates whether the identity attribute is 'system', meaning that it doesn't have a source and isn't configurable. default: false example: false sources: - description: List of sources for an attribute, this specifies how the value of the rule is derived + description: Identity attribute's list of sources - this specifies how the rule's value is derived. type: array items: $ref: "../identity-attributes/Source.yaml" diff --git a/static/api-specs/idn/v3/schemas/identity-attributes/Source.yaml b/static/api-specs/idn/v3/schemas/identity-attributes/Source.yaml index bf6f452de..5168ce570 100644 --- a/static/api-specs/idn/v3/schemas/identity-attributes/Source.yaml +++ b/static/api-specs/idn/v3/schemas/identity-attributes/Source.yaml @@ -2,9 +2,9 @@ type: object properties: type: type: string - description: The type of the source + description: Source type. example: 'rule' properties: type: object - description: The source properties + description: Source properties. example: { "attribute": null,"sourceName": "Employees" } diff --git a/static/api-specs/nerm/requestBodies/PATCH/Attribute.yaml b/static/api-specs/nerm/requestBodies/PATCH/Attribute.yaml index ad70eeca1..93507de57 100644 --- a/static/api-specs/nerm/requestBodies/PATCH/Attribute.yaml +++ b/static/api-specs/nerm/requestBodies/PATCH/Attribute.yaml @@ -4,6 +4,6 @@ content: schema: type: object properties: - ne_attribute_option: + ne_attribute: type: object $ref: "../../schemas/PATCH/Attribute.yaml" \ No newline at end of file diff --git a/static/api-specs/nerm/requestBodies/POST/Attribute.yaml b/static/api-specs/nerm/requestBodies/POST/Attribute.yaml index 4f22691cd..76acdab2a 100644 --- a/static/api-specs/nerm/requestBodies/POST/Attribute.yaml +++ b/static/api-specs/nerm/requestBodies/POST/Attribute.yaml @@ -4,6 +4,6 @@ content: schema: type: object properties: - ne_attribute_option: + ne_attribute: type: object $ref: "../../schemas/POST/Attribute.yaml" \ No newline at end of file diff --git a/static/homepage/IdentityIQ-dark.svg b/static/homepage/IdentityIQ-dark.svg new file mode 100644 index 000000000..8e43e6a9b --- /dev/null +++ b/static/homepage/IdentityIQ-dark.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/homepage/IdentityIQ.svg b/static/homepage/IdentityIQ.svg new file mode 100644 index 000000000..c7006defc --- /dev/null +++ b/static/homepage/IdentityIQ.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/homepage/SailPointIdentitySecurityCloud-dark.svg b/static/homepage/SailPointIdentitySecurityCloud-dark.svg new file mode 100644 index 000000000..2e2a696bc --- /dev/null +++ b/static/homepage/SailPointIdentitySecurityCloud-dark.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/homepage/SailPointIdentitySecurityCloud.svg b/static/homepage/SailPointIdentitySecurityCloud.svg new file mode 100644 index 000000000..7999f8e36 --- /dev/null +++ b/static/homepage/SailPointIdentitySecurityCloud.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/homepage/cloud-dark.png b/static/homepage/cloud-dark-dark.png similarity index 100% rename from static/homepage/cloud-dark.png rename to static/homepage/cloud-dark-dark.png diff --git a/static/homepage/cloud-data-dark.svg b/static/homepage/cloud-data-dark.svg new file mode 100644 index 000000000..54f4c85a4 --- /dev/null +++ b/static/homepage/cloud-data-dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/homepage/cloud-data.svg b/static/homepage/cloud-data.svg new file mode 100644 index 000000000..f71704ad5 --- /dev/null +++ b/static/homepage/cloud-data.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/homepage/connectivity-dark.svg b/static/homepage/connectivity-dark.svg new file mode 100644 index 000000000..fe973118e --- /dev/null +++ b/static/homepage/connectivity-dark.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/static/homepage/connectivity.svg b/static/homepage/connectivity.svg new file mode 100644 index 000000000..e7fa039c4 --- /dev/null +++ b/static/homepage/connectivity.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/static/homepage/derek-putnam.png b/static/homepage/derek-putnam.png new file mode 100644 index 000000000..376201c30 Binary files /dev/null and b/static/homepage/derek-putnam.png differ diff --git a/static/homepage/devdays2024-dark-sm.png b/static/homepage/devdays2024-dark-sm.png new file mode 100644 index 000000000..a738c0cbf Binary files /dev/null and b/static/homepage/devdays2024-dark-sm.png differ diff --git a/static/homepage/devdays2024-sm.png b/static/homepage/devdays2024-sm.png new file mode 100644 index 000000000..dd111b1d4 Binary files /dev/null and b/static/homepage/devdays2024-sm.png differ diff --git a/static/homepage/flow-chart-dark.svg b/static/homepage/flow-chart-dark.svg new file mode 100644 index 000000000..e3fc9ba00 --- /dev/null +++ b/static/homepage/flow-chart-dark.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/static/homepage/flow-chart.svg b/static/homepage/flow-chart.svg new file mode 100644 index 000000000..da6d42772 --- /dev/null +++ b/static/homepage/flow-chart.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/static/homepage/lukehagar.png b/static/homepage/lukehagar.png deleted file mode 100644 index 62f2d6df0..000000000 Binary files a/static/homepage/lukehagar.png and /dev/null differ diff --git a/static/homepage/process-dark.svg b/static/homepage/process-dark.svg new file mode 100644 index 000000000..2b578c307 --- /dev/null +++ b/static/homepage/process-dark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/static/homepage/process.svg b/static/homepage/process.svg new file mode 100644 index 000000000..0ccf9aca7 --- /dev/null +++ b/static/homepage/process.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/static/homepage/puzzle-dark.svg b/static/homepage/puzzle-dark.svg new file mode 100644 index 000000000..eddd1fcb8 --- /dev/null +++ b/static/homepage/puzzle-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/homepage/puzzle.svg b/static/homepage/puzzle.svg new file mode 100644 index 000000000..734927bac --- /dev/null +++ b/static/homepage/puzzle.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/rule-java-docs/allclasses-frame.html b/static/rule-java-docs/allclasses-frame.html index a47370ff0..7832d55d0 100644 --- a/static/rule-java-docs/allclasses-frame.html +++ b/static/rule-java-docs/allclasses-frame.html @@ -2,9 +2,9 @@ - + All Classes - + diff --git a/static/rule-java-docs/allclasses-noframe.html b/static/rule-java-docs/allclasses-noframe.html index 24f6bd664..87c81243f 100644 --- a/static/rule-java-docs/allclasses-noframe.html +++ b/static/rule-java-docs/allclasses-noframe.html @@ -2,9 +2,9 @@ - + All Classes - + diff --git a/static/rule-java-docs/connector/common/JsonUtil.JsonParser.html b/static/rule-java-docs/connector/common/JsonUtil.JsonParser.html index d126581c3..acb4a8dd8 100644 --- a/static/rule-java-docs/connector/common/JsonUtil.JsonParser.html +++ b/static/rule-java-docs/connector/common/JsonUtil.JsonParser.html @@ -2,9 +2,9 @@ - + JsonUtil.JsonParser - + diff --git a/static/rule-java-docs/connector/common/JsonUtil.JsonParserBuilder.html b/static/rule-java-docs/connector/common/JsonUtil.JsonParserBuilder.html index 9bf298a87..fc3c985d5 100644 --- a/static/rule-java-docs/connector/common/JsonUtil.JsonParserBuilder.html +++ b/static/rule-java-docs/connector/common/JsonUtil.JsonParserBuilder.html @@ -2,9 +2,9 @@ - + JsonUtil.JsonParserBuilder - + diff --git a/static/rule-java-docs/connector/common/JsonUtil.html b/static/rule-java-docs/connector/common/JsonUtil.html index e5bd370c6..4750a4047 100644 --- a/static/rule-java-docs/connector/common/JsonUtil.html +++ b/static/rule-java-docs/connector/common/JsonUtil.html @@ -2,9 +2,9 @@ - + JsonUtil - + diff --git a/static/rule-java-docs/connector/common/Util.html b/static/rule-java-docs/connector/common/Util.html index 598b147af..f29c38c91 100644 --- a/static/rule-java-docs/connector/common/Util.html +++ b/static/rule-java-docs/connector/common/Util.html @@ -2,9 +2,9 @@ - + Util - + diff --git a/static/rule-java-docs/connector/common/package-frame.html b/static/rule-java-docs/connector/common/package-frame.html index 203a01f66..661a30980 100644 --- a/static/rule-java-docs/connector/common/package-frame.html +++ b/static/rule-java-docs/connector/common/package-frame.html @@ -2,9 +2,9 @@ - + connector.common - + diff --git a/static/rule-java-docs/connector/common/package-summary.html b/static/rule-java-docs/connector/common/package-summary.html index 757e5f07f..4859e0f79 100644 --- a/static/rule-java-docs/connector/common/package-summary.html +++ b/static/rule-java-docs/connector/common/package-summary.html @@ -2,9 +2,9 @@ - + connector.common - + diff --git a/static/rule-java-docs/connector/common/package-tree.html b/static/rule-java-docs/connector/common/package-tree.html index a8be9fbad..0c441d0f6 100644 --- a/static/rule-java-docs/connector/common/package-tree.html +++ b/static/rule-java-docs/connector/common/package-tree.html @@ -2,9 +2,9 @@ - + connector.common Class Hierarchy - + diff --git a/static/rule-java-docs/constant-values.html b/static/rule-java-docs/constant-values.html index 9cdfab665..1d1e09d14 100644 --- a/static/rule-java-docs/constant-values.html +++ b/static/rule-java-docs/constant-values.html @@ -2,9 +2,9 @@ - + Constant Field Values - + diff --git a/static/rule-java-docs/deprecated-list.html b/static/rule-java-docs/deprecated-list.html index 349ccfc5f..62a85cb99 100644 --- a/static/rule-java-docs/deprecated-list.html +++ b/static/rule-java-docs/deprecated-list.html @@ -2,9 +2,9 @@ - + Deprecated List - + diff --git a/static/rule-java-docs/help-doc.html b/static/rule-java-docs/help-doc.html index b81b2c3e7..0a733e201 100644 --- a/static/rule-java-docs/help-doc.html +++ b/static/rule-java-docs/help-doc.html @@ -2,9 +2,9 @@ - + API Help - + diff --git a/static/rule-java-docs/index-files/index-1.html b/static/rule-java-docs/index-files/index-1.html index 99453f079..ba716e65d 100644 --- a/static/rule-java-docs/index-files/index-1.html +++ b/static/rule-java-docs/index-files/index-1.html @@ -2,9 +2,9 @@ - + A-Index - + diff --git a/static/rule-java-docs/index-files/index-10.html b/static/rule-java-docs/index-files/index-10.html index 63bfdfadb..2d6367c5d 100644 --- a/static/rule-java-docs/index-files/index-10.html +++ b/static/rule-java-docs/index-files/index-10.html @@ -2,9 +2,9 @@ - + J-Index - + diff --git a/static/rule-java-docs/index-files/index-11.html b/static/rule-java-docs/index-files/index-11.html index 837b20257..c9b050d28 100644 --- a/static/rule-java-docs/index-files/index-11.html +++ b/static/rule-java-docs/index-files/index-11.html @@ -2,9 +2,9 @@ - + L-Index - + diff --git a/static/rule-java-docs/index-files/index-12.html b/static/rule-java-docs/index-files/index-12.html index b0c80d4a9..44e032d39 100644 --- a/static/rule-java-docs/index-files/index-12.html +++ b/static/rule-java-docs/index-files/index-12.html @@ -2,9 +2,9 @@ - + M-Index - + diff --git a/static/rule-java-docs/index-files/index-13.html b/static/rule-java-docs/index-files/index-13.html index 249c5ba09..eae74d335 100644 --- a/static/rule-java-docs/index-files/index-13.html +++ b/static/rule-java-docs/index-files/index-13.html @@ -2,9 +2,9 @@ - + N-Index - + diff --git a/static/rule-java-docs/index-files/index-14.html b/static/rule-java-docs/index-files/index-14.html index d6dab0655..63fbb906c 100644 --- a/static/rule-java-docs/index-files/index-14.html +++ b/static/rule-java-docs/index-files/index-14.html @@ -2,9 +2,9 @@ - + O-Index - + diff --git a/static/rule-java-docs/index-files/index-15.html b/static/rule-java-docs/index-files/index-15.html index 9b8169571..aff1cdf15 100644 --- a/static/rule-java-docs/index-files/index-15.html +++ b/static/rule-java-docs/index-files/index-15.html @@ -2,9 +2,9 @@ - + P-Index - + diff --git a/static/rule-java-docs/index-files/index-16.html b/static/rule-java-docs/index-files/index-16.html index 98f5a061e..4ba2a9cb0 100644 --- a/static/rule-java-docs/index-files/index-16.html +++ b/static/rule-java-docs/index-files/index-16.html @@ -2,9 +2,9 @@ - + Q-Index - + diff --git a/static/rule-java-docs/index-files/index-17.html b/static/rule-java-docs/index-files/index-17.html index 73d905ea8..45de628de 100644 --- a/static/rule-java-docs/index-files/index-17.html +++ b/static/rule-java-docs/index-files/index-17.html @@ -2,9 +2,9 @@ - + R-Index - + diff --git a/static/rule-java-docs/index-files/index-18.html b/static/rule-java-docs/index-files/index-18.html index b32168abe..36fc3efc6 100644 --- a/static/rule-java-docs/index-files/index-18.html +++ b/static/rule-java-docs/index-files/index-18.html @@ -2,9 +2,9 @@ - + S-Index - + diff --git a/static/rule-java-docs/index-files/index-19.html b/static/rule-java-docs/index-files/index-19.html index 4fbd39634..8ae5f4343 100644 --- a/static/rule-java-docs/index-files/index-19.html +++ b/static/rule-java-docs/index-files/index-19.html @@ -2,9 +2,9 @@ - + T-Index - + diff --git a/static/rule-java-docs/index-files/index-2.html b/static/rule-java-docs/index-files/index-2.html index e01b0b656..3efbd6fbc 100644 --- a/static/rule-java-docs/index-files/index-2.html +++ b/static/rule-java-docs/index-files/index-2.html @@ -2,9 +2,9 @@ - + B-Index - + diff --git a/static/rule-java-docs/index-files/index-20.html b/static/rule-java-docs/index-files/index-20.html index 7b561bb72..803d4c81c 100644 --- a/static/rule-java-docs/index-files/index-20.html +++ b/static/rule-java-docs/index-files/index-20.html @@ -2,9 +2,9 @@ - + U-Index - + diff --git a/static/rule-java-docs/index-files/index-21.html b/static/rule-java-docs/index-files/index-21.html index 7150b770e..bcdc8ec50 100644 --- a/static/rule-java-docs/index-files/index-21.html +++ b/static/rule-java-docs/index-files/index-21.html @@ -2,9 +2,9 @@ - + V-Index - + diff --git a/static/rule-java-docs/index-files/index-22.html b/static/rule-java-docs/index-files/index-22.html index 2efadcbac..53cd50927 100644 --- a/static/rule-java-docs/index-files/index-22.html +++ b/static/rule-java-docs/index-files/index-22.html @@ -2,9 +2,9 @@ - + W-Index - + diff --git a/static/rule-java-docs/index-files/index-23.html b/static/rule-java-docs/index-files/index-23.html index a7aae732d..8faec4929 100644 --- a/static/rule-java-docs/index-files/index-23.html +++ b/static/rule-java-docs/index-files/index-23.html @@ -2,9 +2,9 @@ - + _-Index - + diff --git a/static/rule-java-docs/index-files/index-3.html b/static/rule-java-docs/index-files/index-3.html index db7b8469e..0e0c4197d 100644 --- a/static/rule-java-docs/index-files/index-3.html +++ b/static/rule-java-docs/index-files/index-3.html @@ -2,9 +2,9 @@ - + C-Index - + diff --git a/static/rule-java-docs/index-files/index-4.html b/static/rule-java-docs/index-files/index-4.html index 62ea5620b..bce8957af 100644 --- a/static/rule-java-docs/index-files/index-4.html +++ b/static/rule-java-docs/index-files/index-4.html @@ -2,9 +2,9 @@ - + D-Index - + diff --git a/static/rule-java-docs/index-files/index-5.html b/static/rule-java-docs/index-files/index-5.html index 184e097df..a754d24ec 100644 --- a/static/rule-java-docs/index-files/index-5.html +++ b/static/rule-java-docs/index-files/index-5.html @@ -2,9 +2,9 @@ - + E-Index - + diff --git a/static/rule-java-docs/index-files/index-6.html b/static/rule-java-docs/index-files/index-6.html index 243691ccc..4eeea96ac 100644 --- a/static/rule-java-docs/index-files/index-6.html +++ b/static/rule-java-docs/index-files/index-6.html @@ -2,9 +2,9 @@ - + F-Index - + diff --git a/static/rule-java-docs/index-files/index-7.html b/static/rule-java-docs/index-files/index-7.html index 7bbb86650..c55837b75 100644 --- a/static/rule-java-docs/index-files/index-7.html +++ b/static/rule-java-docs/index-files/index-7.html @@ -2,9 +2,9 @@ - + G-Index - + @@ -565,6 +565,10 @@
Get a list of links that the Identity is connected to
+
getLinksByAppIdOrName(String, String) - Method in class sailpoint.object.Identity
+
+
Get a list of links that the Identity is connected to from the specified application id or name.
+
getList(String) - Method in class sailpoint.object.Attributes
 
getLocalizedMessage() - Method in enum sailpoint.object.ManagedAttribute.Type
diff --git a/static/rule-java-docs/index-files/index-8.html b/static/rule-java-docs/index-files/index-8.html index 1321dcad1..f2807326c 100644 --- a/static/rule-java-docs/index-files/index-8.html +++ b/static/rule-java-docs/index-files/index-8.html @@ -2,9 +2,9 @@ - + H-Index - + diff --git a/static/rule-java-docs/index-files/index-9.html b/static/rule-java-docs/index-files/index-9.html index 4a68c0bf5..e47398f8d 100644 --- a/static/rule-java-docs/index-files/index-9.html +++ b/static/rule-java-docs/index-files/index-9.html @@ -2,9 +2,9 @@ - + I-Index - + diff --git a/static/rule-java-docs/index.html b/static/rule-java-docs/index.html index 97bcc55d7..d2dd248c0 100644 --- a/static/rule-java-docs/index.html +++ b/static/rule-java-docs/index.html @@ -2,7 +2,7 @@ - + Generated Documentation (Untitled) diff --git a/static/rule-java-docs/overview-summary.html b/static/rule-java-docs/overview-summary.html index 568c42319..f3991615e 100644 --- a/static/rule-java-docs/overview-summary.html +++ b/static/rule-java-docs/overview-summary.html @@ -2,9 +2,9 @@ - + Overview - + diff --git a/static/rule-java-docs/overview-tree.html b/static/rule-java-docs/overview-tree.html index 33304bfd2..38d8562b1 100644 --- a/static/rule-java-docs/overview-tree.html +++ b/static/rule-java-docs/overview-tree.html @@ -2,9 +2,9 @@ - + Class Hierarchy - + @@ -179,11 +179,11 @@
  • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable)
      -
    • sailpoint.object.ManagedAttribute.Type (implements sailpoint.tools.Localizable)
    • -
    • sailpoint.tools.Message.Type
    • sailpoint.object.ProvisioningPlan.Operation
    • sailpoint.object.ProvisioningPlan.AccountRequest.Operation
    • sailpoint.object.ProvisioningPlan.ObjectOperation
    • +
    • sailpoint.object.ManagedAttribute.Type (implements sailpoint.tools.Localizable)
    • +
    • sailpoint.tools.Message.Type
    • sailpoint.object.Filter.ValueEscapeStyle
    • sailpoint.object.Filter.MatchMode
    • sailpoint.object.Filter.LogicalOperation
    • diff --git a/static/rule-java-docs/sailpoint/api/SailPointContext.html b/static/rule-java-docs/sailpoint/api/SailPointContext.html index 00a3cae5a..c04ed7112 100644 --- a/static/rule-java-docs/sailpoint/api/SailPointContext.html +++ b/static/rule-java-docs/sailpoint/api/SailPointContext.html @@ -2,9 +2,9 @@ - + SailPointContext - + diff --git a/static/rule-java-docs/sailpoint/api/package-frame.html b/static/rule-java-docs/sailpoint/api/package-frame.html index 128b88a97..7e307a5da 100644 --- a/static/rule-java-docs/sailpoint/api/package-frame.html +++ b/static/rule-java-docs/sailpoint/api/package-frame.html @@ -2,9 +2,9 @@ - + sailpoint.api - + diff --git a/static/rule-java-docs/sailpoint/api/package-summary.html b/static/rule-java-docs/sailpoint/api/package-summary.html index 8b6796d24..52253329b 100644 --- a/static/rule-java-docs/sailpoint/api/package-summary.html +++ b/static/rule-java-docs/sailpoint/api/package-summary.html @@ -2,9 +2,9 @@ - + sailpoint.api - + diff --git a/static/rule-java-docs/sailpoint/api/package-tree.html b/static/rule-java-docs/sailpoint/api/package-tree.html index b985173ea..686dde5a6 100644 --- a/static/rule-java-docs/sailpoint/api/package-tree.html +++ b/static/rule-java-docs/sailpoint/api/package-tree.html @@ -2,9 +2,9 @@ - + sailpoint.api Class Hierarchy - + diff --git a/static/rule-java-docs/sailpoint/connector/DelimitedFileConnector.html b/static/rule-java-docs/sailpoint/connector/DelimitedFileConnector.html index a1d7a3e41..31cecd687 100644 --- a/static/rule-java-docs/sailpoint/connector/DelimitedFileConnector.html +++ b/static/rule-java-docs/sailpoint/connector/DelimitedFileConnector.html @@ -2,9 +2,9 @@ - + DelimitedFileConnector - + diff --git a/static/rule-java-docs/sailpoint/connector/package-frame.html b/static/rule-java-docs/sailpoint/connector/package-frame.html index 5723f08dc..facdf60ce 100644 --- a/static/rule-java-docs/sailpoint/connector/package-frame.html +++ b/static/rule-java-docs/sailpoint/connector/package-frame.html @@ -2,9 +2,9 @@ - + sailpoint.connector - + diff --git a/static/rule-java-docs/sailpoint/connector/package-summary.html b/static/rule-java-docs/sailpoint/connector/package-summary.html index ed0dc24ed..19942979a 100644 --- a/static/rule-java-docs/sailpoint/connector/package-summary.html +++ b/static/rule-java-docs/sailpoint/connector/package-summary.html @@ -2,9 +2,9 @@ - + sailpoint.connector - + diff --git a/static/rule-java-docs/sailpoint/connector/package-tree.html b/static/rule-java-docs/sailpoint/connector/package-tree.html index dbc9a315e..75541eb8f 100644 --- a/static/rule-java-docs/sailpoint/connector/package-tree.html +++ b/static/rule-java-docs/sailpoint/connector/package-tree.html @@ -2,9 +2,9 @@ - + sailpoint.connector Class Hierarchy - + diff --git a/static/rule-java-docs/sailpoint/connector/webservices/Endpoint.html b/static/rule-java-docs/sailpoint/connector/webservices/Endpoint.html index 71660674e..e80222c01 100644 --- a/static/rule-java-docs/sailpoint/connector/webservices/Endpoint.html +++ b/static/rule-java-docs/sailpoint/connector/webservices/Endpoint.html @@ -2,9 +2,9 @@ - + Endpoint - + diff --git a/static/rule-java-docs/sailpoint/connector/webservices/WebServicesClient.html b/static/rule-java-docs/sailpoint/connector/webservices/WebServicesClient.html index 484ba11e1..d0ecf46c7 100644 --- a/static/rule-java-docs/sailpoint/connector/webservices/WebServicesClient.html +++ b/static/rule-java-docs/sailpoint/connector/webservices/WebServicesClient.html @@ -2,9 +2,9 @@ - + WebServicesClient - + diff --git a/static/rule-java-docs/sailpoint/connector/webservices/package-frame.html b/static/rule-java-docs/sailpoint/connector/webservices/package-frame.html index 6134aafbc..3ee756f63 100644 --- a/static/rule-java-docs/sailpoint/connector/webservices/package-frame.html +++ b/static/rule-java-docs/sailpoint/connector/webservices/package-frame.html @@ -2,9 +2,9 @@ - + sailpoint.connector.webservices - + diff --git a/static/rule-java-docs/sailpoint/connector/webservices/package-summary.html b/static/rule-java-docs/sailpoint/connector/webservices/package-summary.html index da69e6f33..6ca403206 100644 --- a/static/rule-java-docs/sailpoint/connector/webservices/package-summary.html +++ b/static/rule-java-docs/sailpoint/connector/webservices/package-summary.html @@ -2,9 +2,9 @@ - + sailpoint.connector.webservices - + diff --git a/static/rule-java-docs/sailpoint/connector/webservices/package-tree.html b/static/rule-java-docs/sailpoint/connector/webservices/package-tree.html index beae132b1..f8522fe9b 100644 --- a/static/rule-java-docs/sailpoint/connector/webservices/package-tree.html +++ b/static/rule-java-docs/sailpoint/connector/webservices/package-tree.html @@ -2,9 +2,9 @@ - + sailpoint.connector.webservices Class Hierarchy - + diff --git a/static/rule-java-docs/sailpoint/object/Application.html b/static/rule-java-docs/sailpoint/object/Application.html index d6e755000..81eeac8a0 100644 --- a/static/rule-java-docs/sailpoint/object/Application.html +++ b/static/rule-java-docs/sailpoint/object/Application.html @@ -2,9 +2,9 @@ - + Application - + diff --git a/static/rule-java-docs/sailpoint/object/AttributeDefinition.html b/static/rule-java-docs/sailpoint/object/AttributeDefinition.html index 3ddb5db3f..3ddd90d15 100644 --- a/static/rule-java-docs/sailpoint/object/AttributeDefinition.html +++ b/static/rule-java-docs/sailpoint/object/AttributeDefinition.html @@ -2,9 +2,9 @@ - + AttributeDefinition - + diff --git a/static/rule-java-docs/sailpoint/object/Attributes.html b/static/rule-java-docs/sailpoint/object/Attributes.html index 3005a82e8..652afe91c 100644 --- a/static/rule-java-docs/sailpoint/object/Attributes.html +++ b/static/rule-java-docs/sailpoint/object/Attributes.html @@ -2,9 +2,9 @@ - + Attributes - + diff --git a/static/rule-java-docs/sailpoint/object/BaseAttributeDefinition.html b/static/rule-java-docs/sailpoint/object/BaseAttributeDefinition.html index 13165ae7a..c42078d0f 100644 --- a/static/rule-java-docs/sailpoint/object/BaseAttributeDefinition.html +++ b/static/rule-java-docs/sailpoint/object/BaseAttributeDefinition.html @@ -2,9 +2,9 @@ - + BaseAttributeDefinition - + diff --git a/static/rule-java-docs/sailpoint/object/Bundle.html b/static/rule-java-docs/sailpoint/object/Bundle.html index d3eae3001..5c0477084 100644 --- a/static/rule-java-docs/sailpoint/object/Bundle.html +++ b/static/rule-java-docs/sailpoint/object/Bundle.html @@ -2,9 +2,9 @@ - + Bundle - + diff --git a/static/rule-java-docs/sailpoint/object/Entitlement.html b/static/rule-java-docs/sailpoint/object/Entitlement.html index 3feefd070..0d6ef7c41 100644 --- a/static/rule-java-docs/sailpoint/object/Entitlement.html +++ b/static/rule-java-docs/sailpoint/object/Entitlement.html @@ -2,9 +2,9 @@ - + Entitlement - + diff --git a/static/rule-java-docs/sailpoint/object/Field.html b/static/rule-java-docs/sailpoint/object/Field.html index bd3e54695..d2b4df89d 100644 --- a/static/rule-java-docs/sailpoint/object/Field.html +++ b/static/rule-java-docs/sailpoint/object/Field.html @@ -2,9 +2,9 @@ - + Field - + diff --git a/static/rule-java-docs/sailpoint/object/Filter.BaseFilterVisitor.html b/static/rule-java-docs/sailpoint/object/Filter.BaseFilterVisitor.html index 6dabeba42..907c71f6f 100644 --- a/static/rule-java-docs/sailpoint/object/Filter.BaseFilterVisitor.html +++ b/static/rule-java-docs/sailpoint/object/Filter.BaseFilterVisitor.html @@ -2,9 +2,9 @@ - + Filter.BaseFilterVisitor - + diff --git a/static/rule-java-docs/sailpoint/object/Filter.BooleanOperation.html b/static/rule-java-docs/sailpoint/object/Filter.BooleanOperation.html index 75310bb97..a1c6f222e 100644 --- a/static/rule-java-docs/sailpoint/object/Filter.BooleanOperation.html +++ b/static/rule-java-docs/sailpoint/object/Filter.BooleanOperation.html @@ -2,9 +2,9 @@ - + Filter.BooleanOperation - + diff --git a/static/rule-java-docs/sailpoint/object/Filter.CompositeFilter.html b/static/rule-java-docs/sailpoint/object/Filter.CompositeFilter.html index 70fb881cf..b5e28288a 100644 --- a/static/rule-java-docs/sailpoint/object/Filter.CompositeFilter.html +++ b/static/rule-java-docs/sailpoint/object/Filter.CompositeFilter.html @@ -2,9 +2,9 @@ - + Filter.CompositeFilter - + diff --git a/static/rule-java-docs/sailpoint/object/Filter.FilterCompiler.IdentitiferLookAhead.html b/static/rule-java-docs/sailpoint/object/Filter.FilterCompiler.IdentitiferLookAhead.html index 762d54c77..82a02f444 100644 --- a/static/rule-java-docs/sailpoint/object/Filter.FilterCompiler.IdentitiferLookAhead.html +++ b/static/rule-java-docs/sailpoint/object/Filter.FilterCompiler.IdentitiferLookAhead.html @@ -2,9 +2,9 @@ - + Filter.FilterCompiler.IdentitiferLookAhead - + diff --git a/static/rule-java-docs/sailpoint/object/Filter.FilterCompiler.html b/static/rule-java-docs/sailpoint/object/Filter.FilterCompiler.html index dd08a67c5..29410618b 100644 --- a/static/rule-java-docs/sailpoint/object/Filter.FilterCompiler.html +++ b/static/rule-java-docs/sailpoint/object/Filter.FilterCompiler.html @@ -2,9 +2,9 @@ - + Filter.FilterCompiler - + diff --git a/static/rule-java-docs/sailpoint/object/Filter.FilterVisitor.html b/static/rule-java-docs/sailpoint/object/Filter.FilterVisitor.html index b42779f91..84729db70 100644 --- a/static/rule-java-docs/sailpoint/object/Filter.FilterVisitor.html +++ b/static/rule-java-docs/sailpoint/object/Filter.FilterVisitor.html @@ -2,9 +2,9 @@ - + Filter.FilterVisitor - + diff --git a/static/rule-java-docs/sailpoint/object/Filter.LeafFilter.html b/static/rule-java-docs/sailpoint/object/Filter.LeafFilter.html index 1688cd549..90992549d 100644 --- a/static/rule-java-docs/sailpoint/object/Filter.LeafFilter.html +++ b/static/rule-java-docs/sailpoint/object/Filter.LeafFilter.html @@ -2,9 +2,9 @@ - + Filter.LeafFilter - + diff --git a/static/rule-java-docs/sailpoint/object/Filter.LogicalOperation.html b/static/rule-java-docs/sailpoint/object/Filter.LogicalOperation.html index 6e5b52282..3cfdeacbc 100644 --- a/static/rule-java-docs/sailpoint/object/Filter.LogicalOperation.html +++ b/static/rule-java-docs/sailpoint/object/Filter.LogicalOperation.html @@ -2,9 +2,9 @@ - + Filter.LogicalOperation - + diff --git a/static/rule-java-docs/sailpoint/object/Filter.MatchMode.html b/static/rule-java-docs/sailpoint/object/Filter.MatchMode.html index 85001be79..bb3f1c348 100644 --- a/static/rule-java-docs/sailpoint/object/Filter.MatchMode.html +++ b/static/rule-java-docs/sailpoint/object/Filter.MatchMode.html @@ -2,9 +2,9 @@ - + Filter.MatchMode - + diff --git a/static/rule-java-docs/sailpoint/object/Filter.ValueEscapeStyle.html b/static/rule-java-docs/sailpoint/object/Filter.ValueEscapeStyle.html index 0c40e925d..2644a0e8c 100644 --- a/static/rule-java-docs/sailpoint/object/Filter.ValueEscapeStyle.html +++ b/static/rule-java-docs/sailpoint/object/Filter.ValueEscapeStyle.html @@ -2,9 +2,9 @@ - + Filter.ValueEscapeStyle - + diff --git a/static/rule-java-docs/sailpoint/object/Filter.html b/static/rule-java-docs/sailpoint/object/Filter.html index ae9f9accf..f315b2c37 100644 --- a/static/rule-java-docs/sailpoint/object/Filter.html +++ b/static/rule-java-docs/sailpoint/object/Filter.html @@ -2,9 +2,9 @@ - + Filter - + diff --git a/static/rule-java-docs/sailpoint/object/Identity.html b/static/rule-java-docs/sailpoint/object/Identity.html index 5ff1aa54f..f241ce1b0 100644 --- a/static/rule-java-docs/sailpoint/object/Identity.html +++ b/static/rule-java-docs/sailpoint/object/Identity.html @@ -2,9 +2,9 @@ - + Identity - + @@ -18,7 +18,7 @@ catch(err) { } //--> -var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -258,62 +258,69 @@ extends sailpoint.object.AbstractCertifiableEntity +java.util.List<Link> +getLinksByAppIdOrName(java.lang.String id, + java.lang.String name) +
      Get a list of links that the Identity is connected to from the specified application id or name.
      + + + Identity getManager()
      Get's the calling Identities Manager Object
      - + boolean getManagerStatus()
      Get true/false if the Identity is a manager
      - + java.lang.String getName()
      Get the calling Identity name
      - + java.util.List<RoleAssignment> getRoleAssignments()
      Gets the role assignments on the entity
      - + java.lang.String getStringAttribute(java.lang.String name)
      Get the attribute value as a string given the name of the attribute on the Identity.
      - + java.lang.String getType()  - + java.lang.String getTypeName(boolean plural)
      Returns a UI friendly name for the entity type.
      - + boolean isCorrelated()  - + boolean isDifferencable()
      Indicates that you can difference this entity.
      - + boolean isInactive()
      Return if this entity is "inactive".
      - + java.lang.String toString()
      Get the calling Identity as a string
      @@ -469,6 +476,25 @@ extends sailpoint.object.AbstractCertifiableEntity
    + + + +
      +
    • +

      getLinksByAppIdOrName

      +
      public java.util.List<Link> getLinksByAppIdOrName(java.lang.String id,
      +                                                  java.lang.String name)
      +
      Get a list of links that the Identity is connected to from the specified application id or name. + You can only specify the id or name.
      +
      +
      Parameters:
      +
      id - the identifier of the application
      +
      name - the name of the application
      +
      Returns:
      +
      List of Link(Account) Objects
      +
      +
    • +
    diff --git a/static/rule-java-docs/sailpoint/object/IntegrationConfig.html b/static/rule-java-docs/sailpoint/object/IntegrationConfig.html index 6ada55d1c..c88e4f08e 100644 --- a/static/rule-java-docs/sailpoint/object/IntegrationConfig.html +++ b/static/rule-java-docs/sailpoint/object/IntegrationConfig.html @@ -2,9 +2,9 @@ - + IntegrationConfig - + diff --git a/static/rule-java-docs/sailpoint/object/Link.html b/static/rule-java-docs/sailpoint/object/Link.html index 8956d5c45..0288c0389 100644 --- a/static/rule-java-docs/sailpoint/object/Link.html +++ b/static/rule-java-docs/sailpoint/object/Link.html @@ -2,9 +2,9 @@ - + Link - + diff --git a/static/rule-java-docs/sailpoint/object/ManagedAttribute.Type.html b/static/rule-java-docs/sailpoint/object/ManagedAttribute.Type.html index 795aaad7a..8b1e26eca 100644 --- a/static/rule-java-docs/sailpoint/object/ManagedAttribute.Type.html +++ b/static/rule-java-docs/sailpoint/object/ManagedAttribute.Type.html @@ -2,9 +2,9 @@ - + ManagedAttribute.Type - + diff --git a/static/rule-java-docs/sailpoint/object/ManagedAttribute.html b/static/rule-java-docs/sailpoint/object/ManagedAttribute.html index afe5ed82c..5be52aa86 100644 --- a/static/rule-java-docs/sailpoint/object/ManagedAttribute.html +++ b/static/rule-java-docs/sailpoint/object/ManagedAttribute.html @@ -2,9 +2,9 @@ - + ManagedAttribute - + diff --git a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AbstractRequest.html b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AbstractRequest.html index 19065f0a2..9fcc8a235 100644 --- a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AbstractRequest.html +++ b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AbstractRequest.html @@ -2,9 +2,9 @@ - + ProvisioningPlan.AbstractRequest - + diff --git a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AccountRequest.Operation.html b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AccountRequest.Operation.html index 6071beb93..35f47cfa5 100644 --- a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AccountRequest.Operation.html +++ b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AccountRequest.Operation.html @@ -2,9 +2,9 @@ - + ProvisioningPlan.AccountRequest.Operation - + diff --git a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AccountRequest.html b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AccountRequest.html index 1faf59620..f2293ca12 100644 --- a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AccountRequest.html +++ b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AccountRequest.html @@ -2,9 +2,9 @@ - + ProvisioningPlan.AccountRequest - + diff --git a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AttributeRequest.html b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AttributeRequest.html index 1ed61672d..91041deb5 100644 --- a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AttributeRequest.html +++ b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.AttributeRequest.html @@ -2,9 +2,9 @@ - + ProvisioningPlan.AttributeRequest - + diff --git a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.GenericRequest.html b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.GenericRequest.html index 390e71530..ed1956b5e 100644 --- a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.GenericRequest.html +++ b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.GenericRequest.html @@ -2,9 +2,9 @@ - + ProvisioningPlan.GenericRequest - + diff --git a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.ObjectOperation.html b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.ObjectOperation.html index 38233268f..bd315efb4 100644 --- a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.ObjectOperation.html +++ b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.ObjectOperation.html @@ -2,9 +2,9 @@ - + ProvisioningPlan.ObjectOperation - + diff --git a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.ObjectRequest.html b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.ObjectRequest.html index fa640b7f5..43c1b1696 100644 --- a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.ObjectRequest.html +++ b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.ObjectRequest.html @@ -2,9 +2,9 @@ - + ProvisioningPlan.ObjectRequest - + diff --git a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.Operation.html b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.Operation.html index 64d8c94cf..f40cde2b7 100644 --- a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.Operation.html +++ b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.Operation.html @@ -2,9 +2,9 @@ - + ProvisioningPlan.Operation - + diff --git a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.PermissionRequest.html b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.PermissionRequest.html index 9919872f1..83ea9bb09 100644 --- a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.PermissionRequest.html +++ b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.PermissionRequest.html @@ -2,9 +2,9 @@ - + ProvisioningPlan.PermissionRequest - + diff --git a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.html b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.html index b486f4bdb..211ca8320 100644 --- a/static/rule-java-docs/sailpoint/object/ProvisioningPlan.html +++ b/static/rule-java-docs/sailpoint/object/ProvisioningPlan.html @@ -2,9 +2,9 @@ - + ProvisioningPlan - + diff --git a/static/rule-java-docs/sailpoint/object/ProvisioningResult.html b/static/rule-java-docs/sailpoint/object/ProvisioningResult.html index e06c698e7..d21e2b77c 100644 --- a/static/rule-java-docs/sailpoint/object/ProvisioningResult.html +++ b/static/rule-java-docs/sailpoint/object/ProvisioningResult.html @@ -2,9 +2,9 @@ - + ProvisioningResult - + diff --git a/static/rule-java-docs/sailpoint/object/QueryOptions.Ordering.html b/static/rule-java-docs/sailpoint/object/QueryOptions.Ordering.html index 5052cc880..22f4722df 100644 --- a/static/rule-java-docs/sailpoint/object/QueryOptions.Ordering.html +++ b/static/rule-java-docs/sailpoint/object/QueryOptions.Ordering.html @@ -2,9 +2,9 @@ - + QueryOptions.Ordering - + diff --git a/static/rule-java-docs/sailpoint/object/QueryOptions.html b/static/rule-java-docs/sailpoint/object/QueryOptions.html index 8d38529d8..8191923e3 100644 --- a/static/rule-java-docs/sailpoint/object/QueryOptions.html +++ b/static/rule-java-docs/sailpoint/object/QueryOptions.html @@ -2,9 +2,9 @@ - + QueryOptions - + diff --git a/static/rule-java-docs/sailpoint/object/ResourceObject.html b/static/rule-java-docs/sailpoint/object/ResourceObject.html index 143487446..544b7dccf 100644 --- a/static/rule-java-docs/sailpoint/object/ResourceObject.html +++ b/static/rule-java-docs/sailpoint/object/ResourceObject.html @@ -2,9 +2,9 @@ - + ResourceObject - + diff --git a/static/rule-java-docs/sailpoint/object/RoleAssignment.html b/static/rule-java-docs/sailpoint/object/RoleAssignment.html index 7fbf83979..833d2a3c0 100644 --- a/static/rule-java-docs/sailpoint/object/RoleAssignment.html +++ b/static/rule-java-docs/sailpoint/object/RoleAssignment.html @@ -2,9 +2,9 @@ - + RoleAssignment - + diff --git a/static/rule-java-docs/sailpoint/object/Schema.html b/static/rule-java-docs/sailpoint/object/Schema.html index 1bc687ce6..5f1c7c523 100644 --- a/static/rule-java-docs/sailpoint/object/Schema.html +++ b/static/rule-java-docs/sailpoint/object/Schema.html @@ -2,9 +2,9 @@ - + Schema - + diff --git a/static/rule-java-docs/sailpoint/object/package-frame.html b/static/rule-java-docs/sailpoint/object/package-frame.html index 6da0ae491..a4da5288d 100644 --- a/static/rule-java-docs/sailpoint/object/package-frame.html +++ b/static/rule-java-docs/sailpoint/object/package-frame.html @@ -2,9 +2,9 @@ - + sailpoint.object - + diff --git a/static/rule-java-docs/sailpoint/object/package-summary.html b/static/rule-java-docs/sailpoint/object/package-summary.html index 51d7c8660..1c6cab7f2 100644 --- a/static/rule-java-docs/sailpoint/object/package-summary.html +++ b/static/rule-java-docs/sailpoint/object/package-summary.html @@ -2,9 +2,9 @@ - + sailpoint.object - + diff --git a/static/rule-java-docs/sailpoint/object/package-tree.html b/static/rule-java-docs/sailpoint/object/package-tree.html index 657b5dffd..fd39124d1 100644 --- a/static/rule-java-docs/sailpoint/object/package-tree.html +++ b/static/rule-java-docs/sailpoint/object/package-tree.html @@ -2,9 +2,9 @@ - + sailpoint.object Class Hierarchy - + @@ -159,14 +159,14 @@ diff --git a/static/rule-java-docs/sailpoint/rule/Account.html b/static/rule-java-docs/sailpoint/rule/Account.html index 2dc66b0fa..f133c8e46 100644 --- a/static/rule-java-docs/sailpoint/rule/Account.html +++ b/static/rule-java-docs/sailpoint/rule/Account.html @@ -2,9 +2,9 @@ - + Account - + diff --git a/static/rule-java-docs/sailpoint/rule/Identity.html b/static/rule-java-docs/sailpoint/rule/Identity.html index 55f2c4e85..cb6bf682f 100644 --- a/static/rule-java-docs/sailpoint/rule/Identity.html +++ b/static/rule-java-docs/sailpoint/rule/Identity.html @@ -2,9 +2,9 @@ - + Identity - + diff --git a/static/rule-java-docs/sailpoint/rule/ManagedAttributeDetails.html b/static/rule-java-docs/sailpoint/rule/ManagedAttributeDetails.html index b34e7b863..09bb4c366 100644 --- a/static/rule-java-docs/sailpoint/rule/ManagedAttributeDetails.html +++ b/static/rule-java-docs/sailpoint/rule/ManagedAttributeDetails.html @@ -2,9 +2,9 @@ - + ManagedAttributeDetails - + diff --git a/static/rule-java-docs/sailpoint/rule/package-frame.html b/static/rule-java-docs/sailpoint/rule/package-frame.html index 8c4c62cb5..0e820d5e7 100644 --- a/static/rule-java-docs/sailpoint/rule/package-frame.html +++ b/static/rule-java-docs/sailpoint/rule/package-frame.html @@ -2,9 +2,9 @@ - + sailpoint.rule - + diff --git a/static/rule-java-docs/sailpoint/rule/package-summary.html b/static/rule-java-docs/sailpoint/rule/package-summary.html index 5a06883a8..fb22556b1 100644 --- a/static/rule-java-docs/sailpoint/rule/package-summary.html +++ b/static/rule-java-docs/sailpoint/rule/package-summary.html @@ -2,9 +2,9 @@ - + sailpoint.rule - + diff --git a/static/rule-java-docs/sailpoint/rule/package-tree.html b/static/rule-java-docs/sailpoint/rule/package-tree.html index 802e9d1ff..540e46c8e 100644 --- a/static/rule-java-docs/sailpoint/rule/package-tree.html +++ b/static/rule-java-docs/sailpoint/rule/package-tree.html @@ -2,9 +2,9 @@ - + sailpoint.rule Class Hierarchy - + diff --git a/static/rule-java-docs/sailpoint/server/IdnRuleUtil.html b/static/rule-java-docs/sailpoint/server/IdnRuleUtil.html index fc9517a5a..e4bdae4ae 100644 --- a/static/rule-java-docs/sailpoint/server/IdnRuleUtil.html +++ b/static/rule-java-docs/sailpoint/server/IdnRuleUtil.html @@ -2,9 +2,9 @@ - + IdnRuleUtil - + diff --git a/static/rule-java-docs/sailpoint/server/package-frame.html b/static/rule-java-docs/sailpoint/server/package-frame.html index 219cc6c1d..e1a7dde62 100644 --- a/static/rule-java-docs/sailpoint/server/package-frame.html +++ b/static/rule-java-docs/sailpoint/server/package-frame.html @@ -2,9 +2,9 @@ - + sailpoint.server - + diff --git a/static/rule-java-docs/sailpoint/server/package-summary.html b/static/rule-java-docs/sailpoint/server/package-summary.html index 60500f538..6cb271a4a 100644 --- a/static/rule-java-docs/sailpoint/server/package-summary.html +++ b/static/rule-java-docs/sailpoint/server/package-summary.html @@ -2,9 +2,9 @@ - + sailpoint.server - + diff --git a/static/rule-java-docs/sailpoint/server/package-tree.html b/static/rule-java-docs/sailpoint/server/package-tree.html index 2c31c6880..78d659e3d 100644 --- a/static/rule-java-docs/sailpoint/server/package-tree.html +++ b/static/rule-java-docs/sailpoint/server/package-tree.html @@ -2,9 +2,9 @@ - + sailpoint.server Class Hierarchy - + diff --git a/static/rule-java-docs/sailpoint/tools/Message.Type.html b/static/rule-java-docs/sailpoint/tools/Message.Type.html index 2000c6da9..2ca1f4fd9 100644 --- a/static/rule-java-docs/sailpoint/tools/Message.Type.html +++ b/static/rule-java-docs/sailpoint/tools/Message.Type.html @@ -2,9 +2,9 @@ - + Message.Type - + diff --git a/static/rule-java-docs/sailpoint/tools/Message.html b/static/rule-java-docs/sailpoint/tools/Message.html index 7cb951ccd..07cd19182 100644 --- a/static/rule-java-docs/sailpoint/tools/Message.html +++ b/static/rule-java-docs/sailpoint/tools/Message.html @@ -2,9 +2,9 @@ - + Message - + diff --git a/static/rule-java-docs/sailpoint/tools/package-frame.html b/static/rule-java-docs/sailpoint/tools/package-frame.html index 099aaa32e..6b6c65e25 100644 --- a/static/rule-java-docs/sailpoint/tools/package-frame.html +++ b/static/rule-java-docs/sailpoint/tools/package-frame.html @@ -2,9 +2,9 @@ - + sailpoint.tools - + diff --git a/static/rule-java-docs/sailpoint/tools/package-summary.html b/static/rule-java-docs/sailpoint/tools/package-summary.html index 6b767c78a..c38dcd857 100644 --- a/static/rule-java-docs/sailpoint/tools/package-summary.html +++ b/static/rule-java-docs/sailpoint/tools/package-summary.html @@ -2,9 +2,9 @@ - + sailpoint.tools - + diff --git a/static/rule-java-docs/sailpoint/tools/package-tree.html b/static/rule-java-docs/sailpoint/tools/package-tree.html index 4fed3c5e3..018fec5ac 100644 --- a/static/rule-java-docs/sailpoint/tools/package-tree.html +++ b/static/rule-java-docs/sailpoint/tools/package-tree.html @@ -2,9 +2,9 @@ - + sailpoint.tools Class Hierarchy - + diff --git a/static/rule-java-docs/serialized-form.html b/static/rule-java-docs/serialized-form.html index b15d1eff8..44c896cc4 100644 --- a/static/rule-java-docs/serialized-form.html +++ b/static/rule-java-docs/serialized-form.html @@ -2,9 +2,9 @@ - + Serialized Form - +