つぶやいたー
collaborator
元ネタはまちカドまぞくの「つぶやいたー」
E2E暗号化分散型SNS
フロントエンドをReact (Next.js) PWA、バックエンドをElxiirで書く
サーバー1つが1つのdiscordチャンネルみたいな。
DMはない(後述)
チャンネル
実態は独立したサーバ
1サーバ1チャンネル
REST API(?)でアクセスしてメッセージの一覧を取得できる
フロントエンド(クライアント)の構成
HTTPSでアクセスできるWebアプリケーション
または、それをPWAアプリとして端末に保存(?)したもの
これは、tubuyaita.mchkd.com などのTLSで保護されたURLで配信する
フロントエンドは各チャンネル(サーバ)のリストを持っている
チャンネル(サーバ)の一覧を表示できる
チャンネル(サーバ)の一覧からサーバを選択すると、そのチャンネル(サーバ)上でやりとりされているメッセージを見たり、チャンネル(サーバ)に投稿したりできる
見た目としてはdiscordのアプリみたいな感じ
左カラムにチャンネル(サーバ)の一覧
右カラムに選択されたサーバのメッセージの一覧(時刻順)
sakura CLIでも簡易クライアントを作りたい
Quote Retweetはほしい
返信機能なしでこれをつける
ほかのサーバーのメッセージでもQuote Retweetできるようにして、ついでにサーバー同士で繋がってたら通知とか何かしたい
まちカドネットワーク内はTLSなんてものは存在しないので、通信の安全は保たれない
E2Eでメッセージを署名・暗号化することでユーザーを識別・検証できる。
秘密鍵・公開鍵のペアがユーザーの単位
任意の秘密鍵・公開鍵のペアがあればどこでも動かせる
フロントエンドに鍵ペアを置いておく
バックエンドはユーザー情報は保存せず、流れてきたメッセージを保存するだけ
ダイレクトメッセージなどは送信先の相手の公開鍵で暗号化すれば、その相手だけ読める。
これは複数人に送れるようにしたい。
一メッセージで複数人にDMが送れるみたいな
フロントエンド自体はTLSがあるところに置いておく
任意のスクリプトを実行される可能性があるため
PWAで初回だけTLSに頼れば良い
そもそもPWAはHTTPSでしか配信できないっぽかった

鍵のexport importはしたい
ほかのデバイスで同じユーザーで入りたいから
複数ユーザーログインはできるようにしたい
バックエンドはapiを公開し、ユーザーからメッセージが来たらそれの証明を確認してDBに追加する
server sent messageかwebsocketか何かで接続しているユーザーにメッセージが来たことを送信する
ほかのサーバーとレプリケーションを行う
PWAの通知はしたいね、メンション的なやつが来たら
server sent messageとかで今のメッセージを持ってるやつと、過去ログ取得するapiが必要そう。