GNU socialでユーザー名にアンダースコア (_) を使う方法

GNU social (v2.0.0beta0以下)では、ユーザー名に使用できる文字は数字と英小文字のみとなっており、アンダースコア (_) を使えない。_ありのユーザー名 (senookenmoney) で登録すると、勝手に_なしで登録される。

TwitterやMastodonはユーザー名のアンダースコアを許容しており、GNU socialだけ許容しないのは互換性からいってよくない。そこで、ユーザー名にアンダースコアを使う方法を調査した。

ユーザー名のチェックと正規化はlib/profile/nichkname.php::normalizeで行っている。いろいろ試行錯誤した結果、以下のコマンドで、差分を適用するとユーザー名にアンダースコアを使うことができた。

patch -Np 1 <<-'EOT'
diff --git a/lib/profile/nickname.php b/lib/profile/nickname.php index 194c829164..e1247efb4a 100644 --- a/lib/profile/nickname.php +++ b/lib/profile/nickname.php @@ -72,7 +72,7 @@ class Nickname * * This, INPUT_FMT and DISPLAY_FMT should not be enclosed in []s. */ - const CANONICAL_FMT = '[0-9a-z]{1,64}'; + const CANONICAL_FMT = '[0-9a-z_]{1,64}'; /** * Maximum number of characters in a canonical-form nickname. @@ -136,7 +136,6 @@ class Nickname // We should also have UTF-8 normalization (å to a etc.) $str = trim($str); - $str = str_replace('_', '', $str); $str = mb_strtolower($str);
EOT

万が一、アンダースコアが除去された状態で登録されてしまったら、DBの以下のテーブルにユーザー名が登録されているので、上記の差分に加えてこれらを編集する。

  • user
  • invitation
  • profile

ひとまず、これでユーザー名にアンダースコアを使えるようにはなる。標準機能として問題に思ったので、別の問題と合わせて本体に問題を登録した (Cannot use underscore (`_`) in nickname and `No matches for action “showfavorites” with arguments “nickname=senookenmoney “` – NotABug.org: Free code hosting)。できればマージしたいところだが、返事がない。様子を見る。ひとまずはローカルパッチで対応する。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です