rfacebook 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README ADDED
@@ -0,0 +1,76 @@
1
+ ============================== IMPORTANT NOTES ==============================
2
+
3
+
4
+ ** THIS IS ESPECIALLY IMPORTANT FOR PEOPLE WHO USED THE OLD CLIENT WHEN IT WAS CALLED "RBook" **
5
+
6
+ [1] The RBook name was already taken, so now you need to change any "RBook" references to "RFacebook"
7
+
8
+ [2] The desktop app login process is much simpler now:
9
+
10
+ fbsession = RFacebook::FacebookDesktopSession.new(APIKEY, APISECRET)
11
+ puts fbsession.get_login_url # tell the user to login at this url
12
+ # ...after the user logs in...
13
+ fbsession.activate
14
+
15
+ [3] The "init_with_token" method is now "activate_with_token" (it is a little less confusing with this naming)
16
+
17
+ [4] A helpful "NotActivatedException" will be raised if you forget to activate your session in one of the following ways:
18
+
19
+ Web: you must call either "activate_with_token" or "activate_with_previous_session"
20
+ Desktop: you must call either "activate" or "activate_with_previous_session"
21
+
22
+ [5] Infinite sessions are now supported (web and desktop)...
23
+
24
+ Web:
25
+
26
+ (a) Save the session key to a file or something
27
+ (i.e. "keyToSave = fbsession.session_key")
28
+
29
+ (b) Normally, you would redirect the user to "get_login_url" and then call "activate_with_token" after the callback.
30
+ With an infinite session, skip these two steps and call "fbsession.activate_with_previous_session(keyToSave)" instead.
31
+
32
+ Desktop:
33
+
34
+ (a) Save the session key and session secret to a file or something
35
+ (i.e. "keyToSave = fbsession.session_key" and "secretToSave = fbsession.session_secret")
36
+
37
+ (b) Normally, you would redirect the user to "get_login_url" and then call "activate".
38
+ With an infinite session, skip these two steps and call "fbsession.activate_with_previous_session(keyToSave, secretToSave)" instead.
39
+
40
+
41
+
42
+ ============================== LICENSE ==============================
43
+
44
+ Copyright (c) 2007, Matt Pizzimenti (www.livelearncode.com)
45
+ All rights reserved.
46
+
47
+ Redistribution and use in source and binary forms, with or without modification,
48
+ are permitted provided that the following conditions are met:
49
+
50
+ Redistributions of source code must retain the above copyright notice,
51
+ this list of conditions and the following disclaimer.
52
+
53
+ Redistributions in binary form must reproduce the above copyright notice,
54
+ this list of conditions and the following disclaimer in the documentation
55
+ and/or other materials provided with the distribution.
56
+
57
+ Neither the name of the original author nor the names of contributors
58
+ may be used to endorse or promote products derived from this software
59
+ without specific prior written permission.
60
+
61
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
62
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
63
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
64
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
65
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
66
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
67
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
68
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
69
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
70
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
71
+
72
+
73
+
74
+ Some code was inspired by techniques used in Alpha Chen's old client.
75
+ Some code was ported from the official PHP5 client.
76
+
@@ -0,0 +1,152 @@
1
+ # Copyright (c) 2007, Matt Pizzimenti (www.livelearncode.com)
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without modification,
5
+ # are permitted provided that the following conditions are met:
6
+ #
7
+ # Redistributions of source code must retain the above copyright notice,
8
+ # this list of conditions and the following disclaimer.
9
+ #
10
+ # Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ #
14
+ # Neither the name of the original author nor the names of contributors
15
+ # may be used to endorse or promote products derived from this software
16
+ # without specific prior written permission.
17
+ #
18
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ #
29
+
30
+ #
31
+ # Some code was inspired by techniques used in Alpha Chen's old client.
32
+ # Some code was ported from the official PHP5 client.
33
+ #
34
+
35
+ require "facebook_session"
36
+
37
+ module RFacebook
38
+
39
+ class FacebookDesktopSession < FacebookSession
40
+
41
+ # you'll need to access session_secret (in addition to the session_key) to be able to
42
+ # call "activate_with_previous_session" when using infinite sessions
43
+ attr_reader :session_secret
44
+
45
+ # Function: get_login_url
46
+ # Gets the authentication URL
47
+ #
48
+ # Parameters:
49
+ # options.next - the page to redirect to after login
50
+ # options.popup - boolean, whether or not to use the popup style (defaults to true)
51
+ # options.skipcookie - boolean, whether to force new Facebook login (defaults to false)
52
+ # options.hidecheckbox - boolean, whether to show the "infinite session" option checkbox
53
+ def get_login_url(options={})
54
+ # options
55
+ path_next = options[:next] ||= nil
56
+ popup = (options[:popup] == nil) ? true : false
57
+ skipcookie = (options[:skipcookie] == nil) ? false : true
58
+
59
+ # get some extra portions of the URL
60
+ optionalNext = (path_next == nil) ? "" : "&next=#{CGI.escape(path_next.to_s)}"
61
+ optionalPopup = (popup == true) ? "&popup=true" : ""
62
+ optionalSkipCookie = (skipcookie == true) ? "&skipcookie=true" : ""
63
+ optionalHideCheckbox = (hidecheckbox == true) ? "&hide_checkbox=true" : ""
64
+
65
+ # build and return URL
66
+ return "http://#{LOGIN_SERVER_BASE_URL}#{LOGIN_SERVER_PATH}?v=1.0&api_key=#{@api_key}&auth_token=#{@desktop_auth_token}#{optionalPopup}#{optionalNext}#{optionalSkipCookie}#{optionalHideCheckbox}"
67
+ end
68
+
69
+
70
+ # Function: initialize
71
+ # Constructs a FacebookSession
72
+ #
73
+ # Parameters:
74
+ # api_key - your API key
75
+ # api_secret - your API secret
76
+ # desktop - boolean, whether this is a desktop client or not (defaults to false)
77
+ # options.suppress_exceptions - boolean, set to true if you don't want exceptions to be thrown (defaults to false)
78
+ def initialize(api_key, api_secret, suppress_exceptions = false)
79
+ super(api_key, api_secret, suppress_exceptions)
80
+ @desktop_auth_token = get_auth_token
81
+ end
82
+
83
+ def activate
84
+ activate_with_token(@desktop_auth_token)
85
+ end
86
+
87
+ # Function: activate_with_previous_session
88
+ # Sets the session key and secret directly (for example, if you have an infinite session key)
89
+ #
90
+ # Parameters:
91
+ # key - the session key to use
92
+ def activate_with_previous_session(key, secret)
93
+ # set the session key and secret
94
+ @session_key = key
95
+ @session_secret = secret
96
+
97
+ # determine the current user's id
98
+ result = call_method("users.getLoggedInUser")
99
+ @session_uid = result.at("users_getLoggedInUser_response").inner_html
100
+ end
101
+
102
+ def is_valid?
103
+ return (is_activated? and !session_expired?)
104
+ end
105
+
106
+ protected
107
+
108
+ def is_activated?
109
+ return (@session_key != nil and @session_secret != nil)
110
+ end
111
+
112
+ # Function: activate_with_token
113
+ # Gets the session information available after current user logs in.
114
+ #
115
+ # Parameters:
116
+ # auth_token - string token returned by auth.createToken (see: <get_auth_token>)
117
+ def activate_with_token(auth_token)
118
+ result = call_method("auth.getSession", {:auth_token => auth_token}, true)
119
+ if result != nil
120
+ @session_uid = result.at("uid").inner_html
121
+ @session_key = result.at("session_key").inner_html
122
+ @session_secret = result.at("secret").inner_html
123
+ end
124
+ return result
125
+ end
126
+
127
+ # Function: auth_createToken
128
+ # Returns a string auth_token
129
+ def get_auth_token
130
+ result = call_method("auth.createToken", {})
131
+ result = result.at("auth_createtoken_response").inner_html.to_s ||= result.at("auth_createToken_response").inner_html.to_s
132
+ return result
133
+ end
134
+
135
+ # Function: get_secret
136
+ # Template method, used by super::signature to generate a signature
137
+ def get_secret(params)
138
+
139
+ if ( params[:method] != "facebook.auth.getSession" and params[:method] != "facebook.auth.createToken")
140
+ return @session_secret
141
+ else
142
+ return @api_secret
143
+ end
144
+
145
+ end
146
+
147
+ end
148
+
149
+
150
+
151
+ end
152
+
@@ -0,0 +1,245 @@
1
+ # Copyright (c) 2007, Matt Pizzimenti (www.livelearncode.com)
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without modification,
5
+ # are permitted provided that the following conditions are met:
6
+ #
7
+ # Redistributions of source code must retain the above copyright notice,
8
+ # this list of conditions and the following disclaimer.
9
+ #
10
+ # Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ #
14
+ # Neither the name of the original author nor the names of contributors
15
+ # may be used to endorse or promote products derived from this software
16
+ # without specific prior written permission.
17
+ #
18
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ #
29
+
30
+ #
31
+ # Some code was inspired by techniques used in Alpha Chen's old client.
32
+ # Some code was ported from the official PHP5 client.
33
+ #
34
+
35
+ require "digest/md5"
36
+ require "net/https"
37
+ require "cgi"
38
+ require "hpricot"
39
+
40
+ module RFacebook
41
+
42
+ API_SERVER_BASE_URL = "api.facebook.com"
43
+ LOGIN_SERVER_BASE_URL = "www.facebook.com"
44
+ API_SERVER_PATH = "/restserver.php"
45
+ LOGIN_SERVER_PATH = "/login.php"
46
+
47
+ class FacebookSession
48
+
49
+ attr_reader :session_uid, :session_key
50
+ attr_reader :last_call_was_successful, :last_error
51
+ attr_writer :suppress_exceptions
52
+
53
+ # SECTION: Exceptions
54
+
55
+ class RemoteException < Exception; end
56
+ class ExpiredSessionException < Exception; end
57
+ class NotActivatedException < Exception; end
58
+
59
+ # SECTION: Public Methods
60
+
61
+ # Function: initialize
62
+ # Constructs a FacebookSession
63
+ #
64
+ # Parameters:
65
+ # api_key - your API key
66
+ # api_secret - your API secret
67
+ # suppress_exceptions - boolean, set to true if you don't want exceptions to be thrown (defaults to false)
68
+ def initialize(api_key, api_secret, suppress_exceptions = false)
69
+
70
+ # required parameters
71
+ @api_key = api_key
72
+ @api_secret = api_secret
73
+
74
+ # calculated parameters
75
+ @api_server_base_url = API_SERVER_BASE_URL
76
+ @api_server_path = API_SERVER_PATH
77
+
78
+ # optional parameters
79
+ @suppress_exceptions = suppress_exceptions
80
+
81
+ # initialize internal state
82
+ @last_call_was_successful = true
83
+ @last_error = nil
84
+ @session_expired = false
85
+
86
+ # virtual members (subclasses will set these)
87
+ @session_uid = nil
88
+ @session_key = nil
89
+
90
+ end
91
+
92
+ def session_expired?
93
+ return (@session_expired == true)
94
+ end
95
+
96
+ protected
97
+
98
+ # SECTION: Protected Abstract Interface
99
+
100
+ def get_secret(params)
101
+ raise Exception
102
+ end
103
+
104
+ def init_with_token(auth_token)
105
+ raise Exception
106
+ end
107
+
108
+ def session_key=(key)
109
+ raise Exception
110
+ end
111
+
112
+ def is_activated?
113
+ raise Exception
114
+ end
115
+
116
+ def is_valid?
117
+ raise Exception
118
+ end
119
+
120
+ # SECTION: Protected Concrete Interface
121
+
122
+ # Function: method_missing
123
+ # This allows *any* Facebook method to be called, using the Ruby
124
+ # mechanism for responding to unimplemented methods. Basically,
125
+ # this converts a call to "auth_getSession" to "auth.getSession"
126
+ # and does the proper API call using the parameter hash given.
127
+ def method_missing(methodSymbol, *params)
128
+ methodString = methodSymbol.to_s.gsub!("_", ".")
129
+ # TODO: check here for valid method names
130
+ call_method(methodString, params.first)
131
+ end
132
+
133
+
134
+ # Function: call_method
135
+ # Sets up the necessary parameters to make the POST request to the server
136
+ #
137
+ # Parameters:
138
+ # method - i.e. "users.getInfo"
139
+ # params - hash of key,value pairs for the parameters to this method
140
+ # use_ssl - set to true if the call will be made over SSL
141
+ def call_method(method, params={}, use_ssl=false)
142
+
143
+ # ensure that this object has been activated somehow
144
+ if (!method.include?("auth") and !is_activated?)
145
+ raise NotActivatedException, "You must activate the session before using it."
146
+ end
147
+
148
+ # set up params hash
149
+ params = params ||= {}
150
+ params[:method] = "facebook.#{method}"
151
+ params[:api_key] = @api_key
152
+ params[:v] = "1.0"
153
+
154
+ if (method != "auth.getSession" and method != "auth.createToken")
155
+ params[:session_key] = @session_key
156
+ params[:call_id] = Time.now.to_f.to_s
157
+ end
158
+
159
+ # convert arrays to comma-separated lists
160
+ params.each{|k,v| params[k] = v.join(",") if v.is_a?(Array)}
161
+
162
+ # set up the param_signature value in the params
163
+ params[:sig] = param_signature(params)
164
+
165
+ # prepare internal state
166
+ @last_call_was_successful = true
167
+ #@last_error = nil
168
+
169
+ # do the request
170
+ xmlstring = post_request(@api_server_base_url, @api_server_path, method, params, use_ssl)
171
+ xml = Hpricot(xmlstring)
172
+
173
+ # error checking
174
+ if xml.at("error_response")
175
+ @last_call_was_successful = false
176
+ code = xml.at("error_code").inner_html
177
+ msg = xml.at("error_msg").inner_html
178
+ @last_error = "ERROR #{code}: #{msg} (#{method}, #{params})"
179
+ @last_error_code = code
180
+
181
+ # check to see if this error was an expired session error
182
+ if code.to_i == 102
183
+ @session_expired = true
184
+ raise ExpiredSessionException, @last_error unless @suppress_exceptions == true
185
+ end
186
+
187
+ # otherwise, just throw a generic expired session
188
+ raise RemoteException, @last_error unless @suppress_exceptions == true
189
+
190
+ return nil
191
+ end
192
+
193
+ return xml
194
+ end
195
+
196
+
197
+ private
198
+
199
+ # SECTION: Private Concrete Interface
200
+
201
+ # Function: post_request
202
+ # Does a post to the given server/path, using the params as formdata
203
+ #
204
+ # Parameters:
205
+ # api_server_base_url - i.e. "api.facebook.com"
206
+ # api_server_path - i.e. "/restserver.php"
207
+ # method - i.e. "facebook.users.getInfo"
208
+ # params - hash of key/value pairs that get sent as form data to the server
209
+ # use_ssl - set to true if you want to use SSL for this request
210
+ def post_request(api_server_base_url, api_server_path, method, params, use_ssl)
211
+
212
+ # get a server handle
213
+ port = (use_ssl == true) ? 443 : 80
214
+ http_server = Net::HTTP.new(@api_server_base_url, port)
215
+ http_server.use_ssl = use_ssl
216
+
217
+ # build a request
218
+ http_request = Net::HTTP::Post.new(@api_server_path)
219
+ http_request.form_data = params
220
+ response = http_server.start{|http| http.request(http_request)}.body
221
+
222
+ # return the text of the body
223
+ return response
224
+
225
+ end
226
+
227
+ # Function: param_signature
228
+ # Generates a param_signature for a call to the API, per the spec on Facebook
229
+ # see: <http://developers.facebook.com/documentation.php?v=1.0&doc=auth>
230
+ def param_signature(params)
231
+
232
+ args = []
233
+ params.each do |k,v|
234
+ args << "#{k}=#{v}"
235
+ end
236
+ sorted_array = args.sort
237
+ request_str = sorted_array.join("")
238
+ param_signature = Digest::MD5.hexdigest("#{request_str}#{get_secret(params)}") # uses Template method get_secret
239
+ return param_signature
240
+
241
+ end
242
+
243
+ end
244
+
245
+ end
@@ -0,0 +1,114 @@
1
+ # Copyright (c) 2007, Matt Pizzimenti (www.livelearncode.com)
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without modification,
5
+ # are permitted provided that the following conditions are met:
6
+ #
7
+ # Redistributions of source code must retain the above copyright notice,
8
+ # this list of conditions and the following disclaimer.
9
+ #
10
+ # Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ #
14
+ # Neither the name of the original author nor the names of contributors
15
+ # may be used to endorse or promote products derived from this software
16
+ # without specific prior written permission.
17
+ #
18
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ #
29
+
30
+ #
31
+ # Some code was inspired by techniques used in Alpha Chen's old client.
32
+ # Some code was ported from the official PHP5 client.
33
+ #
34
+
35
+ require "facebook_session"
36
+
37
+ module RFacebook
38
+
39
+ class FacebookWebSession < FacebookSession
40
+
41
+ # Function: get_login_url
42
+ # Gets the authentication URL
43
+ #
44
+ # Parameters:
45
+ # options.next - the page to redirect to after login
46
+ # options.popup - boolean, whether or not to use the popup style (defaults to true)
47
+ # options.skipcookie - boolean, whether to force new Facebook login (defaults to false)
48
+ # options.hidecheckbox - boolean, whether to show the "infinite session" option checkbox
49
+ def get_login_url(options={})
50
+ # options
51
+ path_next = options[:next] ||= nil
52
+ popup = (options[:popup] == nil) ? true : false
53
+ skipcookie = (options[:skipcookie] == nil) ? false : true
54
+
55
+ # get some extra portions of the URL
56
+ optionalNext = (path_next == nil) ? "" : "&next=#{CGI.escape(path_next.to_s)}"
57
+ optionalPopup = (popup == true) ? "&popup=true" : ""
58
+ optionalSkipCookie = (skipcookie == true) ? "&skipcookie=true" : ""
59
+ optionalHideCheckbox = (hidecheckbox == true) ? "&hide_checkbox=true" : ""
60
+
61
+ # build and return URL
62
+ return "http://#{LOGIN_SERVER_BASE_URL}#{LOGIN_SERVER_PATH}?v=1.0&api_key=#{@api_key}#{optionalPopup}#{optionalNext}#{optionalSkipCookie}#{optionalHideCheckbox}"
63
+ end
64
+
65
+ # Function: activate_with_token
66
+ # Gets the session information available after current user logs in.
67
+ #
68
+ # Parameters:
69
+ # auth_token - string token passed back by the callback URL
70
+ def activate_with_token(auth_token)
71
+ result = call_method("auth.getSession", {:auth_token => auth_token})
72
+ if result != nil
73
+ @session_uid = result.at("uid").inner_html
74
+ @session_key = result.at("session_key").inner_html
75
+ end
76
+ end
77
+
78
+ # Function: activate_with_previous_session
79
+ # Sets the session key directly (for example, if you have an infinite session key)
80
+ #
81
+ # Parameters:
82
+ # key - the session key to use
83
+ def activate_with_previous_session(key)
84
+ # set the session key
85
+ @session_key = key
86
+
87
+ # determine the current user's id
88
+ result = call_method("users.getLoggedInUser")
89
+ @session_uid = result.at("users_getLoggedInUser_response").inner_html
90
+ end
91
+
92
+ def is_valid?
93
+ return (is_activated? and !session_expired?)
94
+ end
95
+
96
+ protected
97
+
98
+ def is_activated?
99
+ return (@session_key != nil)
100
+ end
101
+
102
+ # Function: get_secret
103
+ # Template method, used by super::signature to generate a signature
104
+ def get_secret(params)
105
+
106
+ return @api_secret
107
+
108
+ end
109
+
110
+ end
111
+
112
+
113
+
114
+ end
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.0
3
+ specification_version: 1
4
+ name: rfacebook
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.5.0
7
+ date: 2007-05-08 00:00:00 -04:00
8
+ summary: A Ruby interface to the Facebook API v1.0+
9
+ require_paths:
10
+ - lib
11
+ email: matt@livelearncode.com
12
+ homepage: http://livelearncode.com/
13
+ rubyforge_project:
14
+ description:
15
+ autorequire: rfacebook
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: false
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Matt Pizzimenti
31
+ files:
32
+ - lib/facebook_desktop_session.rb
33
+ - lib/facebook_session.rb
34
+ - lib/facebook_web_session.rb
35
+ - README
36
+ test_files: []
37
+
38
+ rdoc_options: []
39
+
40
+ extra_rdoc_files:
41
+ - README
42
+ executables: []
43
+
44
+ extensions: []
45
+
46
+ requirements: []
47
+
48
+ dependencies:
49
+ - !ruby/object:Gem::Dependency
50
+ name: hpricot
51
+ version_requirement:
52
+ version_requirements: !ruby/object:Gem::Version::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 0.4.0
57
+ version: