# System

System manages system information of these types. These systems are published to the runtime and loaded into memory before being used for incoming transactions.

* Database
* (s)FTP
* Http(s)
* Socket
* SMTP
* IBM MQ

<figure><img src="https://support.xnarum.com/download/manuals/ISM-Manual-2023.fld/image073.png" alt=""><figcaption></figcaption></figure>

The systems created by a normal user of a group belongs to the group. And other users of different groups cannot see the systems. But the admin user can see all the systems.

!\[Graphical user interface, text, application, email

Description automatically generated]\(<https://support.xnarum.com/download/manuals/ISM-Manual-2023.fld/image074.png>)

## **Available operations**

These operations are common for system, data structure, field group, field.

### **Publish (**<img src="https://support.xnarum.com/download/manuals/ISM-Manual-2023.fld/image075.png" alt="" data-size="line">**)**

System information is loaded from database, converted into an object, and saved into a memory cache. If the system is used by the running instances, the object is replaced with the new one.

<figure><img src="https://support.xnarum.com/download/manuals/ISM-Manual-2023.fld/image076.png" alt="" width="563"><figcaption></figcaption></figure>

When a system is published, if that system has sub items, all the sub items are published together.

### **Reference (**<img src="https://support.xnarum.com/download/manuals/ISM-Manual-2023.fld/image077.png" alt="" data-size="line">**)**

If a system is used by any flow, this system is displayed in green background.

The hierarchies of the items are these.

·       Flow > system

·       Flow > data structure > field group > field

!\[Graphical user interface

Description automatically generated]\(<https://support.xnarum.com/download/manuals/ISM-Manual-2023.fld/image078.png>)

## **Database**

Database manages these properties.

| Property             | Description                                                           |
| -------------------- | --------------------------------------------------------------------- |
| Database Type        | Database type                                                         |
| Host                 | Database host                                                         |
| Port                 | Database port                                                         |
| Database name        | Database name                                                         |
| User                 | Database user                                                         |
| Password             | User password                                                         |
| Connection Pool Size | Connection pool size. Default size is 10                              |
| Driver class         | If database type is not listed in ISM, custom driver class can be set |
| Driver URL           | Driver class url - file:///jdbc\_driver\_path/jdbc\_driver\_jar\_file |
| Validation Query     | Validation for the connection. Ex) select 1                           |
| Connection String    | JDBC connection String. Refer to Help                                 |

&#x20;

·       Connection String

| Database   | Connection String                                                                                |
| ---------- | ------------------------------------------------------------------------------------------------ |
| mysql      | jdbc:mysql://localhost:3306/database\_name                                                       |
| oracle     | <p>jdbc:oracle:thin:@localhost:1521/service\_name</p><p>jdbc:oracle:thin:@localhost:1521:SID</p> |
| Sqlserver  | jdbc:sqlserver://localhost:1433;databaseName=database\_name                                      |
| Postgresql | jdbc:postgresql://localhost:5432/database\_name                                                  |
| DB2        | jdbc:db2://localhost:446/dbname                                                                  |
| DB2 AS 400 | jdbc:as400://hostname/default-schema                                                             |

Click test button, then the connection information can be verified.

!\[Graphical user interface, application

Description automatically generated]\(<https://support.xnarum.com/download/manuals/ISM-Manual-2023.fld/image079.png>)

&#x20;

&#x20;

&#x20;

&#x20;

## **(s)FTP**

(s)FTP manages these properties.

| Database    | Connection String                                        |
| ----------- | -------------------------------------------------------- |
| Host        | (s)FTP Host                                              |
| Port        | (s)FTP Port                                              |
| FTP Type    | <p>File transfer protocol</p><p>FTP, sFTP, SCP, FTPs</p> |
| User        | File user                                                |
| Password    | User password                                            |
| Private key | Private key for sFTP or FTPS connection                  |
| Passphrase  | Passphrase to access private key                         |

(s)FTP connection can be verified like database.

·       Creating a private key

Run this command at the server. If you want a passphrase, enter passphrase otherwise press enter.

$>ssh-keygen -f my-private.key

!\[Diagram

Description automatically generated with low confidence]\(<https://support.xnarum.com/download/manuals/ISM-Manual-2023.fld/image080.png>)

Private and public key pair is generated as my-private.key and my-private.key.pub.

Add public key to the authorized\_keys file.

$>cat my-private.key.pub >> \~/.ssh/authorized\_keys

Use my-private.key to login sFTP server.

&#x20;

## **Http(s)**

Http manages these properties.

!\[Graphical user interface, text, application

Description automatically generated]\(<https://support.xnarum.com/download/manuals/ISM-Manual-2023.fld/image081.png>)

| Property       | Description                                                                                                                                                                                                            |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| URL            | Endpoint of the target Http(s) server                                                                                                                                                                                  |
| Authenticaiton | <ul><li>None - no authentication</li><li>Basic - basic authentication in HTTP header</li><li>Digest - Digest authentication</li><li>JWT - JWT Token</li><li>Custom - Custom authentication with custom class</li></ul> |

&#x20;

·       Basic authentication

!\[Background pattern

Description automatically generated]\(<https://support.xnarum.com/download/manuals/ISM-Manual-2023.fld/image082.png>)

| Property | Description |
| -------- | ----------- |
| User     | User id     |
| Password | Password    |

Basic authentication adds Authorization header to HTTP header with base64 encoding.

Authorization : Basic a2FpemVuOjEyMzQ1(usename:password)

&#x20;

·       Digest authentication

Digest access authentication is one of the agreed-upon methods a [web server](https://en.wikipedia.org/wiki/Web_server) can use to negotiate credentials, such as username or password, with a user's [web browser](https://en.wikipedia.org/wiki/Web_browser). This can be used to confirm the identity of a user before sending sensitive information, such as online banking transaction history. It applies a [hash function](https://en.wikipedia.org/wiki/Hash_function) to the username and [password](https://en.wikipedia.org/wiki/Password) before sending them over the network. In contrast, [basic access authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) uses the easily reversible [Base64](https://en.wikipedia.org/wiki/Base64) encoding instead of hashing, making it non-secure unless used in conjunction with [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security).

Technically, digest authentication is an application of [MD5](https://en.wikipedia.org/wiki/MD5) [cryptographic hashing](https://en.wikipedia.org/wiki/Cryptographic_hash) with usage of [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce) values to prevent [replay attacks](https://en.wikipedia.org/wiki/Replay_attack). It uses the [HTTP](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol) protocol.

!\[Text

Description automatically generated]\(<https://support.xnarum.com/download/manuals/ISM-Manual-2023.fld/image083.png>)

&#x20;

·       JWT Token

&#x20;

| <p>JSON Web Token (JWT) is an open standard (<a href="https://tools.ietf.org/html/rfc7519">RFC 7519</a>) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA.</p><p>Although JWTs can be encrypted to also provide secrecy between parties, we will focus on signed tokens. Signed tokens can verify the integrity of the claims contained within it, while encrypted tokens hide those claims from other parties. When tokens are signed using public/private key pairs, the signature also certifies that only the party holding the private key is the one that signed it.</p><p> </p> |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

(From <https://jwt.io/introduction>)

JWT token is used to authorize a user after authenticated. JWT Token is generated at the server side with the authentication information sent from the client. If the authentication information is valid, a new JWT Token is generated and returned. This token should be included in all the requests afterwards.

Typically, the server for authentication/authorization has different endpoint.

The token is valid for a finite period. Once the token is expired, a new token should be acquired with the same authentication information.

&#x20;

The token should be included in the HTTP header like this.

| Authorization: Bearer \<token> |
| ------------------------------ |

This type of authentication requires these properties.

<table><thead><tr><th width="233">Property</th><th>Description</th></tr></thead><tbody><tr><td>User</td><td>User id</td></tr><tr><td>Password</td><td>Password</td></tr><tr><td>User Field</td><td>Field name of the user field</td></tr><tr><td>Password Field</td><td>Field name of the password field</td></tr><tr><td>Content Type</td><td><p>Content type of the authentication request</p><ul><li>application/json</li><li>application/x-www-form-urlencoded</li></ul></td></tr><tr><td>Authentication URL</td><td>Endpoint for the authentication</td></tr></tbody></table>

&#x20;

&#x20;

·       Custom authentication

Custom authentication is used to add authentication header to the request. The authentication information can come from a database, a service, or others. Once the authentication information is acquired, that information is added into HTTP header.

This type of authentication requires these properties.

<table><thead><tr><th width="203">Property</th><th>Description</th></tr></thead><tbody><tr><td>User</td><td>User id. Optional</td></tr><tr><td>Password</td><td>Password. Optional</td></tr><tr><td>Class Name</td><td>The java class which generates authentication information.</td></tr></tbody></table>

&#x20;

The class should have execute() method and that method should return NameValuePair list.

```
public List<NameValuePair> execute(HashMap map, String id, String password, String authUrl) throws Exception {
    ArrayList<NameValuePair> rtn = new ArrayList<NameValuePair>();
 
    String tokenValue = getToken(id, password, authUrl); //Get authentication info from somewhere else
    rtn.add(new BasicNameValuePair(X-Auth-Token-, token);
 
    return rtn;
}
```

&#x20;

&#x20;

## **Socket**

Socket manages these properties.

<figure><img src="https://support.xnarum.com/download/manuals/ISM-Manual-2023.fld/image084.png" alt="" width="375"><figcaption></figcaption></figure>

<table><thead><tr><th width="234">Property</th><th>Description</th></tr></thead><tbody><tr><td>Host</td><td>Target host</td></tr><tr><td>Port</td><td>Listening port of the target server</td></tr><tr><td>Length Type</td><td><p>Length field type</p><p>·       Short - 2 bytes length</p><p>·       Integer - 4 bytes length</p><p>·       Character - Stringified length</p><p>Short/Integer length is binary data and Character expresses length in character.</p><p>ex) 00001200 - Length of the data is 1200 bytes</p></td></tr><tr><td>Size of Length</td><td><p>Size of length field</p><ul><li>Short - 2</li><li>Integer - 4</li><li>Character - Not fixed</li></ul></td></tr><tr><td>Header Length</td><td><p>The length of header data.</p><p>Header data contains meta data of the message like followings:</p><p>·       Length</p><p>·       Message Type</p><p>·       Transaction ID</p></td></tr><tr><td>Length Offset</td><td><p>The position of the length field.</p><p>Mostly the first few bytes are the length and offset is 0.</p></td></tr><tr><td>Is Total Length?</td><td><p>Does the value of the length field include length field?</p><p>·       Yes - length field is part of the length.</p><p>·       No - length field is not part of the length.</p></td></tr></tbody></table>

&#x20;

## **Email Server**

SMTP system manages these properties.

<table><thead><tr><th width="221">Property</th><th>Description</th></tr></thead><tbody><tr><td>SMTP Server</td><td>SMTP Host. Main and backup, if exists.</td></tr><tr><td>Port</td><td><p>SMTP Port. Mostly used ports are these:</p><p>25 - non-SSL port</p><p>465 - SSL port</p></td></tr><tr><td>Use SSL?</td><td>If use ssl, SSL modules are used to connect SMTP server.</td></tr><tr><td>User ID</td><td><p>User id of the email server.</p><p>Mostly id is the email address of the sender.</p></td></tr><tr><td>Password</td><td>Password of the email sender.</td></tr></tbody></table>

&#x20;

&#x20;

## **IBM MQ**

MQ system manages these properties.

<table><thead><tr><th width="235">Property</th><th>Description</th></tr></thead><tbody><tr><td>Host</td><td>MQ Queue manager host</td></tr><tr><td>Port</td><td>MQ Listener port</td></tr><tr><td>Queue Manager</td><td>Queue Manager name</td></tr><tr><td>Queue Name</td><td>Request queue</td></tr><tr><td>Channel Name</td><td>SVRCONN name</td></tr><tr><td>Reply Queue manager</td><td>Reply queue manager</td></tr><tr><td>Reply Queue Name</td><td>Reply queue name</td></tr><tr><td>Character Set</td><td>Character encoding. Necessary when conversion is required. EBCDIC &#x3C;-> UTF8</td></tr><tr><td>User</td><td>User id of the host which MQ is running on</td></tr><tr><td>Password</td><td>Password</td></tr></tbody></table>
