class Rack::Auth::NginxOmniauthAdapter::Initiate

Public Class Methods

new(app, auth_host:, callback_path: '/_auth/callback') click to toggle source
# File lib/rack/auth/nginx_omniauth_adapter.rb, line 28
def initialize(app, auth_host:, callback_path: '/_auth/callback')
  @app, @auth_host, @callback_path = app, auth_host, callback_path
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/auth/nginx_omniauth_adapter.rb, line 32
def call(env)
  res = @app.call(env)

  if res[0].to_i == 401
    https = Net::HTTP.new(@auth_host, 443)
    https.use_ssl = true
    req = Net::HTTP::Get.new('/initiate')
    req['x-ngx-omniauth-initiate-back-to'] = "https://#{env['HTTP_HOST']}#{env['REQUEST_URI']}"
    req['x-ngx-omniauth-initiate-callback'] = "https://#{env['HTTP_HOST']}#{@callback_path}"
    req['cookie'] = env['HTTP_COOKIE']

    response = https.request(req)
    return [ response.code.to_i, response.to_hash, [ response.body ] ]
  end

  res
end