# encoding: utf-8 module Github # OAuth Authorizations API class Authorizations < API Github::require_all 'github_api/authorizations', 'app' VALID_AUTH_PARAM_NAMES = %w[ scopes add_scopes remove_scopes note note_url client_id client_secret ].freeze # Access to Authorizations::App API def app(options={}, &block) @app ||= ApiFactory.new('Authorizations::App', current_options.merge(options), &block) end # List authorizations # # @example # github = Github.new basic_auth: 'login:password' # github.oauth.list # github.oauth.list { |auth| ... } # # @api public def list(*args) raise_authentication_error unless authenticated? arguments(args) response = get_request('/authorizations', arguments.params) return response unless block_given? response.each { |el| yield el } end alias :all :list # Get a single authorization # # @example # github = Github.new basic_auth: 'login:password' # github.oauth.get 'authorization-id' # # @return [ResponseWrapper] # # @api public def get(*args) raise_authentication_error unless authenticated? arguments(args, required: [:authorization_id]) get_request("/authorizations/#{authorization_id}", arguments.params) end alias :find :get # Create a new authorization # # @param [Hash] params # @option params [Array[String]] :scopes # A list of scopes that this authorization is in. # @option params [String] :note # A note to remind you what the OAuth token is for. # @option params [String] :note_url # A URL to remind you what the OAuth token is for. # @option params [String] :client_id # The 20 character OAuth app client key for which to create the token. # @option params [String] :client_secret # The 40 character OAuth app client secret for which to create the token. # # @example # github = Github.new basic_auth: 'login:password' # github.oauth.create # "scopes" => ["public_repo"] # # @api public def create(*args) raise_authentication_error unless authenticated? arguments(args) do sift VALID_AUTH_PARAM_NAMES end post_request('/authorizations', arguments.params) end # Update an existing authorization # # @param [Hash] inputs # @option inputs [Array] :scopes # Optional array - A list of scopes that this authorization is in. # @option inputs [Array] :add_scopes # Optional array - A list of scopes to add to this authorization. # @option inputs [Array] :remove_scopes # Optional array - A list of scopes to remove from this authorization. # @option inputs [String] :note # Optional string - A note to remind you what the OAuth token is for. # @optoin inputs [String] :note_url # Optional string - A URL to remind you what the OAuth token is for. # # @example # github = Github.new basic_auth: 'login:password' # github.oauth.update "authorization-id", add_scopes: ["repo"] # # @api public def update(*args) raise_authentication_error unless authenticated? arguments(args, required: [:authorization_id]) do sift VALID_AUTH_PARAM_NAMES end patch_request("/authorizations/#{authorization_id}", arguments.params) end alias :edit :update # Delete an authorization # # @example # github.oauth.delete 'authorization-id' # # @api public def delete(*args) raise_authentication_error unless authenticated? arguments(args, required: [:authorization_id]) delete_request("/authorizations/#{authorization_id}", arguments.params) end alias :remove :delete protected def raise_authentication_error raise ArgumentError, 'You can only access your own tokens' + ' via Basic Authentication' end end # Authorizations end # Github