razorrisk-cassini-common 0.26.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/CHANGELOG.md +22 -0
 - data/LICENSE +5 -0
 - data/README.md +2 -0
 - data/Rakefile +102 -0
 - data/lib/razor_risk/cassini/applications/microservice.rb +318 -0
 - data/lib/razor_risk/cassini/applications/rest_framework/route_verb_dispatcher.rb +120 -0
 - data/lib/razor_risk/cassini/applications/rest_framework/verb_handler.rb +117 -0
 - data/lib/razor_risk/cassini/applications/route_verb_adaptors/utilities/collection_get_helper.rb +86 -0
 - data/lib/razor_risk/cassini/applications/securable_microservice.rb +164 -0
 - data/lib/razor_risk/cassini/applications/secured_microservice.rb +63 -0
 - data/lib/razor_risk/cassini/applications/unsecured_microservice.rb +77 -0
 - data/lib/razor_risk/cassini/authorisation/header_helpers.rb +271 -0
 - data/lib/razor_risk/cassini/authorisation/security_model_helpers.rb +93 -0
 - data/lib/razor_risk/cassini/authorisation.rb +27 -0
 - data/lib/razor_risk/cassini/cli.rb +19 -0
 - data/lib/razor_risk/cassini/common/version.rb +44 -0
 - data/lib/razor_risk/cassini/common.rb +32 -0
 - data/lib/razor_risk/cassini/constants.rb +68 -0
 - data/lib/razor_risk/cassini/diagnostics/util_functions.rb +248 -0
 - data/lib/razor_risk/cassini/diagnostics/zeroth_include.rb +35 -0
 - data/lib/razor_risk/cassini/extensions/libclimate/common_options.rb +267 -0
 - data/lib/razor_risk/cassini/extensions/libclimate.rb +26 -0
 - data/lib/razor_risk/cassini/header_functions.rb +59 -0
 - data/lib/razor_risk/cassini/main.rb +238 -0
 - data/lib/razor_risk/cassini/mixin/razor_response_validator.rb +176 -0
 - data/lib/razor_risk/cassini/testing/suppress_pantheios_logging.rb +31 -0
 - data/lib/razor_risk/cassini/util/conversion_util.rb +176 -0
 - data/lib/razor_risk/cassini/util/program_execution_util.rb +379 -0
 - data/lib/razor_risk/cassini/util/secrets_util.rb +229 -0
 - data/lib/razor_risk/cassini/util/version_util.rb +88 -0
 - data/lib/razor_risk/sinatra/helpers/check_auth_helper.rb +209 -0
 - data/lib/razor_risk/sinatra/helpers/validate_accept_helper.rb +69 -0
 - data/lib/razor_risk/sinatra/helpers/validate_content_type_helper.rb +74 -0
 - data/lib/razor_risk/sinatra/helpers/validate_query_parameters_helper.rb +198 -0
 - data/test/scratch/cassini/util/convert_XML.rb +54 -0
 - data/test/unit/applications/route_verb_adaptors/utilities/tc_collection_get_helper.rb +236 -0
 - data/test/unit/applications/tc_verb_handler.rb +130 -0
 - data/test/unit/mixin/tc_razor_response_validator.rb +328 -0
 - data/test/unit/sinatra/helpers/tc_validate_query_parameters_helper.rb +134 -0
 - data/test/unit/tc_authorisation_util.rb +265 -0
 - data/test/unit/tc_load_secrets.rb +95 -0
 - data/test/unit/util/tc_conversion_util.rb +393 -0
 - data/test/unit/util/tc_program_execution_util.rb +462 -0
 - metadata +380 -0
 
| 
         @@ -0,0 +1,209 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: UTF-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # ######################################################################## #
         
     | 
| 
      
 4 
     | 
    
         
            +
            # File:         razor_risk/sinatra/helpers/check_auth_helper.rb
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # Purpose:      Definition of the Sinatra helper CheckAuthHelper module,
         
     | 
| 
      
 7 
     | 
    
         
            +
            #               which provides Cassini security model checking via the
         
     | 
| 
      
 8 
     | 
    
         
            +
            #               +check_auth+ instance method
         
     | 
| 
      
 9 
     | 
    
         
            +
            #
         
     | 
| 
      
 10 
     | 
    
         
            +
            # Created:      1st December 2017
         
     | 
| 
      
 11 
     | 
    
         
            +
            # Updated:      20th February 2018
         
     | 
