Commit 3a45d3f4a4c838996406fbe0936fd59030ad7ae8
1 parent
88dd46f0
Exists in
theme-brasil-digital-from-staging
and in
9 other branches
changed to save oauth data on cache store to use on signup through api
Showing
6 changed files
with
75 additions
and
0 deletions
Show diff stats
plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb
| @@ -50,6 +50,12 @@ class OauthClientPluginPublicController < PublicController | @@ -50,6 +50,12 @@ class OauthClientPluginPublicController < PublicController | ||
| 50 | 50 | ||
| 51 | def signup(auth) | 51 | def signup(auth) |
| 52 | login = auth.info.email.split('@').first | 52 | login = auth.info.email.split('@').first |
| 53 | + | ||
| 54 | + # reading provider from session and writing to cache to read when | ||
| 55 | + # api calls register to confirm signup | ||
| 56 | + provider = OauthClientPlugin::Provider.find(session[:provider_id]) | ||
| 57 | + OauthClientPlugin.write_cache(auth.info.email, provider.id, auth.uid) | ||
| 58 | + | ||
| 53 | session[:oauth_data] = auth | 59 | session[:oauth_data] = auth |
| 54 | session[:oauth_client_popup] = true if request.env["omniauth.params"]['oauth_client_popup'] | 60 | session[:oauth_client_popup] = true if request.env["omniauth.params"]['oauth_client_popup'] |
| 55 | session[:return_to] = url_for(:controller => :oauth_client_plugin_public, :action => :finish) | 61 | session[:return_to] = url_for(:controller => :oauth_client_plugin_public, :action => :finish) |
plugins/oauth_client/db/migrate/20150714200000_add_oauth_auth_fields_to_user_provider.rb
0 → 100644
| @@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
| 1 | +class AddOAuthAuthFieldsToUserProvider < ActiveRecord::Migration | ||
| 2 | + | ||
| 3 | + def self.up | ||
| 4 | + change_table :oauth_client_plugin_user_providers do |t| | ||
| 5 | + t.string :token | ||
| 6 | + t.boolean :expires | ||
| 7 | + t.datetime :expiration_date | ||
| 8 | + end | ||
| 9 | + end | ||
| 10 | + | ||
| 11 | + def self.down | ||
| 12 | + remove_column :oauth_client_plugin_user_providers, :token | ||
| 13 | + remove_column :oauth_client_plugin_user_providers, :expires | ||
| 14 | + remove_column :oauth_client_plugin_user_providers, :expiration_date | ||
| 15 | + end | ||
| 16 | +end |
plugins/oauth_client/lib/ext/user.rb
| @@ -14,6 +14,16 @@ class User | @@ -14,6 +14,16 @@ class User | ||
| 14 | after_create :activate_oauth_user | 14 | after_create :activate_oauth_user |
| 15 | 15 | ||
| 16 | def activate_oauth_user | 16 | def activate_oauth_user |
| 17 | + # user creation through api does not set oauth_providers | ||
| 18 | + if oauth_providers.empty? | ||
| 19 | + #check if is oauth user, reading oauth_data recorded at cache store | ||
| 20 | + oauth_data = OauthClientPlugin.read_cache_for(self.email) | ||
| 21 | + if oauth_data | ||
| 22 | + oauth_providers = [OauthClientPlugin::Provider.find(oauth_data[:provider])] | ||
| 23 | + OauthClientPlugin.delete_cache_for(self.email) | ||
| 24 | + end | ||
| 25 | + end | ||
| 26 | + | ||
| 17 | unless oauth_providers.empty? | 27 | unless oauth_providers.empty? |
| 18 | activate | 28 | activate |
| 19 | oauth_providers.each do |provider| | 29 | oauth_providers.each do |provider| |
plugins/oauth_client/lib/oauth_client_plugin.rb
| @@ -10,6 +10,35 @@ class OauthClientPlugin < Noosfero::Plugin | @@ -10,6 +10,35 @@ class OauthClientPlugin < Noosfero::Plugin | ||
| 10 | _("Login with Oauth.") | 10 | _("Login with Oauth.") |
| 11 | end | 11 | end |
| 12 | 12 | ||
| 13 | + def self.cache_prefix | ||
| 14 | + 'CACHE_OAUTH_CLIENT_AUTH' | ||
| 15 | + end | ||
| 16 | + | ||
| 17 | + def self.cache_name_for email | ||
| 18 | + "#{cache_prefix}_#{email}" | ||
| 19 | + end | ||
| 20 | + | ||
| 21 | + def self.read_cache_for email | ||
| 22 | + if cache_value = Rails.cache.fetch(cache_name_for(email)) | ||
| 23 | + if cache_value.include?('-') | ||
| 24 | + cache_arr = cache_value.split('-') | ||
| 25 | + return { | ||
| 26 | + provider: cache_arr[0], | ||
| 27 | + uid: cache_arr[1] | ||
| 28 | + } | ||
| 29 | + end | ||
| 30 | + end | ||
| 31 | + end | ||
| 32 | + | ||
| 33 | + def self.write_cache email, provider, uid | ||
| 34 | + Rails.cache.write(cache_name_for(email), "#{provider}-#{uid}" , :expires_in => 300) | ||
| 35 | + end | ||
| 36 | + | ||
| 37 | + def self.delete_cache_for email | ||
| 38 | + Rails.cache.delete(cache_name_for(email)) | ||
| 39 | + end | ||
| 40 | + | ||
| 41 | + | ||
| 13 | def login_extra_contents | 42 | def login_extra_contents |
| 14 | plugin = self | 43 | plugin = self |
| 15 | proc do | 44 | proc do |
plugins/oauth_client/test/unit/user_test.rb
| @@ -37,4 +37,12 @@ class UserTest < ActiveSupport::TestCase | @@ -37,4 +37,12 @@ class UserTest < ActiveSupport::TestCase | ||
| 37 | assert user.activation_code | 37 | assert user.activation_code |
| 38 | end | 38 | end |
| 39 | 39 | ||
| 40 | + should 'save oauth token when create with oauth' do | ||
| 41 | + | ||
| 42 | + end | ||
| 43 | + | ||
| 44 | + should 'note save oauth token when create with oauth' do | ||
| 45 | + | ||
| 46 | + end | ||
| 47 | + | ||
| 40 | end | 48 | end |
plugins/oauth_client/views/oauth_client_plugin_public/finish.html.erb
| 1 | +<%# | ||
| 2 | +# The Application caller, in general a noosfero api client, | ||
| 3 | +# sends periodically messages events with the payload | ||
| 4 | +# message requestOauthClientPluginResult to the Popup Window | ||
| 5 | +# and gets notified when the oauth authentication is confirmed | ||
| 6 | +#%> | ||
| 1 | <script> | 7 | <script> |
| 2 | window.addEventListener("message", function(ev) { | 8 | window.addEventListener("message", function(ev) { |
| 3 | if (ev.data.message === "requestOauthClientPluginResult") { | 9 | if (ev.data.message === "requestOauthClientPluginResult") { |