7: 2021-08-30 (月) 15:09:35 iseki |
現: 2023-04-24 (月) 00:29:00 iseki |
- | ** Hack for Moodle LTI [#w4c22429] | + | ** Hack for [[Moodle]] - [[LTI]] [#w4c22429] |
- | *** [[JupyterHub]] の Swapner での受け取り処理 [#vd91a1e1] | + | - [[Moodle+JupyterHub]] |
| + | - [[Moodle]], [[JupyterHub]] |
| + | - [[LTI]] |
| + | #br |
| + | |
| + | *** iframe を使用すると,chrome, edgeでは 405 : Method Not Allowed が返される件 [#id5b6e70] |
| + | - SameSite=Lax であるため,iframe 使用時は Moodleのホストと JupyterHub のホストが異なる場合は,cookie が送信されない. |
| + | #br |
| + | |
| + | **** JupyterHub の log [#y1916cbf] |
| + | - 返されたステータス |
| + | -- 302 POST |
| + | -- 302 GET (通常はここで 200が返る) |
| + | -- 302 GET |
| + | -- 405 GET |
| + | #br |
| + | |
| + | **** ソースコード トレース (数字はトレース順) [#oaf0a04f] |
| + | - ltiauthenticator/lti11/auth.py |
| + | -- 0. authenticate() |
| + | |
| + | - jupyterhub/handlers/base.py |
| + | -- 4. login_user() self.current_user -> None |
| + | -- 5. self.get_current_user_cookie() |
| + | -- 6. self._user_for_cookie() cookie_id-> None cookie_name=jupyterhub-hub-login |
| + | |
| + | - tornado/web.py |
| + | -- 1. _unimplemented_method() HTTPError(405) を返す |
| + | -- 2. wrapper() で 302 が返る.通常なら 200 が返るはず. |
| + | -- 3. self.current_user -> None |
| + | -- 7. get_secure_cookie() ''結局,jupyterhub-hub-login のクッキーありません.(Webブラウザから送信されていません)'' |
| + | #br |
| + | |
| + | **** Moodle ホスト上で,JupyterHub へ接続するための feserver を動かしてみる. [#a6a32ef6] |
| + | - cookie が送信されない理由について推測が正しいならば,MoodleとJupyterHubを同じホストで動かせば(若しくは動いているように見せれば),iframeは問題なく使用できるはず. |
| + | - feserver のSSLのサーバ証明書で手こずったが,Apacheで使用している証明書使用したところ上手く繋がった. |
| + | - chrome, edge でも iframe の埋め込みが問題なく動作. |
| + | - でも問題点を確認したのみで,解決にはなっていない. |
| + | |
| + | - ''問題点: Moodleと JupyterHubを別のホストで動かすと,iframe を使用した場合,chrome, edge から cookieが送信されない.''(その内 FireFoxもだよね) |
| + | #br |
| + | **** 解決方法 [#f974d825] |
| + | |
| + | c.JupyterHub.tornado_settings = { |
| + | "headers":{ "Content-Security-Policy": "frame-ancestors 'self' https://www.nsl.tuis.ac.jp" }, |
| + | "cookie_options": {"SameSite": "None", "Secure": True } |
| + | } |
| + | |
| + | c.Spawner.args = ['--NotebookApp.tornado_settings={ |
| + | "headers":{"Content-Security-Policy": "frame-ancestors \'self\' https://www.nsl.tuis.ac.jp" }, |
| + | "cookie_options": { "SameSite": "None", "Secure": True } |
| + | }' |
| + | ] |
| + | |
| + | **** 参考:DB [#vf633496] |
| + | MariaDB [moodle_db]> show columns from mdl_lti; |
| + | +-------------------------------+--------------+------+-----+---------+----------------+ |
| + | | Field | Type | Null | Key | Default | Extra | |
| + | +-------------------------------+--------------+------+-----+---------+----------------+ |
| + | | id | bigint(10) | NO | PRI | NULL | auto_increment | |
| + | | course | bigint(10) | NO | MUL | 0 | | |
| + | | name | varchar(255) | NO | | | | |
| + | | intro | longtext | YES | | NULL | | |
| + | | introformat | smallint(4) | YES | | 0 | | |
| + | | timecreated | bigint(10) | NO | | 0 | | |
| + | | timemodified | bigint(10) | NO | | 0 | | |
| + | | typeid | bigint(10) | YES | | NULL | | |
| + | | toolurl | longtext | NO | | NULL | | |
| + | | securetoolurl | longtext | YES | | NULL | | |
| + | | instructorchoicesendname | tinyint(1) | YES | | NULL | | |
| + | | instructorchoicesendemailaddr | tinyint(1) | YES | | NULL | | |
| + | | instructorchoiceallowroster | tinyint(1) | YES | | NULL | | |
| + | | instructorchoiceallowsetting | tinyint(1) | YES | | NULL | | |
| + | | instructorcustomparameters | longtext | YES | | NULL | | |
| + | | instructorchoiceacceptgrades | tinyint(1) | YES | | NULL | | |
| + | | grade | bigint(10) | NO | | 100 | | |
| + | | launchcontainer | tinyint(2) | NO | | 1 | | |
| + | | resourcekey | varchar(255) | YES | | NULL | | |
| + | | password | varchar(255) | YES | | NULL | | |
| + | | debuglaunch | tinyint(1) | NO | | 0 | | |
| + | | showtitlelaunch | tinyint(1) | NO | | 0 | | |
| + | | showdescriptionlaunch | tinyint(1) | NO | | 0 | | |
| + | | servicesalt | varchar(40) | YES | | NULL | | |
| + | | icon | longtext | YES | | NULL | | |
| + | | secureicon | longtext | YES | | NULL | | |
| + | +-------------------------------+--------------+------+-----+---------+----------------+ |
| + | |
| + | <option value="1" selected="">デフォルト</option> |
| + | <option value="2">埋め込み</option> |
| + | <option value="3">埋め込み (ブロックなし)</option> |
| + | <option value="5">既存のウィンドウ</option> |
| + | <option value="4">新しいウィンドウ</option> |
| + | |
| + | *** [[JupyterHub]] の Swapner での LTI 情報の受け取り処理 [#vd91a1e1] |
| - jupyterhub_config.py | | - jupyterhub_config.py |
| import os | | import os |
| - Moodleの外部ツールの設定で,「一般」の「さらに表示する」でカスタムパラメータを指定すると,JupyterHub に任意のパラメータを送れる. | | - Moodleの外部ツールの設定で,「一般」の「さらに表示する」でカスタムパラメータを指定すると,JupyterHub に任意のパラメータを送れる. |
| -- ''XXX=ZZZ'' と入力すると,上記方法で ''{'costom_xxx': 'ZZZ'}'' として受け取れる(キーは小文字化される). | | -- ''XXX=ZZZ'' と入力すると,上記方法で ''{'costom_xxx': 'ZZZ'}'' として受け取れる(キーは小文字化される). |
- | -- # - などの特殊文字は ''_'' になる. | + | -- # - などの特殊文字は ''_'' になる.''snake_case'' と言うらしい. |
| | | |
| | | |
| 'launch_presentation_return_url': 'https://el.mml.tuis.ac.jp/moodle/mod/lti/return.php?course=98&launch_container=4&instanceid=11&sesskey=6wL3CYeL7Z' | | 'launch_presentation_return_url': 'https://el.mml.tuis.ac.jp/moodle/mod/lti/return.php?course=98&launch_container=4&instanceid=11&sesskey=6wL3CYeL7Z' |
| } | | } |
| + | #br |
| + | ** Moodle DB [#sab902e6] |
| + | *** LTIの typeid (External Tool 情報) を格納するテーブル [#d76ec06b] |
| + | MariaDB [moodle_db]> select id, name,baseurl,tooldomain,state,course,clientid from mdl_lti_types ; |
| + | +----+------------------+----------------------------------------------------+-----------------------------+-------+--------+-----------------+ |
| + | | id | name | baseurl | tooldomain | state | course | clientid | |
| + | +----+------------------+----------------------------------------------------+-----------------------------+-------+--------+-----------------+ |
| + | | 3 | antares:443 | https://antares.nsl.tuis.ac.jp/hub/lti/launch | antares.nsl.tuis.ac.jp | 1 | 1 | Oh9MyHxutcfbvhA | |
| + | | 4 | GITLAB:FE 8100 | https://gitlab.nsl.tuis.ac.jp:8100/hub/lti/launch | gitlab.nsl.tuis.ac.jp:8100 | 1 | 1 | NULL | |
| + | | 10 | procyon:443 | https://jupyterhub.nsl.tuis.ac.jp/hub/lti/launch | jupyterhub.nsl.tuis.ac.jp | 1 | 1 | NULL | |
| + | | 12 | JupyterHub00:443 | https://jupyterhub00.nsl.tuis.ac.jp/hub/lti/launch | jupyterhub00.nsl.tuis.ac.jp | 1 | 1 | NULL | |
| + | | 13 | JupyterHub01:443 | https://jupyterhub01.nsl.tuis.ac.jp/hub/lti/launch | jupyterhub01.nsl.tuis.ac.jp | 1 | 1 | NULL | |
| + | | 14 | JupyterHub02:443 | https://jupyterhub02.nsl.tuis.ac.jp/hub/lti/launch | jupyterhub02.nsl.tuis.ac.jp | 1 | 1 | NULL | |
| + | | 15 | JupyterHub03:443 | https://jupyterhub03.nsl.tuis.ac.jp/hub/lti/launch | jupyterhub03.nsl.tuis.ac.jp | 1 | 1 | NULL | |
| + | | 19 | antares:8000 | https://antares.nsl.tuis.ac.jp:8000/hub/lti/launch | antares.nsl.tuis.ac.jp:8000 | 1 | 1 | NULL | |
| + | | 20 | aldebaran:443 | https://aldebaran.nsl.tuis.ac.jp/hub/lti/launch | aldebaran.nsl.tuis.ac.jp | 1 | 1 | NULL | |
| + | +----+------------------+----------------------------------------------------+-----------------------------+-------+--------+-----------------+ |
| + | - tooldomain は baseurl から抽出したようだ. |
| + | - clientid ??? |
| #br | | #br |