diff options
| author | Gibheer <gibheer@gmail.com> | 2013-07-26 14:46:33 +0200 | 
|---|---|---|
| committer | Gibheer <gibheer@gmail.com> | 2013-07-26 14:46:33 +0200 | 
| commit | e2f3e29a341945bb6a2ee3a9dc31cce71de3a58b (patch) | |
| tree | 46e265d6f790a7630b6ce06dd04665cac4065665 /lib | |
| parent | 89e2efeffaf46874c9ead2c63a49bdf3684626fe (diff) | |
extend server with protocol information
This extends the server class with the information, if it is serving
http or https. This can then be used to generate a root uri to the web
application.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/zero/request/server.rb | 47 | 
1 files changed, 47 insertions, 0 deletions
| diff --git a/lib/zero/request/server.rb b/lib/zero/request/server.rb index 0aa82c8..8cf5092 100644 --- a/lib/zero/request/server.rb +++ b/lib/zero/request/server.rb @@ -14,6 +14,30 @@ module Zero        # the key for the server software        # @api private        KEY_SERVER_SOFTWARE = 'SERVER_SOFTWARE' +      # the key for https +      # @api private +      KEY_HTTPS           = 'HTTPS' +      # the https on switch +      # @api private +      KEY_HTTPS_ON_SWITCH = ['on', 'yes', '1'] +      # the string for http +      # @api private +      HTTP                = 'http' +      # the string for https +      # @api private +      HTTPS               = 'https' +      # protocol seperator +      # @api private +      URI_SEP_PROTOCOL    = '://' +      # port separator +      # @api private +      URI_SEP_PORT        = ':' +      # default http port +      # @api private +      DEFAULT_PORT_HTTP   = 80 +      # default https port +      # @api private +      DEFAULT_PORT_HTTPS  = 443        # This creates a new server instance extracting all server related        #  information from the environment. @@ -22,6 +46,12 @@ module Zero          @port     = environment[KEY_SERVER_PORT].to_i          @protocol = environment[KEY_SERVER_PROTOCOL]          @software = environment[KEY_SERVER_SOFTWARE] +        p environment[KEY_HTTPS] +        if KEY_HTTPS_ON_SWITCH.include?(environment[KEY_HTTPS]) +          @is_https = true +        else +          @is_https = false +        end        end        # get the port @@ -36,6 +66,23 @@ module Zero        # get the server software        # @return [String] the server software name        attr_reader :software +      # get if the request is served through https +      # @return [Boolean] true if server got the request through https +      def is_https?; @is_https; end +      # get if the request is served through http +      # @return [Boolean] true if server got the request though http +      def is_http?; !@is_https; end + +      # return the uri to the server +      # @return [String] the root uri to the server +      def uri +        uri = (is_https? ? HTTPS : HTTP) + URI_SEP_PROTOCOL + hostname +        if (port == DEFAULT_PORT_HTTP && is_http?) || +                                    (port == DEFAULT_PORT_HTTPS && is_https?) +          return uri +        end +        uri + URI_SEP_PORT + port.to_s +      end      end    end  end | 
