facebook_registration 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +3 -0
- data/README.rdoc +48 -0
- data/facebook_registration.gemspec +29 -0
- data/facebooker.yml +14 -0
- data/lib/facebook_registration.rb +32 -0
- data/lib/helpers/helpers.rb +29 -0
- data/lib/rails/signed_request.rb +43 -0
- metadata +73 -0
data/CHANGELOG.rdoc
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
= Author
|
2
|
+
Veerasundaravel Thirugnanasundaram <veerasundaravel@gmail.com>
|
3
|
+
|
4
|
+
http://veerasundaravel.wordpress.com/2011/01/27/facebook-registration-plugin-in-rails/
|
5
|
+
|
6
|
+
= Synopsis
|
7
|
+
facebook_registration is a ruby library for displaying new Facebook Registration form and to parse to signed_request.
|
8
|
+
[http://developers.facebook.com/docs/plugins/registration]
|
9
|
+
|
10
|
+
|
11
|
+
=== Installation
|
12
|
+
sudo gem install facebook_registration
|
13
|
+
|
14
|
+
|
15
|
+
=== Using Gem in Rails
|
16
|
+
Once you installed the gem, you will need to configure your Facebook app in config/facebooker.yml.
|
17
|
+
|
18
|
+
You can copy facebooker.yml file which one is already available in this Root directory.
|
19
|
+
|
20
|
+
|
21
|
+
=== Initializing Registration Form
|
22
|
+
|
23
|
+
<%= init_fb_registration %>
|
24
|
+
|
25
|
+
|
26
|
+
=== Displaying Facebook Registration Form
|
27
|
+
|
28
|
+
<%= fb_registration_form("fields" =>"name,email,password", "redirect-uri"=>"http://localhost:3000/fb_registration", "width" =>830) %>
|
29
|
+
|
30
|
+
or
|
31
|
+
|
32
|
+
<%= fb_registration_form("fields" =>"[{'name':'name'}, {'name':'email'}, {'name':'password'}, {'name':'username','description':'Username','type':'text'}, {'name':'like', 'description':'You like this Website', 'type':'checkbox', 'default':'checked'}]", "fb_only"=>false, "redirect-uri"=>"http://localhost:3000/fb_registration", "width" =>830) %>
|
33
|
+
|
34
|
+
For more form field specifications refer this url:
|
35
|
+
http://developers.facebook.com/docs/plugins/registration#named_fields
|
36
|
+
http://developers.facebook.com/docs/plugins/registration#custom_fields
|
37
|
+
|
38
|
+
|
39
|
+
=== Accessing profile informations
|
40
|
+
After displaying the form, you can register their details and they will be redirected to the url which one you have specified as redirect-uri.
|
41
|
+
|
42
|
+
So in our case, you can parse the Facebook profile informations in the action fb_registration as follows:
|
43
|
+
|
44
|
+
FacebookRegistration::SignedRequest.parse(params["signed_request"])
|
45
|
+
|
46
|
+
it will return the output as follows:
|
47
|
+
|
48
|
+
{"expires"=>1295964000, "registration_metadata"=>{"fields"=>"[{'name':'name'}, {'name':'location'}, {'name':'email'}]"}, "algorithm"=>"HMAC-SHA256", "registration"=>{"name"=>"Veera Sundaravel", "location"=>{"name"=>"Chennai, Tamil Nadu", "id"=>000000000}, "email"=>"veeraa2003@gmail.com"}, "user_id"=>"111111111", "oauth_token"=>"1212121212|2.9vzjKsatvaser_dStgereokRhg__.360220.1295964000-daff1|rsfsfasdfasdfasd", "user"=>{"country"=>"us", "locale"=>"en_US"}, "issued_at"=>1295956965}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{facebook_registration}
|
5
|
+
s.version = "0.0.1"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Veerasundaravel Thirugnanasundaram"]
|
9
|
+
s.date = %q{2011-02-01}
|
10
|
+
s.description = %q{facebook_registration is a ruby library for displaying new Facebook Registration form and to parse to signed_request[http://developers.facebook.com/docs/plugins/registration].}
|
11
|
+
s.email = ["veerasundaravel@gmail.com"]
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG.rdoc", "README.rdoc", ]
|
13
|
+
s.files = ["CHANGELOG.rdoc", "README.rdoc", "facebook_registration.gemspec", "facebooker.yml", "lib/facebook_registration.rb", "lib/helpers/helpers.rb", "lib/rails/signed_request.rb"]
|
14
|
+
s.homepage = %q{http://veerasundaravel.wordpress.com/2011/01/27/facebook-registration-plugin-in-rails/}
|
15
|
+
s.rdoc_options = ["--main", "README.rdoc"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubyforge_project = %q{facebook_registration}
|
18
|
+
s.rubygems_version = %q{1.3.5}
|
19
|
+
s.summary = %q{facebook_registration is a ruby library for displaying new Facebook Registration form and to parse to signed_request[http://developers.facebook.com/docs/plugins/registration]. by Veerasundaravel Thirugnanasundaram}
|
20
|
+
s.test_files = []
|
21
|
+
|
22
|
+
if s.respond_to? :specification_version then
|
23
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
|
+
s.specification_version = 1
|
25
|
+
s.add_runtime_dependency(%q<yajl-ruby>, [">= 0.7.6"])
|
26
|
+
else
|
27
|
+
s.add_dependency(%q<yajl-ruby>, [">= 0.7.6"])
|
28
|
+
end
|
29
|
+
end
|
data/facebooker.yml
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
module FacebookRegistration
|
2
|
+
@facebook_configuration = {}
|
3
|
+
@raw_facebook_configuration = {}
|
4
|
+
@current_adapter = nil
|
5
|
+
@set_asset_host_to_callback_url = true
|
6
|
+
@path_prefix = nil
|
7
|
+
@use_curl = false
|
8
|
+
|
9
|
+
class << self
|
10
|
+
|
11
|
+
def load_configuration(facebook_yaml_file)
|
12
|
+
return false unless File.exist?(facebook_yaml_file)
|
13
|
+
@raw_facebook_configuration = YAML.load(ERB.new(File.read(facebook_yaml_file)).result)
|
14
|
+
if defined? RAILS_ENV
|
15
|
+
@raw_facebook_configuration = @raw_facebook_configuration[RAILS_ENV]
|
16
|
+
end
|
17
|
+
@raw_facebook_configuration
|
18
|
+
end
|
19
|
+
|
20
|
+
def facebook_config
|
21
|
+
@facebook_configuration
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
facebook_config = "#{RAILS_ROOT}/config/facebooker.yml"
|
27
|
+
FACEBOOK_CONFIG = FacebookRegistration.load_configuration(facebook_config)
|
28
|
+
|
29
|
+
if defined? Rails
|
30
|
+
require 'helpers/helpers'
|
31
|
+
require 'rails/signed_request'
|
32
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module FacebookRegistration
|
2
|
+
def self.included(base)
|
3
|
+
base.send :include, InstanceMethods
|
4
|
+
end
|
5
|
+
|
6
|
+
|
7
|
+
module InstanceMethods
|
8
|
+
DefaultValues = {"fields" =>"name,email,password", "redirect-uri"=>"http://localhost:3000/fb_registration", "fb_only" => false, "width" => "100%", "height" => nil, "onvalidate" =>nil}
|
9
|
+
|
10
|
+
def init_fb_registration
|
11
|
+
raise "Must set Application ID for initializing" unless defined?(FACEBOOK_CONFIG) && FACEBOOK_CONFIG["app_id"]
|
12
|
+
"<script src=\"http://connect.facebook.net/en_US/all.js#appId=#{FACEBOOK_CONFIG["app_id"]}&xfbml=1\"></script> \n <script src=\"http://code.jquery.com/jquery-1.4.4.min.js\"></script>"
|
13
|
+
end
|
14
|
+
|
15
|
+
def fb_registration_form(options={})
|
16
|
+
options = DefaultValues.merge(options).delete_if { |key, value| value.nil? }
|
17
|
+
str = "<fb:registration"
|
18
|
+
options.each_pair do |key, value|
|
19
|
+
str += " #{key} = \"#{value}\""
|
20
|
+
end
|
21
|
+
str += "> </fb:registration>"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
ActionView::Base.send(:include, FacebookRegistration) if defined?(ActionView::Base)
|
29
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'openssl'
|
3
|
+
require 'base64'
|
4
|
+
require 'yajl'
|
5
|
+
|
6
|
+
module FacebookRegistration
|
7
|
+
class SignedRequest
|
8
|
+
def self.parse(params)
|
9
|
+
if params.is_a?(Hash)
|
10
|
+
signed_request = params.delete('signed_request')
|
11
|
+
else
|
12
|
+
signed_request = params
|
13
|
+
end
|
14
|
+
|
15
|
+
unless signed_request
|
16
|
+
raise "Missing signed_request param"
|
17
|
+
end
|
18
|
+
|
19
|
+
signature, signed_params = signed_request.split('.')
|
20
|
+
|
21
|
+
unless signed_request_is_valid?(FACEBOOK_CONFIG['secret_key'], signature, signed_params)
|
22
|
+
raise "Invalid signature"
|
23
|
+
end
|
24
|
+
|
25
|
+
signed_params = Yajl::Parser.new.parse(base64_url_decode(signed_params))
|
26
|
+
|
27
|
+
return signed_params
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def self.signed_request_is_valid?(secret, signature, params)
|
33
|
+
signature = base64_url_decode(signature)
|
34
|
+
expected_signature = OpenSSL::HMAC.digest('SHA256', secret, params.tr("-_", "+/"))
|
35
|
+
return signature == expected_signature
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.base64_url_decode(str)
|
39
|
+
str = str + "=" * (6 - str.size % 6) unless str.size % 6 == 0
|
40
|
+
return Base64.decode64(str.tr("-_", "+/"))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: facebook_registration
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Veerasundaravel Thirugnanasundaram
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2011-02-01 00:00:00 +05:30
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: yajl-ruby
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.7.6
|
24
|
+
version:
|
25
|
+
description: facebook_registration is a ruby library for displaying new Facebook Registration form and to parse to signed_request[http://developers.facebook.com/docs/plugins/registration].
|
26
|
+
email:
|
27
|
+
- veerasundaravel@gmail.com
|
28
|
+
executables: []
|
29
|
+
|
30
|
+
extensions: []
|
31
|
+
|
32
|
+
extra_rdoc_files:
|
33
|
+
- CHANGELOG.rdoc
|
34
|
+
- README.rdoc
|
35
|
+
files:
|
36
|
+
- CHANGELOG.rdoc
|
37
|
+
- README.rdoc
|
38
|
+
- facebook_registration.gemspec
|
39
|
+
- facebooker.yml
|
40
|
+
- lib/facebook_registration.rb
|
41
|
+
- lib/helpers/helpers.rb
|
42
|
+
- lib/rails/signed_request.rb
|
43
|
+
has_rdoc: true
|
44
|
+
homepage: http://veerasundaravel.wordpress.com/2011/01/27/facebook-registration-plugin-in-rails/
|
45
|
+
licenses: []
|
46
|
+
|
47
|
+
post_install_message:
|
48
|
+
rdoc_options:
|
49
|
+
- --main
|
50
|
+
- README.rdoc
|
51
|
+
require_paths:
|
52
|
+
- lib
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: "0"
|
58
|
+
version:
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: "0"
|
64
|
+
version:
|
65
|
+
requirements: []
|
66
|
+
|
67
|
+
rubyforge_project: facebook_registration
|
68
|
+
rubygems_version: 1.3.5
|
69
|
+
signing_key:
|
70
|
+
specification_version: 1
|
71
|
+
summary: facebook_registration is a ruby library for displaying new Facebook Registration form and to parse to signed_request[http://developers.facebook.com/docs/plugins/registration]. by Veerasundaravel Thirugnanasundaram
|
72
|
+
test_files: []
|
73
|
+
|