parent
f5b87793b5
commit
f3f7b1254e
@ -1,53 +0,0 @@
|
||||
# encoding: UTF-8
|
||||
require_dependency 'google_plus_api'
|
||||
|
||||
class GooglePlusController < ApplicationController
|
||||
include DummyPasswordGenerator
|
||||
|
||||
layout 'frontend'
|
||||
|
||||
def google_plus
|
||||
headers['X-Frame-Options'] = 'SAMEORIGIN'
|
||||
@config = GoogleSignInConfig.new(CartoDB, Cartodb.config)
|
||||
render 'google_plus'
|
||||
end
|
||||
|
||||
def google_signup
|
||||
api = Carto::Oauth::Api::Google.new(nil, params[:google_signup_access_token])
|
||||
user_data = api.user_params
|
||||
|
||||
create_user(user_data)
|
||||
|
||||
common_data_url = CartoDB::Visualization::CommonDataService.build_url(self)
|
||||
user.load_common_data(common_data_url)
|
||||
|
||||
CartoGearsApi::Events::EventManager.instance.notify(
|
||||
CartoGearsApi::Events::UserCreationEvent.new(
|
||||
CartoGearsApi::Events::UserCreationEvent::CREATED_VIA_ORG_SIGNUP, user
|
||||
)
|
||||
)
|
||||
|
||||
redirect_to CartoDB.path(self, 'dashboard', trailing_slash: true)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_user(user_data)
|
||||
email = user_data.email
|
||||
username = user_data.username
|
||||
|
||||
throw 'illegal Google token' unless email.present?
|
||||
|
||||
existing_user = ::User.where("email = '#{email}' OR username = '#{username}'").first
|
||||
throw 'existing user' unless existing_user == nil
|
||||
|
||||
user = ::User.new(username: username, email: email, google_sign_in: true)
|
||||
|
||||
dummy_password = generate_dummy_password
|
||||
user.password = dummy_password
|
||||
user.password_confirmation = dummy_password
|
||||
|
||||
user.save(raise_on_failure: true)
|
||||
user.create_in_central
|
||||
end
|
||||
end
|
@ -0,0 +1 @@
|
||||
<a class="Sessions-oauthButton Sessions-googleButton" href="<%= config.redirect_url %>">Google</a>
|
@ -1,31 +0,0 @@
|
||||
class GoogleSignInConfig
|
||||
attr_reader :domain, :iframe_src, :client_id, :cookie_policy, :access_token_field_id
|
||||
attr_accessor :unauthenticated_valid_access_token
|
||||
|
||||
# @param app_module CartoDB Module containing global functions
|
||||
# @param config CartoDB config
|
||||
# @param access_token_field_id String
|
||||
# @param button_color: hex for the color
|
||||
def self.instance(app_module, config, access_token_field_id = 'google_access_token', button_color = nil)
|
||||
return nil unless config[:oauth].present? && config[:oauth]['google_plus'].present?
|
||||
GoogleSignInConfig.new(app_module, config, access_token_field_id, button_color)
|
||||
end
|
||||
|
||||
def initialize(app_module, config, access_token_field_id = 'google_access_token', button_color = nil)
|
||||
schema = Rails.env.development? ? 'http' : 'https'
|
||||
|
||||
@domain = config[:domain_name].presence || app_module.account_host.scan(/([^:]*)(:.*)?/).first.first
|
||||
|
||||
button_color_param = button_color.nil? ? '' : "?button_color=#{button_color}".delete('#')
|
||||
|
||||
iframe_src_base_url = app_module.account_host.present? ? "#{schema}://#{app_module.account_host}" : @domain
|
||||
@iframe_src = "#{iframe_src_base_url}/google_plus#{button_color_param}"
|
||||
|
||||
@access_token_field_id = access_token_field_id
|
||||
|
||||
@client_id = config[:oauth]['google_plus']['client_id']
|
||||
|
||||
@cookie_policy = config[:oauth]['google_plus']['cookie_policy']
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in new issue