Class: Raindrop::OAuth
- Inherits:
-
Object
- Object
- Raindrop::OAuth
- Defined in:
- lib/raindrop/oauth.rb
Constant Summary collapse
- BASE_URL =
"https://api.raindrop.io/v1"- AUTHORIZATION_URL =
"#{BASE_URL}/oauth/authorize"- DEFAULT_REDIRECT_URI =
"http://127.0.0.1:42813/callback"
Instance Method Summary collapse
- #authorization_url(client_id:, redirect_uri:) ⇒ Object
- #exchange_code(client_id:, client_secret:, redirect_uri:, code:) ⇒ Object
-
#initialize(connection: nil) ⇒ OAuth
constructor
A new instance of OAuth.
- #receive_authorization_code(redirect_uri:) ⇒ Object
Constructor Details
#initialize(connection: nil) ⇒ OAuth
Returns a new instance of OAuth.
16 17 18 |
# File 'lib/raindrop/oauth.rb', line 16 def initialize(connection: nil) @connection = connection || default_connection end |
Instance Method Details
#authorization_url(client_id:, redirect_uri:) ⇒ Object
20 21 22 23 24 25 26 27 |
# File 'lib/raindrop/oauth.rb', line 20 def (client_id:, redirect_uri:) query = URI.encode_www_form( "response_type" => "code", "client_id" => client_id, "redirect_uri" => redirect_uri ) "#{AUTHORIZATION_URL}?#{query}" end |
#exchange_code(client_id:, client_secret:, redirect_uri:, code:) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/raindrop/oauth.rb', line 29 def exchange_code(client_id:, client_secret:, redirect_uri:, code:) response = @connection.post("oauth/access_token") do |request| request.headers["Content-Type"] = "application/json" request.body = JSON.generate( "grant_type" => "authorization_code", "code" => code, "client_id" => client_id, "client_secret" => client_secret, "redirect_uri" => redirect_uri ) end handle_response(response) rescue Faraday::ConnectionFailed => e raise ApiError, "OAuth request failed: #{e.}" end |
#receive_authorization_code(redirect_uri:) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/raindrop/oauth.rb', line 45 def (redirect_uri:) redirect = URI.parse(redirect_uri) server = TCPServer.new(redirect.host, redirect.port) socket = server.accept request_line = socket.gets.to_s code = (request_line, expected_path: redirect.path) write_callback_response(socket, "Authentication complete. You can close this window.") code ensure socket&.close server&.close end |