| 
      
 12 
     | 
    
         
            +
            #
         
     | 
| 
      
 13 
     | 
    
         
            +
            # Author:       Matthew Wilson
         
     | 
| 
      
 14 
     | 
    
         
            +
            #
         
     | 
| 
      
 15 
     | 
    
         
            +
            # Copyright (c) 2017-2018, Razor Risk Technologies Pty Ltd
         
     | 
| 
      
 16 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 17 
     | 
    
         
            +
            #
         
     | 
| 
      
 18 
     | 
    
         
            +
            # ######################################################################## #
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 22 
     | 
    
         
            +
            # requires
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            require 'razor_risk/cassini/authorisation'
         
     | 
| 
      
 25 
     | 
    
         
            +
            require 'razor_risk/cassini/constants'
         
     | 
| 
      
 26 
     | 
    
         
            +
            require 'razor_risk/cassini/header_functions'
         
     | 
| 
      
 27 
     | 
    
         
            +
            require 'razor_risk/core/diagnostics/logger'
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            require 'xqsr3/quality/parameter_checking'
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            require 'sinatra/base'
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 34 
     | 
    
         
            +
            # module
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            module RazorRisk
         
     | 
| 
      
 37 
     | 
    
         
            +
            module Sinatra
         
     | 
| 
      
 38 
     | 
    
         
            +
            module Helpers
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 41 
     | 
    
         
            +
            # CheckAuthHelper
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            module CheckAuthHelper
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                include Cassini::Authorisation::HeaderHelpers
         
     | 
| 
      
 46 
     | 
    
         
            +
                include Cassini::HeaderFunctions
         
     | 
| 
      
 47 
     | 
    
         
            +
                include ::RazorRisk::Core::Diagnostics::Logger
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                include ::Xqsr3::Quality::ParameterChecking
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                private
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                HTTP_AUTHORIZATION = ::RazorRisk::Cassini::Constants::HTTP_AUTHORIZATION
         
     | 
| 
      
 54 
     | 
    
         
            +
                public
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                RECOGNISED_AUTHENTICATION_SCHEMES = %w{ none basic authorisation_only jwt }.map { |v| v.to_sym }
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                RECOGNISED_ALGORITHMS = %w{ HS256 SHA256 AES-256-CBC }
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                # Checks the authentication information for one of the four accepted
         
     | 
| 
      
 61 
     | 
    
         
            +
                # schemes - None, Basic, Authorisation-only (Razor Risk-specific),and
         
     | 
| 
      
 62 
     | 
    
         
            +
                # JWT.
         
     | 
| 
      
 63 
     | 
    
         
            +
                #
         
     | 
| 
      
 64 
     | 
    
         
            +
                # @param env [::Hash] The request's +env+ hash.
         
     | 
| 
      
 65 
     | 
    
         
            +
                # @param auth_scheme [::Symbol] The authorisation scheme.
         
     | 
| 
      
 66 
     | 
    
         
            +
                # @param options [::Hash] The options hash.
         
     | 
| 
      
 67 
     | 
    
         
            +
                #
         
     | 
| 
      
 68 
     | 
    
         
            +
                # @option options [Boolean] :credentials (false) When true the function
         
     | 
| 
      
 69 
     | 
    
         
            +
                #   will return the credentials, if they can be obtained.
         
     | 
| 
      
 70 
     | 
    
         
            +
                # @option options [Boolean] :halt_unless_auth (true) If true the
         
     | 
| 
      
 71 
     | 
    
         
            +
                #   function will invoke Sinatra's +halt+ with 401 when the authorisation
         
     | 
| 
      
 72 
     | 
    
         
            +
                #   field +HTTP_AUTHORIZATION+ is not present.
         
     | 
| 
      
 73 
     | 
    
         
            +
                # @option options [Object] :auth_sentinel The value returned if
         
     | 
| 
      
 74 
     | 
    
         
            +
                #   +:halt_unless_auth+ is false.
         
     | 
| 
      
 75 
     | 
    
         
            +
                # @option options [::String, Array<::String>] :auth_param_name
         
     | 
| 
      
 76 
     | 
    
         
            +
                #   ('HTTP_AUTHORIZATION') The authorisation parameter name(s).
         
     | 
| 
      
 77 
     | 
    
         
            +
                # @option options [::String, ::Proc] :jwt_secret The JWT secret, or a
         
     | 
