# 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'