feature image

2024年4月9日 | ブログ記事

traP部員の凍結・除名について

この記事は新歓ブログリレー2024の33日目の記事です。

こんにちは、21B SysAd班のmehm8128です。
新歓ブログリレーで書くことではないような気もするのですが(しかも昨日から入部期間開始)、今回はtraP部員の凍結・除名について書こうと思います。

traP部員の凍結・除名とは

traPでは半期ごとに2000円の部費を払ってもらい、部内サービスのサーバー代やイベント開催費などに使っていますが、その部費を払わないと部内サービスのアカウントが凍結され、traPから除名になります(部費を払ったタイミングで再度復帰できます)。また、卒業のタイミングでも同様にアカウントが凍結され、traPからは除名になります。除名についてはtraP サークル規約の第2章第9条に書かれています。部内のGiteaで管理していて公開していいか怪しいので、traPに入る人は見てみてください。

traPへの入部はこちらから↓

2024年度 traP入部の手引き
今年度のtraPへの入部方法を説明します。 2024年10月1日に東京工業大学と東京医科歯科大学が統合し、東京科学大学が設立されることに先立ち、東京医科歯科大学の学生も入部可能になっています。 尚、過去にtraPに所属していて再度入部を希望する場合は、入部手続きではなくアカウント復旧手続きを行うので、accounts[at]trap.jp([at]→@)までお問い合わせください。 また、traPでは入部期間以外でも入部を受け付けています。入部期間外に入部を希望する方も、accounts[at]trap.jp([at]→@)までご連絡ください。 入部条件 * 東京工業大学・大学院、または東京医科歯科大学・大学院に在籍していること ※科目等履修生、四大学連合の学生なども、東京工業大学または東京医科歯科大学に在学していることの証明(東工大メールアドレス(mアドレス)または医科歯科大メールアドレスの所持証明、学生証の提示、在学証明書の提示のいずれか)ができる場合は入部可能となります。ただし、入部手続きが通常とは異なるので、お手数ですがaccounts[at

凍結したらどうなる?

traPの活動では、主にサークル内SNSであるtraQ上でやり取りをします。除名のタイミングで、このアカウントにもログインできないように凍結処理がされます。
traQのソースコードは公開されているのですが、具体的にはPATCH /users/:userIDstate: 0でリクエストを投げることでユーザーを凍結させることができます。この権限は一部の人だけが持っています(部費納入を確認して復活させる権限も同様で、state: 1で復活させられます)。
https://github.com/traPtitech/traQ/blob/2676024440112f9418cef22b2a6c318c00cddbf8/router/v3/users.go#L363

実際の凍結操作はtraPortalという、traQとは別のサービスからUI上で操作をして凍結させるのですが、部員の個人情報を直接扱うサービスということもあってセキュリティ上の理由からprivateリポジトリで管理しているのでソースコードは見せることができません。気になる人がtraPに入部してSysAd班に所属してください。

ちなみに3月に既存部員の2024年前期分の部費納入期間があったのですが、僕は今回部費納入期間に一歩も外に出る機会がなかったので納入タイミングを逃し、1日だけ凍結されました。部費納入から凍結までに1週間あってその期間に外に出るタイミングがあったのでその期間に納入しました。

部費について

本編とは関係ないのですが、部費について。
traPでは半期2000円で、大学4年間だと16000円支払うことになりますが、これは安すぎると思います。半期だけ所属して講習会などを受けるだけでも16000円以上の価値があると思うので、積極的に活動できる人であれば部費以上のものを手に入れられることは保証できます。

SysAd班部員の卒業

SysAd班では部員が卒業する前に(引き継ぐものがある人は)引き継ぎ作業と、(持っている人は)権限の放棄をしないといけません。主なものを見ていきます。
卒業するタイミングでなくてもリーダーの引き継ぎはしてOKなので、僕は既に一部チームでは引き継ぎをしています。

GitHubのorganizationのteamのmaintainerを譲渡

プロジェクトごとにチームを作って、チームリーダーにはmaintainer権限が与えられています。これを引き継ぎ先部員に譲渡します。
例: traQチーム
https://github.com/orgs/traPtitech/teams/traq

codeownersの変更

部内wikiで各プロジェクトのリーダーがまとまっているページがあるので、そこの名前を書き換えます。他にtraQ上のグループのオーナーを譲渡したりもします。

devops botの権限譲渡

devops botというのは部内のサービスをデプロイするためのbotです。わざわざサーバーにSSHしてデプロイ等の作業をしなくても、botのコマンドを叩くだけで実行できるようになっています。
https://github.com/traPtitech/DevOpsBot
このコマンドを叩く権限を譲渡します。

例: Jomonチームでの引き継ぎPR
https://github.com/traPtitech/manifest/pull/428

DBへのアクセス権を譲渡

traPではAdminerというツールで部内サービスのDBをGUIで操作できるようになっています。この権限を渡します。
セキュリティ上の理由から部内のリポジトリで管理されているのでここで見せることはできませんが、Ansibleで管理されているのでその設定を書き換えればOKです。

nssから名前を削除

nssとは、Name Switch Serviceの略らしいです。このリポジトリで管理しています。
https://github.com/traPtitech/nss

traPで管理してるサーバーにSSHログインできるユーザーを管理していて、GitHubに登録している公開鍵でログイン可能になります。
こちらは完全に卒業するタイミングで名前を消すようにしています。
https://github.com/traPtitech/nss/pulls?q=is%3Apr+is%3Amerged

ちなみに、逆に名前を追加するときは細かい説明などはされずに「空気を読んでPRを出してください」を言われるので、空気を読んでPRを出します。

復活通知

部費を再度納入したら復活することができると書きましたが、今回から新たに、部員が復活したときにtraQ上のチャンネルに復活通知を送信する機能を実装したので、紹介します。
traQでは自由にbotを作成することができるのですが、traq-system-botというbotがシステム通知(ユーザーが参加した、チャンネルが作成された、スタンプが作成された等)を流しています。
今回はそのbotがユーザーの復活通知も流すように変更を加えました。
復活通知を飛ばすのは以下の流れになっています。

  1. traPortalから復活ボタンを押すと、traQのサーバーにリクエストが送信される
  2. traQのサーバーが復活処理を行う
  3. traQのサーバーが復活処理と同時に、USER_ACTIVATEDイベントを発行して該当イベントを購読しているbotにイベントを飛ばす
  4. botはイベントを受け取り、traQに復活通知メッセージを送信する

今回は3のイベント発行と、4のイベント受け取り&メッセージの送信、さらにbotがUSER_ACTIVATEDイベントを購読できるようにする機能を実装しました。

イベント発行

該当PRはこちらです。

USER_ACTIVATEDイベントを追加 by mehm8128 · Pull Request #2266 · traPtitech/traQ
close #2030質問: 動作確認って何か方法ありますか?

過去に他のbotイベントを追加するPRを他の人が作っていたので、それを見ながら書きました。

特に大事なところはこの2箇所です。
https://github.com/traPtitech/traQ/pull/2266/files#diff-36faf031366cbebf285a481133e3bfb512c3bf02a663090089de442d1dc7c774R243-R244
https://github.com/traPtitech/traQ/pull/2266/files#diff-36faf031366cbebf285a481133e3bfb512c3bf02a663090089de442d1dc7c774R324-R330

送信されてきたリクエストが復活させるリクエスト(state: 1)だったら、activate=trueになり、r.hub.PublishUSER_ACTIVATEDイベントを発行しています。

イベント購読

該当PRはこちら。

USER_ACTIVATED botイベントを追加 by mehm8128 · Pull Request #518 · traPtitech/traQ-bot-console
traPtitech/traQ#2266 に伴う対応ブランチ名間違えました

ユーザーが自由にbotを作成できるようにUIを提供しているのがbot-consoleです。Vue2+pug+Netlifyという、昔からあまり積極的にメンテされないまま残ってしまっている構成です(pugってtraP外で聞かないけど使われてるのかな)。
ここではUSER_ACTIVATEDイベントを購読できるようにしたのと、ドキュメントも追加しました。

イベントの受け取り&メッセージの送信

該当PRはこちら。

USER_ACTIVATEDイベントに対応 by mehm8128 · Pull Request #2 · traPtitech/traq-system-bot
close #1traPtitech/traQ#2266 に伴う対応
認証方法を変更 by mehm8128 · Pull Request #3 · traPtitech/traq-system-bot
デプロイが落ちていたので、認証方法を変更参考文献https://github.com/google-github-actions/deploy-cloud-functions#via-google-github-actionsauthhttps://github.com/google-github-actions/auth/blob/main/docs/EXAMPLES.md#serv…

こちらはGoogle CloudのCloud Functionsで動いているらしく、bot-consoleと同じく今のtraPではあまり見ないような構成です。
1つ目のPRでは他のイベントを真似してUSER_ACTIVATEDイベントを受け取ってメッセージを送信する処理を書きました。本来ならmasterにマージすれば自動でデプロイが走るはずなのですが、デプロイに使っていたgoogle-github-actions/deploy-cloud-functionsで今は使えなくなっていた認証方法を使ってしまっていてデプロイが落ちてしまっていたので、2つ目のPRで修正しました。

おまけ

これで動くと思ったのですが、僕が復活したときに上手く動いていなくて、あれ、となったのですが、結局traq-system-botにUSER_ACTIVATEDイベントを購読させ忘れていただけでした。

購読の設定後、このように無事復活通知が流れました。
chrome_n2vylgb7bx

まとめ

3つのリポジトリに変更を加えることで無事復活通知を実装することができました。

最後に、traPへの入部はこちらから。

2024年度 traP入部の手引き
今年度のtraPへの入部方法を説明します。 2024年10月1日に東京工業大学と東京医科歯科大学が統合し、東京科学大学が設立されることに先立ち、東京医科歯科大学の学生も入部可能になっています。 尚、過去にtraPに所属していて再度入部を希望する場合は、入部手続きではなくアカウント復旧手続きを行うので、accounts[at]trap.jp([at]→@)までお問い合わせください。 また、traPでは入部期間以外でも入部を受け付けています。入部期間外に入部を希望する方も、accounts[at]trap.jp([at]→@)までご連絡ください。 入部条件 * 東京工業大学・大学院、または東京医科歯科大学・大学院に在籍していること ※科目等履修生、四大学連合の学生なども、東京工業大学または東京医科歯科大学に在学していることの証明(東工大メールアドレス(mアドレス)または医科歯科大メールアドレスの所持証明、学生証の提示、在学証明書の提示のいずれか)ができる場合は入部可能となります。ただし、入部手続きが通常とは異なるので、お手数ですがaccounts[at

対面入部(及び相談会)は、水曜日は多分います(大学行くの水曜日だけなので)。

明日の担当はcpくんです、お楽しみにー

mehm8128 icon
この記事を書いた人
mehm8128

21B JC。SysAd班で色々やってます

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2024年9月20日
2024年 1-Monthonを開催しました!!
Synori icon Synori
2023年7月15日
2023 春ハッカソン 06班 stamProlog
H1rono_K icon H1rono_K
2023年9月13日
ブログリレーを支えるリマインダー
H1rono_K icon H1rono_K
2022年4月5日
アーキテクチャとディレクトリ構造
mazrean icon mazrean
2021年5月16日
CPCTFを支えたインフラ
mazrean icon mazrean
2024年7月20日
部員の活動紹介サービス traPortfolio をリリースしました
mehm8128 icon mehm8128
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記