# encoding: utf-8 module Github module Authorization attr_accessor :scopes # Setup OAuth2 instance def client(options={}) @client ||= ::OAuth2::Client.new(client_id, client_secret, { :site => options.fetch(:site) { Github.site }, :authorize_url => 'login/oauth/authorize', :token_url => 'login/oauth/access_token', :ssl => { :verify => false } } ) end # Strategy token def auth_code _verify_client client.auth_code end # Sends authorization request to GitHub. # = Parameters # * :redirect_uri - Required string. # * :scope - Optional string. Comma separated list of scopes. # Available scopes: # * (no scope) - public read-only access (includes public user profile info, public repo info, and gists). # * user - DB read/write access to profile info only. # * public_repo - DB read/write access, and Git read access to public repos. # * repo - DB read/write access, and Git read access to public and private repos. # * gist - write access to gists. # def authorize_url(params = {}) _verify_client client.auth_code.authorize_url(params) end # Makes request to token endpoint and retrieves access token value def get_token(authorization_code, params = {}) _verify_client client.auth_code.get_token(authorization_code, params) end # Check whether authentication credentials are present def authenticated? basic_authed? || oauth_token? end # Check whether basic authentication credentials are present def basic_authed? basic_auth? || (login? && password?) end # Select authentication parameters def authentication if basic_auth? { :basic_auth => basic_auth } elsif login? && password? { :login => login, :password => password } else { } end end private def _verify_client # :nodoc: raise ArgumentError, 'Need to provide client_id and client_secret' unless client_id? && client_secret? end end # Authorization end # Github