| 
      
 78 
     | 
    
         
            +
                #   lambda from which to obtain one, when +auth_scheme+ is +:jwt+.
         
     | 
| 
      
 79 
     | 
    
         
            +
                # @option options [Boolean] :halt_unless_cred (true) If true the function
         
     | 
| 
      
 80 
     | 
    
         
            +
                #   will invoke Sinatra's +halt+ with 401 when the authorisation
         
     | 
| 
      
 81 
     | 
    
         
            +
                #   information does not contain valid credentials.
         
     | 
| 
      
 82 
     | 
    
         
            +
                # @option options [Object] :cred_sentinel The value returned if
         
     | 
| 
      
 83 
     | 
    
         
            +
                #   +:halt_unless_cred+ is true.
         
     | 
| 
      
 84 
     | 
    
         
            +
                #
         
     | 
| 
      
 85 
     | 
    
         
            +
                #
         
     | 
| 
      
 86 
     | 
    
         
            +
                # @return [Array<::String>] If option +:credentials+ and credentials can
         
     | 
| 
      
 87 
     | 
    
         
            +
                #   be obtained, returns an array containing the credentials appropriate
         
     | 
| 
      
 88 
     | 
    
         
            +
                #   for the specified +auth_sheme+.
         
     | 
| 
      
 89 
     | 
    
         
            +
                # @return [true] If not option +:credentials+ and credentials can be
         
     | 
| 
      
 90 
     | 
    
         
            +
                #   obtained.
         
     | 
| 
      
 91 
     | 
    
         
            +
                # @return [Object] Returns the value of the +:auth_sentinel+ if
         
     | 
| 
      
 92 
     | 
    
         
            +
                #   +:halt_unless_auth+ is false and the auth header is not present.
         
     | 
| 
      
 93 
     | 
    
         
            +
                # @return [Object] Returns the value of the +:cred_sentinel+ if
         
     | 
| 
      
 94 
     | 
    
         
            +
                #   +:halt_unless_cred+ is false and no credentials could be obtained.
         
     | 
| 
      
 95 
     | 
    
         
            +
                #
         
     | 
| 
      
 96 
     | 
    
         
            +
                def check_auth env, auth_scheme, **options
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                    trace ParamNames[ :env, :auth_scheme, :options ], env, auth_scheme, options
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                    check_param env, 'env', type: ::Hash
         
     | 
| 
      
 101 
     | 
    
         
            +
                    check_param auth_scheme, 'auth_scheme', type: ::Symbol, values: RECOGNISED_AUTHENTICATION_SCHEMES
         
     | 
| 
      
 102 
     | 
    
         
            +
                    check_param options, 'options', type: ::Hash
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                    check_param options[:credentials], 'credentials', treat_as_option: true, types: [ ::FalseClass, ::TrueClass ], allow_nil: true
         
     | 
| 
      
 105 
     | 
    
         
            +
                    check_param options[:halt_unless_auth], 'halt_unless_auth', treat_as_option: true, types: [ ::FalseClass, ::TrueClass ], allow_nil: true
         
     | 
| 
      
 106 
     | 
    
         
            +
                    check_param options[:auth_sentinel], 'auth_sentinel', treat_as_option: true, allow_nil: true
         
     | 
| 
      
 107 
     | 
    
         
            +
                    check_param options[:auth_param_name], 'auth_param_name', treat_as_option: true, types: [ ::String, [ ::String] ], allow_nil: true
         
     | 
| 
      
 108 
     | 
    
         
            +
                    check_param options[:jwt_secret], 'jwt_secret', treat_as_option: true, types: [ ::String, ::Proc ], allow_nil: :jwt != auth_scheme
         
     | 
| 
      
 109 
     | 
    
         
            +
                    check_param options[:halt_unless_cred], 'halt_unless_auth', treat_as_option: true, types: [ ::FalseClass, ::TrueClass ], allow_nil: true
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                    options = {
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                        auth_param_name: HTTP_AUTHORIZATION,
         
     | 
| 
      
 115 
     | 
    
         
            +
                        credentials: false,
         
     | 
| 
      
 116 
     | 
    
         
            +
                        halt_unless_auth: true,
         
     | 
| 
      
 117 
     | 
    
         
            +
                        halt_unless_cred: true,
         
     | 
| 
      
 118 
     | 
    
         
            +
                    }.merge options
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                    auth = nil
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                    auth_param_name =   options[:auth_param_name] || HTTP_AUTHORIZATION
         
     | 
