这是一个使用Python和Flask框架构建的Web应用程序,主要功能是通过GitHub OAuth进行用户身份验证,并邀请他们加入指定的GitHub组织。项目使用了python-dotenv
库来管理环境变量,requests
库来发送HTTP请求,以及gunicorn
作为WSGI HTTP服务器。
CLIENT_ID
: GitHub OAuth应用的客户端ID。CLIENT_SECRET
: GitHub OAuth应用的客户端密钥。REDIRECT_URI
: GitHub OAuth应用的重定向URI{YOUR_DOMAIN:YOUR_PORT}/callback
。ORGANIZATION_NAME
: 需要邀请用户加入的GitHub组织名称。GITHUB_P_ACCESSTOKEN
: 用于邀请用户加入组织的GitHub个人访问令牌。
- 创建GitHub OAuth应用
- 登录到你的GitHub账户。
- 点击右上角的头像,然后选择"Settings"。
- 在左侧菜单中,选择"Developer settings"。
- 在左侧菜单中,选择"OAuth Apps",然后点击"New OAuth App"。
- 在"Application name"字段中,输入你的应用名称,如github-invitor。
- 在"Homepage URL"字段中,输入你的应用主页URL。
- 在"Application description"字段中,输入你的应用描述(可选)。
- 在"Authorization callback URL"字段中,输入你的应用授权回调URL。这应该是你的应用在用户授权后将被重定向到的URL。这个回调地址
REDIRECT_URI
的格式应该是http(s){YOUR_DOMAIN:YOUR_PORT}/callback
。 - 点击"Register application"。
- 在创建应用后,你将看到你的
CLIENT_ID
和CLIENT_SECRET
。
- 创建GitHub组织
- 登录到你的GitHub账户。
- 点击右上角的头像,然后选择"Your organizations"。
- 点击"New organization"。
- 选择组织的计划类型,可以选择免费的"Free"计划,然后点击"Next"。
- 在"Organization account name"字段中,输入你的组织名称
ORGANIZATION_NAME
。 - 在"Contact email"字段中,输入你的联系邮箱。
- 选择你的组织类型,可以是"Business"或"Non-profit"。
- 阅读并接受GitHub的条款,然后点击"Create organization"。
- 如果你需要在创建组织的时候勾选Copilot来来启用Copilot, 需要填写付款信息等。
- 创建GitHub个人访问令牌
- 登录有组织管理员权限的GitHub账户(上述你创建组织的账户肯定是有组织管理员权限的)。
- 点击右上角的头像,然后选择"Settings"。
- 在左侧菜单中,选择"Developer settings"。
- 在左侧菜单中,选择"Personal access tokens",然后点击"Generate new token"。
- 这个token需要有
admin:org
权限,用于邀请用户加入组织。 - 这个token就是
GITHUB_P_ACCESSTOKEN
。
- 克隆项目到本地。
- 在项目根目录下创建一个
.env
文件,并填写上述步骤中获取到的环境变量。 - 安装项目依赖:
pip install -r requirements.txt
。 - 启动项目:
python main.py
。
在项目根目录下运行以下命令:
docker build -t github-org-invite-py .
docker run \
--restart=always \
--name github-org-invite-py \
-e CLIENT_ID=your_client_id \
-e CLIENT_SECRET=your_client_secret \
-e REDIRECT_URI=your_redirect_uri \
-e ORGANIZATION_NAME=your_organization_name \
-e GITHUB_P_ACCESSTOKEN=your_github_p_accesstoken \
-p 18989:18989 \
-d atmudccc/github-org-invite-py:latest
感谢华仔送出的docker-compose.yml大礼包, 文件可以去这里下载:docker-compose.yml
version: "3.3"
services:
github-org-invite-py:
image: atmudccc/github-org-invite-py:latest
container_name: github-org-invite-py
environment:
- CLIENT_ID=your_client_id
- CLIENT_SECRET=your_client_secret
- REDIRECT_URI=your_redirect_uri
- ORGANIZATION_NAME=your_organization_name
- GITHUB_P_ACCESSTOKEN=your_github_p_accesstoken
ports:
- 18989:18989
restart: always
以上命令将会启动一个Docker容器,应用将在容器的18989端口上运行,并映射到宿主机的18989端口。
- 正常访问之前, 需要在GitHub OAuth应用中设置
REDIRECT_URI
为http(s){YOUR_DOMAIN:YOUR_PORT}/callback
, 如:http://127.0.0.1:18989/callback
。 - 访问
http://127.0.0.1:18989
, 你将会看到如下界面: - 点击
共襄盛举
按钮,你将会被重定向到GitHub的授权页面,授权成功后,你将会被重定向到你设置的REDIRECT_URI
。 - 然后你就可以点击下图中的
前往使用说明
按钮, 愉快地开车了。 - 如果你不想加入这个
团伙组织,不了不了
按钮是专门为你准备的。 - 你以为不了不了就不了吗? 不! 你还是会后悔的,我们给你提供了一个
我后悔了
按钮。 - 然后你就又回到了你应该去的地方。
- 项目使用了
Flask
框架,所有的路由定义都在app/routes.py
文件中。 app/utils.py
文件包含了所有的辅助函数,如获取访问令牌、获取用户登录ID以及邀请用户加入组织等。app/config.py
文件用于加载环境变量并存储在Config
类中,以便在项目中使用。Dockerfile
文件定义了如何在Docker容器中运行应用。run.sh
是一个shell脚本,用于在Docker容器中启动应用。