cloudfoundry/cfoundry

View on GitHub
lib/cfoundry/auth_token.rb

Summary

Maintainability
A
55 mins
Test Coverage
module CFoundry
  class AuthToken
    class << self
      def from_uaa_token_info(token_info)
        new(
          token_info.auth_header,
          token_info.info[:refresh_token]
        )
      end

      def from_hash(hash)
        new(
          hash[:token],
          hash[:refresh_token]
        )
      end
    end

    def initialize(auth_header, refresh_token = nil)
      @auth_header = auth_header
      @refresh_token = refresh_token
    end

    attr_accessor :auth_header
    attr_reader :refresh_token

    def to_hash
      {
        :token => auth_header,
        :refresh_token => @refresh_token
      }
    end

    JSON_HASH = /\{.*?\}/.freeze

    # TODO: rename to #data
    def token_data
      return @token_data if @token_data
      return {} unless @auth_header

      json_hashes = Base64.decode64(@auth_header.split(" ", 2).last)
      data_json = json_hashes.sub(JSON_HASH, "")[JSON_HASH]
      return {} unless data_json

      @token_data = MultiJson.load data_json, :symbolize_keys => true
    rescue MultiJson::DecodeError
      {}
    end

    def auth_header=(auth_header)
      @token_data = nil
      @auth_header = auth_header
    end

    def expiration
      Time.at(token_data[:exp])
    end

    def expires_soon?
      (expiration.to_i - Time.now.to_i) < 60
    end
  end
end