Struct cloudsso::SCIMDesktop
Properties Methods Events Config Settings Errors
The SCIMDesktop struct provides an easy way to add automatic user and group provisioning to your desktop application.
Syntax
cloudsso::SCIMDesktop
Remarks
The System for Cross-domain Identity Management (SCIM) protocol gives an Identity Provider (e.g., Okta or Microsoft Entra ID) a standardized way to automatically create, update, and deactivate accounts in your application. Instead of an administrator manually managing an account in every connected application, SCIM lets the Identity Provider push those changes out over a simple REST/JSON API whenever a user is hired, changes departments, or leaves the company.
The Identity Provider acts as the client, and your application is the SCIM service provider. This struct implements the service provider role. It listens for incoming HTTP connections, parses each SCIM request, fires an event so your application can create, look up, update, or delete the corresponding record in its own data store, and then builds and sends the SCIM JSON response.
Unlike the SCIMWeb struct, which is embedded within an existing web application or framework, this struct hosts its own embedded HTTP server, so no external web server is required. This makes it well suited to a desktop application or background service that needs to expose a SCIM endpoint on its own.
Setup
The local_host and local_port properties are used to control the address and port the embedded server listens on. The start_listening method must be called to begin actively listening for incoming connections.
The max_connections and idle_timeout properties may be used to control how many simultaneous connections are accepted and how long an idle connection is kept open, respectively. To expose the endpoint over HTTPS, the ssl_enabled property may be enabled alongside the specification of a certificate via the ssl_cert property before calling start_listening.
scim.LocalHost = "127.0.0.1";
scim.LocalPort = 8443;
scim.SSLCert = new Certificate(CertStoreTypes.cstPFXFile, "cert.pfx", "password", "*");
scim.SSLEnabled = true;
scim.StartListening();
The struct may also be configured with information about which SCIM operations to support and how requests should be routed. The base_url property is the path prefix used to recognize SCIM resource paths, and the supported_operations property is a bitmask that controls which combinations of HTTP method and resource type are accepted. The max_results property dictates how many resources can be returned from a single list request.
scim.BaseURL = "/scim/v2";
scim.SupportedOperations = SupportedOperations.sopAll;
scim.MaxResults = 200;
Authentication
Every incoming request fires the on_auth_request event before any resource-specific event is raised, giving the application the chance to accept or reject the request. The AuthMethod parameter identifies the scheme supplied by the client, detailed below.
| Bearer | The scheme used by most Identity Provider integrations. The Token parameter contains the raw bearer token. If the auth_token property has been set, the struct automatically compares it against the incoming token and pre-initializes the Accept parameter with the result, so a simple deployment does not need an on_auth_request handler at all. |
| Basic | The struct decodes the credentials and provides the username and password through the User and Token parameters. No automatic comparison is performed. |
| Other/Unrecognized | The Accept parameter defaults to false and the application must explicitly accept the request from within an on_auth_request handler. |
| "" (empty string) | No Authorization header was present. User and Token are both empty and the Accept parameter defaults to false. |
The AllowedClients and BlockedClients configuration settings may be used if connections should be restricted at the network level as well.
A static bearer token may be supplied to the struct as shown.
scim.AuthToken = "the-token-issued-to-your-identity-provider";
Alternatively, custom validation may be performed as shown.
scim.OnAuthRequest += (sender, e) => {
e.Accept = e.AuthMethod == "Bearer" && tokenStore.IsValid(e.Token);
};
User Management
The struct fires an event for each standard SCIM user operation, giving the application full control over how users are stored.
Creating a User
A POST /Users request causes the on_create_user event to be fired with the submitted attributes, including any addresses and phone numbers through the user_emails and user_phones properties and enterprise attributes (department, employee number, manager, and so on) through the user_extension property. The handler must assign and return a unique UserId and set the StatusCode parameter to 201.
Retrieving and Listing Users
A GET /Users/{id} request causes the on_get_user event to be fired. The handler populates the user's current attributes and the add_user_email, add_user_phone, and add_user_extension methods may be called to include any related data.
A GET /Users request causes the on_list_users event to be fired instead, with pagination reflected in the StartIndex and Count parameters and, for simple single-term filters such as userName eq "jsmith", the parsed FilterAttribute, FilterOperator, and FilterValue parameters. The add_user method should be called once per matching user, and the TotalResults parameter should be set to the total across all pages.
scim.OnListUsers += (sender, e) => {
var page = db.QueryUsers(e.FilterAttribute, e.FilterOperator, e.FilterValue, e.StartIndex - 1, e.Count);
foreach (var user in page.Results) {
scim.AddUser(user.Id, user.UserName, user.DisplayName, user.ExternalId, user.Active);
}
e.TotalResults = page.TotalCount;
e.StatusCode = 200;
};
Updating and Deleting Users
Both PUT /Users/{id} and PATCH /Users/{id} requests cause the on_update_user event to be fired. For a PATCH request, the struct first fires the on_get_user event to load the current record, applies the patch operations from the request (including path-filtered operations such as emails[type eq "work"]) internally, and then fires the on_update_user event with the fully merged result, so the handler always sees a complete, final representation of the user regardless of which method was used. The read-only request_type property should be used if the handler needs to distinguish which method triggered the current event.
A DELETE /Users/{id} request causes the on_delete_user event to be fired. Deactivating a user without deleting their record is done the standard SCIM way, by setting the Active parameter to false through an update rather than issuing a delete.
Group Management
Groups follow the same pattern as users, and the on_create_group, on_get_group, on_list_groups, on_update_group, and on_delete_group events all mirror their user counterparts. Group members are provided through the group_members properties on create and update, and are added to an outgoing response with the add_group_member method. The add_group method is used to add each group to a on_list_groups event response.
Discovery Endpoints
The struct automatically answers the standard SCIM discovery endpoints so an Identity Provider can inspect your service provider's capabilities before provisioning begins.
A GET /ServiceProviderConfig request, which causes the on_get_service_provider_config event to be fired, advertises the supported authentication scheme and which operations are enabled, based on the supported_operations property. GET /ResourceTypes requests, which cause the on_get_resource_types event to be fired, and GET /Schemas requests, which cause the on_get_schemas event to be fired, describe the User and Group resource and schema definitions, including the enterprise user extension. All three events are informational, so the response body has already been generated by the time each one fires.
Object Lifetime
The new() method returns a mutable reference to a struct instance. The object itself is kept in the global list maintained by CloudSSO. Due to this, the SCIMDesktop struct cannot be disposed of automatically. Please, call the dispose(&self) method of SCIMDesktop when you have finished using the instance.
Property List
The following is the full list of the properties of the struct with short descriptions. Click on the links for further details.
| auth_token | The Bearer token used to authenticate incoming SCIM requests. |
| base_url | The base URL path for SCIM endpoints. |
| connection_backlog | This property includes the maximum number of pending connections maintained by the Transmission Control Protocol (TCP)/IP subsystem. |
| group_member_count | The number of records in the GroupMember arrays. |
| group_member_member_display | The display name of the group member. |
| group_member_member_id | The SCIM resource ID of the group member. |
| idle_timeout | The number of seconds before an idle connection is closed. |
| listening | This property indicates whether the struct is listening for incoming connections on LocalPort. |
| local_host | The address on which the embedded HTTP server listens. |
| local_port | The port on which the embedded HTTP server listens. |
| max_connections | The maximum number of simultaneous connections the server will accept. |
| max_results | The maximum number of resources requested from the application in a single list request. |
| request_type | The HTTP method of the request currently being processed. |
| ssl_authenticate_clients | If set to True, the server asks the client(s) for a certificate. |
| ssl_cert_effective_date | The date on which this certificate becomes valid. |
| ssl_cert_expiration_date | The date on which the certificate expires. |
| ssl_cert_extended_key_usage | A comma-delimited list of extended key usage identifiers. |
| ssl_cert_fingerprint | The hex-encoded, 16-byte MD5 fingerprint of the certificate. |
| ssl_cert_fingerprint_sha1 | The hex-encoded, 20-byte SHA-1 fingerprint of the certificate. |
| ssl_cert_fingerprint_sha256 | The hex-encoded, 32-byte SHA-256 fingerprint of the certificate. |
| ssl_cert_issuer | The issuer of the certificate. |
| ssl_cert_private_key | The private key of the certificate (if available). |
| ssl_cert_private_key_available | Whether a PrivateKey is available for the selected certificate. |
| ssl_cert_private_key_container | The name of the PrivateKey container for the certificate (if available). |
| ssl_cert_public_key | The public key of the certificate. |
| ssl_cert_public_key_algorithm | The textual description of the certificate's public key algorithm. |
| ssl_cert_public_key_length | The length of the certificate's public key (in bits). |
| ssl_cert_serial_number | The serial number of the certificate encoded as a string. |
| ssl_cert_signature_algorithm | The text description of the certificate's signature algorithm. |
| ssl_cert_store | The name of the certificate store for the client certificate. |
| ssl_cert_store_password | If the type of certificate store requires a password, this property is used to specify the password needed to open the certificate store. |
| ssl_cert_store_type | The type of certificate store for this certificate. |
| ssl_cert_subject_alt_names | Comma-separated lists of alternative subject names for the certificate. |
| ssl_cert_thumbprint_md5 | The MD5 hash of the certificate. |
| ssl_cert_thumbprint_sha1 | The SHA-1 hash of the certificate. |
| ssl_cert_thumbprint_sha256 | The SHA-256 hash of the certificate. |
| ssl_cert_usage | The text description of UsageFlags . |
| ssl_cert_usage_flags | The flags that show intended use for the certificate. |
| ssl_cert_version | The certificate's version number. |
| ssl_cert_subject | The subject of the certificate used for client authentication. |
| ssl_cert_encoded | The certificate (PEM/Base64 encoded). |
| ssl_enabled | This property indicates whether Transport Layer Security/Secure Sockets Layer (TLS/SSL) is enabled. |
| ssl_provider | The Secure Sockets Layer/Transport Layer Security (SSL/TLS) implementation to use. |
| supported_operations | A bitmask that controls which SCIM operations the struct accepts. |
| user_email_count | The number of records in the UserEmail arrays. |
| user_email_address | The email address. |
| user_email_type | The type of email address. |
| user_email_primary | Whether this is the primary email address. |
| user_extension_cost_center | The user's cost center. |
| user_extension_department | The user's department. |
| user_extension_division | The user's division. |
| user_extension_employee_number | The user's employee number. |
| user_extension_manager_display_name | The display name of the user's manager. |
| user_extension_manager_id | The user identifier of the user's manager. |
| user_extension_manager_ref | The URI of the manager's user resource. |
| user_extension_organization | The user's organization. |
| user_phone_count | The number of records in the UserPhone arrays. |
| user_phone_number | The phone number. |
| user_phone_type | The type of phone number. |
| user_phone_primary | Whether this is the primary phone number. |
Method List
The following is the full list of the methods of the struct with short descriptions. Click on the links for further details.
| add_group | Adds a group entry to the outgoing list response. |
| add_group_member | Adds a member to the outgoing group response. |
| add_user | Adds a user entry to the outgoing list response. |
| add_user_email | Adds an email address to the outgoing user response. |
| add_user_extension | Adds enterprise extension attributes to the outgoing user response. |
| add_user_phone | Adds a phone number to the outgoing user response. |
| config | Sets or retrieves a configuration setting. |
| disconnect | This method disconnects the specified client. |
| do_events | This method processes events from the internal message queue. |
| reset | This method will reset the struct. |
| shutdown | This method shuts down the server. |
| start_listening | This method starts listening for incoming connections. |
| stop_listening | This method stops listening for new connections. |
Event List
The following is the full list of the events fired by the struct with short descriptions. Click on the links for further details.
| on_auth_request | Fired for every incoming request to control access to specific endpoints. |
| on_connected | This event is fired immediately after a connection completes (or fails). |
| on_connection_request | This event is fired when a request for connection comes from a remote host. |
| on_create_group | Fired when a request to create a new group is received. |
| on_create_user | Fired when a request to create a new user is received. |
| on_delete_group | Fired when a request to delete a group is received. |
| on_delete_user | Fired when a request to delete a user is received. |
| on_disconnected | This event is fired when a connection is closed. |
| on_error | This event fires information about errors during data delivery. |
| on_get_group | Fired when a request to retrieve a group is received, before a PATCH group update, or when ETags are enabled and a PUT or DELETE request includes an If-Match header. |
| on_get_resource_types | Fired when a request for the resource type definitions is received. |
| on_get_schemas | Fired when a request for the schema definitions is received. |
| on_get_service_provider_config | Fired when a request for the service provider configuration is received. |
| on_get_user | Fired when a request to retrieve a user is received, before a PATCH user update, or when ETags are enabled and a PUT or DELETE request includes an If-Match header. |
| on_list_groups | Fired when a request to list groups is received. |
| on_list_users | Fired when a request to list users is received. |
| on_log | Fired once for each log message. |
| on_ssl_client_authentication | This event is fired when the client presents its credentials to the server. |
| on_ssl_connection_request | This event fires when a Secure Sockets Layer (SSL) connection is requested. |
| on_ssl_status | This event is fired to show the progress of the secure connection. |
| on_update_group | Fired after the current group has been loaded and a replace or update request has been applied. |
| on_update_user | Fired after the current user has been loaded and a replace or update request has been applied. |
Config Settings
The following is a list of config settings for the struct with short descriptions. Click on the links for further details.
| AllowedClients | A comma-separated list of IP addresses or hostnames allowed to connect. |
| BlockedClients | A comma-separated list of IP addresses or hostnames that are denied connections. |
| ETagEnabled | Whether to include ETag headers in user and group responses. |
| IgnoreUnknownPatchAttributes | Whether to ignore PATCH operations that target unsupported attributes. |
| LogLevel | Controls the level of detail that is logged through the Log event. |
| RequestBody | The body of the most recently received SCIM request. |
| UseIPv6 | Controls IPv4/IPv6 listening behavior. |
| XChildCount | The number of child elements of the current JSON element. |
| XChildName[i] | The name of a child JSON element. |
| XChildXText[i] | The text of a child JSON element. |
| XElement | The name of the current JSON element. |
| XParent | The parent of the current JSON element. |
| XPath | Selects an element in the most recently received SCIM JSON request. |
| XSubTree | A snapshot of the current JSON element. |
| XText | The text of the current JSON element. |
| BuildInfo | Information about the product's build. |
| CodePage | The system code page used for Unicode to Multibyte translations. |
| LicenseInfo | Information about the current license. |
| MaskSensitiveData | Whether sensitive data is masked in log messages. |
| UseInternalSecurityAPI | Whether or not to use the system security libraries or an internal implementation. |
auth_token property (SCIMDesktop Struct)
The Bearer token used to authenticate incoming SCIM requests.
Syntax
fn auth_token(&self) -> Result<String, CloudSSOError>
fn set_auth_token(&self, value : &str) -> Option<CloudSSOError> fn set_auth_token_ref(&self, value : &String) -> Option<CloudSSOError>
Default Value
""
Remarks
When this property is set, the struct compares the incoming authorization bearer token against its value and initializes the Accept parameter of the on_auth_request event accordingly before the event fires. If the token is missing or does not match, the Accept parameter will be set to false. Likewise, if a match is found, the Accept parameter will be set to true. This value may be overridden in the handler when the on_auth_request event fires (e.g., the handler can reject a matching token to enforce expiry or check a revocation list).
This property only takes effect for Bearer authentication and has no influence on other authentication schemes.
When this property is empty, no automatic comparison is performed and Accept defaults to false. Without an on_auth_request handler that explicitly accepts the request, all incoming requests receive a 401 Unauthorized response.
Data Type
String
base_url property (SCIMDesktop Struct)
The base URL path for SCIM endpoints.
Syntax
fn base_url(&self) -> Result<String, CloudSSOError>
fn set_base_url(&self, value : &str) -> Option<CloudSSOError> fn set_base_url_ref(&self, value : &String) -> Option<CloudSSOError>
Default Value
"/scim/v2"
Remarks
This property defines the base path prefix the struct uses when routing incoming requests to SCIM endpoints. All SCIM resource paths are resolved relative to this value (e.g., with the default value of /scim/v2, a request for /scim/v2/Users is recognized as a User list request).
This value must begin with a forward slash. Trailing slashes are removed automatically, so /scim/v2/ and /scim/v2 are equivalent.
Data Type
String
connection_backlog property (SCIMDesktop Struct)
This property includes the maximum number of pending connections maintained by the Transmission Control Protocol (TCP)/IP subsystem.
Syntax
fn connection_backlog(&self) -> Result<i32, CloudSSOError>
fn set_connection_backlog(&self, value : i32) -> Option<CloudSSOError>
Default Value
5
Remarks
This property contains the maximum number of pending connections maintained by the TCP/IP subsystem. This value reflects the SOMAXCONN option for the main listening socket. The default value for most systems is 5. You may set this property to a larger value if the server is expected to receive a large number of connections, and queuing them is desirable.
Data Type
i32
group_member_count property (SCIMDesktop Struct)
The number of records in the GroupMember arrays.
Syntax
fn group_member_count(&self) -> Result<i32, CloudSSOError>
Default Value
0
Remarks
This property controls the size of the following arrays:
The array indices start at 0 and end at group_member_count - 1.This property is read-only.
Data Type
i32
group_member_member_display property (SCIMDesktop Struct)
The display name of the group member.
Syntax
fn group_member_member_display(&self, GroupMemberIndex : i32) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This property contains the display name of the member user as provided by the Identity Provider. It may be empty if the Identity Provider did not supply a display name.
The GroupMemberIndex parameter specifies the index of the item in the array. The size of the array is controlled by the group_member_count property.
This property is read-only.
Data Type
String
group_member_member_id property (SCIMDesktop Struct)
The SCIM resource ID of the group member.
Syntax
fn group_member_member_id(&self, GroupMemberIndex : i32) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This property contains the unique identifier of the member user as assigned by the service provider.
The GroupMemberIndex parameter specifies the index of the item in the array. The size of the array is controlled by the group_member_count property.
This property is read-only.
Data Type
String
idle_timeout property (SCIMDesktop Struct)
The number of seconds before an idle connection is closed.
Syntax
fn idle_timeout(&self) -> Result<i32, CloudSSOError>
fn set_idle_timeout(&self, value : i32) -> Option<CloudSSOError>
Default Value
10
Remarks
This property is used to specify how long, in seconds, the embedded server allows a connection to remain idle (i.e., no data sent or received) before closing it.
The default timeout is 10 seconds, and a value of 0 may be provided to disable the timeout.
Data Type
i32
listening property (SCIMDesktop Struct)
This property indicates whether the struct is listening for incoming connections on LocalPort.
Syntax
fn listening(&self) -> Result<bool, CloudSSOError>
Default Value
false
Remarks
This property indicates whether the struct is listening for connections on the port specified by the local_port property. Use the start_listening and stop_listening methods to control whether the struct is listening.
This property is read-only.
Data Type
bool
local_host property (SCIMDesktop Struct)
The address on which the embedded HTTP server listens.
Syntax
fn local_host(&self) -> Result<String, CloudSSOError>
fn set_local_host(&self, value : &str) -> Option<CloudSSOError> fn set_local_host_ref(&self, value : &String) -> Option<CloudSSOError>
Default Value
""
Remarks
This property is used to specify the local interface address on which the embedded HTTP server binds. The default is "" (empty string), which causes the server to listen on all available interfaces.
This property should be set to a specific IP address to restrict the server to a single network interface (e.g., 127.0.0.1 to accept only local connections).
Data Type
String
local_port property (SCIMDesktop Struct)
The port on which the embedded HTTP server listens.
Syntax
fn local_port(&self) -> Result<i32, CloudSSOError>
fn set_local_port(&self, value : i32) -> Option<CloudSSOError>
Default Value
80
Remarks
This property is used to specify the TCP port on which the server accepts SCIM requests. The default is 80, and it must be set before calling the start_listening method.
This property should be set to 0 to cause the system to choose a random available port. After start_listening is called, this property may be queried to read the actual port assigned.
When the ssl_enabled property is enabled, the server automatically listens for TLS connections. If this property is still at its default of 80 when ssl_enabled is toggled, the port switches to 443 automatically. If a non-default port has already been set, it is not changed.
Data Type
i32
max_connections property (SCIMDesktop Struct)
The maximum number of simultaneous connections the server will accept.
Syntax
fn max_connections(&self) -> Result<i32, CloudSSOError>
fn set_max_connections(&self, value : i32) -> Option<CloudSSOError>
Default Value
100000
Remarks
This property controls how many concurrent connections the embedded server will maintain. An incoming connection attempt beyond this limit is accepted and immediately closed.
The default, and maximum supported, value is 100,000. Unlike local_host and local_port, this property may be changed at any time, even while the server is listening. The new limit applies to subsequent connection attempts.
Data Type
i32
max_results property (SCIMDesktop Struct)
The maximum number of resources requested from the application in a single list request.
Syntax
fn max_results(&self) -> Result<i32, CloudSSOError>
fn set_max_results(&self, value : i32) -> Option<CloudSSOError>
Default Value
200
Remarks
This property limits the Count parameter of the on_list_users and on_list_groups events. When the Identity Provider omits the count query parameter or requests more results than this value, Count is set to this value. The struct does not remove resources from the response, so the event handler should add no more than Count resources.
This value is also reported in the ServiceProviderConfig discovery endpoint as the maximum allowed value for pagination.
Data Type
i32
request_type property (SCIMDesktop Struct)
The HTTP method of the request currently being processed.
Syntax
fn request_type(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This read-only property is used to determine the HTTP method (GET, POST, PUT, PATCH, or DELETE) of the request being processed. It is eligible to be queried during any event fired by the struct.
When the struct processes a PATCH request, it fires the on_get_user or on_get_group event to retrieve the current resource first. When the ETagEnabled configuration setting is true and the client includes an If-Match header on a PUT or DELETE request, the on_get_user or on_get_group event also fires to validate the ETag before the update or delete event.
This property is read-only.
Data Type
String
ssl_authenticate_clients property (SCIMDesktop Struct)
If set to True, the server asks the client(s) for a certificate.
Syntax
fn ssl_authenticate_clients(&self) -> Result<bool, CloudSSOError>
fn set_ssl_authenticate_clients(&self, value : bool) -> Option<CloudSSOError>
Default Value
false
Remarks
This property is used in conjunction with the on_ssl_client_authentication event. Please refer to the documentation of the on_ssl_client_authentication event for details.
Data Type
bool
ssl_cert_effective_date property (SCIMDesktop Struct)
The date on which this certificate becomes valid.
Syntax
fn ssl_cert_effective_date(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The date on which this certificate becomes valid. Before this date, it is not valid. The date is localized to the system's time zone. The following example illustrates the format of an encoded date:
23-Jan-2000 15:00:00.
This property is read-only.
Data Type
String
ssl_cert_expiration_date property (SCIMDesktop Struct)
The date on which the certificate expires.
Syntax
fn ssl_cert_expiration_date(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The date on which the certificate expires. After this date, the certificate will no longer be valid. The date is localized to the system's time zone. The following example illustrates the format of an encoded date:
23-Jan-2001 15:00:00.
This property is read-only.
Data Type
String
ssl_cert_extended_key_usage property (SCIMDesktop Struct)
A comma-delimited list of extended key usage identifiers.
Syntax
fn ssl_cert_extended_key_usage(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
A comma-delimited list of extended key usage identifiers. These are the same as ASN.1 object identifiers (OIDs).
This property is read-only.
Data Type
String
ssl_cert_fingerprint property (SCIMDesktop Struct)
The hex-encoded, 16-byte MD5 fingerprint of the certificate.
Syntax
fn ssl_cert_fingerprint(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The hex-encoded, 16-byte MD5 fingerprint of the certificate. This property is primarily used for keys which do not have a corresponding X.509 public certificate, such as PEM keys that only contain a private key. It is commonly used for SSH keys.
The following example illustrates the format: bc:2a:72:af:fe:58:17:43:7a:5f:ba:5a:7c:90:f7:02
This property is read-only.
Data Type
String
ssl_cert_fingerprint_sha1 property (SCIMDesktop Struct)
The hex-encoded, 20-byte SHA-1 fingerprint of the certificate.
Syntax
fn ssl_cert_fingerprint_sha1(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The hex-encoded, 20-byte SHA-1 fingerprint of the certificate. This property is primarily used for keys which do not have a corresponding X.509 public certificate, such as PEM keys that only contain a private key. It is commonly used for SSH keys.
The following example illustrates the format: 30:7b:fa:38:65:83:ff:da:b4:4e:07:3f:17:b8:a4:ed:80:be:ff:84
This property is read-only.
Data Type
String
ssl_cert_fingerprint_sha256 property (SCIMDesktop Struct)
The hex-encoded, 32-byte SHA-256 fingerprint of the certificate.
Syntax
fn ssl_cert_fingerprint_sha256(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The hex-encoded, 32-byte SHA-256 fingerprint of the certificate. This property is primarily used for keys which do not have a corresponding X.509 public certificate, such as PEM keys that only contain a private key. It is commonly used for SSH keys.
The following example illustrates the format: 6a:80:5c:33:a9:43:ea:b0:96:12:8a:64:96:30:ef:4a:8a:96:86:ce:f4:c7:be:10:24:8e:2b:60:9e:f3:59:53
This property is read-only.
Data Type
String
ssl_cert_issuer property (SCIMDesktop Struct)
The issuer of the certificate.
Syntax
fn ssl_cert_issuer(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The issuer of the certificate. This property contains a string representation of the name of the issuing authority for the certificate.
This property is read-only.
Data Type
String
ssl_cert_private_key property (SCIMDesktop Struct)
The private key of the certificate (if available).
Syntax
fn ssl_cert_private_key(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The private key of the certificate (if available). The key is provided as PEM/Base64-encoded data.
NOTE: The ssl_cert_private_key may be available but not exportable. In this case, ssl_cert_private_key returns an empty string.
This property is read-only.
Data Type
String
ssl_cert_private_key_available property (SCIMDesktop Struct)
Whether a PrivateKey is available for the selected certificate.
Syntax
fn ssl_cert_private_key_available(&self) -> Result<bool, CloudSSOError>
Default Value
false
Remarks
Whether a ssl_cert_private_key is available for the selected certificate. If ssl_cert_private_key_available is True, the certificate may be used for authentication purposes (e.g., server authentication).
This property is read-only.
Data Type
bool
ssl_cert_private_key_container property (SCIMDesktop Struct)
The name of the PrivateKey container for the certificate (if available).
Syntax
fn ssl_cert_private_key_container(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The name of the ssl_cert_private_key container for the certificate (if available). This functionality is available only on Windows platforms.
This property is read-only.
Data Type
String
ssl_cert_public_key property (SCIMDesktop Struct)
The public key of the certificate.
Syntax
fn ssl_cert_public_key(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The public key of the certificate. The key is provided as PEM/Base64-encoded data.
This property is read-only.
Data Type
String
ssl_cert_public_key_algorithm property (SCIMDesktop Struct)
The textual description of the certificate's public key algorithm.
Syntax
fn ssl_cert_public_key_algorithm(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The textual description of the certificate's public key algorithm. The property contains either the name of the algorithm (e.g., "RSA" or "RSA_DH") or an object identifier (OID) string representing the algorithm.
This property is read-only.
Data Type
String
ssl_cert_public_key_length property (SCIMDesktop Struct)
The length of the certificate's public key (in bits).
Syntax
fn ssl_cert_public_key_length(&self) -> Result<i32, CloudSSOError>
Default Value
0
Remarks
The length of the certificate's public key (in bits). Common values are 512, 1024, and 2048.
This property is read-only.
Data Type
i32
ssl_cert_serial_number property (SCIMDesktop Struct)
The serial number of the certificate encoded as a string.
Syntax
fn ssl_cert_serial_number(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The serial number of the certificate encoded as a string. The number is encoded as a series of hexadecimal digits, with each pair representing a byte of the serial number.
This property is read-only.
Data Type
String
ssl_cert_signature_algorithm property (SCIMDesktop Struct)
The text description of the certificate's signature algorithm.
Syntax
fn ssl_cert_signature_algorithm(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The text description of the certificate's signature algorithm. The property contains either the name of the algorithm (e.g., "RSA" or "RSA_MD5RSA") or an object identifier (OID) string representing the algorithm.
This property is read-only.
Data Type
String
ssl_cert_store property (SCIMDesktop Struct)
The name of the certificate store for the client certificate.
Syntax
fn ssl_cert_store(&self) -> Result<Vec<u8>, CloudSSOError>
fn set_ssl_cert_store(&self, value : Vec<u8>) -> Option<CloudSSOError> fn set_ssl_cert_store_ref(&self, value : &[u8]) -> Option<CloudSSOError>
Default Value
"MY"
Remarks
The ssl_cert_store_type property denotes the type of the certificate store specified by ssl_cert_store. If the store is password-protected, specify the password in ssl_cert_store_password.
ssl_cert_store is used in conjunction with the ssl_cert_subject property to specify client certificates. If ssl_cert_store has a value, and ssl_cert_subject or ssl_cert_encoded is set, a search for a certificate is initiated. Please see the ssl_cert_subject property for details.
Designations of certificate stores are platform dependent.
The following designations are the most common User and Machine certificate stores in Windows:
| MY | A certificate store holding personal certificates with their associated private keys. |
| CA | Certifying authority certificates. |
| ROOT | Root certificates. |
When the certificate store type is cstPFXFile, this property must be set to the name of the file. When the type is cstPFXBlob, the property must be set to the binary contents of a PFX file (i.e., PKCS#12 certificate store).
Data Type
Vec<u8>
ssl_cert_store_password property (SCIMDesktop Struct)
If the type of certificate store requires a password, this property is used to specify the password needed to open the certificate store.
Syntax
fn ssl_cert_store_password(&self) -> Result<String, CloudSSOError>
fn set_ssl_cert_store_password(&self, value : &str) -> Option<CloudSSOError> fn set_ssl_cert_store_password_ref(&self, value : &String) -> Option<CloudSSOError>
Default Value
""
Remarks
If the type of certificate store requires a password, this property is used to specify the password needed to open the certificate store.
Data Type
String
ssl_cert_store_type property (SCIMDesktop Struct)
The type of certificate store for this certificate.
Syntax
fn ssl_cert_store_type(&self) -> Result<i32, CloudSSOError>
fn set_ssl_cert_store_type(&self, value : i32) -> Option<CloudSSOError>
Possible Values
0 // User
1 // Machine
2 // PFXFile
3 // PFXBlob
4 // JKSFile
5 // JKSBlob
6 // PEMKeyFile
7 // PEMKeyBlob
8 // PublicKeyFile
9 // PublicKeyBlob
10 // SSHPublicKeyBlob
11 // P7BFile
12 // P7BBlob
13 // SSHPublicKeyFile
14 // PPKFile
15 // PPKBlob
16 // XMLFile
17 // XMLBlob
18 // JWKFile
19 // JWKBlob
20 // SecurityKey
21 // BCFKSFile
22 // BCFKSBlob
23 // PKCS11
99 // Auto
Default Value
0
Remarks
The struct supports both public and private keys in a variety of formats. When the cstAuto value is used, the struct will automatically determine the type. This property can take one of the following values:
| 0 (cstUser - default) | For Windows, this specifies that the certificate store is a certificate store owned by the current user.
NOTE: This store type is not available in Java. |
| 1 (cstMachine) | For Windows, this specifies that the certificate store is a machine store.
NOTE: This store type is not available in Java. |
| 2 (cstPFXFile) | The certificate store is the name of a PFX (PKCS#12) file containing certificates. |
| 3 (cstPFXBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in PFX (PKCS#12) format. |
| 4 (cstJKSFile) | The certificate store is the name of a Java Key Store (JKS) file containing certificates.
NOTE: This store type is only available in Java. |
| 5 (cstJKSBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in Java Key Store (JKS) format.
NOTE: This store type is only available in Java. |
| 6 (cstPEMKeyFile) | The certificate store is the name of a PEM-encoded file that contains a private key and an optional certificate. |
| 7 (cstPEMKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains a private key and an optional certificate. |
| 8 (cstPublicKeyFile) | The certificate store is the name of a file that contains a PEM- or DER-encoded public key certificate. |
| 9 (cstPublicKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains a PEM- or DER-encoded public key certificate. |
| 10 (cstSSHPublicKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains an SSH-style public key. |
| 11 (cstP7BFile) | The certificate store is the name of a PKCS#7 file containing certificates. |
| 12 (cstP7BBlob) | The certificate store is a string (binary) representing a certificate store in PKCS#7 format. |
| 13 (cstSSHPublicKeyFile) | The certificate store is the name of a file that contains an SSH-style public key. |
| 14 (cstPPKFile) | The certificate store is the name of a file that contains a PPK (PuTTY Private Key). |
| 15 (cstPPKBlob) | The certificate store is a string (binary) that contains a PPK (PuTTY Private Key). |
| 16 (cstXMLFile) | The certificate store is the name of a file that contains a certificate in XML format. |
| 17 (cstXMLBlob) | The certificate store is a string that contains a certificate in XML format. |
| 18 (cstJWKFile) | The certificate store is the name of a file that contains a JWK (JSON Web Key). |
| 19 (cstJWKBlob) | The certificate store is a string that contains a JWK (JSON Web Key). |
| 21 (cstBCFKSFile) | The certificate store is the name of a file that contains a BCFKS (Bouncy Castle FIPS Key Store).
NOTE: This store type is only available in Java and .NET. |
| 22 (cstBCFKSBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in BCFKS (Bouncy Castle FIPS Key Store) format.
NOTE: This store type is only available in Java and .NET. |
| 23 (cstPKCS11) | The certificate is present on a physical security key accessible via a PKCS#11 interface.
To use a security key, create a new Certificate object and pass cstPKCS11 as the ssl_cert_store_type, the full path of the PKCS#11 DLL as the ssl_cert_store, and the PIN as the ssl_cert_store_password. Code Example. SSH Authentication with Security Key (without CertMgr):
Alternatively, collect the necessary data using the CertMgr struct by calling the list_store_certificates method after setting the corresponding properties accordingly. The certificate information returned in the on_cert_list event's CertEncoded parameter may be saved for later use. When using a certificate obtained with this approach, pass the previously saved security key information as the ssl_cert_store and set ssl_cert_store_password to the PIN. Code Example. SSH Authentication with Security Key (with CertMgr):
|
| 99 (cstAuto) | The store type is automatically detected from the input data. This setting may be used with both public and private keys and can detect any of the supported formats automatically. |
Data Type
i32
ssl_cert_subject_alt_names property (SCIMDesktop Struct)
Comma-separated lists of alternative subject names for the certificate.
Syntax
fn ssl_cert_subject_alt_names(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
Comma-separated lists of alternative subject names for the certificate.
This property is read-only.
Data Type
String
ssl_cert_thumbprint_md5 property (SCIMDesktop Struct)
The MD5 hash of the certificate.
Syntax
fn ssl_cert_thumbprint_md5(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The MD5 hash of the certificate. It is primarily used for X.509 certificates. If the hash does not already exist, it is automatically computed.
This property is read-only.
Data Type
String
ssl_cert_thumbprint_sha1 property (SCIMDesktop Struct)
The SHA-1 hash of the certificate.
Syntax
fn ssl_cert_thumbprint_sha1(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The SHA-1 hash of the certificate. It is primarily used for X.509 certificates. If the hash does not already exist, it is automatically computed.
This property is read-only.
Data Type
String
ssl_cert_thumbprint_sha256 property (SCIMDesktop Struct)
The SHA-256 hash of the certificate.
Syntax
fn ssl_cert_thumbprint_sha256(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The SHA-256 hash of the certificate. It is primarily used for X.509 certificates. If the hash does not already exist, it is automatically computed.
This property is read-only.
Data Type
String
ssl_cert_usage property (SCIMDesktop Struct)
The text description of UsageFlags .
Syntax
fn ssl_cert_usage(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This value will be one or more of the following strings and will be separated by commas:
- Digital Signature
- Non-Repudiation
- Key Encipherment
- Data Encipherment
- Key Agreement
- Certificate Signing
- CRL Signing
- Encipher Only
If the provider is OpenSSL, the value is a comma-separated list of X.509 certificate extension names.
This property is read-only.
Data Type
String
ssl_cert_usage_flags property (SCIMDesktop Struct)
The flags that show intended use for the certificate.
Syntax
fn ssl_cert_usage_flags(&self) -> Result<i32, CloudSSOError>
Default Value
0
Remarks
The flags that show intended use for the certificate. The value of ssl_cert_usage_flags is a combination of the following flags:
| 0x80 | Digital Signature |
| 0x40 | Non-Repudiation |
| 0x20 | Key Encipherment |
| 0x10 | Data Encipherment |
| 0x08 | Key Agreement |
| 0x04 | Certificate Signing |
| 0x02 | CRL Signing |
| 0x01 | Encipher Only |
Please see the ssl_cert_usage property for a text representation of ssl_cert_usage_flags.
This functionality currently is not available when the provider is OpenSSL.
This property is read-only.
Data Type
i32
ssl_cert_version property (SCIMDesktop Struct)
The certificate's version number.
Syntax
fn ssl_cert_version(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
The certificate's version number. The possible values are the strings "V1", "V2", and "V3".
This property is read-only.
Data Type
String
ssl_cert_subject property (SCIMDesktop Struct)
The subject of the certificate used for client authentication.
Syntax
fn ssl_cert_subject(&self) -> Result<String, CloudSSOError>
fn set_ssl_cert_subject(&self, value : &str) -> Option<CloudSSOError> fn set_ssl_cert_subject_ref(&self, value : &String) -> Option<CloudSSOError>
Default Value
""
Remarks
This property must be set after all other certificate properties are set. When this property is set, a search is performed in the current certificate store to locate a certificate with a matching subject.
If a matching certificate is found, the property is set to the full subject of the matching certificate.
If an exact match is not found, the store is searched for subjects containing the value of the property.
If a match is still not found, the property is set to an empty string, and no certificate is selected.
The special value "*" picks a random certificate in the certificate store.
The certificate subject is a comma-separated list of distinguished name fields and values. For instance, "CN=www.server.com, OU=test, C=US, E=example@email.com". Common fields and their meanings are as follows:
| Field | Meaning |
| CN | Common Name. This is commonly a hostname like www.server.com. |
| O | Organization |
| OU | Organizational Unit |
| L | Locality |
| S | State |
| C | Country |
| E | Email Address |
If a field value contains a comma, it must be quoted.
Data Type
String
ssl_cert_encoded property (SCIMDesktop Struct)
The certificate (PEM/Base64 encoded).
Syntax
fn ssl_cert_encoded(&self) -> Result<Vec<u8>, CloudSSOError>
fn set_ssl_cert_encoded(&self, value : Vec<u8>) -> Option<CloudSSOError> fn set_ssl_cert_encoded_ref(&self, value : &[u8]) -> Option<CloudSSOError>
Default Value
""
Remarks
The certificate (PEM/Base64 encoded). This property is used to assign a specific certificate. The ssl_cert_store and ssl_cert_subject properties also may be used to specify a certificate.
When ssl_cert_encoded is set, a search is initiated in the current ssl_cert_store for the private key of the certificate. If the key is found, ssl_cert_subject is updated to reflect the full subject of the selected certificate; otherwise, ssl_cert_subject is set to an empty string.
Data Type
Vec<u8>
ssl_enabled property (SCIMDesktop Struct)
This property indicates whether Transport Layer Security/Secure Sockets Layer (TLS/SSL) is enabled.
Syntax
fn ssl_enabled(&self) -> Result<bool, CloudSSOError>
fn set_ssl_enabled(&self, value : bool) -> Option<CloudSSOError>
Default Value
false
Remarks
This property specifies whether TLS/SSL is enabled in the struct. When False (default), the struct operates in plaintext mode. When True, TLS/SSL is enabled.
TLS/SSL may also be enabled by setting ssl_start_mode. Setting ssl_start_mode will automatically update this property value.
Data Type
bool
ssl_provider property (SCIMDesktop Struct)
The Secure Sockets Layer/Transport Layer Security (SSL/TLS) implementation to use.
Syntax
fn ssl_provider(&self) -> Result<i32, CloudSSOError>
fn set_ssl_provider(&self, value : i32) -> Option<CloudSSOError>
Possible Values
0 // Automatic
1 // Platform
2 // Internal
Default Value
0
Remarks
This property specifies the SSL/TLS implementation to use. In most cases the default value of 0 (Automatic) is recommended and should not be changed. When set to 0 (Automatic), the struct will select whether to use the platform implementation or the internal implementation depending on the operating system as well as the TLS version being used.
Possible values are as follows:
| 0 (sslpAutomatic - default) | Automatically selects the appropriate implementation. |
| 1 (sslpPlatform) | Uses the platform/system implementation. |
| 2 (sslpInternal) | Uses the internal implementation. |
In most cases using the default value (Automatic) is recommended. The struct will select a provider depending on the current platform.
When Automatic is selected, on Windows, the struct will use the platform implementation. On Linux/macOS, the struct will use the internal implementation. When TLS 1.3 is enabled via SSLEnabledProtocols, the struct will always try and use the platform implementation. If the platform TLS 1.3 implementation is not available, the internal implementation will be used.
Data Type
i32
supported_operations property (SCIMDesktop Struct)
A bitmask that controls which SCIM operations the struct accepts.
Syntax
fn supported_operations(&self) -> Result<i32, CloudSSOError>
fn set_supported_operations(&self, value : i32) -> Option<CloudSSOError>
Default Value
65535
Remarks
This property determines which SCIM operations are enabled. Requests for disabled operations receive a 501 Not Implemented response. The following flags are defined (specified in hexadecimal notation) and may be combined:
| 0x0001 (sopUserCreate) | Accept POST /Users requests. Fires the on_create_user event. |
| 0x0002 (sopUserRead) | Accept GET /Users/{id} requests. Fires the on_get_user event. |
| 0x0004 (sopUserUpdate) | Accept PUT /Users/{id} and PATCH /Users/{id} requests. Fires the on_get_user and on_update_user events. |
| 0x0008 (sopUserDelete) | Accept DELETE /Users/{id} requests. Fires the on_delete_user event. |
| 0x0010 (sopUserList) | Accept GET /Users requests. Fires the on_list_users event. |
| 0x0100 (sopGroupCreate) | Accept POST /Groups requests. Fires the on_create_group event. |
| 0x0200 (sopGroupRead) | Accept GET /Groups/{id} requests. Fires the on_get_group event. |
| 0x0400 (sopGroupUpdate) | Accept PUT /Groups/{id} and PATCH /Groups/{id} requests. Fires the on_get_group and on_update_group events. |
| 0x0800 (sopGroupDelete) | Accept DELETE /Groups/{id} requests. Fires the on_delete_group event. |
| 0x1000 (sopGroupList) | Accept GET /Groups requests. Fires the on_list_groups event. |
| 0xFFFF (sopAll) | Enable all operations, which is the default. |
Bits not listed above are reserved for future use and are currently ignored. sopAll is defined as 0xFFFF to include any operations added in future versions.
Note that PUT and PATCH requests share the same flag (sopUserUpdate / sopGroupUpdate). Enabling the flag accepts both methods, and disabling it rejects both. For PATCH requests, the struct retrieves the current resource via on_get_user or on_get_group, applies the patch operations, then fires on_update_user or on_update_group with the merged result.
When the ETagEnabled configuration setting is enabled and a PUT or DELETE request includes an If-Match header, the struct also fires on_get_user or on_get_group to validate the ETag before the update or delete event fires.
The discovery endpoints (/ServiceProviderConfig, /ResourceTypes, /Schemas) are always available regardless of this property's value.
The capabilities advertised in the ServiceProviderConfig discovery endpoint are derived from this property automatically.
Data Type
i32
user_email_count property (SCIMDesktop Struct)
The number of records in the UserEmail arrays.
Syntax
fn user_email_count(&self) -> Result<i32, CloudSSOError>
Default Value
0
Remarks
This property controls the size of the following arrays:
The array indices start at 0 and end at user_email_count - 1.This property is read-only.
Data Type
i32
user_email_address property (SCIMDesktop Struct)
The email address.
Syntax
fn user_email_address(&self, UserEmailIndex : i32) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This property contains the email address value.
The UserEmailIndex parameter specifies the index of the item in the array. The size of the array is controlled by the user_email_count property.
This property is read-only.
Data Type
String
user_email_type property (SCIMDesktop Struct)
The type of email address.
Syntax
fn user_email_type(&self, UserEmailIndex : i32) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This property classifies the email address. Common values include work, home, and other.
The UserEmailIndex parameter specifies the index of the item in the array. The size of the array is controlled by the user_email_count property.
This property is read-only.
Data Type
String
user_email_primary property (SCIMDesktop Struct)
Whether this is the primary email address.
Syntax
fn user_email_primary(&self, UserEmailIndex : i32) -> Result<bool, CloudSSOError>
Default Value
false
Remarks
This property indicates whether this email address is the user's primary address. Only one entry in the collection should have Primary set to true.
The UserEmailIndex parameter specifies the index of the item in the array. The size of the array is controlled by the user_email_count property.
This property is read-only.
Data Type
bool
user_extension_cost_center property (SCIMDesktop Struct)
The user's cost center.
Syntax
fn user_extension_cost_center(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This property identifies the cost center the user is associated with.
This property is read-only.
Data Type
String
user_extension_department property (SCIMDesktop Struct)
The user's department.
Syntax
fn user_extension_department(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This property contains the name of the department the user belongs to.
This property is read-only.
Data Type
String
user_extension_division property (SCIMDesktop Struct)
The user's division.
Syntax
fn user_extension_division(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This property contains the name of the division the user belongs to within the organization.
This property is read-only.
Data Type
String
user_extension_employee_number property (SCIMDesktop Struct)
The user's employee number.
Syntax
fn user_extension_employee_number(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This property contains a string identifier for the user within the organization, such as a payroll or HR system identifier.
This property is read-only.
Data Type
String
user_extension_manager_display_name property (SCIMDesktop Struct)
The display name of the user's manager.
Syntax
fn user_extension_manager_display_name(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This property contains the human-readable name of the manager. It corresponds to the displayName sub-attribute of the manager complex attribute in the enterprise extension schema.
This property is read-only.
Data Type
String
user_extension_manager_id property (SCIMDesktop Struct)
The user identifier of the user's manager.
Syntax
fn user_extension_manager_id(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This property contains the identifier of the manager's user resource within the application. It corresponds to the value sub-attribute of the manager complex attribute in the enterprise extension schema.
This property is read-only.
Data Type
String
user_extension_manager_ref property (SCIMDesktop Struct)
The URI of the manager's user resource.
Syntax
fn user_extension_manager_ref(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This property contains the full URI reference to the manager's user resource (e.g., /scim/v2/Users/{id}). It corresponds to the $ref sub-attribute of the manager complex attribute in the enterprise extension schema.
This property is read-only.
Data Type
String
user_extension_organization property (SCIMDesktop Struct)
The user's organization.
Syntax
fn user_extension_organization(&self) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This property contains the name of the organization the user belongs to.
This property is read-only.
Data Type
String
user_phone_count property (SCIMDesktop Struct)
The number of records in the UserPhone arrays.
Syntax
fn user_phone_count(&self) -> Result<i32, CloudSSOError>
Default Value
0
Remarks
This property controls the size of the following arrays:
The array indices start at 0 and end at user_phone_count - 1.This property is read-only.
Data Type
i32
user_phone_number property (SCIMDesktop Struct)
The phone number.
Syntax
fn user_phone_number(&self, UserPhoneIndex : i32) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This property contains the phone number value.
The UserPhoneIndex parameter specifies the index of the item in the array. The size of the array is controlled by the user_phone_count property.
This property is read-only.
Data Type
String
user_phone_type property (SCIMDesktop Struct)
The type of phone number.
Syntax
fn user_phone_type(&self, UserPhoneIndex : i32) -> Result<String, CloudSSOError>
Default Value
""
Remarks
This property classifies the phone number. Common values include work, mobile, home, and other.
The UserPhoneIndex parameter specifies the index of the item in the array. The size of the array is controlled by the user_phone_count property.
This property is read-only.
Data Type
String
user_phone_primary property (SCIMDesktop Struct)
Whether this is the primary phone number.
Syntax
fn user_phone_primary(&self, UserPhoneIndex : i32) -> Result<bool, CloudSSOError>
Default Value
false
Remarks
This property indicates whether this phone number is the user's primary number. Only one entry in the collection should have Primary set to true.
The UserPhoneIndex parameter specifies the index of the item in the array. The size of the array is controlled by the user_phone_count property.
This property is read-only.
Data Type
bool
add_group method (SCIMDesktop Struct)
Adds a group entry to the outgoing list response.
Syntax
fn add_group(&self, group_id : &str, display_name : &str, external_id : &str) -> Result<(), CloudSSOError>
Remarks
This method should be called within a on_list_groups event handler once for each group in the current page of results. The struct then assembles all added entries into the SCIM ListResponse envelope.
GroupId is the unique identifier for the group, and DisplayName may be empty if not available.
The stored ExternalId should be passed for the group (or "" (empty string) if not recorded).
After all entries have been added, the TotalResults event parameter should be set to the total number of matching groups across all pages, which may be greater than the number of entries added in the current method call.
scim.OnListGroups += (sender, e) => {
var page = db.QueryGroups(e.FilterAttribute, e.FilterOperator, e.FilterValue, e.StartIndex - 1, e.Count);
foreach (var group in page.Results) {
scim.AddGroup(group.Id, group.DisplayName, group.ExternalId);
}
e.TotalResults = page.TotalCount;
e.StatusCode = 200;
};
add_group_member method (SCIMDesktop Struct)
Adds a member to the outgoing group response.
Syntax
fn add_group_member(&self, group_id : &str, member_id : &str, member_display : &str) -> Result<(), CloudSSOError>
Remarks
This method should be called within a on_get_group or on_list_groups event handler once for each group member to be included in the SCIM response.
GroupId identifies the group to which the member belongs, and MemberId and MemberDisplay represent the SCIM resource ID and display name of the member user, respectively.
scim.OnGetGroup += (sender, e) => {
var group = db.FindGroup(e.GroupId);
e.DisplayName = group.DisplayName;
e.ExternalId = group.ExternalId;
foreach (var member in group.Members) {
scim.AddGroupMember(e.GroupId, member.UserId, member.DisplayName);
}
e.StatusCode = 200;
};
add_user method (SCIMDesktop Struct)
Adds a user entry to the outgoing list response.
Syntax
fn add_user(&self, user_id : &str, user_name : &str, display_name : &str, external_id : &str, active : bool) -> Result<(), CloudSSOError>
Remarks
This method should be called within a on_list_users event handler once for each user in the current page of results. The struct then assembles all added entries into the SCIM ListResponse envelope.
UserId is the unique identifier for the user, UserName is the user's SCIM username, and DisplayName may be empty if not available.
The stored ExternalId should be passed for the user (or "" (empty string) if not recorded). Active indicates whether the user account is enabled.
After all entries have been added, the TotalResults event parameter should be set to the total number of matching users across all pages, which may be greater than the number of entries added in the current method call.
void scim_ListUsers(object sender, SCIMDesktopListUsersEventArgs e)
{
var results = db.QueryUsers(e.FilterAttribute, e.FilterOperator, e.FilterValue,
e.StartIndex - 1, e.Count);
foreach (var user in results.Page)
scim.AddUser(user.Id, user.UserName, user.DisplayName, user.ExternalId, user.Active);
e.TotalResults = results.TotalCount;
e.StatusCode = 0;
}
add_user_email method (SCIMDesktop Struct)
Adds an email address to the outgoing user response.
Syntax
fn add_user_email(&self, user_id : &str, address : &str, email_type : &str, primary : bool) -> Result<(), CloudSSOError>
Remarks
This method should be called within a on_get_user or on_list_users event handler once for each user's email address to be included in the response.
UserId identifies which user the address belongs to. Address is the email address string, and EmailType classifies the address (common values include work, home, and other). Primary should be set to true only for the user's primary address.
scim.OnGetUser += (sender, e) => {
var user = db.FindUser(e.UserId);
e.UserName = user.UserName;
e.DisplayName = user.DisplayName;
e.Active = user.Active;
foreach (var email in user.Emails) {
scim.AddUserEmail(e.UserId, email.Address, email.EmailType, email.Primary);
}
e.StatusCode = 200;
};
add_user_extension method (SCIMDesktop Struct)
Adds enterprise extension attributes to the outgoing user response.
Syntax
fn add_user_extension(&self, user_id : &str, department : &str, employee_number : &str, cost_center : &str, organization : &str, division : &str, manager_id : &str, manager_ref : &str, manager_display_name : &str) -> Result<(), CloudSSOError>
Remarks
This method should be called within a on_get_user or on_list_users event handler once for each user's enterprise extension data to be included in the response.
UserId identifies which user the data belongs to. Department, EmployeeNumber, CostCenter, Organization, and Division are the enterprise user attributes.
ManagerId is the user identifier of the user's manager, ManagerRef is the full URI of the manager's user resource, and ManagerDisplayName is the manager's display name.
"" (empty string) should be passed for any attribute that is not applicable or not stored.
scim.OnGetUser += (sender, e) => {
var user = db.FindUser(e.UserId);
e.UserName = user.UserName;
e.DisplayName = user.DisplayName;
e.Active = user.Active;
if (user.HasManager) {
scim.AddUserExtension(e.UserId, user.Department, user.EmployeeNumber, user.CostCenter, user.Organization,
user.Division, user.ManagerId, "", user.ManagerDisplayName);
}
e.StatusCode = 200;
};
The struct natively supports the SCIM enterprise user extension schema (urn:ietf:params:scim:schemas:extension:enterprise:2.0:User). The extension schema namespace is handled internally. The API exposes extension attributes directly without requiring the URN to be specified. Additional extension schemas may be supported in future releases.
add_user_phone method (SCIMDesktop Struct)
Adds a phone number to the outgoing user response.
Syntax
fn add_user_phone(&self, user_id : &str, number : &str, phone_type : &str, primary : bool) -> Result<(), CloudSSOError>
Remarks
This method should be called within a on_get_user or on_list_users event handler once for each user's phone number to be included in the response.
UserId identifies which user the number belongs to. Number is the phone number string, and PhoneType classifies the number (common values include work, mobile, home, and other). Primary should be set to true only for the user's primary number.
scim.OnGetUser += (sender, e) => {
var user = db.FindUser(e.UserId);
e.UserName = user.UserName;
e.DisplayName = user.DisplayName;
e.Active = user.Active;
foreach (var phone in user.Phones) {
scim.AddUserPhone(e.UserId, phone.Number, phone.PhoneType, phone.Primary);
}
e.StatusCode = 200;
};
config method (SCIMDesktop Struct)
Sets or retrieves a configuration setting.
Syntax
fn config(&self, configuration_string : &str) -> Result<String, CloudSSOError>
Remarks
config is a generic method available in every struct. It is used to set and retrieve configuration settings for the struct.
These settings are similar in functionality to properties, but they are rarely used. In order to avoid "polluting" the property namespace of the struct, access to these internal properties is provided through the config method.
To set a configuration setting named PROPERTY, you must call Config("PROPERTY=VALUE"), where VALUE is the value of the setting expressed as a string. For boolean values, use the strings "True", "False", "0", "1", "Yes", or "No" (case does not matter).
To read (query) the value of a configuration setting, you must call Config("PROPERTY"). The value will be returned as a string.
disconnect method (SCIMDesktop Struct)
This method disconnects the specified client.
Syntax
fn disconnect(&self, connection_id : i32) -> Result<(), CloudSSOError>
Remarks
Calling this method will disconnect the client specified by the connection_id parameter.
do_events method (SCIMDesktop Struct)
This method processes events from the internal message queue.
Syntax
fn do_events(&self) -> Result<(), CloudSSOError>
Remarks
When do_events is called, the struct processes any available events. If no events are available, it waits for a preset period of time, and then returns.
reset method (SCIMDesktop Struct)
This method will reset the struct.
Syntax
fn reset(&self) -> Result<(), CloudSSOError>
Remarks
This method will reset the struct's properties to their default values.
shutdown method (SCIMDesktop Struct)
This method shuts down the server.
Syntax
fn shutdown(&self) -> Result<(), CloudSSOError>
Remarks
This method shuts down the server. Calling this method is equivalent to calling stop_listening and then breaking every client connection by calling disconnect.
start_listening method (SCIMDesktop Struct)
This method starts listening for incoming connections.
Syntax
fn start_listening(&self) -> Result<(), CloudSSOError>
Remarks
This method begins listening for incoming connections on the port specified by local_port. Once listening, events will fire as new clients connect and data are transferred.
To stop listening for new connections, call stop_listening. To stop listening for new connections and to disconnect all existing clients, call shutdown.
stop_listening method (SCIMDesktop Struct)
This method stops listening for new connections.
Syntax
fn stop_listening(&self) -> Result<(), CloudSSOError>
Remarks
This method stops listening for new connections. After being called, any new connection attempts will be rejected. Calling this method does not disconnect existing connections.
To stop listening and to disconnect all existing clients, call shutdown instead.
on_auth_request event (SCIMDesktop Struct)
Fired for every incoming request to control access to specific endpoints.
Syntax
// SCIMDesktopAuthRequestEventArgs carries the SCIMDesktop AuthRequest event's parameters.
pub struct SCIMDesktopAuthRequestEventArgs {
fn connection_id(&self) -> i32
fn auth_method(&self) -> &String
fn user(&self) -> &String
fn token(&self) -> &String
fn accept(&self) -> bool
fn set_accept(&self, value : bool)
}
// SCIMDesktopAuthRequestEvent defines the signature of the SCIMDesktop AuthRequest event's handler function.
pub trait SCIMDesktopAuthRequestEvent {
fn on_auth_request(&self, sender : SCIMDesktop, e : &mut SCIMDesktopAuthRequestEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_auth_request(&self) -> &'a dyn SCIMDesktopAuthRequestEvent;
pub fn set_on_auth_request(&mut self, value : &'a dyn SCIMDesktopAuthRequestEvent);
...
}
Remarks
This event fires for every incoming request before any resource event is raised, allowing the application to implement custom authentication logic.
The AuthMethod parameter identifies the authentication scheme supplied by the client.
| Bearer | The Token parameter contains the raw bearer token, and the User parameter remains empty. If the auth_token property has been set, the struct automatically compares it against the incoming token and pre-initializes the Accept parameter with the result. When auth_token is not set, Accept defaults to false. |
| Basic | The struct decodes the base64 credentials and splits them on the colon separator. User contains the username and Token contains the password. Accept defaults to false. No automatic credential check is performed. |
| Other/Unrecognized | The AuthMethod parameter contains the scheme name as supplied by the client. Token contains everything following it and User is empty. Accept defaults to false. |
| "" (empty string) | No Authorization header was present. User and Token are both set to "" (empty string). Accept defaults to false. |
The Accept value may be changed when additional logic outside of the struct is required (e.g., to enforce token expiry, check a revocation list, or accept an alternative authentication scheme).
Requests rejected by this event receive a 401 Unauthorized response.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
Note that this event fires for every incoming request.
Custom validation covering multiple authentication schemes may be performed as shown.
scim.OnAuthRequest += (sender, e) => {
if (e.AuthMethod == "Bearer") {
e.Accept = tokenStore.IsValid(e.Token);
} else if (e.AuthMethod == "Basic") {
e.Accept = userStore.CheckPassword(e.User, e.Token);
} else {
e.Accept = false;
}
};
on_connected event (SCIMDesktop Struct)
This event is fired immediately after a connection completes (or fails).
Syntax
// SCIMDesktopConnectedEventArgs carries the SCIMDesktop Connected event's parameters.
pub struct SCIMDesktopConnectedEventArgs {
fn connection_id(&self) -> i32
fn status_code(&self) -> i32
fn description(&self) -> &String
}
// SCIMDesktopConnectedEvent defines the signature of the SCIMDesktop Connected event's handler function.
pub trait SCIMDesktopConnectedEvent {
fn on_connected(&self, sender : SCIMDesktop, e : &mut SCIMDesktopConnectedEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_connected(&self) -> &'a dyn SCIMDesktopConnectedEvent;
pub fn set_on_connected(&mut self, value : &'a dyn SCIMDesktopConnectedEvent);
...
}
Remarks
If the connection is made normally, status_code is 0, and description is "OK".
If the connection fails, status_code has the error code returned by the system. description contains a description of this code. The value of status_code is equal to the value of the system error.
Please refer to the Error Codes section for more information.
on_connection_request event (SCIMDesktop Struct)
This event is fired when a request for connection comes from a remote host.
Syntax
// SCIMDesktopConnectionRequestEventArgs carries the SCIMDesktop ConnectionRequest event's parameters.
pub struct SCIMDesktopConnectionRequestEventArgs {
fn address(&self) -> &String
fn port(&self) -> i32
fn accept(&self) -> bool
fn set_accept(&self, value : bool)
}
// SCIMDesktopConnectionRequestEvent defines the signature of the SCIMDesktop ConnectionRequest event's handler function.
pub trait SCIMDesktopConnectionRequestEvent {
fn on_connection_request(&self, sender : SCIMDesktop, e : &mut SCIMDesktopConnectionRequestEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_connection_request(&self) -> &'a dyn SCIMDesktopConnectionRequestEvent;
pub fn set_on_connection_request(&mut self, value : &'a dyn SCIMDesktopConnectionRequestEvent);
...
}
Remarks
This event indicates an incoming connection. The connection is accepted by default. address and port will contain information about the remote host requesting the inbound connection. If you want to refuse it, you can set the accept parameter to False.
on_create_group event (SCIMDesktop Struct)
Fired when a request to create a new group is received.
Syntax
// SCIMDesktopCreateGroupEventArgs carries the SCIMDesktop CreateGroup event's parameters.
pub struct SCIMDesktopCreateGroupEventArgs {
fn connection_id(&self) -> i32
fn external_id(&self) -> &String
fn display_name(&self) -> &String
fn group_id(&self) -> &String
fn set_group_id(&self, value : &str)
fn set_group_id_ref(&self, value : &String)
fn status_code(&self) -> i32
fn set_status_code(&self, value : i32)
}
// SCIMDesktopCreateGroupEvent defines the signature of the SCIMDesktop CreateGroup event's handler function.
pub trait SCIMDesktopCreateGroupEvent {
fn on_create_group(&self, sender : SCIMDesktop, e : &mut SCIMDesktopCreateGroupEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_create_group(&self) -> &'a dyn SCIMDesktopCreateGroupEvent;
pub fn set_on_create_group(&mut self, value : &'a dyn SCIMDesktopCreateGroupEvent);
...
}
Remarks
This event fires when the struct receives a POST /Groups request from the Identity Provider. The inbound group attributes are provided as event parameters.
If the Identity Provider included an externalId in the request, it is made available in the ExternalId parameter. This value should be stored alongside the group record so it can be returned in future on_get_group event responses.
If the request includes group members, they are made available via the group_members collection, where each entry exposes a MemberId and MemberDisplay property.
If the group is created successfully, the GroupId parameter must be set to the newly assigned identifier, and the StatusCode parameter must be set to 201. The full created resource is returned to the Identity Provider in the 201 Created response body. To signal an error, StatusCode must be set to the appropriate HTTP status code (e.g., 409 for a duplicate group). The StatusCode parameter defaults to 500, and a value of 0 is treated as 201.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
on_create_user event (SCIMDesktop Struct)
Fired when a request to create a new user is received.
Syntax
// SCIMDesktopCreateUserEventArgs carries the SCIMDesktop CreateUser event's parameters.
pub struct SCIMDesktopCreateUserEventArgs {
fn connection_id(&self) -> i32
fn external_id(&self) -> &String
fn user_name(&self) -> &String
fn given_name(&self) -> &String
fn family_name(&self) -> &String
fn display_name(&self) -> &String
fn active(&self) -> bool
fn user_id(&self) -> &String
fn set_user_id(&self, value : &str)
fn set_user_id_ref(&self, value : &String)
fn status_code(&self) -> i32
fn set_status_code(&self, value : i32)
}
// SCIMDesktopCreateUserEvent defines the signature of the SCIMDesktop CreateUser event's handler function.
pub trait SCIMDesktopCreateUserEvent {
fn on_create_user(&self, sender : SCIMDesktop, e : &mut SCIMDesktopCreateUserEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_create_user(&self) -> &'a dyn SCIMDesktopCreateUserEvent;
pub fn set_on_create_user(&mut self, value : &'a dyn SCIMDesktopCreateUserEvent);
...
}
Remarks
This event fires when the struct receives a POST /Users request from the Identity Provider. The inbound user attributes are provided as event parameters.
If the Identity Provider included an externalId in the request, it is made available in the ExternalId parameter. This value should be stored alongside the user record so it can be returned in future on_get_user event responses.
The Active parameter indicates whether the new user account should be enabled. If the Identity Provider does not include an active attribute in the request, Active defaults to true.
Email addresses and phone numbers supplied in the request are made available via the user_emails and user_phones collections, where each entry exposes an Address, EmailType, and Primary property (for emails) or a Number, PhoneType, and Primary property (for phones). If the Identity Provider included enterprise extension attributes in the request, they are also made available via the user_extension property.
If the user is created successfully, the UserId parameter must be set to the newly assigned identifier, and the StatusCode parameter must be set to 201. The full created resource is returned to the Identity Provider in the 201 Created response body. To signal an error, StatusCode must be set to the appropriate HTTP status code (e.g., 409 for a duplicate user). The StatusCode parameter defaults to 500, and a value of 0 is treated as 201.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
on_delete_group event (SCIMDesktop Struct)
Fired when a request to delete a group is received.
Syntax
// SCIMDesktopDeleteGroupEventArgs carries the SCIMDesktop DeleteGroup event's parameters.
pub struct SCIMDesktopDeleteGroupEventArgs {
fn connection_id(&self) -> i32
fn group_id(&self) -> &String
fn status_code(&self) -> i32
fn set_status_code(&self, value : i32)
}
// SCIMDesktopDeleteGroupEvent defines the signature of the SCIMDesktop DeleteGroup event's handler function.
pub trait SCIMDesktopDeleteGroupEvent {
fn on_delete_group(&self, sender : SCIMDesktop, e : &mut SCIMDesktopDeleteGroupEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_delete_group(&self) -> &'a dyn SCIMDesktopDeleteGroupEvent;
pub fn set_on_delete_group(&mut self, value : &'a dyn SCIMDesktopDeleteGroupEvent);
...
}
Remarks
This event fires when the struct receives a DELETE /Groups/{id} request from the Identity Provider. The GroupId parameter identifies the group to delete.
If the deletion is successful, the StatusCode parameter must be set to 204. The struct then returns a 204 No Content response. If the group is not found, StatusCode must be set to 404. The StatusCode parameter defaults to 500, and a value of 0 is treated as 204.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
on_delete_user event (SCIMDesktop Struct)
Fired when a request to delete a user is received.
Syntax
// SCIMDesktopDeleteUserEventArgs carries the SCIMDesktop DeleteUser event's parameters.
pub struct SCIMDesktopDeleteUserEventArgs {
fn connection_id(&self) -> i32
fn user_id(&self) -> &String
fn status_code(&self) -> i32
fn set_status_code(&self, value : i32)
}
// SCIMDesktopDeleteUserEvent defines the signature of the SCIMDesktop DeleteUser event's handler function.
pub trait SCIMDesktopDeleteUserEvent {
fn on_delete_user(&self, sender : SCIMDesktop, e : &mut SCIMDesktopDeleteUserEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_delete_user(&self) -> &'a dyn SCIMDesktopDeleteUserEvent;
pub fn set_on_delete_user(&mut self, value : &'a dyn SCIMDesktopDeleteUserEvent);
...
}
Remarks
This event fires when the struct receives a DELETE /Users/{id} request from the Identity Provider. The UserId parameter identifies the user to delete.
If the deletion is successful, the StatusCode parameter must be set to 204. The struct then returns a 204 No Content response. If the user is not found, StatusCode must be set to 404. The StatusCode parameter defaults to 500, and a value of 0 is treated as 204.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
on_disconnected event (SCIMDesktop Struct)
This event is fired when a connection is closed.
Syntax
// SCIMDesktopDisconnectedEventArgs carries the SCIMDesktop Disconnected event's parameters.
pub struct SCIMDesktopDisconnectedEventArgs {
fn connection_id(&self) -> i32
fn status_code(&self) -> i32
fn description(&self) -> &String
}
// SCIMDesktopDisconnectedEvent defines the signature of the SCIMDesktop Disconnected event's handler function.
pub trait SCIMDesktopDisconnectedEvent {
fn on_disconnected(&self, sender : SCIMDesktop, e : &mut SCIMDesktopDisconnectedEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_disconnected(&self) -> &'a dyn SCIMDesktopDisconnectedEvent;
pub fn set_on_disconnected(&mut self, value : &'a dyn SCIMDesktopDisconnectedEvent);
...
}
Remarks
If the connection is broken normally, status_code is 0, and description is "OK".
If the connection is broken for any other reason, status_code has the error code returned by the system. description contains a description of this code. The value of status_code is equal to the value of the system error.
Please refer to the Error Codes section for more information.
on_error event (SCIMDesktop Struct)
This event fires information about errors during data delivery.
Syntax
// SCIMDesktopErrorEventArgs carries the SCIMDesktop Error event's parameters.
pub struct SCIMDesktopErrorEventArgs {
fn connection_id(&self) -> i32
fn error_code(&self) -> i32
fn description(&self) -> &String
}
// SCIMDesktopErrorEvent defines the signature of the SCIMDesktop Error event's handler function.
pub trait SCIMDesktopErrorEvent {
fn on_error(&self, sender : SCIMDesktop, e : &mut SCIMDesktopErrorEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_error(&self) -> &'a dyn SCIMDesktopErrorEvent;
pub fn set_on_error(&mut self, value : &'a dyn SCIMDesktopErrorEvent);
...
}
Remarks
The on_error event is fired in case of exceptional conditions during message processing. Normally, the struct fails with an error.
error_code contains an error code and description contains a textual description of the error. For a list of valid error codes and their descriptions, please refer to the Error Codes section.
connection_id indicates the connection for which the error is applicable.
This event also fires when the struct rejects a SCIM request, immediately before the error response is returned to the Identity Provider. This includes requests the struct itself rejects, such as a malformed request body or a failed authentication. It also includes requests an application event handler rejects by setting its StatusCode parameter to 400 or higher. Those requests report the generic error code 1.
For a rejected SCIM request, Description is the message carried in the detail field of the SCIM error response body. The HTTP status and the response body have already been determined by the time the event fires, so a handler cannot change what is returned to the Identity Provider.
on_get_group event (SCIMDesktop Struct)
Fired when a request to retrieve a group is received, before a PATCH group update, or when ETags are enabled and a PUT or DELETE request includes an If-Match header.
Syntax
// SCIMDesktopGetGroupEventArgs carries the SCIMDesktop GetGroup event's parameters.
pub struct SCIMDesktopGetGroupEventArgs {
fn connection_id(&self) -> i32
fn group_id(&self) -> &String
fn external_id(&self) -> &String
fn set_external_id(&self, value : &str)
fn set_external_id_ref(&self, value : &String)
fn display_name(&self) -> &String
fn set_display_name(&self, value : &str)
fn set_display_name_ref(&self, value : &String)
fn status_code(&self) -> i32
fn set_status_code(&self, value : i32)
}
// SCIMDesktopGetGroupEvent defines the signature of the SCIMDesktop GetGroup event's handler function.
pub trait SCIMDesktopGetGroupEvent {
fn on_get_group(&self, sender : SCIMDesktop, e : &mut SCIMDesktopGetGroupEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_get_group(&self) -> &'a dyn SCIMDesktopGetGroupEvent;
pub fn set_on_get_group(&mut self, value : &'a dyn SCIMDesktopGetGroupEvent);
...
}
Remarks
This event fires when the struct receives a GET /Groups/{id} request from the Identity Provider. It also fires before processing a PATCH /Groups/{id} request, or when the ETagEnabled configuration setting is true and a PUT /Groups/{id} or DELETE /Groups/{id} request includes an If-Match header. The GroupId parameter identifies the group to retrieve.
The DisplayName must be set to the group's display name. If an ExternalId was stored for this group, it must be set as well. To include group members in the response, the add_group_member method should be called once for each member. This event must supply the full group for a PATCH request to work correctly.
When the group is found, the StatusCode parameter must be set to 200. If the group is not found, StatusCode must be set to 404.
The request_type property may be used to determine whether this event was fired by a direct GET request or internally before a PATCH or a conditional PUT/DELETE.
The StatusCode parameter defaults to 500, and a value of 0 is treated as 200.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
on_get_resource_types event (SCIMDesktop Struct)
Fired when a request for the resource type definitions is received.
Syntax
// SCIMDesktopGetResourceTypesEventArgs carries the SCIMDesktop GetResourceTypes event's parameters.
pub struct SCIMDesktopGetResourceTypesEventArgs {
fn connection_id(&self) -> i32
fn response_body(&self) -> &[u8]
}
// SCIMDesktopGetResourceTypesEvent defines the signature of the SCIMDesktop GetResourceTypes event's handler function.
pub trait SCIMDesktopGetResourceTypesEvent {
fn on_get_resource_types(&self, sender : SCIMDesktop, e : &mut SCIMDesktopGetResourceTypesEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_get_resource_types(&self) -> &'a dyn SCIMDesktopGetResourceTypesEvent;
pub fn set_on_get_resource_types(&mut self, value : &'a dyn SCIMDesktopGetResourceTypesEvent);
...
}
Remarks
This event fires when the struct receives a GET /ResourceTypes request from the Identity Provider. The struct returns the standard SCIM User and Group resource type definitions automatically and populates the ResponseBody parameter with the serialized JSON before firing this event.
This event is informational and may be used to log or audit discovery requests and inspect the generated response.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
on_get_schemas event (SCIMDesktop Struct)
Fired when a request for the schema definitions is received.
Syntax
// SCIMDesktopGetSchemasEventArgs carries the SCIMDesktop GetSchemas event's parameters.
pub struct SCIMDesktopGetSchemasEventArgs {
fn connection_id(&self) -> i32
fn response_body(&self) -> &[u8]
}
// SCIMDesktopGetSchemasEvent defines the signature of the SCIMDesktop GetSchemas event's handler function.
pub trait SCIMDesktopGetSchemasEvent {
fn on_get_schemas(&self, sender : SCIMDesktop, e : &mut SCIMDesktopGetSchemasEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_get_schemas(&self) -> &'a dyn SCIMDesktopGetSchemasEvent;
pub fn set_on_get_schemas(&mut self, value : &'a dyn SCIMDesktopGetSchemasEvent);
...
}
Remarks
This event fires when the struct receives a GET /Schemas request from the Identity Provider. The struct returns the standard SCIM User and Group schema definitions, including the enterprise user extension, automatically and populates the ResponseBody parameter with the serialized JSON before firing this event.
This event is informational and may be used to log or audit discovery requests and inspect the generated response.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
on_get_service_provider_config event (SCIMDesktop Struct)
Fired when a request for the service provider configuration is received.
Syntax
// SCIMDesktopGetServiceProviderConfigEventArgs carries the SCIMDesktop GetServiceProviderConfig event's parameters.
pub struct SCIMDesktopGetServiceProviderConfigEventArgs {
fn connection_id(&self) -> i32
fn response_body(&self) -> &[u8]
}
// SCIMDesktopGetServiceProviderConfigEvent defines the signature of the SCIMDesktop GetServiceProviderConfig event's handler function.
pub trait SCIMDesktopGetServiceProviderConfigEvent {
fn on_get_service_provider_config(&self, sender : SCIMDesktop, e : &mut SCIMDesktopGetServiceProviderConfigEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_get_service_provider_config(&self) -> &'a dyn SCIMDesktopGetServiceProviderConfigEvent;
pub fn set_on_get_service_provider_config(&mut self, value : &'a dyn SCIMDesktopGetServiceProviderConfigEvent);
...
}
Remarks
This event fires when the struct receives a GET /ServiceProviderConfig request from the Identity Provider. The struct generates the configuration document automatically based on the supported_operations and max_results properties and populates the ResponseBody parameter with the serialized JSON before firing this event.
This event is informational and may be used to log or audit discovery requests and inspect the generated response.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
on_get_user event (SCIMDesktop Struct)
Fired when a request to retrieve a user is received, before a PATCH user update, or when ETags are enabled and a PUT or DELETE request includes an If-Match header.
Syntax
// SCIMDesktopGetUserEventArgs carries the SCIMDesktop GetUser event's parameters.
pub struct SCIMDesktopGetUserEventArgs {
fn connection_id(&self) -> i32
fn user_id(&self) -> &String
fn external_id(&self) -> &String
fn set_external_id(&self, value : &str)
fn set_external_id_ref(&self, value : &String)
fn user_name(&self) -> &String
fn set_user_name(&self, value : &str)
fn set_user_name_ref(&self, value : &String)
fn given_name(&self) -> &String
fn set_given_name(&self, value : &str)
fn set_given_name_ref(&self, value : &String)
fn family_name(&self) -> &String
fn set_family_name(&self, value : &str)
fn set_family_name_ref(&self, value : &String)
fn display_name(&self) -> &String
fn set_display_name(&self, value : &str)
fn set_display_name_ref(&self, value : &String)
fn active(&self) -> bool
fn set_active(&self, value : bool)
fn status_code(&self) -> i32
fn set_status_code(&self, value : i32)
}
// SCIMDesktopGetUserEvent defines the signature of the SCIMDesktop GetUser event's handler function.
pub trait SCIMDesktopGetUserEvent {
fn on_get_user(&self, sender : SCIMDesktop, e : &mut SCIMDesktopGetUserEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_get_user(&self) -> &'a dyn SCIMDesktopGetUserEvent;
pub fn set_on_get_user(&mut self, value : &'a dyn SCIMDesktopGetUserEvent);
...
}
Remarks
This event fires when the struct receives a GET /Users/{id} request from the Identity Provider. It also fires before processing a PATCH /Users/{id} request, or when the ETagEnabled configuration setting is true and a PUT /Users/{id} or DELETE /Users/{id} request includes an If-Match header. The UserId parameter identifies the user to retrieve.
The output parameters (i.e., UserName, GivenName, FamilyName, DisplayName, Active) must be set to the current user data. If an ExternalId was stored for this user, it must be set as well. To include email addresses, phone numbers, and enterprise extension data in the response, the add_user_email, add_user_phone, and add_user_extension methods should be called once for each address, number, and user with extension data on record. This event must supply the full user for a PATCH request to work correctly.
When the user is found, the StatusCode parameter must be set to 200. If the user is not found, StatusCode must be set to 404.
The request_type property may be used to determine whether this event was fired by a direct GET request or internally before a PATCH or a conditional PUT/DELETE.
The StatusCode parameter defaults to 500, and a value of 0 is treated as 200.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
on_list_groups event (SCIMDesktop Struct)
Fired when a request to list groups is received.
Syntax
// SCIMDesktopListGroupsEventArgs carries the SCIMDesktop ListGroups event's parameters.
pub struct SCIMDesktopListGroupsEventArgs {
fn connection_id(&self) -> i32
fn filter(&self) -> &String
fn filter_attribute(&self) -> &String
fn filter_operator(&self) -> &String
fn filter_value(&self) -> &String
fn start_index(&self) -> i32
fn count(&self) -> i32
fn total_results(&self) -> i32
fn set_total_results(&self, value : i32)
fn status_code(&self) -> i32
fn set_status_code(&self, value : i32)
}
// SCIMDesktopListGroupsEvent defines the signature of the SCIMDesktop ListGroups event's handler function.
pub trait SCIMDesktopListGroupsEvent {
fn on_list_groups(&self, sender : SCIMDesktop, e : &mut SCIMDesktopListGroupsEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_list_groups(&self) -> &'a dyn SCIMDesktopListGroupsEvent;
pub fn set_on_list_groups(&mut self, value : &'a dyn SCIMDesktopListGroupsEvent);
...
}
Remarks
This event fires when the struct receives a GET /Groups request from the Identity Provider. The Filter parameter contains the raw SCIM filter expression from the request, or "" (empty string) if no filter was specified. For simple single-term filters (e.g., displayName eq "Admins"), the FilterAttribute, FilterOperator, and FilterValue parameters are also populated with the parsed components for convenience. For compound or nested filter expressions, only Filter is populated. The application must parse it directly.
The StartIndex and Count parameters reflect the pagination values from the request. StartIndex is 1-based, and Count is capped by the value of the max_results property. When the Identity Provider does not include a count parameter, Count defaults to max_results. The application should use these values to query its data source and return only the matching page of results. The sortBy and sortOrder query parameters are not currently supported and are ignored when received.
The add_group method must be called once for each group in the current page of results, after which the TotalResults parameter must be set to the total number of matching groups across all pages. To include members for each group, the add_group_member method may be called as needed. The StatusCode must be set to 200 when the operation succeeds.
To signal an error, StatusCode must be set to the appropriate HTTP status code. The StatusCode parameter defaults to 500, and a value of 0 is treated as 200.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
on_list_users event (SCIMDesktop Struct)
Fired when a request to list users is received.
Syntax
// SCIMDesktopListUsersEventArgs carries the SCIMDesktop ListUsers event's parameters.
pub struct SCIMDesktopListUsersEventArgs {
fn connection_id(&self) -> i32
fn filter(&self) -> &String
fn filter_attribute(&self) -> &String
fn filter_operator(&self) -> &String
fn filter_value(&self) -> &String
fn start_index(&self) -> i32
fn count(&self) -> i32
fn total_results(&self) -> i32
fn set_total_results(&self, value : i32)
fn status_code(&self) -> i32
fn set_status_code(&self, value : i32)
}
// SCIMDesktopListUsersEvent defines the signature of the SCIMDesktop ListUsers event's handler function.
pub trait SCIMDesktopListUsersEvent {
fn on_list_users(&self, sender : SCIMDesktop, e : &mut SCIMDesktopListUsersEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_list_users(&self) -> &'a dyn SCIMDesktopListUsersEvent;
pub fn set_on_list_users(&mut self, value : &'a dyn SCIMDesktopListUsersEvent);
...
}
Remarks
This event fires when the struct receives a GET /Users request from the Identity Provider. The Filter parameter contains the raw SCIM filter expression from the request, or "" (empty string) if no filter was specified. For simple single-term filters (e.g., userName eq "jsmith"), the FilterAttribute, FilterOperator, and FilterValue parameters are also populated with the parsed components for convenience. For compound or nested filter expressions, only Filter is populated. The application must parse it directly.
The StartIndex and Count parameters reflect the pagination values from the request. StartIndex is 1-based, and Count is capped by the value of the max_results property. When the Identity Provider does not include a count parameter, Count defaults to max_results. The application should use these values to query its data source and return only the matching page of results. The sortBy and sortOrder query parameters are not currently supported and are ignored when received.
The add_user method must be called once for each user in the current page of results. To include email addresses, phone numbers, or enterprise extension data for each user, the add_user_email, add_user_phone, and add_user_extension methods may be called as needed. After all users have been added, the TotalResults parameter must be set to the total number of matching users across all pages. This value may be greater than Count if the result set is paginated. The StatusCode must be set to 200 when the operation succeeds.
To signal an error, StatusCode must be set to the appropriate HTTP status code. The StatusCode parameter defaults to 500, and a value of 0 is treated as 200.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
on_log event (SCIMDesktop Struct)
Fired once for each log message.
Syntax
// SCIMDesktopLogEventArgs carries the SCIMDesktop Log event's parameters.
pub struct SCIMDesktopLogEventArgs {
fn connection_id(&self) -> i32
fn log_level(&self) -> i32
fn message(&self) -> &String
fn log_type(&self) -> &String
}
// SCIMDesktopLogEvent defines the signature of the SCIMDesktop Log event's handler function.
pub trait SCIMDesktopLogEvent {
fn on_log(&self, sender : SCIMDesktop, e : &mut SCIMDesktopLogEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_log(&self) -> &'a dyn SCIMDesktopLogEvent;
pub fn set_on_log(&mut self, value : &'a dyn SCIMDesktopLogEvent);
...
}
Remarks
This event fires once for each log message generated by the struct while it processes a SCIM request. This includes messages from the built-in HTTP server about the HTTP messages exchanged with the Identity Provider. The verbosity is controlled by the LogLevel configuration setting.
LogLevel indicates the level of the message. Possible values are as follows:
| 0 (None) | No messages are logged. |
| 1 (Info - default) | Each request received, its completion status, and the result of authenticating the request are logged. The HTTP request line and headers, and the HTTP status line and response headers, are also logged. |
| 2 (Verbose) | Equivalent to 1 (Info) for this struct. No additional detail is logged at this level. |
| 3 (Debug) | Additionally logs which event (e.g., on_create_user or on_list_groups) is about to be invoked to handle the current request, and the HTTP request and response bodies. |
Message is the log entry.
LogType identifies the type of log entry. Possible values are as follows:
- "SCIM": Messages about processing the SCIM request, such as the authentication result and the event being invoked.
- "HTTPConnection": The HTTP messages exchanged with the Identity Provider.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
on_ssl_client_authentication event (SCIMDesktop Struct)
This event is fired when the client presents its credentials to the server.
Syntax
// SCIMDesktopSSLClientAuthenticationEventArgs carries the SCIMDesktop SSLClientAuthentication event's parameters.
pub struct SCIMDesktopSSLClientAuthenticationEventArgs {
fn connection_id(&self) -> i32
fn cert_encoded(&self) -> &[u8]
fn cert_subject(&self) -> &String
fn cert_issuer(&self) -> &String
fn status(&self) -> &String
fn accept(&self) -> bool
fn set_accept(&self, value : bool)
}
// SCIMDesktopSSLClientAuthenticationEvent defines the signature of the SCIMDesktop SSLClientAuthentication event's handler function.
pub trait SCIMDesktopSSLClientAuthenticationEvent {
fn on_ssl_client_authentication(&self, sender : SCIMDesktop, e : &mut SCIMDesktopSSLClientAuthenticationEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_ssl_client_authentication(&self) -> &'a dyn SCIMDesktopSSLClientAuthenticationEvent;
pub fn set_on_ssl_client_authentication(&mut self, value : &'a dyn SCIMDesktopSSLClientAuthenticationEvent);
...
}
Remarks
This event enables the server to decide whether or not to continue. The accept parameter is a recommendation on whether to continue or to close the connection. This is just a suggestion: application software must use its own logic to determine whether or not to continue.
When accept is False, status shows why the verification failed (otherwise, status contains the string "OK").
on_ssl_connection_request event (SCIMDesktop Struct)
This event fires when a Secure Sockets Layer (SSL) connection is requested.
Syntax
// SCIMDesktopSSLConnectionRequestEventArgs carries the SCIMDesktop SSLConnectionRequest event's parameters.
pub struct SCIMDesktopSSLConnectionRequestEventArgs {
fn connection_id(&self) -> i32
fn supported_cipher_suites(&self) -> &String
fn supported_signature_algs(&self) -> &String
fn cert_store_type(&self) -> i32
fn set_cert_store_type(&self, value : i32)
fn cert_store(&self) -> &String
fn set_cert_store(&self, value : &str)
fn set_cert_store_ref(&self, value : &String)
fn cert_password(&self) -> &String
fn set_cert_password(&self, value : &str)
fn set_cert_password_ref(&self, value : &String)
fn cert_subject(&self) -> &String
fn set_cert_subject(&self, value : &str)
fn set_cert_subject_ref(&self, value : &String)
}
// SCIMDesktopSSLConnectionRequestEvent defines the signature of the SCIMDesktop SSLConnectionRequest event's handler function.
pub trait SCIMDesktopSSLConnectionRequestEvent {
fn on_ssl_connection_request(&self, sender : SCIMDesktop, e : &mut SCIMDesktopSSLConnectionRequestEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_ssl_connection_request(&self) -> &'a dyn SCIMDesktopSSLConnectionRequestEvent;
pub fn set_on_ssl_connection_request(&mut self, value : &'a dyn SCIMDesktopSSLConnectionRequestEvent);
...
}
Remarks
This event fires when an SSL connection is requested and ssl_provider is set to Internal. This event provides an opportunity to select an alternative certificate to the connecting client. This event does not fire when ssl_provider is set to Platform.
This event allows the struct to be configured to use both RSA and ECDSA certificates depending on the connecting client's capabilities.
connection_id is the connection Id of the client requesting the connection.
supported_cipher_suites is a comma-separated list of cipher suites that the client supports.
supported_signature_algs is a comma-separated list of certificate signature algorithms that the client supports.
cert_store_type is the store type of the alternate certificate to use for this connection. The struct supports both public and private keys in a variety of formats. When the cstAuto value is used, the struct will automatically determine the type. This property can take one of the following values:
| 0 (cstUser - default) | For Windows, this specifies that the certificate store is a certificate store owned by the current user.
NOTE: This store type is not available in Java. |
| 1 (cstMachine) | For Windows, this specifies that the certificate store is a machine store.
NOTE: This store type is not available in Java. |
| 2 (cstPFXFile) | The certificate store is the name of a PFX (PKCS#12) file containing certificates. |
| 3 (cstPFXBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in PFX (PKCS#12) format. |
| 4 (cstJKSFile) | The certificate store is the name of a Java Key Store (JKS) file containing certificates.
NOTE: This store type is only available in Java. |
| 5 (cstJKSBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in Java Key Store (JKS) format.
NOTE: This store type is only available in Java. |
| 6 (cstPEMKeyFile) | The certificate store is the name of a PEM-encoded file that contains a private key and an optional certificate. |
| 7 (cstPEMKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains a private key and an optional certificate. |
| 8 (cstPublicKeyFile) | The certificate store is the name of a file that contains a PEM- or DER-encoded public key certificate. |
| 9 (cstPublicKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains a PEM- or DER-encoded public key certificate. |
| 10 (cstSSHPublicKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains an SSH-style public key. |
| 11 (cstP7BFile) | The certificate store is the name of a PKCS#7 file containing certificates. |
| 12 (cstP7BBlob) | The certificate store is a string (binary) representing a certificate store in PKCS#7 format. |
| 13 (cstSSHPublicKeyFile) | The certificate store is the name of a file that contains an SSH-style public key. |
| 14 (cstPPKFile) | The certificate store is the name of a file that contains a PPK (PuTTY Private Key). |
| 15 (cstPPKBlob) | The certificate store is a string (binary) that contains a PPK (PuTTY Private Key). |
| 16 (cstXMLFile) | The certificate store is the name of a file that contains a certificate in XML format. |
| 17 (cstXMLBlob) | The certificate store is a string that contains a certificate in XML format. |
| 18 (cstJWKFile) | The certificate store is the name of a file that contains a JWK (JSON Web Key). |
| 19 (cstJWKBlob) | The certificate store is a string that contains a JWK (JSON Web Key). |
| 21 (cstBCFKSFile) | The certificate store is the name of a file that contains a BCFKS (Bouncy Castle FIPS Key Store).
NOTE: This store type is only available in Java and .NET. |
| 22 (cstBCFKSBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in BCFKS (Bouncy Castle FIPS Key Store) format.
NOTE: This store type is only available in Java and .NET. |
| 23 (cstPKCS11) | The certificate is present on a physical security key accessible via a PKCS#11 interface.
To use a security key, create a new Certificate object and pass cstPKCS11 as the ssl_cert_store_type, the full path of the PKCS#11 DLL as the ssl_cert_store, and the PIN as the ssl_cert_store_password. Code Example. SSH Authentication with Security Key (without CertMgr):
Alternatively, collect the necessary data using the CertMgr struct by calling the list_store_certificates method after setting the corresponding properties accordingly. The certificate information returned in the on_cert_list event's CertEncoded parameter may be saved for later use. When using a certificate obtained with this approach, pass the previously saved security key information as the ssl_cert_store and set ssl_cert_store_password to the PIN. Code Example. SSH Authentication with Security Key (with CertMgr):
|
| 99 (cstAuto) | The store type is automatically detected from the input data. This setting may be used with both public and private keys and can detect any of the supported formats automatically. |
cert_store is the store name or location of the alternate certificate to use for this connection.
Designations of certificate stores are platform dependent.
The following designations are the most common User and Machine certificate stores in Windows:
| MY | A certificate store holding personal certificates with their associated private keys. |
| CA | Certifying authority certificates. |
| ROOT | Root certificates. |
When the certificate store type is cstPFXFile, this property must be set to the name of the file. When the type is cstPFXBlob, the property must be set to the binary contents of a PFX file (i.e., PKCS#12 certificate store).
cert_password is the password of the certificate store containing the alternate certificate to use for this connection.
cert_subject is the subject of the alternate certificate to use for this connection.
The special value * matches any subject and will select the first certificate in the store. The certificate subject is a comma-separated list of distinguished name fields and values. For instance, "CN=www.server.com, OU=test, C=US, E=example@email.com". Common fields and their meanings are as follows:
| Field | Meaning |
| CN | Common Name. This is commonly a hostname like www.server.com. |
| O | Organization |
| OU | Organizational Unit |
| L | Locality |
| S | State |
| C | Country |
| E | Email Address |
If a field value contains a comma, it must be quoted.
on_ssl_status event (SCIMDesktop Struct)
This event is fired to show the progress of the secure connection.
Syntax
// SCIMDesktopSSLStatusEventArgs carries the SCIMDesktop SSLStatus event's parameters.
pub struct SCIMDesktopSSLStatusEventArgs {
fn connection_id(&self) -> i32
fn message(&self) -> &String
}
// SCIMDesktopSSLStatusEvent defines the signature of the SCIMDesktop SSLStatus event's handler function.
pub trait SCIMDesktopSSLStatusEvent {
fn on_ssl_status(&self, sender : SCIMDesktop, e : &mut SCIMDesktopSSLStatusEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_ssl_status(&self) -> &'a dyn SCIMDesktopSSLStatusEvent;
pub fn set_on_ssl_status(&mut self, value : &'a dyn SCIMDesktopSSLStatusEvent);
...
}
Remarks
The event is fired for informational and logging purposes only. It is used to track the progress of the connection.
on_update_group event (SCIMDesktop Struct)
Fired after the current group has been loaded and a replace or update request has been applied.
Syntax
// SCIMDesktopUpdateGroupEventArgs carries the SCIMDesktop UpdateGroup event's parameters.
pub struct SCIMDesktopUpdateGroupEventArgs {
fn connection_id(&self) -> i32
fn group_id(&self) -> &String
fn external_id(&self) -> &String
fn display_name(&self) -> &String
fn status_code(&self) -> i32
fn set_status_code(&self, value : i32)
}
// SCIMDesktopUpdateGroupEvent defines the signature of the SCIMDesktop UpdateGroup event's handler function.
pub trait SCIMDesktopUpdateGroupEvent {
fn on_update_group(&self, sender : SCIMDesktop, e : &mut SCIMDesktopUpdateGroupEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_update_group(&self) -> &'a dyn SCIMDesktopUpdateGroupEvent;
pub fn set_on_update_group(&mut self, value : &'a dyn SCIMDesktopUpdateGroupEvent);
...
}
Remarks
This event fires when the struct receives a PUT /Groups/{id} or PATCH /Groups/{id} request from the Identity Provider. For PUT, the event parameters reflect the full group representation from the request body directly. For PATCH, the struct first retrieves the current group via the on_get_group event, applies the patch operations, then fires this event.
For a PUT request, the ExternalId parameter contains the externalId value from the request body, or "" (empty string) if not provided.
For a PUT request, the provided DisplayName and member list should be applied to the group identified by GroupId, and any attributes not present in the request should be cleared. For a PATCH request, the event parameters likewise reflect the complete final group, with the values loaded through the on_get_group event and the patch operations applied on top. All parameters should be applied in the same way, since any attribute the patch did not touch carries its original value.
Updated members are made available via the group_members collection. The collection always reflects the full current member list after the request is applied. All stored members should be replaced with the collection contents.
When the update succeeds, StatusCode must be set to 200. It may also be set to 204, which is valid when the updated resource does not need to be returned, causing the struct to return a 204 No Content response with no body. Some Identity Providers require a 200 response with the updated resource body. Check your Identity Provider's SCIM implementation guide before returning 204. If the group is not found, StatusCode must be set to 404. The StatusCode parameter defaults to 500, and a value of 0 is treated as 200.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
on_update_user event (SCIMDesktop Struct)
Fired after the current user has been loaded and a replace or update request has been applied.
Syntax
// SCIMDesktopUpdateUserEventArgs carries the SCIMDesktop UpdateUser event's parameters.
pub struct SCIMDesktopUpdateUserEventArgs {
fn connection_id(&self) -> i32
fn user_id(&self) -> &String
fn external_id(&self) -> &String
fn user_name(&self) -> &String
fn given_name(&self) -> &String
fn family_name(&self) -> &String
fn display_name(&self) -> &String
fn active(&self) -> bool
fn status_code(&self) -> i32
fn set_status_code(&self, value : i32)
}
// SCIMDesktopUpdateUserEvent defines the signature of the SCIMDesktop UpdateUser event's handler function.
pub trait SCIMDesktopUpdateUserEvent {
fn on_update_user(&self, sender : SCIMDesktop, e : &mut SCIMDesktopUpdateUserEventArgs);
}
impl <'a> SCIMDesktop<'a> {
pub fn on_update_user(&self) -> &'a dyn SCIMDesktopUpdateUserEvent;
pub fn set_on_update_user(&mut self, value : &'a dyn SCIMDesktopUpdateUserEvent);
...
}
Remarks
This event fires when the struct receives a PUT /Users/{id} or PATCH /Users/{id} request from the Identity Provider. For PUT, the event parameters reflect the full user representation from the request body directly. For PATCH, the struct first retrieves the current user via the on_get_user event, applies the patch operations, then fires this event.
For a PUT request, the ExternalId parameter contains the externalId value from the request body, or "" (empty string) if not provided.
For a PUT request, all event parameters should be applied to the user identified by UserId, and any attributes not present in the request should be cleared. For a PATCH request, the event parameters likewise reflect the complete final user, with the values loaded through the on_get_user event and the patch operations applied on top. All parameters should be applied in the same way, since any attribute the patch did not touch carries its original value.
The Active parameter reflects the user's active state. For a PUT request, Active defaults to true if active is absent from the request body.
Email addresses and phone numbers are made available via the user_emails and user_phones collections. The collections always reflect the full current state of the user after the request is applied. All stored entries should be replaced with the collection contents. Enterprise extension attributes are made available via the user_extension property and likewise reflect the full current state after the request is applied.
When the update succeeds, StatusCode must be set to 200. It may also be set to 204, which is valid when the updated resource does not need to be returned, causing the struct to return a 204 No Content response with no body. Some Identity Providers require a 200 response with the updated resource body. Check your Identity Provider's SCIM implementation guide before returning 204. If the user is not found, StatusCode must be set to 404. The StatusCode parameter defaults to 500, and a value of 0 is treated as 200.
The ConnectionId parameter identifies the client connection. The value is first provided by the on_connected event and may be used to correlate events that are fired for the same connection.
Config Settings (SCIMDesktop Struct)
The struct accepts one or more of the following configuration settings. Configuration settings are similar in functionality to properties, but they are rarely used. In order to avoid "polluting" the property namespace of the struct, access to these internal properties is provided through the config method.SCIMDesktop Config Settings
The default value * allows all clients. The BlockedClients configuration setting may instead be used to deny specific addresses while allowing all others.
This setting takes precedence over the AllowedClients configuration setting.
A missing header does not prevent the operation. When supplied, the header must equal the current ETag or be *. A non-matching value returns 412 Precondition Failed before the update or delete event fires.
On a GET /Users/{id} or GET /Groups/{id} request, the struct also compares an incoming If-None-Match header against the current resource's ETag. When the header is present and equals the current ETag or *, a 304 Not Modified response is returned with no body instead of the resource representation.
This feature is disabled by default and should be enabled if the connecting Identity Provider requires versioned resources.
This setting does not suppress errors for a missing PatchOp schema, an empty Operations array, or an invalid operation name.
When the LogLevel configuration setting is set to 3, each ignored attribute path is recorded through the on_log event. Attribute values and filter values are not included in this log entry.
| 0 | Listens on IPv4 only (default). |
| 1 | Listens on IPv6 only. |
| 2 | Listens on both IPv4 and IPv6. |
JSON XPath values are rooted at /json. For example, /json/displayName selects the displayName property, and /json/members/[1]/value selects the first member's value property. XPath indices are 1-based.
Requests with an empty or invalid JSON body clear the current JSON XPath state.
Base Config Settings
The following is a list of valid code page identifiers:
| Identifier | Name |
| 037 | IBM EBCDIC - U.S./Canada |
| 437 | OEM - United States |
| 500 | IBM EBCDIC - International |
| 708 | Arabic - ASMO 708 |
| 709 | Arabic - ASMO 449+, BCON V4 |
| 710 | Arabic - Transparent Arabic |
| 720 | Arabic - Transparent ASMO |
| 737 | OEM - Greek (formerly 437G) |
| 775 | OEM - Baltic |
| 850 | OEM - Multilingual Latin I |
| 852 | OEM - Latin II |
| 855 | OEM - Cyrillic (primarily Russian) |
| 857 | OEM - Turkish |
| 858 | OEM - Multilingual Latin I + Euro symbol |
| 860 | OEM - Portuguese |
| 861 | OEM - Icelandic |
| 862 | OEM - Hebrew |
| 863 | OEM - Canadian-French |
| 864 | OEM - Arabic |
| 865 | OEM - Nordic |
| 866 | OEM - Russian |
| 869 | OEM - Modern Greek |
| 870 | IBM EBCDIC - Multilingual/ROECE (Latin-2) |
| 874 | ANSI/OEM - Thai (same as 28605, ISO 8859-15) |
| 875 | IBM EBCDIC - Modern Greek |
| 932 | ANSI/OEM - Japanese, Shift-JIS |
| 936 | ANSI/OEM - Simplified Chinese (PRC, Singapore) |
| 949 | ANSI/OEM - Korean (Unified Hangul Code) |
| 950 | ANSI/OEM - Traditional Chinese (Taiwan; Hong Kong SAR, PRC) |
| 1026 | IBM EBCDIC - Turkish (Latin-5) |
| 1047 | IBM EBCDIC - Latin 1/Open System |
| 1140 | IBM EBCDIC - U.S./Canada (037 + Euro symbol) |
| 1141 | IBM EBCDIC - Germany (20273 + Euro symbol) |
| 1142 | IBM EBCDIC - Denmark/Norway (20277 + Euro symbol) |
| 1143 | IBM EBCDIC - Finland/Sweden (20278 + Euro symbol) |
| 1144 | IBM EBCDIC - Italy (20280 + Euro symbol) |
| 1145 | IBM EBCDIC - Latin America/Spain (20284 + Euro symbol) |
| 1146 | IBM EBCDIC - United Kingdom (20285 + Euro symbol) |
| 1147 | IBM EBCDIC - France (20297 + Euro symbol) |
| 1148 | IBM EBCDIC - International (500 + Euro symbol) |
| 1149 | IBM EBCDIC - Icelandic (20871 + Euro symbol) |
| 1200 | Unicode UCS-2 Little-Endian (BMP of ISO 10646) |
| 1201 | Unicode UCS-2 Big-Endian |
| 1250 | ANSI - Central European |
| 1251 | ANSI - Cyrillic |
| 1252 | ANSI - Latin I |
| 1253 | ANSI - Greek |
| 1254 | ANSI - Turkish |
| 1255 | ANSI - Hebrew |
| 1256 | ANSI - Arabic |
| 1257 | ANSI - Baltic |
| 1258 | ANSI/OEM - Vietnamese |
| 1361 | Korean (Johab) |
| 10000 | MAC - Roman |
| 10001 | MAC - Japanese |
| 10002 | MAC - Traditional Chinese (Big5) |
| 10003 | MAC - Korean |
| 10004 | MAC - Arabic |
| 10005 | MAC - Hebrew |
| 10006 | MAC - Greek I |
| 10007 | MAC - Cyrillic |
| 10008 | MAC - Simplified Chinese (GB 2312) |
| 10010 | MAC - Romania |
| 10017 | MAC - Ukraine |
| 10021 | MAC - Thai |
| 10029 | MAC - Latin II |
| 10079 | MAC - Icelandic |
| 10081 | MAC - Turkish |
| 10082 | MAC - Croatia |
| 12000 | Unicode UCS-4 Little-Endian |
| 12001 | Unicode UCS-4 Big-Endian |
| 20000 | CNS - Taiwan |
| 20001 | TCA - Taiwan |
| 20002 | Eten - Taiwan |
| 20003 | IBM5550 - Taiwan |
| 20004 | TeleText - Taiwan |
| 20005 | Wang - Taiwan |
| 20105 | IA5 IRV International Alphabet No. 5 (7-bit) |
| 20106 | IA5 German (7-bit) |
| 20107 | IA5 Swedish (7-bit) |
| 20108 | IA5 Norwegian (7-bit) |
| 20127 | US-ASCII (7-bit) |
| 20261 | T.61 |
| 20269 | ISO 6937 Non-Spacing Accent |
| 20273 | IBM EBCDIC - Germany |
| 20277 | IBM EBCDIC - Denmark/Norway |
| 20278 | IBM EBCDIC - Finland/Sweden |
| 20280 | IBM EBCDIC - Italy |
| 20284 | IBM EBCDIC - Latin America/Spain |
| 20285 | IBM EBCDIC - United Kingdom |
| 20290 | IBM EBCDIC - Japanese Katakana Extended |
| 20297 | IBM EBCDIC - France |
| 20420 | IBM EBCDIC - Arabic |
| 20423 | IBM EBCDIC - Greek |
| 20424 | IBM EBCDIC - Hebrew |
| 20833 | IBM EBCDIC - Korean Extended |
| 20838 | IBM EBCDIC - Thai |
| 20866 | Russian - KOI8-R |
| 20871 | IBM EBCDIC - Icelandic |
| 20880 | IBM EBCDIC - Cyrillic (Russian) |
| 20905 | IBM EBCDIC - Turkish |
| 20924 | IBM EBCDIC - Latin-1/Open System (1047 + Euro symbol) |
| 20932 | JIS X 0208-1990 & 0121-1990 |
| 20936 | Simplified Chinese (GB2312) |
| 21025 | IBM EBCDIC - Cyrillic (Serbian, Bulgarian) |
| 21027 | Extended Alpha Lowercase |
| 21866 | Ukrainian (KOI8-U) |
| 28591 | ISO 8859-1 Latin I |
| 28592 | ISO 8859-2 Central Europe |
| 28593 | ISO 8859-3 Latin 3 |
| 28594 | ISO 8859-4 Baltic |
| 28595 | ISO 8859-5 Cyrillic |
| 28596 | ISO 8859-6 Arabic |
| 28597 | ISO 8859-7 Greek |
| 28598 | ISO 8859-8 Hebrew |
| 28599 | ISO 8859-9 Latin 5 |
| 28605 | ISO 8859-15 Latin 9 |
| 29001 | Europa 3 |
| 38598 | ISO 8859-8 Hebrew |
| 50220 | ISO 2022 Japanese with no halfwidth Katakana |
| 50221 | ISO 2022 Japanese with halfwidth Katakana |
| 50222 | ISO 2022 Japanese JIS X 0201-1989 |
| 50225 | ISO 2022 Korean |
| 50227 | ISO 2022 Simplified Chinese |
| 50229 | ISO 2022 Traditional Chinese |
| 50930 | Japanese (Katakana) Extended |
| 50931 | US/Canada and Japanese |
| 50933 | Korean Extended and Korean |
| 50935 | Simplified Chinese Extended and Simplified Chinese |
| 50936 | Simplified Chinese |
| 50937 | US/Canada and Traditional Chinese |
| 50939 | Japanese (Latin) Extended and Japanese |
| 51932 | EUC - Japanese |
| 51936 | EUC - Simplified Chinese |
| 51949 | EUC - Korean |
| 51950 | EUC - Traditional Chinese |
| 52936 | HZ-GB2312 Simplified Chinese |
| 54936 | Windows XP: GB18030 Simplified Chinese (4 Byte) |
| 57002 | ISCII Devanagari |
| 57003 | ISCII Bengali |
| 57004 | ISCII Tamil |
| 57005 | ISCII Telugu |
| 57006 | ISCII Assamese |
| 57007 | ISCII Oriya |
| 57008 | ISCII Kannada |
| 57009 | ISCII Malayalam |
| 57010 | ISCII Gujarati |
| 57011 | ISCII Punjabi |
| 65000 | Unicode UTF-7 |
| 65001 | Unicode UTF-8 |
| Identifier | Name |
| 1 | ASCII |
| 2 | NEXTSTEP |
| 3 | JapaneseEUC |
| 4 | UTF8 |
| 5 | ISOLatin1 |
| 6 | Symbol |
| 7 | NonLossyASCII |
| 8 | ShiftJIS |
| 9 | ISOLatin2 |
| 10 | Unicode |
| 11 | WindowsCP1251 |
| 12 | WindowsCP1252 |
| 13 | WindowsCP1253 |
| 14 | WindowsCP1254 |
| 15 | WindowsCP1250 |
| 21 | ISO2022JP |
| 30 | MacOSRoman |
| 10 | UTF16String |
| 0x90000100 | UTF16BigEndian |
| 0x94000100 | UTF16LittleEndian |
| 0x8c000100 | UTF32String |
| 0x98000100 | UTF32BigEndian |
| 0x9c000100 | UTF32LittleEndian |
| 65536 | Proprietary |
- Product: The product the license is for.
- Product Key: The key the license was generated from.
- License Source: Where the license was found (e.g., RuntimeLicense, License File).
- License Type: The type of license installed (e.g., Royalty Free, Single Server).
- Last Valid Build: The last valid build number for which the license will work.
Setting this configuration setting to true tells the struct to use the internal implementation instead of using the system security libraries.
On Windows, this setting is set to false by default. On Linux/macOS, this setting is set to true by default.
To use the system security libraries for Linux, OpenSSL support must be enabled. For more information on how to enable OpenSSL, please refer to the OpenSSL Notes section.
Trappable Errors (SCIMDesktop Struct)
SCIMDesktop Errors
| 961 | Authentication failed. The request was rejected because the on_auth_request event did not accept the credentials. |
| 962 | Invalid request. The request body could not be parsed as valid SCIM JSON, a required field is missing, a PATCH operation or path is not supported, or an If-Match precondition failed. |
| 963 | Unsupported operation. The requested HTTP method and resource type combination is not enabled in the supported_operations property. |
| 964 | Filter parse error. The SCIM filter expression supplied in a GET /Users or GET /Groups request could not be parsed. |
| 965 | Endpoint not found. The request URI does not match a SCIM endpoint under the base_url path, or it names a resource type or schema that does not exist. |
| 966 | Method not allowed. The HTTP method is not supported by the requested SCIM endpoint. |
The class may also return one of the following error codes, which are inherited from other classes.