| 
      
 124 
     | 
    
         
            +
                    case auth_param_name
         
     | 
| 
      
 125 
     | 
    
         
            +
                    when ::Array
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                        auth_param_name.each do |name|
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
                            break if auth = env[name]
         
     | 
| 
      
 130 
     | 
    
         
            +
                        end
         
     | 
| 
      
 131 
     | 
    
         
            +
                    else
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
                        # will be a ::String
         
     | 
| 
      
 134 
     | 
    
         
            +
                        auth = env[auth_param_name]
         
     | 
| 
      
 135 
     | 
    
         
            +
                    end
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
                    log :debug4, "auth(#{auth.class})='#{auth}'"
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                    unless auth || :none == auth_scheme
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
                        return options[:auth_sentinel] unless options[:halt_unless_auth]
         
     | 
| 
      
 144 
     | 
    
         
            +
                        halt 401, make_WWW_auth_header(auth_scheme), 'Missing or invalid authenticate header'
         
     | 
| 
      
 145 
     | 
    
         
            +
                    end
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
                    return true unless options[:credentials]
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
                    credentials = nil
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                    case auth_scheme
         
     | 
| 
      
 154 
     | 
    
         
            +
                    when :none
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
                        credentials = []
         
     | 
| 
      
 157 
     | 
    
         
            +
                    when :basic
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
                        credentials = credentials_from_Basic auth, nil: true
         
     | 
| 
      
 160 
     | 
    
         
            +
                    when :authorisation_only, :authorization_only
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
                        credentials = credentials_from_AuthorisationOnly(auth)
         
     | 
| 
      
 163 
     | 
    
         
            +
                    when :jwt
         
     | 
| 
      
 164 
     | 
    
         
            +
             
     | 
| 
      
 165 
     | 
    
         
            +
                        jwt_secret = options[:jwt_secret]
         
     | 
| 
      
 166 
     | 
    
         
            +
                        jwt_secret = jwt_secret.call() if ::Proc == jwt_secret
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
                        begin
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
                            credentials = credentials_from_JWT auth, jwt_secret, nil: true
         
     | 
| 
      
 171 
     | 
    
         
            +
                        rescue JWT::ValidationError => x
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
                            log "exception (#{x.class}): #{x.message}"
         
     | 
| 
      
 174 
     | 
    
         
            +
                            halt 401, make_WWW_auth_header(auth_scheme), 'Invalid credentials'
         
     | 
| 
      
 175 
     | 
    
         
            +
                        rescue JWT::DecodeError => x
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
      
 177 
     | 
    
         
            +
                            log "exception (#{x.class}): #{x.message}"
         
     | 
| 
      
 178 
     | 
    
         
            +
                            halt 401, make_WWW_auth_header(auth_scheme), 'Missing or invalid authenticate header'
         
     | 
| 
      
 179 
     | 
    
         
            +
                        end
         
     | 
| 
      
 180 
     | 
    
         
            +
                    end
         
     | 
| 
      
 181 
     | 
    
         
            +
             
     | 
| 
      
 182 
     | 
    
         
            +
                    return credentials if credentials
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
      
 184 
     | 
    
         
            +
                    return options[:cred_sentinel] unless options[:halt_unless_cred]
         
     | 
| 
      
 185 
     | 
    
         
            +
             
     | 
| 
      
 186 
     | 
    
         
            +
                    halt 401, make_WWW_auth_header(auth_scheme), 'Missing or invalid authenticate header'
         
     | 
| 
      
 187 
     | 
    
         
            +
                end
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
      
 189 
     | 
    
         
            +
            end # module CheckAuthHelper
         
     | 
| 
      
 190 
     | 
    
         
            +
             
     | 
| 
      
 191 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 192 
     | 
    
         
            +
            # module
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
            end # module Helpers
         
     | 
| 
      
 195 
     | 
    
         
            +
            end # module Sinatra
         
     | 
| 
      
 196 
     | 
    
         
            +
            end # module RazorRisk
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 199 
     | 
    
         
            +
            # Sinatra helpers
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
      
 201 
     | 
    
         
            +
            module Sinatra
         
     | 
| 
      
 202 
     | 
    
         
            +
             
     | 
| 
      
 203 
     | 
    
         
            +
            helpers ::RazorRisk::Sinatra::Helpers::CheckAuthHelper
         
     | 
| 
      
 204 
     | 
    
         
            +
             
     | 
