65 lines
1.8 KiB
Python
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) |