Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

複数LMSのサポート #180

Closed
7 tasks done
kou029w opened this issue Feb 1, 2021 · 7 comments · Fixed by #192
Closed
7 tasks done

複数LMSのサポート #180

kou029w opened this issue Feb 1, 2021 · 7 comments · Fixed by #192
Assignees
Labels
enhancement 新機能実装またはリクエスト
Projects

Comments

@kou029w
Copy link

kou029w commented Feb 1, 2021

どのような問題を解決する機能追加でしょうか?
複数のLMSのホストで同じシステム (同じCHIBI-CHiLOホスト)を使うことができない。
作ったブックの共有等が行うことが難しいので解決したい。

あなたが望む解決方法について書いてください
(チェックボックスはいい加減)

  • RDBにLtiConsumer (lti_consumer) テーブルスキーマの追加と、Seeding時に lti_consumer.id (= OAuth Consumer key), lti_consumer.secret (= OAuth Consumer secret) のUpsert
  • LtiContext, LtiResourceLink, UserにそれぞれOAuth Consumerへの参照を含める
    • それぞれLtiConsumerへのリレーションをもつ (必須)
    • @id を外し、代わりに @@id([id, ltiConsumerId]) を追加し、従属化
    • ltiUserId@unique を外し、代わりに @@unique([ltiUserId, ltiConsumerId]) を追加
  • /api/v2/lti/resource_link/{lti_resource_link_id} の廃止
    • /api/v2/lti/{lti_consumer_id}/resource_link/{lti_resource_link_id} を実装
  • /api/v2/session の実装・改修
    • LtiResourceLinkPropsにconsumerIdを含める
  • /api/v2/lti/launch の実装・改修
    • OAuth Consumer keyが空""ならば無効
    • OAuth Consumer keyでのlookup
  • NEXT_PUBLIC_LMS_URL をやめる
    • 代わりに LtiLaunchBody.launch_presentation_return_url を使う
    • vercel のデプロイボタンから取り除く
    • docker-compose.yml から取り除く
    • READMEから取り除く
    • .env.sample から取り除く
  • OAuth Consumer 追加手順を記載
@kou029w kou029w added the enhancement 新機能実装またはリクエスト label Feb 1, 2021
@kou029w kou029w added this to To Do (ターゲット未設定) in CHiBi-CHiLO via automation Feb 1, 2021
@kou029w kou029w moved this from To Do (ターゲット未設定) to OSS Alpha Release (~2021/02) in CHiBi-CHiLO Feb 1, 2021
@kou029w kou029w self-assigned this Feb 1, 2021
@kou029w
Copy link
Author

kou029w commented Feb 1, 2021

  • OAuth Consumer key, secretの組を2つ以上与えることができる実装
  • RDBにLtiConsumer (lti_consumer) テーブルスキーマの追加と、Seeding時に lti_consumer.key (= OAuth Consumer key), lti_consumer.secret (= OAuth Consumer secret) のUpsert
  • /api/v2/lti/launch の実装・改修

@kou029w kou029w closed this as completed Feb 1, 2021
CHiBi-CHiLO automation moved this from OSS Alpha Release (~2021/02) to Done Feb 1, 2021
@kou029w kou029w reopened this Feb 1, 2021
CHiBi-CHiLO automation moved this from Done to 現在進行中 Feb 1, 2021
@kou029w
Copy link
Author

kou029w commented Feb 1, 2021

間違えた…

@kou029w
Copy link
Author

kou029w commented Feb 1, 2021

マイグレーション周りへの考察:

マイグレーション実施時 (yarn --cwd server migrate 実行時) ltiConsumerId カラムが既存のテーブルには存在しないため失敗しそう。
どうやって対処すればいいんだろう? 無効値な定数でltiConsumerレコードを追加して参照させて、あとで yarn --cwd server prisma studio 等で手動でcreaterId, authorId を付け直してもらうとかかな…。

@kou029w
Copy link
Author

kou029w commented Feb 1, 2021

無効値な定数でltiConsumerレコードを追加

文字列 "" をidにして、かつ /api/v2/lti/launch で起動時に OAuth Consumer key が空 "" でないことを検証すればよいかな。

@kou029w
Copy link
Author

kou029w commented Feb 2, 2021

実装方針としてはこれでよさそうな気がするのでやっていく。

@kou029w
Copy link
Author

kou029w commented Feb 2, 2021

NOTE: マイグレーションが機能することを確認。

git checkout feat-support-multiple-lms
docker-compose rm -sf db && docker-compose up -d db && sleep 5 && yarn --cwd server migrate
git checkout master
docker-compose rm -sf db
docker-compose up -d db moodle
sleep 5
yarn --cwd server migrate
yarn --cwd server build:prisma
yarn --cwd server seed
git checkout feat-support-multiple-lms
yarn dev

いずれも問題無くパス。
LMSのリンク(とその更新)も機能している様子。

残り:

  • /api/v2/lti/launch の実装・改修
    • OAuth Consumer keyが空""ならば無効
    • OAuth Consumer keyでのlookup
  • NEXT_PUBLIC_LMS_URL をやめる
    • 代わりに LtiLaunchBody.launch_presentation_return_url を使う
    • vercel のデプロイボタンから取り除く
    • docker-compose.yml から取り除く
    • READMEから取り除く
    • .env.sample から取り除く
  • OAuth Consumer 追加手順を記載

@kou029w
Copy link
Author

kou029w commented Feb 2, 2021

NOTE: 本番環境での移行方法

マイグレーション後、次のようなSQLを実行してください。

例:
OAuth Consumer key: {key}
OAuth Consumer secret: {secret}
の場合

-- Insert empty `lti_consumer`
INSERT INTO "lti_consumer" VALUES ('{key}', '{secret}');

-- Set `consumer_id` and `lti_consumer_id`
UPDATE "lti_context" SET consumer_id = '{key}';
UPDATE "lti_resource_link" SET consumer_id = '{key}';
UPDATE "users" SET lti_consumer_id = '{key}';

CHiBi-CHiLO automation moved this from 現在進行中 to Done Feb 4, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement 新機能実装またはリクエスト
Projects
No open projects
CHiBi-CHiLO
  
Done
Development

Successfully merging a pull request may close this issue.

1 participant