| 
      
 205 
     | 
    
         
            +
            end # module Sinatra
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
      
 207 
     | 
    
         
            +
            # ############################## end of file ############################# #
         
     | 
| 
      
 208 
     | 
    
         
            +
             
     | 
| 
      
 209 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,69 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: UTF-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # ######################################################################## #
         
     | 
| 
      
 4 
     | 
    
         
            +
            # File:         razor_risk/sinatra/helpers/validate_accept_helper.rb
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # Purpose:      Definition of the Sinatra helper ValidateAcceptHelper
         
     | 
| 
      
 7 
     | 
    
         
            +
            #               module, which provides automatic 'Accept' header validation
         
     | 
| 
      
 8 
     | 
    
         
            +
            #
         
     | 
| 
      
 9 
     | 
    
         
            +
            # Created:      1st February 2018
         
     | 
| 
      
 10 
     | 
    
         
            +
            # Updated:      11th August 2018
         
     | 
| 
      
 11 
     | 
    
         
            +
            #
         
     | 
| 
      
 12 
     | 
    
         
            +
            # Author:       Matthew Wilson
         
     | 
| 
      
 13 
     | 
    
         
            +
            #
         
     | 
| 
      
 14 
     | 
    
         
            +
            # Copyright (c) 2018, Razor Risk Technologies Pty Ltd
         
     | 
| 
      
 15 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 16 
     | 
    
         
            +
            #
         
     | 
| 
      
 17 
     | 
    
         
            +
            # ######################################################################## #
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 21 
     | 
    
         
            +
            # requires
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            require 'xqsr3/quality/parameter_checking'
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            require 'sinatra/base'
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 28 
     | 
    
         
            +
            # module
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            module RazorRisk
         
     | 
| 
      
 31 
     | 
    
         
            +
            module Sinatra
         
     | 
| 
      
 32 
     | 
    
         
            +
            module Helpers
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 35 
     | 
    
         
            +
            # ValidateAcceptHelper
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            module ValidateAcceptHelper
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                include ::Xqsr3::Quality::ParameterChecking
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                def validate_accept *args, **options
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                    rq  =   args.shift
         
     | 
