Open toshirot opened 5 months ago
各テーブルの生成タイミングは rooms 、users 、room_users テーブルすべて、「秘密のフレーズ」(ローカルへのみ保存・サーバーへは送らない)入力時で良いかな 別途、現在同様のデフォルト用も必要
v0.1.030現在の単一ルーム制を複数ルーム制に変更する #12 https://github.com/toshirot/mychat/issues/12
手順
main
アリス: ブラウザで mychat へアクセスする
ブラウザ: set|get uid to cookie uid|uid=crypto.createHash('sha512').update(str).digest('hex')
DOMContentLoaded
ブラウザ: 「名前」入力フィールドを表示する
function inputBox
アリス: 「名前」を入力する user_name
ブラウザ: 「名前」またはDEFAULT_NAME→set to cookie
アリス: <設定/ログイン を選ぶ>
function regBox_1
ブラウザ: 「相手と共有する"秘密のフレーズ"を入力してください」
アリス: 秘密の"秘密のフレーズ"を入力する
アリス: 「デバイスだけに登録」ボタンを押す(※サーバーには送りません)
ブラウザ: LocalStorageへ encrypt("秘密のフレーズ") を保存する( ※サーバーからはcookie と違い読めない 検証: #2 (comment) )
input_my_pass.value = input_my_pass.value||getLocalStorage('mypass')||'';
setLocalStorage('mypass', input_my_pass.value);
function conn2Server
ブラウザ: システムへ送信 (user_id, user_name)
function conn2Client
システム: DBが無ければ生成する
システム: rooms, users, msgs 各テーブルが無ければroom_idを作り、テーブル生成する #12
テーブルは、TABLE_ROOMS、TABLE_USERS、TABLE_MSGS
システム: room_id で生成した chat url をブラウザへ送る
ブラウザ: room_id で生成した chat url をアリスへ表示する
main + etc...
アリス: chat urlをクリックしてルームへ入る
ブラウザ: チャット画面を表示する
アリス: 直接相手へ口頭あるいはemailなど当該chatとは別の手段で"秘密のフレーズ"とroom_idを伝える
※ "秘密のフレーズ"とroom_idは長いと覚えられないので、メモしておくこと
main
ボブ: ブラウザで mychat へアクセスする
ブラウザ: set|get uid to cookie uid|uid=crypto.createHash('sha512').update(str).digest('hex')
DOMContentLoaded
ブラウザ: 「名前」入力フィールドを表示する
ブラウザ: 「room_id」入力フィールドを表示する
function inputBox
ボブ: 「room_id」を入力する room_id
ブラウザ: →set to cookie
ボブ: 「名前」を入力する user_name
ブラウザ: 「名前」またはDEFAULT_NAME→set to cookie
ボブ: <設定/ログイン を選ぶ>
function regBox_2
ブラウザ: 「相手と共有する"秘密のフレーズ"入力してください」
ボブ:: 秘密の"秘密のフレーズを入力する
ボブ:: 「デバイスだけに登録」ボタンを押す(※サーバーには送りません)
ブラウザ: LocalStorageへ encrypt("秘密のフレーズ") を保存する( ※サーバーからはcookie と違い読めない 検証: #2 (comment) )
input_my_pass.value = input_my_pass.value||getLocalStorage('mypass')||'';
setLocalStorage('mypass', input_my_pass.value);
function conn2Server
ブラウザ: システムへ送信 (user_id, user_name)
function conn2Client
システム: DBが無ければ終了しボブへmsg
システム: rooms, users, msgs 各テーブルが無ければ どうする??
テーブルは、TABLE_ROOMS、TABLE_USERS、TABLE_MSGS
システム: room_id で生成した chat url をブラウザへ送る
ブラウザ: room_id で生成した chat url をボブへ表示する
main + etc...
アリス: chat urlをクリックしてルームへ入る
ブラウザ: チャット画面を表示する
チャット開始
・uid で認証しなければ chat url には入れない ・認証すれば、入ってチャットできる。 ・"秘密のフレーズ"が違えば読めない ・貴方と相手の「"秘密のフレーズ"は必ずチャット以外の手段で共有する」
・チャットはエンドツーエンドで暗号化され途中はシステム・サーバー側では読めない ・暗号化の"秘密のフレーズ"は、ローカルストレージに保存する ( ※サーバーからはcookie と違い読めない 検証: #2 (comment) )
シンプルになった^^
function regBox_1
ブラウザ: 「相手と共有する"秘密のフレーズ"を入力してください」
アリス: 秘密の"秘密のフレーズ"を入力する
これいらないんじゃないかな、表示や受け渡しなどができれば。 例えばこんな感じで。
function regBox_1
ブラウザ: 「相手と共有する"秘密のフレーズ"です。メモして相手に伝えてください。
※注意※このフレーズを忘れると会話を解読できなくなります」
アリス: 「OK」ボタンを押す(※サーバーには送りません)
**機能リクエストは問題に関連していますか?説明してください。 何が問題なのかを明確かつ簡潔に説明してください。
v0.1.030現在単一ルームなのを複数ルーム制に変更したい
**あなたが望む解決策を記述してください。 あなたが望むことを明確かつ簡潔に記述してください。
テーブルを追加・変更する
**あなたが検討した代替案を記述してください。 あなたが検討した代替案や機能について、明確かつ簡潔に説明してください。
現状のテーブルは CREATE TABLE IF NOT EXISTS ${TABLE_NAME} ( id INTEGER PRIMARY KEY, name VARCHAR(255), msg VARCHAR(200000), uid VARCHAR(128), created_at TIMESTAMP );
これを
CREATE TABLE IF NOT EXISTS room_users ( room_id INTEGER, user_uid VARCHAR(128), msg VARCHAR(200000), -- 追加 PRIMARY KEY (room_id, user_uid), FOREIGN KEY (room_id) REFERENCES rooms(id), FOREIGN KEY (user_uid) REFERENCES users(uid) );
などへ変更。
更に、下記のようなrooms 、users テーブルを追加する
CREATE TABLE IF NOT EXISTS rooms ( id INTEGER PRIMARY KEY, room_name VARCHAR(255), created_at TIMESTAMP );
CREATE TABLE IF NOT EXISTS users ( uid VARCHAR(128) PRIMARY KEY, user_name VARCHAR(255), created_at TIMESTAMP );
※ msg と user_name はend-to-endで暗号化される。