diff --git a/README.md b/README.md index f80107b..2ed4f04 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,22 @@ Organizationメンバー管理用のtraQ bot GoとMySQL(MariaDB) +### GitHub App + +Organizationのメンバーの管理に、GitHub Appを使う。 + +[GitHub App インストールとしての認証](https://docs.github.com/ja/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app-installation#using-an-installation-access-token-to-authenticate-as-an-app-installation) + +GitHub Appを作り、Organizationにinstallする。OrganizationのmembersのRead/Write権限を持たせておく。また、Private Keyをダウンロードしておく。 + +GitHub AppのInstallation IDが必要になるが、GitHubのUIからは確認できない。リポジトリルートの`installation_id.sh`を実行すると取得できる。 + +```sh +./installation_id.sh {GitHubAppのClient ID} {Private Keyのパス} {Org名} +``` + +(jqを使っているが、無い場合は最後の行をコメントアウトして`id`を見ればよい。) + ### 環境変数 - `ACCEPT_STAMP_ID` 承認用スタンプのUUID @@ -13,8 +29,11 @@ GoとMySQL(MariaDB) - `ADMIN_GROUP_ID` adminのtraQ Group UUID - `ADMIN_GROUP_NAME` adminのtraQ Group名 - `BOT_CHANNEL_ID` botが投稿するチャンネル +- `GITHUB_APP_ID` GitHub AppのID +- `GITHUB_APP_INSTALLATION_ID` GitHub AppのInstallation ID +- `GITHUB_APP_PRIVATE_KEY` GitHub Appの秘密鍵。改行を`\n`に置き変えたもの。 - `GITHUB_ORG_NAME` GitHubのオーガニゼーション名 -- `GITHUB_TOKEN` GitHubのトークン + - `INACTIVE_STAMP_ID` 操作を終えたメッセージに押すスタンプのUUID - `REJECT_STAMP_ID` 却下用スタンプのUUID - `REJECT_STAMP_THRESHOLD` 何個スタンプがついたら却下とするか diff --git a/jwt.sh b/installation_id.sh similarity index 74% rename from jwt.sh rename to installation_id.sh index 302f8d5..e8ceac0 100755 --- a/jwt.sh +++ b/installation_id.sh @@ -6,6 +6,8 @@ client_id=$1 # Client ID as first argument pem=$( cat $2 ) # file path of the private key as second argument +org_name=$3 # Organization name as third argument + now=$(date +%s) iat=$((${now} - 60)) # Issues 60 seconds in the past exp=$((${now} + 600)) # Expires 10 minutes in the future @@ -36,4 +38,11 @@ signature=$( # Create JWT JWT="${header_payload}"."${signature}" -printf '%s\n' "JWT: $JWT" +# printf '%s\n' "JWT: $JWT" + +curl -s -L \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer $JWT" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/orgs/$org_name/installation \ + | jq .id