turntoken / api.py
zhou12189108's picture
Update api.py
76d6d7d verified
import os
from utils import solver
import time
from playwright.sync_api import sync_playwright
import colorama
from flask import Flask, request, jsonify
app = Flask(__name__)
def get_ipaddr():
if request.access_route:
print(request.access_route[0])
return request.access_route[0]
else:
return request.remote_addr or '127.0.0.1'
def solve_start(url, site_key):
with sync_playwright() as playwright:
s = solver.Solver(playwright, headless=True)
while True:
current_time = time.time()
captcha = s.solve(url, site_key,invisible=False)
if captcha == "failed":
print(f"{colorama.Fore.WHITE}[{colorama.Fore.RED}-{colorama.Fore.WHITE}] Failed to solve captcha")
continue
print(
f"{colorama.Fore.WHITE}[{colorama.Fore.GREEN}+{colorama.Fore.WHITE}] Solved {captcha[0:40]} in {colorama.Fore.GREEN}{time.time() - current_time}{colorama.Fore.WHITE} seconds")
return captcha
def get_token():
default_token = "init_token"
if os.path.exists("token"):
return open("token", "r").read().strip()
return default_token
def check_request(required_data, data):
token = get_token()
if not data or any(key not in data for key in required_data):
print("Error:Invalid Request Data\n" + str(data))
return False
if data["token"] != token:
print("Error:Invalid Token\n" + str(data))
return False
return True
@app.route("/update/token", methods=["POST"])
def update_token():
print(get_ipaddr())
require_data = ["token", "new_token"]
data = request.get_json(force=True, silent=True)
if not check_request(require_data, data):
return jsonify(msg="Unauthorized Request"), 403
token = open("token", "w+")
token.write(data["new_token"])
token.close()
return jsonify(msg="Token updated successfully", success=True)
@app.route('/ping', methods=["GET"])
def ping():
return "pong"
@app.route('/solver', methods=["POST"])
def get_token_api():
print(get_ipaddr())
require_data = ["token", "url", "site_key"]
data = request.get_json(force=True, silent=True)
if not check_request(require_data, data):
return jsonify(msg="Unauthorized Request"), 403
token = solve_start(data["url"], data["site_key"])
return jsonify(token=token)
app.run(host="0.0.0.0", port=8000)