[back]

2023-09-30 00:22:22 +09:00

# tinyap

## tiny-activitypub

gitlab ActivityPubのRust実装。

## 更新履歴

v0.2.2

add: attachmentでもらった画像を保存する際に圧縮する様にしました fix: いろいろ

~0.2.1

ないよ

## 開発中にハマった点

Localのcargo check通過するのにEC2環境だと落ちる

openssl crate周りで落ちてたらOpenSSL 1.1.1系を要求されてる可能性がある。 Amazon Linux 2に入ってるOpenSSLは1.0.2系なので

sudo yum remove openssl-devel
sudo yum install openssl11 openssl11-devel
# これしないと古いビルドのopensslを参照し続ける
cargo clean

する。それでもダメそうなら

rpm -ql openssl11-devel | grep lib
rpm -ql openssl11-devel | grep include
# なんかそんな感じのフォルダを環境変数に突っ込む
export OPENSSL_LIB_DIR=/usr/lib64/
export OPENSSL_INCLUDE_DIR=/usr/include/openssl/

したらいけるんじゃないかな。お好みで環境変数の永続化等をする

Sqliteにした操作が反映されない

ちゃんとトランザクションにcommit()してるか確認しろ(3敗)

503 Remote SSL certificate could not be verified

証明書のchainがいい感じになってないと怒られる……っぽい? TLS周り詳しくないからよく知らなかった(アホ)んだけど、cert.pemでなくfullchain.pem使わんといかんっぽい。直したら動いた

投稿をmastodonから拾えない

Content-Typeapplication/activity+jsonにしないといけない。poemのJsonだとapplication/jsonになるから自分でResponse組み立てる必要がある。

公開/秘密鍵をどこに置くか

DBにpubkey/secretで置いてる実装が結構あっていいのかそれ……ってなってたけどhonkもそんな感じで組んでるしそれが普通なのかもしれない。一応table分けて設計変えやすいようにはしとこ……

console.log()ってどこに出てくるんだっけ

F12押せ

http署名

{
    "Host": ホスト名(相手のinboxの(n敗)),
    "Date": 時間をhttp形式で,
    "Digest": 後述,
    "Content-Type": "application/activity+json",
    "Signature": httpsig的な外部モジュールでよしなにする
}

DigestがSHA-256だと怒られ、base64でも怒られる。何故

16進数に変換してからbase64にかける。(なんで思いつかなかったんですか?)

Verification failed for {ユーザーid}

普通にやってればミスらなさそう。普通にやらなかったので一日くらいかかったけど。

Mastodonからフォローできない

Mastodon側の気まぐれか分からないけどリクエストが飛ぶまでに時間かかる場合がある。こちらからフォローしたりしてサーバーが生きてることを示してあげると動き出すかもしれない

sqlxの型推論がバグる(2)

けっこー苦労した。 UNION ALLで二つのテーブル結合して~片方にない列はnullにして~ってやってたらTEXT型のカラムをDATETIMEと解釈してバグり散らかした。型強制null as "hoge?: String"も仕事しなかった。最終的に型強制するsql文をselectの一番上に持っていったら解決した。存在しないカラムの型解決でバグるっぽいからとりあえずnull asするときは順序も考えることにする

MIME type周りの処理

結論:いろいろクレート試したけどinferがよさそうだった。当初から使ってたtree_magic_miniはlibmagicに起因するwebpがapplication/octet-streamに推論されるバグがあるっぽいので使用をやめた。inferはマジックナンバーから推定する(らしい)?し、わりと大半のファイル形式に対応してそうだったのでこっちを採用。正直ここにないやつはoctet-streamでも困らんやろの精神