class AWS::Core::SessionSigner

@private

def self.for config

def self.for config
  @create_mutex.synchronize do
    @session_signers ||= {}
    @session_signers[config.signer.access_key_id] ||= self.new(config)
  end
end

def access_key_id

def access_key_id
  session.credentials[:access_key_id]
end

def get_session

def get_session
  local_session = nil
  @session_mutex.synchronize do
    local_session =  @session
  end
  local_session
end

def initialize config

def initialize config
  @config = config
  @session_mutex = Mutex.new
end

def refresh_session

def refresh_session
  sts = AWS::STS.new(:config => @config, :use_ssl => true)
  @session_mutex.synchronize do
    @session = sts.new_session
  end
end

def secret_access_key

def secret_access_key
  session.credentials[:secret_access_key]
end

def session

def session
  session = get_session
  if session.nil?
    refresh_session 
    session = get_session
  end
  session
end

def session_token

def session_token
  session.credentials[:session_token]
end

def short_term_signer

def short_term_signer
  DefaultSigner.new(access_key_id, secret_access_key, session_token)
end

def sign *args

def sign *args
  short_term_signer.sign(*args)
end