| 
      
 44 
     | 
    
         
            +
                    ar  =   args.shift
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                    halt 406, %Q<invalid accept type(s) (#{rq.accept.map { |a| "'#{a}'" }.join(', ')}), must be one of #{ar.map { |a| "'#{a}'" }.join(', ')}> unless ar.any? { |a| rq.accept? a }
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            end # module ValidateAcceptHelper
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 52 
     | 
    
         
            +
            # module
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            end # module Helpers
         
     | 
| 
      
 55 
     | 
    
         
            +
            end # module Sinatra
         
     | 
| 
      
 56 
     | 
    
         
            +
            end # module RazorRisk
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 59 
     | 
    
         
            +
            # Sinatra helpers
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            module Sinatra
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            helpers ::RazorRisk::Sinatra::Helpers::ValidateAcceptHelper
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            end # module Sinatra
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
            # ############################## end of file ############################# #
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,74 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: UTF-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # ######################################################################## #
         
     | 
| 
      
 4 
     | 
    
         
            +
            # File:         razor_risk/sinatra/helpers/validate_content_type_helper.rb
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # Purpose:      Definition of the Sinatra helper ValidateContentTypeHelper
         
     | 
| 
      
 7 
     | 
    
         
            +
            #               module, which provides automatic 'Content-Type' header
         
     | 
| 
      
 8 
     | 
    
         
            +
            #               validation
         
     | 
| 
      
 9 
     | 
    
         
            +
            #
         
     | 
| 
      
 10 
     | 
    
         
            +
            # Created:      1st February 2018
         
     | 
| 
      
 11 
     | 
    
         
            +
            # Updated:      11th August 2018
         
     | 
| 
      
 12 
     | 
    
         
            +
            #
         
     | 
| 
      
 13 
     | 
    
         
            +
            # Author:       Matthew Wilson
         
     | 
| 
      
 14 
     | 
    
         
            +
            #
         
     | 
| 
      
 15 
     | 
    
         
            +
            # Copyright (c) 2018, Razor Risk Technologies Pty Ltd
         
     | 
| 
      
 16 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 17 
     | 
    
         
            +
            #
         
     | 
| 
      
 18 
     | 
    
         
            +
            # ######################################################################## #
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 22 
     | 
    
         
            +
            # requires
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            require 'xqsr3/quality/parameter_checking'
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            require 'sinatra/base'
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 29 
     | 
    
         
            +
            # module
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            module RazorRisk
         
     | 
| 
      
 32 
     | 
    
         
            +
            module Sinatra
         
     | 
| 
      
 33 
     | 
    
         
            +
            module Helpers
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 36 
     | 
    
         
            +
            # ValidateContentTypeHelper
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            module ValidateContentTypeHelper
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                include ::Xqsr3::Quality::ParameterChecking
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                def validate_content_type *args, **options
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                    rq  =   args.shift
         
     | 
| 
      
 45 
     | 
    
         
            +
                    ar  =   args.shift
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                    halt 415, %Q<invalid content-type '('#{rq.content_type}')', must be one of #{ar.map { |a| "'#{a}'" }.join(', ')}> unless ar.any? do |ct|
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                        rq.content_type.start_with? ct
         
     | 
| 
      
 50 
     | 
    
         
            +
                    end
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
            end # module ValidateContentTypeHelper
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 56 
     | 
    
         
            +
            # module
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            end # module Helpers
         
     | 
| 
      
 59 
     | 
    
         
            +
            end # module Sinatra
         
     | 
| 
      
 60 
     | 
    
         
            +
            end # module RazorRisk
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 63 
     | 
    
         
            +
            # Sinatra helpers
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            module Sinatra
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
            helpers ::RazorRisk::Sinatra::Helpers::ValidateContentTypeHelper
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            end # module Sinatra
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            # ############################## end of file ############################# #
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,198 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: UTF-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # ######################################################################## #
         
     | 
| 
      
 4 
     | 
    
         
            +
            # File:         razor_risk/sinatra/helpers/validate_query_parameters.rb
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # Purpose:      Definition of the Sinatra helper
         
     | 
| 
      
 7 
     | 
    
         
            +
            #               ValidateQueryParametersHelper module, which provides
         
     | 
| 
      
 8 
     | 
    
         
            +
            #               automatic query parameter validation
         
     | 
| 
      
 9 
     | 
    
         
            +
            #
         
     | 
| 
      
 10 
     | 
    
         
            +
            # Created:      11th August 2018
         
     | 
| 
      
 11 
     | 
    
         
            +
            # Updated:      17th August 2018
         
     | 
| 
      
 12 
     | 
    
         
            +
            #
         
     | 
| 
      
 13 
     | 
    
         
            +
            # Author:       Matthew Wilson
         
     | 
| 
      
 14 
     | 
    
         
            +
            #
         
     | 
| 
      
 15 
     | 
    
         
            +
            # Copyright (c) 2018, Razor Risk Technologies Pty Ltd
         
     | 
| 
      
 16 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 17 
     | 
    
         
            +
            #
         
     | 
| 
      
 18 
     | 
    
         
            +
            # ######################################################################## #
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 22 
     | 
    
         
            +
            # requires
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            require 'pantheios'
         
     | 
| 
      
 25 
     | 
    
         
            +
            require 'xqsr3/quality/parameter_checking'
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            require 'sinatra/base'
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 30 
     | 
    
         
            +
            # module
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            module RazorRisk
         
     | 
| 
      
 33 
     | 
    
         
            +
            module Sinatra
         
     | 
| 
      
 34 
     | 
    
         
            +
            module Helpers
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 37 
     | 
    
         
            +
            # ValidateQueryParametersHelper
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            module ValidateQueryParametersHelper
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                include ::Pantheios
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                include ::Xqsr3::Quality::ParameterChecking
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                module ValidateQueryParametersHelper_Constants
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                    SINATRA_SPECIAL_PARAMS  =   %w{
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                        captures
         
     | 
| 
      
 50 
     | 
    
         
            +
                        splat
         
     | 
| 
      
 51 
     | 
    
         
            +
                    }
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                end # module ValidateQueryParametersHelper_Constants
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                def validate_query_parameters *args, **options
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                    trace ParamNames[ :args, :options], args, options
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                    params  =   args.shift
         
     | 
| 
      
 61 
     | 
    
         
            +
                    spec    =   args.shift
         
     | 
| 
      
 62 
     | 
    
         
            +
                    rt_vars =   args.shift || []
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                    case spec
         
     | 
| 
      
 65 
     | 
    
         
            +
                    when nil
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                        params
         
     | 
| 
      
 68 
     | 
    
         
            +
                    when ::Array
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                        # interpreted as a complete list of optional parameters
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                        unrecognised    =   params.keys - spec
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                        unrecognised    =   unrecognised - rt_vars
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                        unrecognised    =   unrecognised - ValidateQueryParametersHelper_Constants::SINATRA_SPECIAL_PARAMS
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                        unless unrecognised.empty?
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                            halt(*[ 422, {}, "One or more parameters - '#{unrecognised}' - are not supported on this route" ])
         
     | 
| 
      
 81 
     | 
    
         
            +
                        end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                        params
         
     | 
| 
      
 84 
     | 
    
         
            +
                    when ::Hash
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                        # interpreted as a map of { query-parameter => [ 0+
         
     | 
| 
      
 87 
     | 
    
         
            +
                        # characteristics-symbols] }, where recognised characteristics are:
         
     | 
| 
      
 88 
     | 
    
         
            +
                        #
         
     | 
| 
      
 89 
     | 
    
         
            +
                        # - :allow_empty - means that the parameter value may be empty
         
     | 
| 
      
 90 
     | 
    
         
            +
                        #   (subject to :strip);
         
     | 
| 
      
 91 
     | 
    
         
            +
                        # - :required - means that the parameter must be present;
         
     | 
| 
      
 92 
     | 
    
         
            +
                        # - :strip - causes the parameter to be (converted to string
         
     | 
| 
      
 93 
     | 
    
         
            +
                        #   form and then) stripped;
         
     | 
| 
      
 94 
     | 
    
         
            +
                        #
         
     | 
| 
      
 95 
     | 
    
         
            +
                        # - :integral - causes the parameter to be converted to string;
         
     | 
| 
      
 96 
     | 
    
         
            +
                        #   halts(422) if the conversion fails;
         
     | 
| 
      
 97 
     | 
    
         
            +
                        # - :negative - requires the value to be <0; operative only if
         
     | 
| 
      
 98 
     | 
    
         
            +
                        #   :integral is specified;
         
     | 
| 
      
 99 
     | 
    
         
            +
                        # - :positive - requires the value to be >0; operative only if
         
     | 
| 
      
 100 
     | 
    
         
            +
                        #   :integral is specified;
         
     | 
| 
      
 101 
     | 
    
         
            +
                        # - :non_negative - requires the value to be >=0; operative only
         
     | 
| 
      
 102 
     | 
    
         
            +
                        #   if :integral is specified;
         
     | 
| 
      
 103 
     | 
    
         
            +
                        # - :non_positive - requires the value to be <=0; operative only
         
     | 
| 
      
 104 
     | 
    
         
            +
                        #   if :integral is specified;
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                        warn "validating query parameters from a #{::Hash} spec is not supported in the current version"
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                        unrecognised    =   params.keys - spec.keys
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                        unrecognised    =   unrecognised - rt_vars
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                        unrecognised    =   unrecognised - ValidateQueryParametersHelper_Constants::SINATRA_SPECIAL_PARAMS
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                        unless unrecognised.empty?
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                            halt(*[ 422, {}, "One or more parameters - '#{unrecognised}' - are not supported on this route" ])
         
     | 
| 
      
 117 
     | 
    
         
            +
                        end
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
                        validated_params = params.dup
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                        spec.each do |k, characteristics|
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                            next if ValidateQueryParametersHelper_Constants::SINATRA_SPECIAL_PARAMS.include?(k)
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                            next if rt_vars.include?(k)
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                            case v
         
     | 
| 
      
 128 
     | 
    
         
            +
                            when nil
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
                                next
         
     | 
| 
      
 131 
     | 
    
         
            +
                            when ::Array
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
                                ;
         
     | 
| 
      
 134 
     | 
    
         
            +
                            else
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
                                characteristics = [ characteristics ]
         
     | 
| 
      
 137 
     | 
    
         
            +
                            end
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                            if validated_params.has_key? k
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                                value   =   validated_params[k]
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
                                value   =   value.to_s.strip if characteristics.include? :strip
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
                                unless characteristics.include? :allow_empty
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                                    if value.to_s.empty?
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
                                        halt(*[ 422, {}, "Query parameter '#{k}' has missing value in URI" ])
         
     | 
| 
      
 150 
     | 
    
         
            +
                                    end
         
     | 
| 
      
 151 
     | 
    
         
            +
                                end
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                                if characteristics.include? :integral
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
                                    # TODO : implement integral conversion and
         
     | 
| 
      
 156 
     | 
    
         
            +
                                    # range-checking
         
     | 
| 
      
 157 
     | 
    
         
            +
                                end
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
                                validated_params[k] = value
         
     | 
| 
      
 160 
     | 
    
         
            +
                            else
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
                                if characteristics.include? :required
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
                                    halt(*[ 422, {}, "Required query parameter '#{k}' not present in URI" ])
         
     | 
| 
      
 165 
     | 
    
         
            +
                                end
         
     | 
| 
      
 166 
     | 
    
         
            +
                            end
         
     | 
| 
      
 167 
     | 
    
         
            +
                        end
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
                        validated_params
         
     | 
| 
      
 170 
     | 
    
         
            +
                    else
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
             
     | 
| 
      
 174 
     | 
    
         
            +
                        warn "#{self.class}##{__method__}() : invalid spec type - '#{spec.class}' - given - ignoring"
         
     | 
| 
      
 175 
     | 
    
         
            +
                    end
         
     | 
| 
      
 176 
     | 
    
         
            +
                end
         
     | 
| 
      
 177 
     | 
    
         
            +
             
     | 
| 
      
 178 
     | 
    
         
            +
            end # module ValidateQueryParametersHelper
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
      
 180 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 181 
     | 
    
         
            +
            # module
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
            end # module Helpers
         
     | 
| 
      
 184 
     | 
    
         
            +
            end # module Sinatra
         
     | 
| 
      
 185 
     | 
    
         
            +
            end # module RazorRisk
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
      
 187 
     | 
    
         
            +
            # ##########################################################################
         
     | 
| 
      
 188 
     | 
    
         
            +
            # Sinatra helpers
         
     | 
| 
      
 189 
     | 
    
         
            +
             
     | 
| 
      
 190 
     | 
    
         
            +
            module Sinatra
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
      
 192 
     | 
    
         
            +
            helpers ::RazorRisk::Sinatra::Helpers::ValidateQueryParametersHelper
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
            end # module Sinatra
         
     | 
| 
      
 195 
     | 
    
         
            +
             
     | 
| 
      
 196 
     | 
    
         
            +
            # ############################## end of file ############################# #
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,54 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #! /usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            $:.unshift File.join(File.dirname(__FILE__), *(['..'] * 4), 'lib')
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            unless $DEBUG
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                require 'pantheios/globals'
         
     | 
| 
      
 8 
     | 
    
         
            +
                require 'pantheios/services/null_log_service'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                ::Pantheios::Globals.INITIAL_SERVICE_CLASSES = [ ::Pantheios::Services::NullLogService ]
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            require 'razor_risk/cassini/util/conversion_util'
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            require 'libclimate'
         
     | 
| 
      
 16 
     | 
    
         
            +
            require 'xqsr3/extensions/test/unit'
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            require 'pp'
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            include ::RazorRisk::Cassini::Util::ConversionUtil
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            climate = LibCLImate::Climate.new do |cl|
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                cl.usage_values = '<scheme> <Hash|json> [<xml-doc-path>]'
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            r = climate.run ARGV
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            scheme          =   r.values[0]
         
     | 
| 
      
 30 
     | 
    
         
            +
            output_type     =   r.values[1]
         
     | 
| 
      
 31 
     | 
    
         
            +
            xml_doc_path    =   r.values[2]
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            climate.abort 'too many values; use --help for usage' if r.values[3]
         
     | 
| 
      
 34 
     | 
    
         
            +
            climate.abort "Output type may only be 'Hash' or 'JSON'; use --help for usage" unless output_type =~ /hash|json/i
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            if xml_doc_path
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                xml_doc =   File.read(xml_doc_path)
         
     | 
| 
      
 39 
     | 
    
         
            +
            else
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                xml_doc =   $stdin.read
         
     | 
| 
      
 42 
     | 
    
         
            +
            end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            case output_type
         
     | 
| 
      
 45 
     | 
    
         
            +
            when /hash/i
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                puts convert_XML_to_Hash xml_doc, scheme: scheme.to_sym
         
     | 
| 
      
 48 
     | 
    
         
            +
            when /JSON/i
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                puts convert_XML_to_JSON xml_doc, scheme: scheme.to_sym
         
     | 
| 
      
 51 
     | 
    
         
            +
            else
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                abort "output_type may only be 'Hash' or 'JSON' but was #{output_type}"
         
     | 
| 
      
 54 
     | 
    
         
            +
            end
         
     |