instructure / lti_originality_report_example

2 stars 7 forks source link

Problem enabling tool in Canvas #68

Closed nailThrasher closed 2 years ago

nailThrasher commented 2 years ago

Hello! I have a Bitnami VM with Canvas LMS and i followed the instrutions in README.md file, however i wasn't able to enable the tool, so i was wondering if there was something else to be considered when using this tool? P.S. Under debug i encountered that ims-lti library creates OAuth2 api client (so login\password cretentials are ignored) - is this the right way to go, because LTI 2.0 seem to work with OAuth1, not 2.

Production log: [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] Started PUT "/api/v1/accounts/2/tool_proxies/9" for 192.168.0.190 at 2022-03-21 15:15:50 +0000 [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] Redis (0.624ms) get settings_for_plugin4/sessions [127.0.0.1:6379] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] request throttling increment: [0,50.0,1647875750.514952,["client_identifier","user:10000000000001"],["count",0.0],["last_touched",null]] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] Redis (7.126ms) evalsha - [127.0.0.1:6379] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] Processing by Lti::ToolProxyController#update as JSON [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] Parameters: {"workflow_state"=>"active", "account_id"=>"2", "tool_proxy_id"=>"9"} [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] Redis (6.49ms) get pseudonym_session/1 [127.0.0.1:6379] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] SQL SQL (6.7ms) SELECT "pseudonyms"."id" AS t0_r0, "pseudonyms"."user_id" AS t0_r1, "pseudonyms"."account_id" AS t0_r2, "pseudonyms"."workflow_state" AS t0_r3, "pseudonyms"."unique_id" AS t0_r4, "pseudonyms"."crypted_password" AS t0_r5, "pseudonyms"."password_salt" AS t0_r6, "pseudonyms"."persistence_token" AS t0_r7, "pseudonyms"."single_access_token" AS t0_r8, "pseudonyms"."perishable_token" AS t0_r9, "pseudonyms"."login_count" AS t0_r10, "pseudonyms"."failed_login_count" AS t0_r11, "pseudonyms"."last_request_at" AS t0_r12, "pseudonyms"."last_login_at" AS t0_r13, "pseudonyms"."current_login_at" AS t0_r14, "pseudonyms"."last_login_ip" AS t0_r15, "pseudonyms"."current_login_ip" AS t0_r16, "pseudonyms"."reset_password_token" AS t0_r17, "pseudonyms"."position" AS t0_r18, "pseudonyms"."created_at" AS t0_r19, "pseudonyms"."updated_at" AS t0_r20, "pseudonyms"."password_auto_generated" AS t0_r21, "pseudonyms"."deleted_at" AS t0_r22, "pseudonyms"."sis_batch_id" AS t0_r23, "pseudonyms"."sis_user_id" AS t0_r24, "pseudonyms"."sis_ssha" AS t0_r25, "pseudonyms"."communication_channel_id" AS t0_r26, "pseudonyms"."sis_communication_channel_id" AS t0_r27, "pseudonyms"."stuck_sis_fields" AS t0_r28, "pseudonyms"."integration_id" AS t0_r29, "pseudonyms"."authentication_provider_id" AS t0_r30, "pseudonyms"."declared_user_type" AS t0_r31, "users"."id" AS t1_r0, "users"."name" AS t1_r1, "users"."sortable_name" AS t1_r2, "users"."workflow_state" AS t1_r3, "users"."time_zone" AS t1_r4, "users"."uuid" AS t1_r5, "users"."created_at" AS t1_r6, "users"."updated_at" AS t1_r7, "users"."avatar_image_url" AS t1_r8, "users"."avatar_image_source" AS t1_r9, "users"."avatar_image_updated_at" AS t1_r10, "users"."phone" AS t1_r11, "users"."school_name" AS t1_r12, "users"."school_position" AS t1_r13, "users"."short_name" AS t1_r14, "users"."deleted_at" AS t1_r15, "users"."show_user_services" AS t1_r16, "users"."page_views_count" AS t1_r17, "users"."reminder_time_for_due_dates" AS t1_r18, "users"."reminder_time_for_grading" AS t1_r19, "users"."storage_quota" AS t1_r20, "users"."visible_inbox_types" AS t1_r21, "users"."last_user_note" AS t1_r22, "users"."subscribe_to_emails" AS t1_r23, "users"."features_used" AS t1_r24, "users"."preferences" AS t1_r25, "users"."avatar_state" AS t1_r26, "users"."locale" AS t1_r27, "users"."browser_locale" AS t1_r28, "users"."unread_conversations_count" AS t1_r29, "users"."stuck_sis_fields" AS t1_r30, "users"."public" AS t1_r31, "users"."otp_secret_key_enc" AS t1_r32, "users"."otp_secret_key_salt" AS t1_r33, "users"."otp_communication_channel_id" AS t1_r34, "users"."initial_enrollment_type" AS t1_r35, "users"."crocodoc_id" AS t1_r36, "users"."last_logged_out" AS t1_r37, "users"."lti_context_id" AS t1_r38, "users"."turnitin_id" AS t1_r39, "users"."lti_id" AS t1_r40, "users"."pronouns" AS t1_r41, "users"."root_account_ids" AS t1_r42, "users"."merged_into_user_id" AS t1_r43 FROM "public"."pseudonyms" LEFT OUTER JOIN "public"."users" ON "users"."id" = "pseudonyms"."user_id" WHERE "pseudonyms"."id" = 1 LIMIT 1 [production:1 primary] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] Redis (7.012ms) set pseudonym_session/1 [127.0.0.1:6379] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] [AUTH] Approved Authlogic session [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] [AUTH] inital load: pseud -> 1, user -> 1 [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] [AUTH] final user: 1 [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] SQL Account Load (1.0ms) SELECT "accounts". FROM "public"."accounts" WHERE (accounts.workflow_state<>'deleted') AND "accounts"."id" = 2 ORDER BY "accounts"."id" ASC LIMIT 1 [production:1 secondary] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] SQL AccountUser Load (5.2ms) SELECT "account_users". FROM "public"."account_users" WHERE "account_users"."account_id" = 2 AND "account_users"."workflow_state" != 'deleted' AND "account_users"."user_id" = 1 ORDER BY "account_users"."id" ASC LIMIT 1 [production:1 secondary] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] SQL Lti::ToolProxy Load (5.1ms) SELECT "lti_tool_proxies". FROM "public"."lti_tool_proxies" WHERE "lti_tool_proxies"."id" = 9 LIMIT 1 [production:1 primary] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] Redis (5.592ms) get permissions/accounts/2-20220302034317142478/users/1-20220309020827523305/default/update [127.0.0.1:6379] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] in: ToolProxyController::update_workflow_state, tool_id: 9, old state: disabled, new state: active [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] SQL (0.2ms) BEGIN [production:1 primary] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] SQL Lti::ToolProxy Update (2.9ms) UPDATE "public"."lti_tool_proxies" SET "workflow_state" = 'active', "updated_at" = '2022-03-21 15:15:50.611075' WHERE "lti_tool_proxies"."id" = 9 [production:1 primary] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] SQL Lti::ProductFamily Load (5.5ms) SELECT "lti_product_families". FROM "public"."lti_product_families" WHERE "lti_product_families"."id" = 1 LIMIT 1 [production:1 primary] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] in: PlagiarismSubscriptionsHelper::create_subscription, tool_proxy_id: 9 [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] Redis (6.685ms) get account/2 [127.0.0.1:6379] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] in: LiveEventsSubscriptionService::create_tool_proxy_subscription, tool_proxy_id: 9, subscription: {"SystemEventTypes"=>["submission_created", "plagiarism_resubmit", "submission_updated", "assignment_updated", "assignment_created"], "UserEventTypes"=>["submission_created", "plagiarism_resubmit", "submission_updated", "assignment_updated", "assignment_created"], "ContextType"=>"root_account", "ContextId"=>"2axcZDGqORs5DNqDI7KJbWpG5qeESpD76RZ8OsKr", "Format"=>"live-event", "TransportType"=>"https", "TransportMetadata"=>{"Url"=>"http://localhost:3000/event/submission"}, "AssociatedIntegrationId"=>"5c7352e2-3e67-4ac0-bbe0-d9f86f74c53c"} [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] Redis (4.557ms) get developer_key/10000000000001 [127.0.0.1:6379] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] Redis (4.557ms) get service:timeouts:live-events-subscription-service-session:error_count [127.0.0.1:6379] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] SQL (0.3ms) ROLLBACK [production:1 primary] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] SQL Account Load (7.4ms) SELECT "accounts". FROM "public"."accounts" WHERE "accounts"."id" = 1 ORDER BY "accounts"."id" ASC LIMIT 1 [production:1 primary] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] SQL (5.0ms) BEGIN [production:1 primary] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] SQL User Load (0.7ms) SELECT "users". FROM "public"."users" WHERE "users"."id" = 1 LIMIT 1 [production:1 primary] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] Redis (5.047ms) get user_email/10000000000001 [127.0.0.1:6379] [4ec59cfdd1815f80cbe259472b9576fb f17b48d4-42d8-4cdc-80c1-d2fcd65f66df] SQL ErrorReport Create (1.5ms) INSERT INTO "public"."error_reports" ("backtrace", "message", "user_id", "created_at", "updated_at", "email", "user_agent", "request_method", "request_context_id", "account_id", "data", "category") VALUES ('/opt/bitnami/ruby/lib/ruby/2.7.0/net/http.rb:1650:in `addr_port''

production.log

Ardena commented 2 years ago

You left out the actual stack trace here, so I'm not sure what actually failed. You can just barely see the start of it at the very end.

nailThrasher commented 2 years ago

@Ardena Hi! I've cleared the log file, reloaded VM, then reproduced all steps required to registrer the tool - the log is in production.log file attached to initial message.

Ardena commented 2 years ago

Our team has run into this a couple of times too. When you install a plagiarism tool in Canvas, it automatically tries to create a live event subscription for that tool, but if you don't have a live events infrastructure set up, it will error when it tries to contact the live events system. For a quick work around, comment out app/models/lti/tool_proxy.rb:31 (after_save :manage_subscription) before you try to register the LTI 2 tool.

I'll see if I can set something up to allow this to be more easily bypassed unless you want it turned on.

nailThrasher commented 2 years ago

@Ardena wow, thanks for the tip. Now, it seems like since bitnami canvas does not include data service key it is pretty much useless in terms of using this tool because tool itself is only working through webhooks. Fun.

Ardena commented 2 years ago

Yeah, I was thinking about that too, since the live events infrastructure isn't open source. It does make it very difficult. Sorry :(