Skip to content

Commit 31159da

Browse files
committed
Refactor LTI sign-in process to avoid accessing current_user
1 parent ac5befb commit 31159da

File tree

4 files changed

+19
-19
lines changed

4 files changed

+19
-19
lines changed

app/controllers/concerns/lti.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ def require_valid_exercise_token
9393
@exercise = if proxy_exercise.nil?
9494
Exercise.find_by(token: params[:custom_token])
9595
else
96-
proxy_exercise.get_matching_exercise(current_user)
96+
proxy_exercise.get_matching_exercise(@user)
9797
end
9898
refuse_lti_launch(message: t('sessions.oauth.invalid_exercise_token')) unless @exercise
9999
end
@@ -186,9 +186,9 @@ def send_score_for(submission, user, score)
186186
end
187187
end
188188

189-
def set_current_user
190-
@current_user = ExternalUser.find_or_create_by(consumer_id: @consumer.id, external_id: @provider.user_id)
191-
current_user.update(email: external_user_email(@provider), name: external_user_name(@provider))
189+
def set_user
190+
@user = ExternalUser.find_or_create_by(consumer_id: @consumer.id, external_id: @provider.user_id)
191+
@user.update(email: external_user_email(@provider), name: external_user_name(@provider))
192192
end
193193

194194
def set_study_group_membership
@@ -201,10 +201,10 @@ def set_study_group_membership
201201
StudyGroup.find_or_create_by(external_id: @provider.resource_link_id, consumer: @consumer)
202202
end
203203

204-
study_group_membership = StudyGroupMembership.find_or_create_by(study_group: group, user: current_user)
204+
study_group_membership = StudyGroupMembership.find_or_create_by(study_group: group, user: @user)
205205
study_group_membership.update(role: external_user_role(@provider))
206206
session[:study_group_id] = group.id
207-
current_user.store_current_study_group_id(group.id)
207+
@user.store_current_study_group_id(group.id)
208208
end
209209

210210
def set_embedding_options
@@ -231,7 +231,7 @@ def set_embedding_options
231231
end
232232

233233
def store_lti_session_data(parameters)
234-
@lti_parameters = LtiParameter.find_or_initialize_by(external_user: current_user,
234+
@lti_parameters = LtiParameter.find_or_initialize_by(external_user: @user,
235235
study_group_id: session[:study_group_id],
236236
exercise: @exercise)
237237

app/controllers/sessions_controller.rb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ class SessionsController < ApplicationController
44
include Lti
55

66
%i[require_oauth_parameters require_valid_consumer_key require_valid_oauth_signature require_unique_oauth_nonce
7-
require_valid_launch_presentation_return_url require_valid_lis_outcome_service_url set_current_user require_valid_exercise_token
7+
require_valid_launch_presentation_return_url require_valid_lis_outcome_service_url set_user require_valid_exercise_token
88
set_study_group_membership set_embedding_options].each do |method_name|
99
before_action(method_name, only: :create_through_lti)
1010
end
@@ -32,7 +32,7 @@ def create_through_lti
3232
redirect_to(new_exercise_programming_group_path(@exercise))
3333
else
3434
redirect_to(implement_exercise_path(@exercise),
35-
notice: t("sessions.create_through_lti.session_#{lti_outcome_service?(@exercise, current_user) ? 'with' : 'without'}_outcome",
35+
notice: t("sessions.create_through_lti.session_#{lti_outcome_service?(@exercise, @user) ? 'with' : 'without'}_outcome",
3636
consumer: @consumer))
3737
end
3838
end
@@ -84,7 +84,7 @@ def redirect_to_survey
8484
# It gives a bonus point to users who opened the survey
8585
begin
8686
lti_parameters = params.slice(*Lti::SESSION_PARAMETERS).permit!.to_h
87-
provider = build_tool_provider(consumer: current_user.consumer, parameters: lti_parameters)
87+
provider = build_tool_provider(consumer: @user.consumer, parameters: lti_parameters)
8888
provider.post_replace_result!(1.0)
8989
rescue IMS::LTI::InvalidLTIConfigError, IMS::LTI::XMLParseError, Net::OpenTimeout, Net::ReadTimeout, Errno::ECONNREFUSED, Errno::ECONNRESET, SocketError, EOFError, OpenSSL::SSL::SSLError
9090
# We don't do anything here because it is only a bonus point and we want the users to do the survey
@@ -103,12 +103,12 @@ def redirect_to_survey
103103
newtest: 'Y', # force a new LimeSurvey session
104104
xi_platform: 'openhpi' # pass a platform identifier
105105
).tap do |qp|
106-
if current_user
106+
if @user
107107
# add a user pseudo ID if applicable
108-
qp[:xi_pseudo_id] = Digest::SHA256.hexdigest(current_user.external_id)
109-
qp[:co_study_group_id] = current_user.current_study_group_id
110-
qp[:co_rfcs] = current_user.request_for_comments.includes(:submission).where(submission: {study_group_id: current_user.current_study_group_id}).size.to_s
111-
qp[:co_comments] = current_user.comments.includes(:submission).where(submission: {study_group_id: current_user.current_study_group_id}).size.to_s
108+
qp[:xi_pseudo_id] = Digest::SHA256.hexdigest(@user.external_id)
109+
qp[:co_study_group_id] = @user.current_study_group_id
110+
qp[:co_rfcs] = @user.request_for_comments.includes(:submission).where(submission: {study_group_id: @user.current_study_group_id}).size.to_s
111+
qp[:co_comments] = @user.comments.includes(:submission).where(submission: {study_group_id: @user.current_study_group_id}).size.to_s
112112
end
113113
end
114114

spec/concerns/lti_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ class Controller < AnonymousController
272272
let(:parameters) { ActionController::Parameters.new({}) }
273273

274274
it 'stores data in the session' do
275-
controller.instance_variable_set(:@current_user, create(:external_user))
275+
controller.instance_variable_set(:@user, create(:external_user))
276276
controller.instance_variable_set(:@exercise, create(:fibonacci))
277277
expect(controller.session).to receive(:[]=).with(:external_user_id, anything)
278278
expect(controller.session).to receive(:[]=).with(:pair_programming, anything)
@@ -281,7 +281,7 @@ class Controller < AnonymousController
281281

282282
it 'creates an LtiParameter Object' do
283283
expect do
284-
controller.instance_variable_set(:@current_user, create(:external_user))
284+
controller.instance_variable_set(:@user, create(:external_user))
285285
controller.instance_variable_set(:@exercise, create(:fibonacci))
286286
controller.send(:store_lti_session_data, parameters)
287287
end.to change(LtiParameter, :count).by(1)

spec/controllers/sessions_controller_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,9 @@
124124

125125
before { allow_any_instance_of(IMS::LTI::ToolProvider).to receive(:valid_request?).and_return(true) }
126126

127-
it 'assigns the current user' do
127+
it 'assigns the current user as @user' do
128128
perform_request
129-
expect(assigns(:current_user)).to be_an(ExternalUser)
129+
expect(assigns(:user)).to be_an(ExternalUser)
130130
expect(session[:external_user_id]).to eq(user.id)
131131
end
132132

0 commit comments

Comments
 (0)