niming_backend/app.py
2024-11-08 01:41:39 +08:00

65 lines
1.8 KiB
Python

from flask import Flask, request, Response
import os, requests, time
from hashlib import sha256
from supaclient import logger
from dotenv import load_dotenv
from supabase import Client, create_client
load_dotenv()
# supabase
URL = os.getenv("SUPABASE_IP") + "/"
KEY = os.getenv("SUPABASE_KEY")
supabase = create_client(URL, KEY)
# app
app = Flask(__name__)
app.config["SECRET_KEY"] = os.urandom(64)
# main
@app.route("/")
def index(): return "Hello, world!"
# reverse proxy
@app.route('/r/<path:path>',methods=['GET', 'POST'])
def proxy(path):
headers = request.headers
# process
if request.method == 'GET':
resp = requests.get(f'{URL}{path}', headers = headers) # forward
elif request.method=='POST':
# get items
json_ctx = request.get_json()
# flags
logger_args = []
# edit request
if path == "rest/v1/niming_posts": # niming post
# hash
hash = sha256( (json_ctx["content"] + str(time.time())).encode() ).hexdigest()
# ig posting
igid = None
# set logger
logger_args.append("newpost")
logger_args.append(hash)
# edit payload
json_ctx["hash"] = hash
json_ctx["igid"] = igid
# forward
resp = requests.post(f'{URL}{path}',json=json_ctx, headers = headers)
# logger
logger_res = logger(supabase, logger_args)
# make response
excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
headers = [(name, value) for (name, value) in resp.raw.headers.items() if name.lower() not in excluded_headers]
response = Response(resp.content, resp.status_code, headers)
return response
# run
if __name__ == "__main__":
app.run(host = "0.0.0.0", port = 8000, debug = False)