This repository has been archived by the owner on Nov 12, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdoorkeeper_client.rb
110 lines (91 loc) · 2.75 KB
/
doorkeeper_client.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
require "sinatra/base"
require "./lib/html_renderer"
# Load custom environment variables
load 'env.rb' if File.exists?('env.rb')
class DoorkeeperClient < Sinatra::Base
enable :sessions
helpers do
include Rack::Utils
alias_method :h, :escape_html
def pretty_json(json)
JSON.pretty_generate(json)
end
def signed_in?
!session[:access_token].nil?
end
def markdown(text)
options = { :autolink => true, :space_after_headers => true, :fenced_code_blocks => true }
markdown = Redcarpet::Markdown.new(HTMLRenderer, options)
markdown.render(text)
end
def markdown_readme
markdown(File.read(File.join(File.dirname(__FILE__), "README.md")))
end
end
def client(token_method = :post)
OAuth2::Client.new(
ENV['OAUTH2_CLIENT_ID'],
ENV['OAUTH2_CLIENT_SECRET'],
:site => ENV['SITE'] || "http://doorkeeper-provider.herokuapp.com",
:token_method => token_method,
)
end
def access_token
OAuth2::AccessToken.new(client, session[:access_token], :refresh_token => session[:refresh_token])
end
def redirect_uri
ENV['OAUTH2_CLIENT_REDIRECT_URI']
end
get '/' do
erb :home
end
get '/sign_in' do
scope = params[:scope] || "public"
redirect client.auth_code.authorize_url(:redirect_uri => redirect_uri, :scope => scope)
end
get '/sign_out' do
session[:access_token] = nil
redirect '/'
end
get '/callback' do
new_token = client.auth_code.get_token(params[:code], :redirect_uri => redirect_uri)
session[:access_token] = new_token.token
session[:refresh_token] = new_token.refresh_token
redirect '/'
end
get '/refresh' do
new_token = access_token.refresh!
session[:access_token] = new_token.token
session[:refresh_token] = new_token.refresh_token
redirect '/'
end
get '/upload' do
@access_token = session[:access_token]
@action = "https://upload.gyazo.com/api/upload"
erb :upload, :layout => !request.xhr?
end
get '/delete' do
@access_token = session[:access_token]
erb :delete, :layout => !request.xhr?
end
post '/delete' do
raise "Please call a valid endpoint" unless params[:image_id]
begin
response = access_token.delete("/api/images/#{params[:image_id]}")
@json = JSON.parse(response.body)
erb :explore, :layout => !request.xhr?
rescue OAuth2::Error => @error
erb :error, :layout => !request.xhr?
end
end
get '/explore/:api' do
raise "Please call a valid endpoint" unless params[:api]
begin
response = access_token.get("/api/#{params[:api]}")
@json = JSON.parse(response.body)
erb :explore, :layout => !request.xhr?
rescue OAuth2::Error => @error
erb :error, :layout => !request.xhr?
end
end
end