1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96 | 1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
| mongoose = require "mongoose"
server = require "../server"
connectionDefault = server.connectionDefault
Schema = mongoose.Schema
ContactUserDef = require('./contactGroups').ContactUserDef
RouteDef =
"name": type: String, required: true
"secured": Boolean
"host": type: String, required: true
"port": type: Number, required: true, min: 0, max: 65536
"path": String
"pathTransform": String
"primary": Boolean
"username": String
"password": String
"type": type: String, default: 'http', enum: ['http', 'tcp', 'mllp']
"cert": Schema.Types.ObjectId
"status": type: String, default: 'enabled', enum: ['enabled', 'disabled']
"forwardAuthHeader": type: Boolean, default: false
# Channel alerts
#
# The following alert conditions are supported:
# * status: match on a specific transaction status (404, 5xx). Supports failure rates.
# * auto-retry-max-attempted: triggers when a failing transaction has reach the max number of auto retries
#
AlertsDef =
"condition": type: String, default: 'status', enum: ['status', 'auto-retry-max-attempted']
"status": type: String
"failureRate": Number
"groups": [Schema.Types.ObjectId]
"users": [ContactUserDef]
RewriteRuleDef =
"fromHost": type: String, required: true
"toHost": type: String, required: true
"fromPort": type: Number, required: true, default: 80
"toPort": type: Number, required: true, default: 80
"pathTransform": String
ChannelDef =
"name": type: String, required: true
"description": String
"urlPattern": type: String, required: true
"type": type: String, default: 'http', enum: ['http', 'tcp', 'tls', 'polling']
"priority": type: Number, min: 1
"tcpPort": type: Number, min: 0, max: 65536
"tcpHost": String
"pollingSchedule": String
"requestBody": Boolean
"responseBody": Boolean
"allow": [type: String, required: true]
"whitelist" : [String]
"authType": type: String, default: 'private', enum: ['private', 'public']
"routes": [RouteDef]
"matchContentTypes": [String]
"matchContentRegex": String
"matchContentXpath": String
"matchContentJson": String
"matchContentValue": String
"properties": [Object]
"txViewAcl": [String]
"txViewFullAcl": [String]
"txRerunAcl": [String]
"alerts": [AlertsDef]
"status": type: String, default: 'enabled', enum: ['enabled', 'disabled', 'deleted']
"rewriteUrls": type: Boolean, default: false
"addAutoRewriteRules": type: Boolean, default: true
"rewriteUrlsConfig": [RewriteRuleDef]
"autoRetryEnabled": type: Boolean, default: false
"autoRetryPeriodMinutes": type: Number, default: 60, min: 1
"autoRetryMaxAttempts": type: Number, min: 0 # 0 means unlimited
# Expose the route schema
exports.RouteDef = RouteDef
###
# The Channel object that describes a specific channel within the OpenHIM.
# It provides some metadata describing a channel and contians a number of
# route objects. If a request matches the urlPattern of a channel it should
# be routed to each of the routes described in that channel.
#
# A channel also has an allow property. This property should contain a list
# of users or group that are authroised to send messages to this channel.
###
ChannelSchema = new Schema ChannelDef
ChannelSchema.index "name", unique: true
exports.Channel = connectionDefault.model 'Channel', ChannelSchema
exports.ChannelDef = ChannelDef
# Is the channel enabled?
# If there is no status field then the channel IS enabled
exports.isChannelEnabled = (channel) -> not channel.status or channel.status is 'enabled'
|