IdentityIQ Extension for Visual Studio Code/Cursor

Here is a new extension for IdentityIQ to be used within your favorite IDE (VSCode, Cursor, etc.).
This extension relies on the same principles as for the ISC Extension:

  • Supports several tenants
  • Allows to read/write directly in IdentityIQ

This extension relies on a plugin that you need to deploy in IdentityIQ (see vscode-plugin-*-bin.zip).

The extension is available in VSCode marketplace or OpenVSX.

This extension already supports lots of features:

Environments

  • Multiple environments (dev, test, prod…) organized in folders (drag & drop), listed in a dedicated IdentityIQ view.
  • Add an environment with a guided wizard: display name, base URL, login, password. The configuration is validated with an API call (including plugin API version vs extension version).
  • Passwords are stored securely in the VS Code Secret Storage — never on disk.
  • Active environment shown in the status bar; switch it from the status bar, the command palette (with a None option) or the tree view.
  • Connection test with optional SSL verification (iiq.connection.rejectUnauthorized) for self-signed certificates.

Browse & edit objects

  • Tree view of objects per environment: Applications, Bundles, Forms, Identities, ObjectConfigs, QuickLinks, Rules, Tasks, Workflows.
  • Paginated lists (iiq.pagination.pageSize, default 200) with Load more…, sorted by name or by last modification date (global setting + per-node override).
  • Objects open in a virtual file system (iiq://.../<Env>/<Type>/<name>.xml — the environment display name is part of the path). Saving the editor saves the object back to IdentityIQ.
  • Get object…: generic access to every object type supported by IdentityIQ (~130 types, mirror of ClassLists.MajorClasses — Configuration, Custom, WorkflowCase, TaskResult…), beyond the types shown in the tree.

Export / import

  • Export objects…: pick an environment, one or several object types, then the objects; export to one file per object or to a single <sailpoint> file.
  • Export object… (object leaf context menu): tenant and object are taken from the selection; opens a save dialog with cleaned XML.
  • Copy name (object leaf context menu): copies the object name to the clipboard, one name per line for a multiple selection.
  • Open in IdentityIQ… (object leaf context menu): opens the object in the IdentityIQ desktop UI in the system browser, for types that have a direct page (Applications, Roles, Identities, Tasks, Workflows, Workgroups).
  • Exported XML is cleaned for source control (configurable): internal ids, created/modified timestamps, reference ids, significantModified… removed, CDATA preserved.
  • Import file(s)… from the editor (Ctrl+Alt+S), from an environment’s context menu in the tree view (file picker), or from the file explorer (multi-selection, folders imported recursively), with a success/error report.
  • Log4j2 configuration: listed under each environment; click to edit it through the same virtual file system as objects (iiq://…/config/log4j2.properties). Save writes the file on the server and reconfigures logging immediately — unlike Configure logging…, the change survives a restart. A configuration Log4j2 rejects is rolled back server-side. Download / Upload commands copy it to or from a local file (upload also reconfigures).
  • Refresh file from IdentityIQ…: re-fetch the object of the current XML file.
  • Compare with IdentityIQ…: diff the current XML file with its version in an environment.

Run rules & tasks

  • Run rule… from the tree view (play button on a Rule), from a Rule XML file or from the command palette, with optional JSON arguments; the result and execution time are shown in the IdentityIQ output channel.
  • Run task… from the tree view (play button on a Task) or from the command palette: a progress notification stays visible while the task runs, the outcome (success or failure) is reported, and the final TaskResult opens as a read-only XML preview.

BeanShell language assistance

  • Completion, hover and signature help inside the <Source> sections of Rules and workflow <Script>s — in objects opened from an environment (iiq://) and in local XML files (SSB projects).
  • Member completion after variable. with lightweight type inference: declared types, new constructions, casts, call chains (context.getObjectByName(...).), inherited members included.
  • Predefined rule variables: context and log everywhere, plus the arguments of the rule type (identity, application, account…). The <Signature> of the rule wins when present; workflow scripts get workflow, wfcontext…
  • Import completion (import sailpoint.) walking the package tree, and class-name completion with automatic insertion of the missing import.
  • Java metadata is read locally from the jars configured in iiq.beanshell.classpath (point it at the WEB-INF/lib folder of an IdentityIQ installation — exact for your version, patches, connectors and custom jars). Core JDK classes (java.lang, java.util…) are bundled.
  • No BeanShell code is sent anywhere; jars are indexed lazily and read entry-by-entry (no memory blow-up on a full WEB-INF/lib).

Tail server logs

  • Tail server logs… from an environment’s context menu or the command palette: the server log files (the targets of its file-backed Log4j2 appenders — sailpoint.log, etc.) stream into a colorized output channel, tail -f style, no SSH needed. A single log file is tailed directly; the first chunk shows the recent history. A status bar indicator shows the active tails; Stop tailing server logs… ends them.

:warning: This extension is not developed, funded or endorsed by SailPoint.

If you have any issue or any enhancement request :right_arrow: Issues · yannick-beot-sp/vscode-sailpoint-identityiq · GitHub

3 Likes

Hi @yannick_beot,

I’ve installed the plugin and the VS Code extension. Could you share a few more details on how to do these two actions?

  1. Refresh file from IdentityIQ…: re-fetch the object for the current XML file.
  2. Compare with IdentityIQ…: diff the current XML file against its version in an environment.

In particular, where do I trigger these commands (Command Palette, right-click menu, etc.), and does anything need to be set up first, such as the environment/connection settings or particular XML file headers? Thanks!

In the IIQ view, you need to add a tenant by clicking the :plus: sign:

Select the active tenant (if there is only one tenant, it’s always active). To compare or refresh, you can open an XML file on your file system and right-click on it:

Hi @yannick_beot, I followed the instructions and can now see both options. Thanks for your help!

1 Like