All files / src/model channels.coffee

100% Statements 11/11
0% Branches 0/2
0% Functions 0/1
100% Lines 11/11
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 961x 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'