openhim-core
Version:
The OpenHIM core application that provides logging and routing of http requests
118 lines (97 loc) • 12.2 kB
Markdown
Basic configuration
===================
This getting started guide will take you through two very important parts of the OpenHIM console which will allow you to create **Clients** and **Channels** to get messages routed through the system.
Before you get started with **Clients** and **Channels** you will need OpenHIM core and OpenHIM console setup. To do so, follow the installation guide [here](/getting-started.html).
To get a better understanding of what the openHIM core does and how it works, read up on the [OpenHIM core concepts](/about.html)
A **Client** is usually some system that you want to able to send request to the OpenHIM. Setting up a **client** allows the OpenHIM to authenticate requests. A **Channel** defines a path that a request will take through the OpenHIM. It describes one more **routes** for the request to be forwarded to, which **clients** are allowed to use this **channel**, which requests are to be direccted to this **channel** and many more options that allow you to controls what happens for a particular request.
To manage **clients** and **channels** you will need to log into the OpenHIM console and then you may follow the steps below.
**Note** - Only an Admin user has the permission to Add/Edit/Delete a **Client** or **Channel**
Adding Clients
--------------
Follow the below steps to successfully create/update a **Client**
* Navigate to the **Clients** menu option found in the left sidebar.
* On the **Clients** page you will be presented with a list of all the created **Clients**
* Click on the blue "**+ Client**" button to open a popup modal box where you will supply the **Client** details **OR** click on one of the existing **Clients** to open up the popup modal with the **Clients'** saved details.
* Supply all the required fields (marked with a *) and click the blue "**Save changes**" button when completed.
There are many fields that you may supply, here is an explanation of what each of them do:
* **Client ID** - This is a unique ID giving to a client to be used as a reference when adding **Channels** as well as for authorisation checking.
* **Client Name** - This is a descriptive name of the **Client**.
* **Domain** - A domain that is associated with this **Client** - **Note** The domain needs to match the CN of the certificate if a certificate is used otherwise the **Client** won't be authorised successfully.
* **Roles** - The **Client** roles field is a list of authorized user groups that are allowed to access this channel. You can either select a role from the suggested roles that appear when you start typing, or you can add a new role to the list by typing in the role and pressing "**Enter**"
* **Certificate** - The certificate field is used when the OpenHIM core is running using Mutual TLS Authentication and needs to authenticate requests coming from the **Client**. By default, OpenHIM core uses Mutual TLS Authentication
* **Basic Auth Password** - The password field is used when the OpenHIM core is running in basic auth mode and does not require a certificate, it does however require a password.
**Note** - Either a Certificate OR a Basic Auth Password is required depending on the configuration. If Basic Auth is enabled in the OpenHIM core configuration then only a password is required, if Mutual TLS Authentication is enabled then a **Client** Certificate is required.
**Note** - When a **Client** Certificate is added or updated, the OpenHIM console will inform the user that a server restart is required. This is for the new certificate to be applied correctly. The user can either decide to manually restart the server at a later time or to click the red "**Restart Server Now!**" button.
Adding Channels
---------------
Follow the below steps to successfully create/update a **Channel**
* Navigate to the **Channels** menu option found in the left sidebar.
* On the **Channels** page you will be presented with a list of all the created **Channels**
* Click on the blue "**+ Channel**" button to open a popup modal box where you will supply the **Channel** details **OR** click on one of the existing **Channels** to open up the popup modal with the **Channels'** saved details.
* Supply all the required fields and click the blue "**Save changes**" button when completed.
The two _most_ important fields to supply are the **URL Pattern** field and the **Allowed roles and clients** field. The **URL Pattern** field describes which incoming requests should be send down this **channel**. It does this by looking at the URL of the incoming request and testing if it matches the RegEx that you supply in this field. Note, only the first matched **channel** that is found recieves the request for processing. The **Allowed roles and clients** field identifies which **clients** are allowed to send requests to this **channel**. If a request matches a **channel** but the **client** system is not specified in this field or a **role** containing that the **client** belongs to is not specified in this field then the request will be denied access to the **channel**.
There are many fields that you may supply and these are spread over a number of tabs, here is an explanation of what each of them do:
* **Basic Info tab**
* **Channel Name** - This is a descriptive name of the **Channel**.
* **Channel Type** - Select a **Channel** type
* **HTTP** - Default **Channel** type.
* **TCP** - Supply a TCP Host and Port
* **TLS** - Supply a TLS Host and Port
* **Polling** - Supply a Polling schedule - Cron format: '*/10 * * * *' or Written format: '10 minutes' - The module 'Agenda' is used to accomplish the polling - You can find more documentation [here](https://github.com/rschmukler/agenda)
* **Status** - Set whether this channel is enabled to receive requests or if its disbaled*.
* **Request Matching tab**:
* **URL Pattern** - Supply a URL pattern to match an incoming transaction - **Note** this field excepts a RegEx value - More information on RegEx can be found [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) or [here](http://www.regular-expressions.info/)
* NB!. This field is not applicable for **Channel Type** of **TCP** or **TLS**
* **Priority** - If a transaction matches the URL patterns of two or more channels, then the channel with higher priority will be picked. A value of 1 is the highest possible priority (first priority). Larger numbers therefore indicate that a channel should take lower priority.
* **Authentication Type** - Set whether this channel is **Private** or **Public**
* **Whitelisted IP addresses** - ???A list of IP addresses that will be given access without authentication required???
* **Allowed roles and clients** - Only applicable when **Authentication Type** is set to **Private**. Supply the roles and **Clients** allowed to make requests to this channel
* **Match Content Types** - Supply what content type to match too. (e.g text/json)
* **Matching Options** - These options allows a **Channel** to be used if the request body matches certain conditions.
* **No Matching** - No matching applicable
* **RegEx Matching** - Supply a RegEx to match
* **XML Matching** - Supply a X Path as well as a value to match
* **JSON Matching** - Supply a JSON property as well as a value to match
* **Routes tab**:
* **Mediator Route** - Select a mediator route if any, to populate the required route fields
* **Name** - This is a descriptive name of the route
* **Route Type** - Select whether this route is an HTTP/TCP or MLLP request
* **Path** - Supply a path the route should follow. If none supplied then the **Channel** URL Pattern will be used.
* **Path Transform** - Applies a said-like expression to the path string - Multiple endpoints can be reached using the same route.
* **Host** - The host where this route should go to.
* **Port** - The port where this route should go to.
* **Basic Auth Username** - Supply a username if the route requires basic authentication.
* **Basic Auth Password** - Supply a password if the route requires basic authentication.
* **Is this the primary route?** - Set whether or not a route is primary - Setting a route to primary indicates that this is the first route to check and is the primary endpoint to reach.
* **Status** - Set whether or not a route is enabled/disabled.
* **+ Save** - All required fields need to be supplied before the blue "**+ Save**" button becomes active.
* **Note** - At least one route needs to be added to the **Channel** and only one route is allowed to be set to primary
* **Data Control tab**:
* **Store Request Body** - Select whether or not to store the request body.
* **Note** - If a transaction is made through a POST/PUT/PATCH method and request body is NOT saved, then the transaction cannot be rerun.
* **Store Response Body** - Select whether or not to store the response body.
* **Auto Retry** - A feature that allows the OpenHIM to periodically resend failed transactions. Only transactions that have failed due to a connection type error, e.g. if a server is unavailable, or an internal OpenHIM error will be retried. I.e. if a target server responds with a status of 500, then that transaction won't be retried since the transaction was delivered by the OpenHIM.
* **Automatically resend failed transactions** - Enable/disable auto retry for the channel.
* **How often** - A minimum period to wait (in minutes) before retrying a transaction.
* **Enabled max number of attempts** - Enable/disable a limit for the number of times a transaction should be retried.
* **Time** - Value for maximum number of retries.
* **URL Rewriting enabled** - URL rewriting allows the OpenHIM to look for URLs in a response and rewrite them so that they point to the correct location.
* **From Host/Port** - Supply the host and port value you are looking to rewrite.
* **To Host/Port** - Supply the host and port value that will replace the 'From Host/Port' matches.
* **Path Transform** - Applies a said-like expression to the path string - Multiple endpoints can be reached using the same route.
* **Add Auto Rewrite Rules** - Determines whether automatic rewrite rules are used. These rules enabled URLs to be automatically rewritten for any URLs that points to a host that the OpenHIM proxies (any host on a primary route). These can be overridden by user specified rules if need be.
* **User Access tab**:
* **User groups allowed to view this channel's transactions** - Supply the groups allowed to view this **Channel's** transactions
* **User groups allowed to view this channel's transactions request/response body** - Supply the groups allowed to view the request/response body of this **Channel's** transactions
* **User groups allowed to rerun this channel's transactions** - Supply the groups allowed to rerun this **Channel's** transactions
* **Alerts tab**:
* **Status** - Supply the status of a transaction when the alert should be sent. This can be supplied in a range format (e.g 2xx or 4xx)
* **Failure Rate (%)** - Supply the failure rate of when to start sending the alerts (e.g 50 - once failure rate above 50% then alerts will be sent)
* **Add Users** - Add individual users to receive alerts
* **User** - Select a user from the drop down to receive a alert
* **Method** - Select the method of how the alert should be delivered [Email | SMS]
* **Max Alerts** - Select the frequency of how often to send a alert [no max | 1 per hour | 1 per day]
* **Add Groups** - Add an entire group to receive alerts
* **Add a new group** - Select a group from the drop down to be added to alerts
* **+ Alert** - All required fields need to be supplied before the blue "**+ Save**" button becomes active.
If you find a field that is not described here, please let us know by [filing an issue on github](https://github.com/jembi/openhim-core-js/issues/new) with the 'documentation' label.