アイコンとスクリーンネームが全員同じになるマストドンインスタンスを作った

このブログの読者にとって「マストドンインスタンスを作った」は冗長だと思うが、ググラビリティのためにこのタイトルにした。

2.distsn.org というマストドンインスタンスがあり、ゲストアカウントを開放したはいいものの連投荒らしに負けて撤回するなどがあった。こうなったら雰囲気だけでも匿名っぽくなればいいやということで、スクリーンネームとアイコンを強制的に全員同じにすることにした。

暴力でやっていけばいいときはそうすべきで、ここで暴力とはSQLを直接叩くことを意味する。具体的には anonymous というふざけた名前のスクリプトを書き、postgres ユーザーの crontab に追加する。間隔はとりあえず5分にした。

スクリーンネームはインスタンスの名称 (site_title) を取ってくる。なぜか前後に謎のゴミが付くが気にしないことにしよう。インスタンスの名称は誰もが編集できるようにしてあるから、鯖管の独裁を避けられる。

アイコン (avatar) については、単に未設定の状態を強制するだけである。デフォルトのアイコンをココミネココナさんにする変更を入れてあるが、他のインスタンスでは (‘∀`) という顔文字に見えているだろう。

あとは「プロフィールを編集」画面のアイコンとスクリーンネームを変更する部分を殺す。完成。

自我というかパーソナリティがほとんど可視化されない状態でトゥートするのは本当に快適で、謎の高揚感がある。ある意味では、Tor やゲストアカウントよりも匿名らしさがあるものが出現した気がする。

追記 タイムラインにusernameを表示しないようにする変更と、タイムラインでスクリーンネームにマウスポインターがホバーしたときusernameがポップアップしないようにする変更を入れたので、さらに自我が消滅した。

広告

インスタンスの名称と説明文を書き換えたユーザーを晒す

異常なマストドンインスタンス 2.distsn.org では一般ユーザーがインスタンス名称と説明文を変更できるのですが、空文字列を設定して去っていく荒らしが発生したので、インスタンスの名称と説明文を書き換えたユーザーを晒すことにしました。

カスタム利用規約 (terms) を使う予定がないので、サイト設定を変更したユーザーの username を保存することに転用します。これは /app/controllers/admin/settings_controller.rb をいじくってなんとかします。あとは /app/presenters/instance_presenter.rb に site_description_and_author メソッドを生やし、それを about ページと about/more ページで表示するようにします。

本質的にはこの差分を見ればいいです。終了。

ゲストアカウントは連投に弱い (それはそう)

kaban.m.to と md.distsn.org では平穏であったゲストアカウントですが、2.distsn.org ではついに破滅しました。あれは連投に負ける。

技術的にはIPアドレスでブロックするとかreCAPTCHAを解かせるとか方法はありそうだけど、プログラミング能力が有限なのですぐにはできない。

メールアドレス不要でユーザー登録できるのと、インスタンスの名称と説明文を変更できるのは引き続きやっていきます。あと、カスタム絵文字を鯖管でなくても追加できます。ユーザー数偽装はやめました。

一般ユーザーがインスタンス名称と説明文を変更できるマストドンインスタンスを作った (ついでに登録ユーザー数偽装も)

md.distsn.org という異常なマストドンインスタンスがあり、これまでユーザー数偽装メールアドレス不要なユーザー登録ゲストアカウントをやってきた。今回はインスタンスの名称と説明文を一般ユーザーが変更できるようにする。

まず、設定画面の「サイト設定」画面を「管理」から「設定」に移動する。これは /config/navigation.rb をいじればよい。この状態で一般ユーザーが「サイト設定」画面を開くとトップページに飛ばされるので、さらに /app/controllers/admin/settings_controller.rb を変更する。SettingsController クラスは BaseController クラスから派生しており、BaseController クラスには

before_action :require_admin!

という余計なコードが含まれているので、SettingsController クラスを BaseController クラスではなく ApplicationController クラスから派生するようにする。あと、念のため SettingsController クラスに

layout admin

を追記する。これで一般ユーザーが「サイト設定」画面を開くことができるようになった。

ついでに、登録ユーザー数偽装を一般ユーザーに開放してしまおう。カスタム利用規約は使う予定がないので、こいつを潰してユーザー数の設定に転用する。具体的には /app/presenters/instance_presenter.rb を変更するだけだ。

これが何の役に立つのかはまったく不明だが、そもそもマストドンが何かの役に立ったことがあるだろうか?

ゲストアカウントで匿名トゥートできるマストドンインスタンスを作った

md.distsn.org というマストドンインスタンスを運営している。ソースコードからビルドしているので、新機能を作って導入することができる。これまで、ユーザー数偽装メールアドレス不要でユーザー登録をやってきた。今度はゲストアカウントをやっていこう。

ゲストアカウントを運用するには以下が必要である。

  • メールアドレスを変更できない。
  • パスワードを変更できない。
  • アカウントを削除できない。
  • 2段階認証を有効にできない。
  • IPアドレスを取得できない。

まず app/model/account.rb に guest? メソッドを生やす。あとは各所の haml で機能を殺せばよい。メールアドレスとパスワードの変更を殺すアカウントの削除を殺す2段階認証を殺すIPアドレスの表示を殺す。完成。

本当はクライアントサイドではなくサーバーサイドで機能を止める必要がある。まあ手を抜くところは抜いてやっていこう。

guest? メソッドの定義は username == guest || username.include?(__) なので、ユーザー名が guest か、またはアンダーバー2個を含むならば、ゲストアカウントとして動作する。そのため、クソリプ専用ゲストアカウントのようなゲストアカウントを無限に生やすことができる。

メールアドレス不要のマストドンインスタンスを作った

追記 もっと楽な方法があった !!!!!!

マストドンはメールアドレスを収集するのをやめろという話もありつつ、それを目指したイシューはクローズされてしまい、とりあえずメールアドレス不要でユーザー登録できるインスタンスを作ることにした。

マストドンのログインの機構は Device という異常な名前のライブラリに丸投げされているらしく、Device の内部は絶対にいじりたくないという気持ちがある。なので、データベースをSQLでダイレクトに叩くという野蛮な手法でやっていく。

具体的には

UPDATE users SET confirmed_at = CURRENT_TIMESTAMP WHERE confirmed_at IS NULL;

というSQLを1分間隔くらいで叩き続ける。すると、マストドンはメールアドレスの到達性確認が済んでいるものと誤解して、架空のメールアドレスでもログインできるようになる。これをシェルスクリプトにしたものがあるので、postgres ユーザーの crontab に1分間隔で登録する。-d mastodon_production という部分は環境依存なので、マストドンのために使っているデータベースの名前に書き換える必要がある。

架空の (到達性のない) メールアドレスでも登録できるものの、メールアドレスのバリデーションを通過する必要があるので、メールアドレスのように見える文字列 (alice@example.com など) を使う必要がある。ちなみに、アットマークが入っていればメールアドレスのバリデーションを通るので、idolm@ster あたりの文字列でもアカウントを作ることができる。

世界最大のマストドンインスタンスを作った

世界最大のマストドンインスタンスは Pawoo でも JP でもmastodon.social でもない。分散SNSフォーラム直営インスタンス だ。ユーザー数は500,000。2位のPawoo (284,027)、3位のJP (148,758) を大きく引き離している。

これは何をしているかというと、ソースコードを改造して、API で報告するユーザー数を500,000に固定しているというわけだ。変更は1行だけ。すぐにできる。

どちらかというとインストールバトルが厳しい。公式ドキュメントさくらのVPSで自分のMastodonサーバを最速でつくる方法 を読めばなんとかなる。あと、インストールを始める前に Mailgun に登録 (メールサーバーを用意できるのであれば Mailgun でなくてもよい)  を済ませたほうがよい。

せっかく好きにいじれるインスタンスを手に入れたので、いろいろと変な機能を実装したい。とはいえ、技術書典3 の本を書くので、当分はお預けだ。