Sha256: 291e3eb9fa17ee62431fddb695afb939befa784ef70d08448d5c17080bbd804c

Contents?: true

Size: 1.67 KB

Versions: 3

Compression:

Stored size: 1.67 KB

Contents

require 'digest'
require 'faraday'
require 'faraday_middleware'
require 'heroku_addon_provider/version'
require 'json'

class HerokuAddonProvider

  class << self

    attr_accessor :manifest_path

    def manifest
      if manifest_path
        @manifest ||= JSON.load(File.read(manifest_path))
      elsif (defined?(Rails) && File.exists?("#{Rails.root}/addon-manifest.json"))
        @manifest ||= JSON.load(File.read("#{Rails.root}/addon-manifest.json"))
      else
        raise 'Addon manifest not found'
      end
    end

    def provider_id
      manifest['id']
    end

    def password
      manifest['api']['password']
    end

    def sso_salt
      manifest['api']['sso_salt']
    end

    def sso_token(user_id, timestamp)
      pre_token = "#{user_id}:#{sso_salt}:#{timestamp}"
      Digest::SHA1.hexdigest(pre_token).to_s
    end

    def installed_applications
      faraday.get('/vendor/apps').body
    end

    def application_info(heroku_id)
      faraday.get("/vendor/apps/#{heroku_id}").body
    end

    def owner_email(heroku_id)
      info = application_info(heroku_id)
      info['owner_email']
    end

    def owner_emails
      installed_applications.map do |app|
        owner_email(app['heroku_id'])
      end
    end

    def update_config(heroku_id, new_config)
      faraday.put("/vendor/apps/#{heroku_id}", {'config' => new_config}.to_json)
    end

    def configure(&block)
      yield self
    end

    private
      def faraday
        Faraday.new(url: 'https://api.heroku.com') do |c|
          c.request  :basic_auth, provider_id, password
          c.response :json, :content_type => /\bjson$/
          c.adapter  Faraday.default_adapter
        end
      end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
heroku_addon_provider-0.1.5 lib/heroku_addon_provider.rb
heroku_addon_provider-0.1.4 lib/heroku_addon_provider.rb
heroku_addon_provider-0.1.3 lib/heroku_addon_provider.rb