Sha256: 320ab5c5ad903fad041367ea5f7b0c2cea66cc36b6af534ab4d992d5d20405c2

Contents?: true

Size: 707 Bytes

Versions: 10

Compression:

Stored size: 707 Bytes

Contents

# frozen_string_literal: true
module Shipit
  class SameSiteCookieMiddleware
    COOKIE_SEPARATOR = "\n"

    def initialize(app)
      @app = app
    end

    def call(env)
      status, headers, body = @app.call(env)

      if headers && headers['Set-Cookie'] &&
         Rack::Request.new(env).ssl?

        set_cookies = headers['Set-Cookie'].split(COOKIE_SEPARATOR).compact
        set_cookies.map! do |cookie|
          cookie << '; Secure' if cookie !~ /;\s*secure/i
          cookie << '; SameSite=None' unless cookie.match?(/;\s*samesite=/i)
          cookie
        end

        headers['Set-Cookie'] = set_cookies.join(COOKIE_SEPARATOR)
      end

      [status, headers, body]
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
shipit-engine-0.39.0 lib/shipit/same_site_cookie_middleware.rb
shipit-engine-0.38.0 lib/shipit/same_site_cookie_middleware.rb
shipit-engine-0.37.0 lib/shipit/same_site_cookie_middleware.rb
shipit-engine-0.36.1 lib/shipit/same_site_cookie_middleware.rb
shipit-engine-0.36.0 lib/shipit/same_site_cookie_middleware.rb
shipit-engine-0.35.1 lib/shipit/same_site_cookie_middleware.rb
shipit-engine-0.35.0 lib/shipit/same_site_cookie_middleware.rb
shipit-engine-0.34.0 lib/shipit/same_site_cookie_middleware.rb
shipit-engine-0.33.0 lib/shipit/same_site_cookie_middleware.rb
shipit-engine-0.32.0 lib/shipit/same_site_cookie_middleware.rb