Help us shape the future of Go! Take the 2026 Go Developer Survey

s.nna774.net

command module
v0.0.0-...-0f396c8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 3, 2026 License: MIT Imports: 32 Imported by: 0

README

s.nna774.net

1人用の ActivityPub サーバ。Go + AWS Lambda + DynamoDB で動く。

@nana@s.nna774.net

ドキュメント

詳細情報は doc/ 以下をご覧ください。

構成

ブラウザ / Mastodon など
        │
        ▼
API Gateway (s.nna774.net)
        │
        ▼
Lambda (provided.al2023, arm64, bootstrap)
        │
        ├── DynamoDB s-nna774-net      … 連番で持つもの
        ├── DynamoDB s-nna774-net-kv   … URI で引くもの
        └── SSM Parameter Store        … 署名鍵・トークン・Cookie 鍵

詳細は アーキテクチャ を参照。

パッケージ 役割
activitystream ActivityStreams 型定義
httpsigclient HTTP Signature 署名・検証
datastore DynamoDB アクセス
auth Bearer・Cookie 認証
web HTML テンプレート・サニタイズ
config 設定・秘密情報読み込み
webfinger / httperror WebFinger・エラーハンドラ

詳細は パッケージ構成 を参照。

エンドポイント

全エンドポイント・curl 例・レスポンス形式は エンドポイント を参照。

認証

秘密は SSM に置いた共有シークレット1本で、受け口が2つ:

  • curl: Authorization: Bearer <token>
  • ブラウザ: POST /login にトークンを渡すと HMAC-SHA256 署名の Cookie が発行

詳細は エンドポイント の認証セクションと アーキテクチャ を参照。

使い方

# 投稿
curl -X POST https://s.nna774.net/u/nana/statuses \
  -H "Authorization: Bearer $TOKEN" \
  -H 'content-type: application/json' \
  -d '{"content":"やっぴー","visibility":"public"}'

# 削除
curl -X DELETE "https://s.nna774.net/u/nana/status/42" \
  -H "Authorization: Bearer $TOKEN"

より詳しい例は エンドポイント を参照。

ローカル開発

make dynamodb-local   # DynamoDB Local を起動
make local-table      # テーブルを作成
make dev              # localhost:8080 で起動
make test             # テスト実行
make lint             # lint 実行

詳細は ローカル開発 を参照。

デプロイ

make deploy

詳細なデプロイ手順・秘密情報管理・トラブルシューティングは デプロイ を参照。

設計上の判断

重要な設計判断と理由は 設計上の判断 を参照。

概要:

  • Activity Streams 型は自作
  • Object は単一平坦構造体
  • Ref で文字列 URI と埋め込みオブジェクト両対応
  • 公開鍵は秘密鍵から導出
  • Digest と本文は自前照合
  • keyId と actor の一致確認
  • 配信は同期
  • テーブルスキーマは変更なし
  • タイムラインに JS なし
  • Accept は goroutine で送らない

ライセンス

MIT

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
Package auth は私用エンドポイント (投稿・タイムライン閲覧・フォロー) の認証を担う。
Package auth は私用エンドポイント (投稿・タイムライン閲覧・フォロー) の認証を担う。
tools
apclient command
apclient は署名付きの ActivityPub リクエストを手で投げるための道具。
apclient は署名付きの ActivityPub リクエストを手で投げるための道具。
gyazoheicbackfill command
gyazoheicbackfill は、旧実装が固定 1000px で保存した HEIC サムネイル URL (https://i.gyazo.com/thumb/1000/<hash>-heic.jpg) を、Gyazo の oEmbed で 分かる原寸の幅に合わせた大きいサムネイルへ差し替える一回限りの移行ツール。
gyazoheicbackfill は、旧実装が固定 1000px で保存した HEIC サムネイル URL (https://i.gyazo.com/thumb/1000/<hash>-heic.jpg) を、Gyazo の oEmbed で 分かる原寸の幅に合わせた大きいサムネイルへ差し替える一回限りの移行ツール。
migrateactorkeys command
migrateactorkeys は複数アクター対応より前の nana (primary actor) の DynamoDB キーを、localpart プレフィックス付きの新しいキーへコピーする 一回限りの移行ツール。
migrateactorkeys は複数アクター対応より前の nana (primary actor) の DynamoDB キーを、localpart プレフィックス付きの新しいキーへコピーする 一回限りの移行ツール。
preferredusernamebackfill command
preferredusernamebackfill は、PreferredUsername フィールド追加前に保存 された followers / following / actorinfo キャッシュへ、リモート actor を 取得し直して preferredUsername を書き足す一回限りの移行ツール。
preferredusernamebackfill は、PreferredUsername フィールド追加前に保存 された followers / following / actorinfo キャッシュへ、リモート actor を 取得し直して preferredUsername を書き足す一回限りの移行ツール。
Package web は HTML の描画と、リモート由来の HTML のサニタイズを担う。
Package web は HTML の描画と、リモート由来の HTML のサニタイズを担う。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL