@@ -2,11 +2,66 @@ class CallbacksController < Devise::OmniauthCallbacksController
22 def amber_oauth2
33 user = User . from_omniauth ( request . env [ 'omniauth.auth' ] )
44
5- if user . persisted?
5+ if user & .persisted?
66 sign_in ( :user , user )
77 redirect_to user . roles . any? ? root_path : user_path ( user . id )
88 else
9- redirect_to root_path , flash : { error : 'Authentication failed ' }
9+ redirect_to root_path , flash : { error : 'Inloggen gefaald. ' }
1010 end
1111 end
12+
13+ def identity
14+ user = User . from_omniauth_inspect ( request . env [ 'omniauth.auth' ] )
15+
16+ if user &.persisted?
17+ if user . deactivated
18+ render ( json : { state : 'password_prompt' , error_message : 'Uw account is gedeactiveerd, dus inloggen is niet mogelijk.' } )
19+ else
20+ check_identity_with_user ( user , SofiaAccount . find_by ( user_id : user . id ) )
21+ end
22+ else
23+ render ( json : { state : 'password_prompt' , error_message : 'Inloggen mislukt. De ingevulde gegevens zijn incorrect.' } )
24+ end
25+ end
26+
27+ def check_identity_with_user ( user , sofia_account )
28+ if sofia_account &.otp_enabled
29+ check_identity_with_otp ( sofia_account , user )
30+ elsif sofia_account
31+ # no OTP enabled
32+ sign_in ( :user , user )
33+ render ( json : { state : 'logged_in' , redirect_url : user . roles . any? ? root_path : user_path ( user . id ) } )
34+ else
35+ # sofia_account does not exist, should not be possible
36+ render ( json : { state : 'password_prompt' , error_message : 'Inloggen mislukt door een error. Herlaad de pagina en probeer het nog
37+ een keer. <br/><i>Werkt het na een paar keer proberen nog steeds niet?
38+ Neem dan contact op met de ICT-commissie.</i>' } )
39+ end
40+ end
41+
42+ def check_identity_with_otp ( sofia_account , user )
43+ if params [ :verification_code ] . blank?
44+ # OTP code not present, so request it
45+ render ( json : { state : 'otp_prompt' } )
46+ elsif sofia_account . authenticate_otp ( params [ :verification_code ] )
47+ # OTP code correct
48+ sign_in ( :user , user )
49+ render ( json : { state : 'logged_in' , redirect_url : user . roles . any? ? root_path : user_path ( user . id ) } )
50+ else
51+ # OTP code incorrect
52+ render ( json : { state : 'otp_prompt' , error_message : 'Inloggen mislukt. De authenticatiecode is incorrect.' } )
53+ end
54+ end
55+
56+ def failure
57+ error_message = 'Inloggen mislukt.'
58+ if request . env [ 'omniauth.error.strategy' ] . instance_of? OmniAuth ::Strategies ::Identity
59+ error_message << if request . env [ 'omniauth.error.type' ] . to_s == 'invalid_credentials'
60+ ' De ingevulde gegevens zijn incorrect.'
61+ else
62+ ' Er is een onverwachte fout opgetreden.'
63+ end
64+ end
65+ render ( json : { state : 'password_prompt' , error_message : } )
66+ end
1267end
0 commit comments