BigW Consortium Gitlab

connection.rb 1.78 KB
Newer Older
1 2
module Bitbucket
  class Connection
3 4 5
    DEFAULT_API_VERSION = '2.0'.freeze
    DEFAULT_BASE_URI    = 'https://api.bitbucket.org/'.freeze
    DEFAULT_QUERY       = {}.freeze
6

7 8
    attr_reader :expires_at, :expires_in, :refresh_token, :token

9
    def initialize(options = {})
10 11
      @api_version   = options.fetch(:api_version, DEFAULT_API_VERSION)
      @base_uri      = options.fetch(:base_uri, DEFAULT_BASE_URI)
12
      @default_query = options.fetch(:query, DEFAULT_QUERY)
13

14 15 16 17
      @token         = options[:token]
      @expires_at    = options[:expires_at]
      @expires_in    = options[:expires_in]
      @refresh_token = options[:refresh_token]
18
    end
19

20
    def get(path, extra_query = {})
21 22
      refresh! if expired?

23
      response = connection.get(build_url(path), params: @default_query.merge(extra_query))
24 25 26
      response.parsed
    end

Douwe Maan committed
27
    delegate :expired?, to: :connection
28 29 30 31 32 33 34 35

    def refresh!
      response = connection.refresh!

      @token         = response.token
      @expires_at    = response.expires_at
      @expires_in    = response.expires_in
      @refresh_token = response.refresh_token
36
      @connection    = nil
37 38 39 40
    end

    private

41 42 43 44 45 46 47 48
    def client
      @client ||= OAuth2::Client.new(provider.app_id, provider.app_secret, options)
    end

    def connection
      @connection ||= OAuth2::AccessToken.new(client, @token, refresh_token: @refresh_token, expires_at: @expires_at, expires_in: @expires_in)
    end

49 50 51 52 53 54 55 56 57 58 59
    def build_url(path)
      return path if path.starts_with?(root_url)

      "#{root_url}#{path}"
    end

    def root_url
      @root_url ||= "#{@base_uri}#{@api_version}"
    end

    def provider
60
      Gitlab::OAuth::Provider.config_for('bitbucket')
61 62 63 64 65 66 67
    end

    def options
      OmniAuth::Strategies::Bitbucket.default_options[:client_options].deep_symbolize_keys
    end
  end
end