@@ -148,71 +148,99 @@ def self.authenticate(login, submitted_password)
148148 user = find_by ( login : login )
149149 user ||= find_by ( 'lower(email) = ?' , login . downcase )
150150 return nil if user . nil?
151- user if user . password_managed_by_courses_mooc_fi && user . courses_mooc_fi_user_id . present? && authenticate_via_courses_mooc_fi ( user . courses_mooc_fi_user_id , submitted_password )
151+
152+ if user . password_managed_by_courses_mooc_fi && user . courses_mooc_fi_user_id . present?
153+ return user if user . authenticate_via_courses_mooc_fi ( submitted_password )
154+ return nil
155+ end
156+
152157 user if user . has_password? ( submitted_password )
153158 end
154159
155- def authenticate_via_courses_mooc_fi ( courses_mooc_fi_user_id , submitted_password )
160+
161+ def authenticate_via_courses_mooc_fi ( submitted_password )
156162 auth_url = SiteSetting . value ( 'courses_mooc_fi_auth_url' )
157- response = RestClient . post (
158- auth_url ,
159- {
163+
164+ conn = Faraday . new do |f |
165+ f . request :json
166+ f . response :json
167+ end
168+
169+ response = conn . post ( auth_url ) do |req |
170+ req . headers [ "Content-Type" ] = "application/json"
171+ req . headers [ "Accept" ] = "application/json"
172+ req . headers [ "Authorization" ] = Base64 . decode64 (
173+ Rails . application . secrets . tmc_server_secret_for_communicating_to_secret_project
174+ )
175+
176+ req . body = {
160177 user_id : courses_mooc_fi_user_id ,
161- password : submitted_password ,
162- } . to_json ,
163- {
164- content_type : :json ,
165- accept : :json ,
166- Authorization : Rails . application . secrets . tmc_server_secret_for_communicating_to_secret_project ,
178+ password : submitted_password
167179 }
168- )
180+ end
181+
182+ response . body == true
183+
184+ rescue Faraday ::ClientError => e
185+ status = e . response &.dig ( :status )
169186
170- data = JSON . parse ( response . body )
171- unless data [ 'authenticated' ] == true
172- raise "Authentication via courses.mooc.fi failed for #{ email } "
187+ if status == 401 || status == 403
188+ return false
173189 end
174190
175- true
176- rescue RestClient ::Unauthorized , RestClient ::Forbidden
177- raise "Authentication rejected by courses.mooc.fi for #{ email } "
178- rescue RestClient ::ExceptionWithResponse => e
179191 Rails . logger . error ( "Authentication via courses.mooc.fi error: #{ e . response } " )
180- raise "Authentication via courses.mooc.fi failed: #{ e . message } "
192+ raise
193+
181194 rescue => e
182195 Rails . logger . error ( "Unexpected error during authentication via courses.mooc.fi: #{ e . message } " )
183- raise "Unexpected error while authenticating via courses.mooc.fi: #{ e . message } "
196+ raise
184197 end
185198
186- def update_password_via_courses_mooc_fi ( courses_mooc_fi_user_id , old_password , new_password )
187- update_url = SiteSetting . value ( 'courses_mooc_fi_update_password_url' )
188199
189- response = RestClient . put (
190- update_url ,
191- {
192- user_id : courses_mooc_fi_user_id ,
193- old_password : old_password ,
194- new_password : new_password ,
195- } . to_json ,
196- {
197- content_type : :json ,
198- accept : :json ,
199- Authorization : Rails . application . secrets . tmc_server_secret_for_communicating_to_secret_project ,
200- }
201- )
202200
203- data = JSON . parse ( response . body )
201+ def update_password_via_courses_mooc_fi ( old_password , new_password )
202+ update_url = SiteSetting . value ( 'courses_mooc_fi_update_password_url' )
204203
205- unless data [ 'updated' ] == true
206- raise "Updating password via courses.mooc.fi failed for user with courses.mooc.fi-user-id #{ courses_mooc_fi_user_id } "
204+ conn = Faraday . new do |f |
205+ f . request :json
206+ f . response :json
207207 end
208208
209- true
210- rescue RestClient ::ExceptionWithResponse => e
211- Rails . logger . error ( "Updating password via courses.mooc.fi failed for user with courses.mooc.fi-user-id #{ courses_mooc_fi_user_id } : #{ e . response } " )
212- false
213- rescue => e
214- Rails . logger . error ( "Unexpected error updating password via courses.mooc.fi for user with courses.mooc.fi-user-id #{ courses_mooc_fi_user_id } : #{ e . message } " )
215- false
209+ begin
210+ response = conn . post ( update_url ) do |req |
211+ req . headers [ "Content-Type" ] = "application/json"
212+ req . headers [ "Accept" ] = "application/json"
213+ req . headers [ "Authorization" ] = Base64 . decode64 (
214+ Rails . application . secrets . tmc_server_secret_for_communicating_to_secret_project
215+ )
216+
217+ req . body = {
218+ user_id : self . courses_mooc_fi_user_id ,
219+ old_password : old_password ,
220+ new_password : new_password
221+ }
222+ end
223+
224+ data = response . body
225+
226+ unless data == true
227+ raise "Updating password via courses.mooc.fi failed for user with courses.mooc.fi-user-id #{ self . courses_mooc_fi_user_id } "
228+ end
229+
230+ true
231+
232+ rescue Faraday ::ClientError => e
233+ Rails . logger . error (
234+ "Updating password via courses.mooc.fi failed for user with courses.mooc.fi-user-id #{ self . courses_mooc_fi_user_id } : #{ e . response } "
235+ )
236+ false
237+
238+ rescue => e
239+ Rails . logger . error (
240+ "Unexpected error updating password via courses.mooc.fi for user with courses.mooc.fi-user-id #{ self . courses_mooc_fi_user_id } : #{ e . message } "
241+ )
242+ false
243+ end
216244 end
217245
218246 def password_reset_key
0 commit comments