class Clerk::Proxy

Attributes

error[R]
session_id[R]

Public Class Methods

new(env) click to toggle source
# File lib/clerk/rack_middleware.rb, line 18
def initialize(env)
  req = Rack::Request.new(env)
  @token = req.cookies["__session"]
  @session_id = req.params["_clerk_session_id"]
  @session = nil
  @user_id = nil
  @user = nil
end

Public Instance Methods

debug() click to toggle source
# File lib/clerk/rack_middleware.rb, line 48
def debug
  (instance_variables - [:@sdk]).map do |ivar|
    [ivar.to_s, instance_variable_get(ivar)]
  end.to_h
end
session() click to toggle source
# File lib/clerk/rack_middleware.rb, line 27
def session
  return nil if @token.nil?
  return @session if @session

  begin
    @session = fetch_session
  rescue Errors::Authentication => e
    @error = e
  end
  @session
end
user() click to toggle source
# File lib/clerk/rack_middleware.rb, line 43
def user
  return nil if session.nil?
  @user ||= fetch_user(user_id)
end
user_id() click to toggle source
# File lib/clerk/rack_middleware.rb, line 39
def user_id
  @user_id ||= session.dig("user_id")
end

Private Instance Methods

cache_key() click to toggle source
# File lib/clerk/rack_middleware.rb, line 59
def cache_key
  @cache_key ||= @token.split(".")[1]
end
cache_ttl() click to toggle source
# File lib/clerk/rack_middleware.rb, line 93
def cache_ttl
  60
end
cached_fetch(key) { || ... } click to toggle source
# File lib/clerk/rack_middleware.rb, line 85
def cached_fetch(key, &block)
  if store = Clerk.configuration.middleware_cache_store
    store.fetch(key, expires_in: cache_ttl, &block)
  else
    yield
  end
end
fetch_session() click to toggle source
# File lib/clerk/rack_middleware.rb, line 63
def fetch_session
  if session_id
    cached_fetch("clerk_session:#{session_id}:#{cache_key}") do
      sdk.sessions.verify_token(session_id, @token)
    end
  else
    cached_fetch("clerk_session:#{cache_key}") do
      client = sdk.clients.verify_token(@token)
      @session_id = client["last_active_session_id"]
      client["sessions"].find do |sess|
        sess["id"] == @session_id
      end
    end
  end
end
fetch_user(user_id) click to toggle source
# File lib/clerk/rack_middleware.rb, line 79
def fetch_user(user_id)
  cached_fetch("clerk_user:#{user_id}") do
    sdk.users.find(user_id)
  end
end
sdk() click to toggle source
# File lib/clerk/rack_middleware.rb, line 55
def sdk
  @sdk ||= SDK.new
end