thegcat@kif.rocks をWebFingerするには……
https://kif.rocks/.well-known/host-meta にアクセスして、https://toot.kif.rocks/.well-known/webfinger?resource={uri}を得る。
https://toot.kif.rocks/.well-known/webfinger?resource=acct:thegcat@kif.rocks を呼ぶ
この時、subject: "acct:thegcat@kif.rocks" と、 aliases: [
"https://toot.kif.rocks/@thegcat",
"https://toot.kif.rocks/users/thegcat"
], が得られる(html用とjson用のhrefがlinksで得られるので見るのはこっちか)
acctとしてのkif.rocksドメインと、uri(id)、urlの到達可能なtoot.kif.rocksドメインを区別する。前者がLOCAL_DOMAINで、後者がWEB_DOMAIN。
このへんは
https://github.com/mastodon/documentation/blob/archive/Running-Mastodon/Serving_a_different_domain.md
に書いてあることと、WebFingerの規格や実装みて理解することはできるんだけど……
まーバグりやすいね。みんなこんなん期待通りに実装してくれるだろうか……。
Mastodonのサーバを運用する人が注意した方がいいTIPSみたいな感じで、
- acctのドメインと公開するドメイン(LOCAL_DOMAINとWEB_DOMAIN)を別に設定するのはできるだけ避ける
- 国際化ドメイン名(日本語などを使ったドメインなど)はできるだけ避ける(これはついでに)
という情報は出しておいた方がいいかもしれん。使えるけど、バグや非互換でハマるケースはあるから覚悟してな! っていう。
なお、Mastodonのリレー実装で大文字小文字でハマったこともあるw
一見、簡単なようだけど、ちゃんと正規化しないといろんな不具合がおきて大変なのだわ。
ここまではいいのだが、このアカウントの情報を持っていない時に、uriやurlでアカウント情報を取得する場合、直接アカウント情報のjsonがとれるのだが、それでもWebFingerする。
この時、host-metaはこっちに取りに行く(tootサブドメインがついてるので、acctで検索するときと取得先が違う)
https://toot.kif.rocks/.well-known/host-meta
んで、templateに"https://toot.kif.rocks/.well-known/webfinger?resource={uri}"が返ってくるので、
https://toot.kif.rocks/.well-known/webfinger?resource=acct:thegcat@toot.kif.rocks
を呼ぶ。
そうするとsubjectがacct:thegcat@kif.rocksで、なんかドメインが違うので、もう一回リクエストするドメインを変えてWebFingerする。
https://kif.rocks/.well-known/webfinger?resource=acct:thegcat@kif.rocks
今度はacctとドメインが一致しているので、acctを設定する。
うっかりthegcat@toot.kif.rocksだとみなしてしまわないようにしないといけないのだが、手順が面倒くさいね! ま、WebFinger実装をカプセル化しとけばいいんだけども。