Plumeにフォローリクエストを投げられない…
ここにアクセス投げられない…
/inboxなら同じ内容で行ける。リクエストハンドラーのシグニチャーが違う?
/@/<name>/inbox:
code:user.rs
pub fn inbox(
name: String,
data: inbox::SignedJson<serde_json::Value>,
headers: Headers<_>,
rockets: PlumeRocket,
) -> Result<String, status::BadRequest<&'static str>>
/inbox:
code:instance.rs
pub fn shared_inbox(
rockets: PlumeRocket,
data: inbox::SignedJson<serde_json::Value>,
headers: Headers<'_>,
) -> Result<String, status::BadRequest<&'static str>>
dataの型は一緒だな。
rocketsの有無?
あれ、やり直したら/@/<name>/inboxもアクセスを受け付けた。何だろう、ヘッダーを間違えていたとかなんだろうか。
だがAcceptは送られてこない
パニックしてる
code:terminal
thread '<unnamed>' panicked at 'instance::shared_inbox: user error:
(Some(Object({
"@context": Array([
]),
"preferredUsername": String("alice"),
"publicKey": Object({
"publicKeyPem": String("-----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY-----\n")
}),
"type": String("Person")
})),
Inbox(InvalidObject(None)))',
src/inbox.rs:30:9
activitypubクレートv1が、outboxを必須にしてるからだった
その他にもPlumeで勝手に必須にしてる項目があった。
outbox
followers
しかし元サーバーの方のインボックスにアクセスが来ない、Acceptされない
code:log
Rejected invalid activity supposedly from alice, with headers HeaderMap { headers:
Uncased { string: "Connection" }: "close", Uncased { string: "Content-Length" }: "212", }
}
HTTP署名に失敗しているっぽい。
ようやくスタート地点に立った感
signed stringにdigestというのが要求されてるな……なんだこれ
Base64.strict_encode64(OpenSSL::Digest.digest("sha256", body))っぽい
今度はDBのインデックスが重複しているとかで怒られる
インボックスがユーザーにつき別々じゃないといけないの?
フォローされる側のユーザーを毎回新規作成しようとしている。そりゃ駄目だ。
ap_urlが間違ってる?
/@/adminだとだめで、/@/admin/だとOKだった
確かにhttp://localhost:7878/@/adminのレスポンス見ると最後の/もあったわ
Acceptをリモートに送る時に署名検証に失敗してるっぽい。が、まあいいや。
よくない。これちゃんとしないと、いつまでもフォローできない。という現状を説明できてしまう。
サンプルの方は、サンプルだからかシンプルに=でスプリットしてて、ヘッダーの値の中にbase 64エンコードされたのが入ってるから余分にスプリットしちゃってるって話だった。Mastodonの方でちゃんとやってるならこれは問題ない。