From f4c01879bffa1387e9478a5654e04d3efeaad95c Mon Sep 17 00:00:00 2001 From: Tom Staubitz Date: Tue, 27 Dec 2016 00:13:41 +0100 Subject: [PATCH] preparations to replace session with lti_parameters object --- app/controllers/application_controller.rb | 1 + app/controllers/concerns/lti.rb | 14 +++++++++++--- app/controllers/exercises_controller.rb | 1 + app/views/exercises/_editor_output.html.slim | 1 + ....rb => 20161214144837_create_lti_parameters.rb} | 6 +++--- ...605_remove_lti_return_url_from_lti_parameter.rb | 5 ----- ...16131239_add_lti_parameters_to_lti_parameter.rb | 5 ----- db/schema.rb | 9 --------- spec/concerns/lti_spec.rb | 1 + spec/controllers/application_controller_spec.rb | 1 + spec/controllers/sessions_controller_spec.rb | 2 ++ spec/factories/execution_environment.rb | 4 ++-- 12 files changed, 23 insertions(+), 27 deletions(-) rename db/migrate/{20161214144832_create_lti_parameters.rb => 20161214144837_create_lti_parameters.rb} (64%) delete mode 100644 db/migrate/20161216130605_remove_lti_return_url_from_lti_parameter.rb delete mode 100644 db/migrate/20161216131239_add_lti_parameters_to_lti_parameter.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index b1a4323f..0c302db5 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -10,6 +10,7 @@ class ApplicationController < ActionController::Base rescue_from Pundit::NotAuthorizedError, with: :render_not_authorized def current_user + #Todo replace session with lti_parameter ::NewRelic::Agent.add_custom_parameters({ external_user_id: session[:external_user_id], session_user_id: session[:user_id] }) @current_user ||= ExternalUser.find_by(id: session[:external_user_id]) || login_from_session || login_from_other_sources end diff --git a/app/controllers/concerns/lti.rb b/app/controllers/concerns/lti.rb index 5287d94c..92fc490f 100644 --- a/app/controllers/concerns/lti.rb +++ b/app/controllers/concerns/lti.rb @@ -44,6 +44,7 @@ module Lti private :external_user_name def lti_outcome_service? + #Todo replace session with lti_parameter session[:lti_parameters].try(:has_key?, 'lis_outcome_service_url') end private :lti_outcome_service? @@ -97,6 +98,7 @@ module Lti def send_score(score) ::NewRelic::Agent.add_custom_parameters({ score: score, session: session }) fail(Error, "Score #{score} must be between 0 and #{MAXIMUM_SCORE}!") unless (0..MAXIMUM_SCORE).include?(score) + #Todo replace session with lti_parameter provider = build_tool_provider(consumer: Consumer.find_by(id: session[:consumer_id]), parameters: session[:lti_parameters]) if provider.nil? {status: 'error'} @@ -116,9 +118,15 @@ module Lti private :set_current_user def store_lti_session_data(options = {}) - session[:consumer_id] = options[:consumer].id - session[:external_user_id] = @current_user.id - session[:lti_parameters] = options[:parameters].slice(*SESSION_PARAMETERS) + exercise = Exercise.where(token: options[:parameters][:custom_token]).first + exercise_id = exercise.id unless exercise.nil? + + lti_parameters = LtiParameter.find_or_create_by(consumers_id: options[:consumer].id, + external_user_id: options[:parameters][:user_id].to_s, + exercises_id: exercise_id) + + lti_parameters.lti_parameters = options[:parameters].slice(*SESSION_PARAMETERS).to_json + lti_parameters.save! end private :store_lti_session_data diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 31e970f3..9668e430 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -157,6 +157,7 @@ class ExercisesController < ApplicationController end def redirect_to_lti_return_path + #Todo replace session with lti_parameter path = lti_return_path(consumer_id: session[:consumer_id], submission_id: @submission.id, url: consumer_return_url(build_tool_provider(consumer: Consumer.find_by(id: session[:consumer_id]), parameters: session[:lti_parameters]))) respond_to do |format| format.html { redirect_to(path) } diff --git a/app/views/exercises/_editor_output.html.slim b/app/views/exercises/_editor_output.html.slim index ab09adac..645d1a1d 100644 --- a/app/views/exercises/_editor_output.html.slim +++ b/app/views/exercises/_editor_output.html.slim @@ -27,6 +27,7 @@ div id='output_sidebar_uncollapsed' class='hidden col-sm-12 enforce-bottom-margi .progress-bar role='progressbar' br + / #Todo replace session with lti_parameter - if session[:lti_parameters].try(:has_key?, 'lis_outcome_service_url') p.text-center = render('editor_button', classes: 'btn-lg btn-success', data: {:'data-url' => submit_exercise_path(@exercise)}, icon: 'fa fa-send', id: 'submit', label: t('exercises.editor.submit')) - else diff --git a/db/migrate/20161214144832_create_lti_parameters.rb b/db/migrate/20161214144837_create_lti_parameters.rb similarity index 64% rename from db/migrate/20161214144832_create_lti_parameters.rb rename to db/migrate/20161214144837_create_lti_parameters.rb index 1541c368..890484f4 100644 --- a/db/migrate/20161214144832_create_lti_parameters.rb +++ b/db/migrate/20161214144837_create_lti_parameters.rb @@ -2,9 +2,9 @@ class CreateLtiParameters < ActiveRecord::Migration def change create_table :lti_parameters do |t| t.string :external_user_id - t.string :consumer_id - t.string :exercise_id - t.text :lti_return_url + t.belongs_to :consumers + t.belongs_to :exercises + t.column :lti_parameters, :jsonb t.timestamps end diff --git a/db/migrate/20161216130605_remove_lti_return_url_from_lti_parameter.rb b/db/migrate/20161216130605_remove_lti_return_url_from_lti_parameter.rb deleted file mode 100644 index 96efc4cc..00000000 --- a/db/migrate/20161216130605_remove_lti_return_url_from_lti_parameter.rb +++ /dev/null @@ -1,5 +0,0 @@ -class RemoveLtiReturnUrlFromLtiParameter < ActiveRecord::Migration - def change - remove_column :lti_parameters, :lti_return_url, :text - end -end diff --git a/db/migrate/20161216131239_add_lti_parameters_to_lti_parameter.rb b/db/migrate/20161216131239_add_lti_parameters_to_lti_parameter.rb deleted file mode 100644 index 73a4c4c0..00000000 --- a/db/migrate/20161216131239_add_lti_parameters_to_lti_parameter.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddLtiParametersToLtiParameter < ActiveRecord::Migration - def change - add_column :lti_parameters, :lti_parameters, :json - end -end diff --git a/db/schema.rb b/db/schema.rb index a61a1160..b7bef30a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -182,15 +182,6 @@ ActiveRecord::Schema.define(version: 20161216131239) do add_index "internal_users", ["remember_me_token"], name: "index_internal_users_on_remember_me_token", using: :btree add_index "internal_users", ["reset_password_token"], name: "index_internal_users_on_reset_password_token", using: :btree - create_table "lti_parameters", force: true do |t| - t.string "external_user_id" - t.string "consumer_id" - t.string "exercise_id" - t.datetime "created_at" - t.datetime "updated_at" - t.json "lti_parameters" - end - create_table "request_for_comments", force: true do |t| t.integer "user_id", null: false t.integer "exercise_id", null: false diff --git a/spec/concerns/lti_spec.rb b/spec/concerns/lti_spec.rb index c4ff350a..a1448661 100644 --- a/spec/concerns/lti_spec.rb +++ b/spec/concerns/lti_spec.rb @@ -116,6 +116,7 @@ describe Lti do context 'with an valid score' do context 'with a tool provider' do before(:each) do + #Todo replace session with lti_parameter controller.session[:consumer_id] = consumer.id controller.session[:lti_parameters] = {} end diff --git a/spec/controllers/application_controller_spec.rb b/spec/controllers/application_controller_spec.rb index 0ad4b20d..9062008f 100644 --- a/spec/controllers/application_controller_spec.rb +++ b/spec/controllers/application_controller_spec.rb @@ -4,6 +4,7 @@ describe ApplicationController do describe '#current_user' do context 'with an external user' do let(:external_user) { FactoryGirl.create(:external_user) } + #Todo replace session with lti_parameter before(:each) { session[:external_user_id] = external_user.id } it 'returns the external user' do diff --git a/spec/controllers/sessions_controller_spec.rb b/spec/controllers/sessions_controller_spec.rb index aa76dcca..f56bd708 100644 --- a/spec/controllers/sessions_controller_spec.rb +++ b/spec/controllers/sessions_controller_spec.rb @@ -78,6 +78,7 @@ describe SessionsController do it 'assigns the current user' do request expect(assigns(:current_user)).to be_an(ExternalUser) + #Todo replace session with lti_parameter expect(session[:external_user_id]).to eq(user.id) end @@ -174,6 +175,7 @@ describe SessionsController do let(:submission) { FactoryGirl.create(:submission, exercise: FactoryGirl.create(:dummy)) } before(:each) do + #Todo replace session with lti_parameter session[:consumer_id] = consumer.id session[:lti_parameters] = {} end diff --git a/spec/factories/execution_environment.rb b/spec/factories/execution_environment.rb index a58e879a..051d9de6 100644 --- a/spec/factories/execution_environment.rb +++ b/spec/factories/execution_environment.rb @@ -32,7 +32,7 @@ FactoryGirl.define do factory :java, class: ExecutionEnvironment do created_by_teacher default_memory_limit - docker_image 'hklement/ubuntu-java:latest' + docker_image 'openhpi/co_execenv_java:latest' association :file_type, factory: :dot_java help name 'Java 8' @@ -78,7 +78,7 @@ FactoryGirl.define do factory :python, class: ExecutionEnvironment do created_by_teacher default_memory_limit - docker_image 'hklement/ubuntu-python:latest' + docker_image 'openhpi/co_execenv_python:latest' association :file_type, factory: :dot_py help name 'Python 3.4'