plataforma_social 0.0.3 → 0.0.4
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/Capfile +5 -0
- data/config/deploy.rb +54 -0
- data/lib/plataforma_social.rb +13 -39
- data/lib/plataforma_social/configuration.rb +1 -1
- data/lib/plataforma_social/domains.rb +32 -0
- data/lib/plataforma_social/facebook.rb +66 -22
- data/lib/plataforma_social/helpers.rb +61 -2
- data/lib/plataforma_social/request.rb +4 -3
- data/lib/plataforma_social/version.rb +1 -1
- data/plataforma_social.gemspec +3 -1
- metadata +81 -49
data/Capfile
ADDED
@@ -0,0 +1,5 @@
|
|
1
|
+
load 'deploy'
|
2
|
+
# Uncomment if you are using Rails' asset pipeline
|
3
|
+
# load 'deploy/assets'
|
4
|
+
Dir['vendor/gems/*/recipes/*.rb','vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
|
5
|
+
load 'config/deploy' # remove this line to skip loading any of the default tasks
|
data/config/deploy.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
set :application, 'plataforma_social'
|
2
|
+
|
3
|
+
$environment = 'staging' # | staging # production
|
4
|
+
|
5
|
+
set :scm, :git
|
6
|
+
set :scm_verbose, true
|
7
|
+
default_run_options[:pty] = true
|
8
|
+
set :deploy_via, :remote_cache
|
9
|
+
|
10
|
+
case $environment
|
11
|
+
|
12
|
+
when 'staging'
|
13
|
+
p "\n\n\nCAREFUL!!!! STAGING DEPLOY!!!\n\n"
|
14
|
+
|
15
|
+
set :restart_server_command, "/opt/local/nginx/sbin/nginx -s reload"
|
16
|
+
|
17
|
+
set :repository, "ssh://dito@projetos.dito.com.br:4444/home/git/repositories/plataforma_social.git"
|
18
|
+
|
19
|
+
set :branch, "master"
|
20
|
+
|
21
|
+
#usuario ssh
|
22
|
+
set :user, "dito"
|
23
|
+
|
24
|
+
role :app, "31.171.132.244"
|
25
|
+
role :web, "31.171.132.244"
|
26
|
+
role :db, "31.171.132.244", :primary => true
|
27
|
+
|
28
|
+
set :deploy_to, "/home/dito/www/plataforma_social"
|
29
|
+
set :use_sudo, true
|
30
|
+
|
31
|
+
after "deploy", "deploy:cleanup"
|
32
|
+
else
|
33
|
+
p "UNRECOGNIZED ENVIRONMENT"
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
before "deploy:create_symlink", "deploy:copy_files"
|
38
|
+
|
39
|
+
|
40
|
+
namespace :deploy do
|
41
|
+
|
42
|
+
task :copy_files, :roles => :app do
|
43
|
+
case $environment
|
44
|
+
when 'staging'
|
45
|
+
run "cd #{release_path} && /home/dito/.rvm/gems/ruby-1.9.3-p327@global/bin/bundle install"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
desc "Restart the web server"
|
50
|
+
task :restart, :roles => :app do
|
51
|
+
# sudo restart_server_command
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
data/lib/plataforma_social.rb
CHANGED
@@ -1,54 +1,28 @@
|
|
1
1
|
require "plataforma_social/version"
|
2
2
|
require "plataforma_social/configuration"
|
3
|
+
require "plataforma_social/domains"
|
3
4
|
require "plataforma_social/facebook"
|
4
5
|
require "plataforma_social/request"
|
5
6
|
require "plataforma_social/helpers"
|
6
7
|
|
7
8
|
module PlataformaSocial
|
8
9
|
class << self
|
9
|
-
def
|
10
|
-
|
11
|
-
:js => 'js',
|
12
|
-
:analytics => 'analytics',
|
13
|
-
:login => 'login',
|
14
|
-
:events => 'events',
|
15
|
-
:share => 'share',
|
16
|
-
:comments => 'comments',
|
17
|
-
:ranking => 'ranking',
|
18
|
-
:badge => 'badge',
|
19
|
-
:notification => 'notification'
|
20
|
-
}
|
21
|
-
|
22
|
-
if domains[module_name.to_sym].present?
|
23
|
-
name = domains[module_name.to_sym]
|
24
|
-
|
25
|
-
url = case Rails.env
|
26
|
-
when "production"
|
27
|
-
"https://#{name}.plataformasocial.com.br"
|
28
|
-
when "development"
|
29
|
-
"http://#{name}.dev.plataformasocial.com.br"
|
30
|
-
when "test"
|
31
|
-
"http://#{name}.dev.plataformasocial.com.br"
|
32
|
-
when "staging"
|
33
|
-
"http://#{name}.dev.plataformasocial.com.br"
|
34
|
-
end
|
35
|
-
|
36
|
-
url
|
37
|
-
end
|
10
|
+
def configuration
|
11
|
+
@configuration ||= Configuration.new
|
38
12
|
end
|
39
13
|
|
40
14
|
def configure
|
41
15
|
yield(configuration)
|
42
16
|
end
|
43
|
-
|
44
|
-
def configuration
|
45
|
-
@configuration ||= Configuration.new
|
46
|
-
end
|
47
17
|
|
48
18
|
def api_key
|
49
19
|
configuration.api_key
|
50
20
|
end
|
51
21
|
|
22
|
+
def secret
|
23
|
+
configuration.secret
|
24
|
+
end
|
25
|
+
|
52
26
|
def facebook_app_id
|
53
27
|
configuration.facebook_app_id
|
54
28
|
end
|
@@ -61,14 +35,14 @@ module PlataformaSocial
|
|
61
35
|
configuration.facebook_app_namespace
|
62
36
|
end
|
63
37
|
|
38
|
+
def facebook_scope
|
39
|
+
configuration.facebook_scope
|
40
|
+
end
|
64
41
|
|
65
|
-
def
|
66
|
-
|
42
|
+
def facebook_callback_url
|
43
|
+
protocol = Rails.env.development? || Rails.env.staging? ? 'http' : 'https'
|
44
|
+
configuration.facebook_callback_url || "#{protocol}://apps.facebook.com/#{configuration.facebook_app_namespace}/"
|
67
45
|
end
|
68
46
|
|
69
47
|
end
|
70
|
-
end
|
71
|
-
|
72
|
-
ActiveSupport.on_load(:action_view) do
|
73
|
-
include PlataformaSocial::Helpers
|
74
48
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module PlataformaSocial
|
2
2
|
class Configuration
|
3
|
-
attr_accessor :api_key, :facebook_app_secret, :facebook_app_id, :facebook_app_namespace
|
3
|
+
attr_accessor :api_key, :secret, :facebook_app_secret, :facebook_app_id, :facebook_app_namespace, :facebook_scope, :facebook_callback_url
|
4
4
|
end
|
5
5
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module PlataformaSocial
|
2
|
+
def self.domains module_name
|
3
|
+
domains = {
|
4
|
+
:js => 'js',
|
5
|
+
:analytics => 'analytics',
|
6
|
+
:login => 'login',
|
7
|
+
:events => 'events',
|
8
|
+
:share => 'share',
|
9
|
+
:comments => 'comments',
|
10
|
+
:ranking => 'ranking',
|
11
|
+
:badge => 'badge',
|
12
|
+
:notification => 'notification'
|
13
|
+
}
|
14
|
+
|
15
|
+
if domains[module_name.to_sym].present?
|
16
|
+
name = domains[module_name.to_sym]
|
17
|
+
|
18
|
+
url = case Rails.env
|
19
|
+
when "production"
|
20
|
+
"https://#{name}.plataformasocial.com.br"
|
21
|
+
when "development"
|
22
|
+
"http://#{name}.dev.plataformasocial.com.br"
|
23
|
+
when "test"
|
24
|
+
"http://#{name}.dev.plataformasocial.com.br"
|
25
|
+
when "staging"
|
26
|
+
"http://#{name}.dev.plataformasocial.com.br"
|
27
|
+
end
|
28
|
+
|
29
|
+
url
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -1,28 +1,72 @@
|
|
1
|
-
|
2
|
-
class Facebook
|
3
|
-
def self.parse_signed_request signed_request, max_age = 3600
|
4
|
-
secret = PlataformaSocial.facebook_app_secret
|
5
|
-
encoded_sig, encoded_envelope = signed_request.split('.', 2)
|
6
|
-
envelope = JSON.parse(base64_url_decode(encoded_envelope))
|
7
|
-
algorithm = envelope['algorithm']
|
8
|
-
|
9
|
-
raise 'Invalid request. (Unsupported algorithm.)' \
|
10
|
-
if algorithm != 'HMAC-SHA256'
|
11
|
-
|
12
|
-
raise 'Invalid request. (Too old.)' \
|
13
|
-
if envelope['issued_at'] < Time.now.to_i - max_age
|
1
|
+
require 'koala'
|
14
2
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
3
|
+
module PlataformaSocial
|
4
|
+
module Facebook
|
5
|
+
def facebook_login
|
6
|
+
load_oauth
|
7
|
+
load_graph
|
8
|
+
|
9
|
+
redirect = false
|
10
|
+
|
11
|
+
if params[:code]
|
12
|
+
begin
|
13
|
+
@oauth.get_access_token(params[:code])
|
14
|
+
rescue Koala::Facebook::OAuthTokenRequestError
|
15
|
+
redirect = true if parse_facebook_signed_request && !parse_facebook_signed_request['oauth_token']
|
16
|
+
end
|
17
|
+
else
|
18
|
+
redirect = true if parse_facebook_signed_request && !parse_facebook_signed_request['oauth_token']
|
19
|
+
end
|
20
|
+
|
21
|
+
if parse_facebook_signed_request && parse_facebook_signed_request['oauth_token']
|
22
|
+
if !session[:not_verify_facebook_permissions] === true
|
23
|
+
permissions = @graph.get_object('me', :fields => 'permissions')['permissions']['data'][0]
|
24
|
+
session[:not_verify_facebook_permissions] = true
|
25
|
+
|
26
|
+
PlataformaSocial.facebook_scope.split(',').each do |permission|
|
27
|
+
redirect = true unless permissions[permission.strip]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
render :text => %|<script type="text/javascript">window.top.location.href="#{@oauth.url_for_oauth_code(:permissions => PlataformaSocial.configuration.facebook_scope)}";</script>| if redirect
|
19
33
|
end
|
20
|
-
|
21
|
-
|
34
|
+
|
35
|
+
def load_user_data
|
36
|
+
facebook_data = facebook_user_data.symbolize_keys if facebook_user_data
|
37
|
+
plataforma_social_data = plataforma_social_user_data.symbolize_keys if plataforma_social_user_data
|
22
38
|
|
23
|
-
|
24
|
-
|
25
|
-
|
39
|
+
@user_data = { :facebook => facebook_data, :plataforma_social => plataforma_social_data }
|
40
|
+
end
|
41
|
+
|
42
|
+
def plataforma_social_user_data
|
43
|
+
if params[:signed_request]
|
44
|
+
data = Request.post("#{PlataformaSocial.domains('login')}/register", { :signed_request => params[:signed_request] })
|
45
|
+
{ :reference => data['id'] }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def facebook_user_data
|
50
|
+
if load_graph
|
51
|
+
@graph.get_object('me')
|
26
52
|
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def parse_facebook_signed_request
|
56
|
+
load_oauth
|
57
|
+
@oauth.parse_signed_request params[:signed_request] if params[:signed_request].present?
|
58
|
+
end
|
59
|
+
|
60
|
+
def load_oauth
|
61
|
+
@oauth = Koala::Facebook::OAuth.new(PlataformaSocial.facebook_app_id, PlataformaSocial.facebook_app_secret, PlataformaSocial.facebook_callback_url)
|
62
|
+
end
|
63
|
+
|
64
|
+
def load_graph
|
65
|
+
@graph = Koala::Facebook::API.new parse_facebook_signed_request['oauth_token'] if parse_facebook_signed_request.present?
|
66
|
+
end
|
27
67
|
end
|
68
|
+
end
|
69
|
+
|
70
|
+
class ActionController::Base
|
71
|
+
include PlataformaSocial::Facebook
|
28
72
|
end
|
@@ -1,7 +1,66 @@
|
|
1
1
|
module PlataformaSocial
|
2
2
|
module Helpers
|
3
|
+
|
4
|
+
def plataforma_social_javascripts
|
5
|
+
plataforma_social_script_tag + plataforma_social_config_script
|
6
|
+
end
|
7
|
+
|
3
8
|
def plataforma_social_script_tag
|
4
|
-
|
9
|
+
%Q{<script src="#{PlataformaSocial.domains('js')}/socialp.js" type="text/javascript" charset="utf-8"></script>}.html_safe
|
10
|
+
end
|
11
|
+
|
12
|
+
def plataforma_social_config_script
|
13
|
+
%Q{<script type="text/javascript" charset="utf-8">
|
14
|
+
$P.init({ apiKey: '#{PlataformaSocial.api_key}' });
|
15
|
+
window._FACEBOOK_APP_URL = 'http://apps.facebook.com/#{PlataformaSocial.facebook_app_namespace}';
|
16
|
+
</script>}.html_safe
|
17
|
+
end
|
18
|
+
|
19
|
+
def custom_redirect_to path, options = {}
|
20
|
+
options.each_pair do |key, value|
|
21
|
+
cookies[key] = value
|
22
|
+
end
|
23
|
+
|
24
|
+
render :text => %Q{
|
25
|
+
<script type="text/javascript" charset="utf-8">
|
26
|
+
window.top.location = "//apps.facebook.com/#{PlataformaSocial.facebook_app_namespace}#{path}";
|
27
|
+
</script>
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def link_to *args, &block
|
32
|
+
if args[2][:normal] === true
|
33
|
+
super
|
34
|
+
else
|
35
|
+
unless block_given?
|
36
|
+
referer = request.referer
|
37
|
+
facebook_domain = 'apps.facebook.com'
|
38
|
+
if params["controller"].include?("admin/")
|
39
|
+
super
|
40
|
+
else
|
41
|
+
server_domain = request.env['HTTP_HOST']
|
42
|
+
if args[1].index(request.env['HTTP_HOST'])
|
43
|
+
args[1].gsub! server_domain, facebook_domain + '/' + PlataformaSocial.facebook_app_namespace
|
44
|
+
else
|
45
|
+
args[1] = request.protocol + facebook_domain + '/' + PlataformaSocial.facebook_app_namespace + args[1]
|
46
|
+
end
|
47
|
+
|
48
|
+
args[2] ||= {}
|
49
|
+
args[2][:target] = '_top'
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
super
|
55
|
+
end
|
5
56
|
end
|
6
57
|
end
|
7
|
-
end
|
58
|
+
end
|
59
|
+
|
60
|
+
ActiveSupport.on_load(:action_view) do
|
61
|
+
include PlataformaSocial::Helpers
|
62
|
+
end
|
63
|
+
|
64
|
+
class ActionController::Base
|
65
|
+
include PlataformaSocial::Helpers
|
66
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rsa'
|
2
2
|
require 'openssl'
|
3
|
+
require 'httparty'
|
3
4
|
|
4
5
|
module PlataformaSocial
|
5
6
|
class Request
|
@@ -13,7 +14,7 @@ module PlataformaSocial
|
|
13
14
|
end
|
14
15
|
|
15
16
|
def self.request url, params = {}, method = "get"
|
16
|
-
secret = PlataformaSocial.
|
17
|
+
secret = PlataformaSocial.secret
|
17
18
|
platform_api_key = PlataformaSocial.api_key
|
18
19
|
secret_key = OpenSSL::PKey::RSA.new(File.read("#{Rails.root}/plataforma_social/keys/public.pem")).public_encrypt secret
|
19
20
|
params_name = method == 'get' ? :query : :body
|
@@ -21,8 +22,8 @@ module PlataformaSocial
|
|
21
22
|
|
22
23
|
begin
|
23
24
|
response = HTTParty.send(method.to_sym, url, params_name => params)
|
24
|
-
rescue
|
25
|
-
return
|
25
|
+
rescue => e
|
26
|
+
return e.to_s
|
26
27
|
end
|
27
28
|
|
28
29
|
return nil if response.nil?
|
data/plataforma_social.gemspec
CHANGED
metadata
CHANGED
@@ -1,55 +1,97 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: plataforma_social
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 3
|
10
|
-
version: 0.0.3
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Marcos Nogueira
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
12
|
+
date: 2013-02-04 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: capistrano
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.11.2
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 2.11.2
|
30
|
+
- !ruby/object:Gem::Dependency
|
21
31
|
name: rsa
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.1.4
|
38
|
+
type: :runtime
|
22
39
|
prerelease: false
|
23
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
41
|
none: false
|
25
|
-
requirements:
|
42
|
+
requirements:
|
26
43
|
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 19
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
- 1
|
32
|
-
- 4
|
44
|
+
- !ruby/object:Gem::Version
|
33
45
|
version: 0.1.4
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: koala
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.6.0
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.6.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: httparty
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.10.0
|
34
70
|
type: :runtime
|
35
|
-
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.10.0
|
36
78
|
description: Plataforma Social's integration gem
|
37
|
-
email:
|
79
|
+
email:
|
38
80
|
- marcos.nogueira@dito.com.br
|
39
81
|
executables: []
|
40
|
-
|
41
82
|
extensions: []
|
42
|
-
|
43
83
|
extra_rdoc_files: []
|
44
|
-
|
45
|
-
files:
|
84
|
+
files:
|
46
85
|
- .gitignore
|
86
|
+
- Capfile
|
47
87
|
- Gemfile
|
48
88
|
- LICENSE.txt
|
49
89
|
- README.md
|
50
90
|
- Rakefile
|
91
|
+
- config/deploy.rb
|
51
92
|
- lib/plataforma_social.rb
|
52
93
|
- lib/plataforma_social/configuration.rb
|
94
|
+
- lib/plataforma_social/domains.rb
|
53
95
|
- lib/plataforma_social/facebook.rb
|
54
96
|
- lib/plataforma_social/helpers.rb
|
55
97
|
- lib/plataforma_social/request.rb
|
@@ -57,36 +99,26 @@ files:
|
|
57
99
|
- plataforma_social.gemspec
|
58
100
|
homepage: http://www.dito.com.br/
|
59
101
|
licenses: []
|
60
|
-
|
61
102
|
post_install_message:
|
62
103
|
rdoc_options: []
|
63
|
-
|
64
|
-
require_paths:
|
104
|
+
require_paths:
|
65
105
|
- lib
|
66
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
107
|
none: false
|
68
|
-
requirements:
|
69
|
-
- -
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
|
72
|
-
|
73
|
-
- 0
|
74
|
-
version: "0"
|
75
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
113
|
none: false
|
77
|
-
requirements:
|
78
|
-
- -
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
|
81
|
-
segments:
|
82
|
-
- 0
|
83
|
-
version: "0"
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
84
118
|
requirements: []
|
85
|
-
|
86
119
|
rubyforge_project:
|
87
|
-
rubygems_version: 1.8.
|
120
|
+
rubygems_version: 1.8.24
|
88
121
|
signing_key:
|
89
122
|
specification_version: 3
|
90
123
|
summary: Plataforma Social's integration gem
|
91
124
|
test_files: []
|
92
|
-
|