-
Notifications
You must be signed in to change notification settings - Fork 0
/
application.rb
141 lines (115 loc) · 4.32 KB
/
application.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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
require "json"
require "date"
require "mongo"
require "bson"
require "sinatra"
require "sinatra/reloader" if development?
require "oauth2"
require "rest_client"
set :raise_errors, true
set :show_exceptions, false
#set mongo connection
mongoclient = Mongo::MongoClient.new
db = mongoclient.db( "social_nethub" )
oauth2 = OAuth2::Client.new(
'BesuYeR65yfNWqPLwcyK',
'138448238410115309201377100117',
{
:site => 'https://api.nethub.co',
:token_url => '/oauth2/token/',
:oauth_version => 2
}
)
get '/' do
redirect "http://nethub.co"
end
get '/:id' do
token = oauth2.client_credentials.get_token({}, {"auth_scheme" => "request_body"})
begin
response = token.get '/app/26d06213-04d6-4ab1-b9b6-e27bf8be738f/' + params[:id]
data = response.parsed
unless !data[ "data" ].empty?
halt 404
else
client_id = data[ "data" ][ 0 ][ "client_id" ]
redirect_uri = "http://localhost:3000/" + params[ :id ] + "/callback"
redirect "https://www.facebook.com/dialog/oauth?client_id=" + client_id + "&redirect_uri=" + redirect_uri + "&scope=email,user_birthday,user_likes,user_location"
end
rescue Exception => e
puts e
halt 400
end
#raise "error!"
end
get "/:id/callback" do
unless !params.has_key?( "error" )
halt 401
end
token = oauth2.client_credentials.get_token({}, {"auth_scheme" => "request_body"})
begin
response = token.get '/app/26d06213-04d6-4ab1-b9b6-e27bf8be738f/' + params[:id]
data = response.parsed
unless !data[ "data" ].empty?
halt 404
end
begin
#set app data
app_data = data[ "data" ][ 0 ]
#Getting the FB token
client_id = app_data[ "client_id" ]
client_secret = app_data[ "secret_id" ]
redirect_uri = "http://localhost:3000/" + params[ :id ] + "/callback"
code = params[ :code ]
fb_response = RestClient.get "https://graph.facebook.com/oauth/access_token", :params => { :client_id => client_id, :redirect_uri => redirect_uri, :client_secret => client_secret, :code => code }
fb_response = CGI::parse( fb_response )
fb_token = fb_response[ "access_token" ][0]
fb_token_expires = fb_response[ "expires" ][0]
#fb_token = 'CAAFLyNxrkcMBAM0dTfTD2TTiPT1XlJ7bXOZAbpNdZBNnVC96ymXZCfvqkfstjdXB496lhSUyfr89P7pNVe9PpMZCj82C1loDqhLDaJUZCoHj93MzFcIWd94xE4uV3mZBnnKzYFOqA89QXXZBYfZBGBQrQZACMD8JQsThpp49FHHK5faZC9HRxXPLkQAgxuZC5jlQMUZD'
#fb_token_expires = '5176869'
#get user information
response = RestClient.get 'https://graph.facebook.com/me', :params => { :access_token => fb_token }, :content_type => :json, :accept => :json
user_info = JSON.parse( response )
# checking if the user exists in nethub
response = token.get '/person/identifier/email/' + user_info[ "email" ]
data = response.parsed
unless !data[ "data" ].empty?
#Create the user in nethub
birthday = Date.strptime( user_info[ 'birthday' ], '%m/%d/%Y' )
person = {
:first_name => user_info[ "first_name" ],
:last_name => user_info[ "last_name" ],
:gender => user_info[ "gender" ],
:birthday => birthday.strftime( '%m-%d-%Y' ),
:identifiers => [{
:email => user_info[ "email" ]
}]
}
response = token.post '/person', { body: person.to_json }
data = response.parsed
unless data[ "success" ]
halt 400
end
#create the user in social
users = db.collection( "users" )
user = users.find( :fid => user_info[ "id" ]).to_a
unless !user.empty?
users.insert( :nethub_id => data["id"], :fid => user_info[ "id" ], :token => fb_token, :expires => fb_token_expires , :read => false )
end
else
#create the user in nethub if the user doesn't exits
data = response.parsed
users = db.collection( "users" )
user = users.find( :nethub_id => data[ "data" ][0]["id"]).to_a
unless !user.empty?
users.insert( :nethub_id => data["data"][0]["id"], :fid => user_info[ "id" ], :token => fb_token, :expires => fb_token_expires , :read => false )
end
end
redirect [ app_data[ "domain" ], "/", app_data[ "callback" ] ].join
rescue Exception => e
halt 500
end
rescue Exception => e
#puts e
halt 400
end
end