class Conjur::WebServer::Login

Attributes

sessionid[R]

Public Class Methods

new(sessionid) click to toggle source
# File lib/conjur/webserver/login.rb, line 7
def initialize(sessionid)
  @sessionid = sessionid
end

Public Instance Methods

call(env) click to toggle source
# File lib/conjur/webserver/login.rb, line 11
def call(env)
  if sessionid = token_valid?(env)
    require 'conjur/authn'
    require 'base64'
    token = Conjur::Authn.authenticate
    api = Conjur::API.new_from_token token
    userid = [ Conjur.configuration.account, "user", api.username ].join(':')

    env["rack.session"][:sessionid] = sessionid
    response = Rack::Response.new(env)
    configuration = {
      account: Conjur.configuration.account,
      stack: Conjur.configuration.stack,
      appliance_url: Conjur.configuration.appliance_url,
      login: Conjur::Authn.get_credentials[0]
    }
    response.status = 302
    response.set_cookie('conjur_configuration', value: JSON.pretty_generate(configuration), path: '/')
    response.set_cookie('conjur_userid', value: userid, path: '/')
    response['Location'] = "/ui"
    response.finish
  else
    [ 403, {}, ["Authorization is missing or invalid"] ]
  end
end

Protected Instance Methods

extract_token(env) click to toggle source
# File lib/conjur/webserver/login.rb, line 48
def extract_token(env)
  require 'cgi'
  require 'uri'
  query = URI.parse(env['REQUEST_URI']).query
  query && ( sessionid = CGI.parse(query)['sessionid'] ) && sessionid[0]
end
token_valid?(env) click to toggle source
# File lib/conjur/webserver/login.rb, line 39
def token_valid?(env)
  token = extract_token(env)
  if token == sessionid
    sessionid
  else
    nil
  end
end