mirror of
https://github.com/astuto/astuto.git
synced 2025-12-16 11:47:56 +01:00
Add OAuth2 authentication (#147)
- Added Site settings > Authentication section - Create/edit/delete your custom oauth2 configurations - Login or signup with oauth2
This commit is contained in:
committed by
GitHub
parent
3bda6dee08
commit
4c73b398e8
59
app/workflows/OAuthSignInUser.rb
Normal file
59
app/workflows/OAuthSignInUser.rb
Normal file
@@ -0,0 +1,59 @@
|
||||
class OAuthSignInUser
|
||||
include OAuthsHelper
|
||||
|
||||
attr_accessor :user_profile, :o_auth
|
||||
|
||||
# Given:
|
||||
# user_profile: ruby Hash containing information about the user
|
||||
# Could've been returned from OAuthExchangeAuthCodeForProfile
|
||||
# o_auth: ActiveRecord model with information about the OAuth provider
|
||||
#
|
||||
# The workfow creates a new user if it doesn't exist, or select the existing one
|
||||
# NOTE: it does NOT actually sign in the user, but rather returns it to the controller
|
||||
# where it'll be signed in
|
||||
#
|
||||
# Returns:
|
||||
# the user, if successful
|
||||
# nil, if unsuccessful
|
||||
|
||||
def initialize(user_profile: "", o_auth: "")
|
||||
@user_profile = user_profile
|
||||
@o_auth = o_auth
|
||||
end
|
||||
|
||||
def run
|
||||
return nil unless @o_auth and @o_auth.class == OAuth and @o_auth.is_enabled?
|
||||
return nil unless @user_profile and @user_profile.class == Hash
|
||||
|
||||
begin
|
||||
# Attempts to get email from user_profile Hash
|
||||
email = query_path_from_hash(@user_profile, @o_auth.json_user_email_path)
|
||||
|
||||
return nil if email.nil? or not URI::MailTo::EMAIL_REGEXP.match?(email)
|
||||
|
||||
# Select existing / create new user
|
||||
user = User.find_by(email: email)
|
||||
|
||||
if user.nil?
|
||||
if not @o_auth.json_user_name_path.blank?
|
||||
full_name = query_path_from_hash(@user_profile, @o_auth.json_user_name_path)
|
||||
end
|
||||
full_name ||= I18n.t('defaults.user_full_name')
|
||||
|
||||
user = User.new(
|
||||
email: email,
|
||||
full_name: full_name,
|
||||
password: Devise.friendly_token,
|
||||
status: 'active'
|
||||
)
|
||||
user.skip_confirmation!
|
||||
user.save
|
||||
end
|
||||
|
||||
return user
|
||||
rescue => error
|
||||
print(error)
|
||||
return nil
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user