Sha256: 3d7ed826343909fbb8d506db4ef1e86b11103daf3a39a8bb6ba407cfb1d2a48c
Contents?: true
Size: 1.52 KB
Versions: 1
Compression:
Stored size: 1.52 KB
Contents
# frozen_string_literal: true module SecureCookies class Middleware def initialize(app) @app = app end # merges the hash of headers into the current header set. def call(env) req = Rack::Request.new(env) status, headers, response = @app.call(env) unless SecureCookies.config == OPT_OUT flag_cookies!(headers, override_secure(env, SecureCookies.config)) end [status, headers, response] end private # inspired by https://github.com/tobmatth/rack-ssl-enforcer/blob/6c014/lib/rack/ssl-enforcer.rb#L183-L194 def flag_cookies!(headers, config) if cookies = headers["Set-Cookie"] # Support Rails 2.3 / Rack 1.1 arrays as headers cookies = cookies.split("\n") unless cookies.is_a?(Array) headers["Set-Cookie"] = cookies.map do |cookie| SecureCookies::Cookie.new(cookie, config).to_s end.join("\n") end end # disable Secure cookies for non-https requests def override_secure(env, config = {}) if scheme(env) != "https" && config != OPT_OUT config = config.dup config[:secure] = OPT_OUT end config end # derived from https://github.com/tobmatth/rack-ssl-enforcer/blob/6c014/lib/rack/ssl-enforcer.rb#L119 def scheme(env) if env["HTTPS"] == "on" || env["HTTP_X_SSL_REQUEST"] == "on" "https" elsif env["HTTP_X_FORWARDED_PROTO"] env["HTTP_X_FORWARDED_PROTO"].split(",")[0] else env["rack.url_scheme"] end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
secure_cookies2-0.1.0 | lib/secure_cookies/middleware.rb |