removed ArchiveOld, added more data to posts, added DMM proxy endpoint

This commit is contained in:
katboi01 2025-01-27 11:53:52 +01:00
parent 3f8f9f708f
commit 7191f4209e
12 changed files with 59 additions and 242 deletions

11
app.py
View File

@ -4,7 +4,7 @@ from flask_restful import Api
from modules.KF3.database import Database as KF3DB from modules.KF3.database import Database as KF3DB
from modules.Kingdom.database import Database as KFKDB from modules.Kingdom.database import Database as KFKDB
from modules.Archive.database import Database as KFADB from modules.Archive.database import Database as KFADB
from modules.proxy import FilelistProxy, LaunchProxy from modules.proxy import AgreementProxy, LaunchProxy, UpdateProxy
app = Flask(__name__) app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False app.config['JSON_AS_ASCII'] = False
@ -12,12 +12,13 @@ app.databases = {}
api = Api(app) api = Api(app)
KFADB(api)
api.add_resource(LaunchProxy, "/DMM/launch")
api.add_resource(UpdateProxy, "/DMM/filelist")
api.add_resource(UpdateProxy, "/DMM/update")
api.add_resource(AgreementProxy, "/DMM/agreement")
KF3DB(api) KF3DB(api)
KFKDB(api) KFKDB(api)
KFADB(api, "Archive", "/home/pi/python/Katbots/JapariArchive/database.db")
KFADB(api, "ArchiveOld", "/home/pi/python/Katbots/JapariArchive/databaseOld.db")
api.add_resource(LaunchProxy, "/DMM/launch")
api.add_resource(FilelistProxy, "/DMM/filelist")
if __name__ == '__main__': if __name__ == '__main__':
app.run(host='127.0.0.1', port=8080, debug=True) app.run(host='127.0.0.1', port=8080, debug=True)

View File

@ -3,50 +3,39 @@ from flask import Flask
from .databaseController import DatabaseController from .databaseController import DatabaseController
from .endpoints.query import Query, QueryOld from .endpoints.query import Query
from .endpoints.command import Command, CommandOld from .endpoints.command import Command
from .endpoints.commands import Commands, CommandsOld from .endpoints.commands import Commands
from .endpoints.post import GetPost, GetPostOld from .endpoints.post import GetPost
from .endpoints.posts import GetPosts, GetPostsOld from .endpoints.posts import GetPosts
from .endpoints.new_query import NewQuery, NewQueryOld from .endpoints.new_query import NewQuery
from .endpoints.set_action import SetAction, SetActionOld from .endpoints.set_action import SetAction
from .endpoints.posts_count import GetPostsCount, GetPostsCountOld from .endpoints.posts_count import GetPostsCount
from .endpoints.account_stats import AccountStats, AccountStatsOld from .endpoints.account_stats import AccountStats
class Database: class Database:
db : DatabaseController = None db : DatabaseController = None
app : Flask = None app : Flask = None
def __init__(self, api, database_name, database_path) -> None: def __init__(self, api) -> None:
self.app = api.app self.app = api.app
if database_name in self.app.databases: if "Archive" in self.app.databases:
del self.app.databases[database_name] del self.app.databases["Archive"]
self.reload_data(database_path) self.reload_data("/home/pi/python/Katbots/JapariArchive/database.db")
self.app.databases[database_name] = self self.app.databases["Archive"] = self
if database_name == "Archive": api.add_resource(Query, "/Archive/Query")
api.add_resource(Query, "/Archive/Query") api.add_resource(NewQuery, "/Archive/NewQuery")
api.add_resource(NewQuery, "/Archive/NewQuery") api.add_resource(Command, "/Archive/Command")
api.add_resource(Command, "/Archive/Command") api.add_resource(Commands, "/Archive/Commands")
api.add_resource(Commands, "/Archive/Commands") api.add_resource(GetPost, "/Archive/GetPost/<id>")
api.add_resource(GetPost, "/Archive/GetPost/<id>") api.add_resource(GetPosts, "/Archive/GetPosts")
api.add_resource(GetPosts, "/Archive/GetPosts") api.add_resource(GetPostsCount, "/Archive/GetPosts/Count")
api.add_resource(GetPostsCount, "/Archive/GetPosts/Count") api.add_resource(AccountStats, "/Archive/AccountStats")
api.add_resource(AccountStats, "/Archive/AccountStats") api.add_resource(SetAction, "/Archive/SetAction")
api.add_resource(SetAction, "/Archive/SetAction")
elif database_name == "ArchiveOld":
api.add_resource(QueryOld, "/ArchiveOld/Query")
api.add_resource(NewQueryOld, "/ArchiveOld/NewQuery")
api.add_resource(CommandOld, "/Archive/Command")
api.add_resource(CommandsOld, "/Archive/Commands")
api.add_resource(GetPostOld, "/ArchiveOld/GetPost/<id>")
api.add_resource(GetPostsOld, "/ArchiveOld/GetPosts")
api.add_resource(GetPostsCountOld, "/ArchiveOld/GetPosts/Count")
api.add_resource(AccountStatsOld, "/ArchiveOld/AccountStats")
api.add_resource(SetActionOld, "/ArchiveOld/SetAction")
def get_accounts(self): def get_accounts(self):
query = f''' query = f'''
@ -71,7 +60,7 @@ ORDER BY x_handle'''
return self.db.run_query(query) return self.db.run_query(query)
def get_post(self, id): def get_post(self, id):
query = f'''SELECT x_posts.id, cast(x_posts.id as TEXT) as id_str, x_posts.error_id, x_posts.action_taken, x_post_details.text, x_post_details.files, x_post_details.date, accounts.x_handle, accounts.rating from x_posts query = f'''SELECT x_posts.id, cast(x_posts.id as TEXT) as id_str, x_posts.error_id, x_posts.action_taken, x_posts.is_saved, x_post_details.text, x_post_details.files, x_post_details.date, accounts.x_handle, accounts.rating from x_posts
LEFT JOIN x_post_details LEFT JOIN x_post_details
ON x_posts.id = x_post_details.id ON x_posts.id = x_post_details.id
LEFT JOIN accounts LEFT JOIN accounts
@ -118,7 +107,7 @@ ORDER BY x_handle'''
where_query = self.build_where_query(artist, actions_taken, last_id, include_ratings) where_query = self.build_where_query(artist, actions_taken, last_id, include_ratings)
query = f''' query = f'''
SELECT x_posts.id, cast(x_posts.id as TEXT) as id_str, x_posts.action_taken, x_post_details.text, x_post_details.files, x_post_details.date, accounts.x_handle, accounts.rating FROM x_posts SELECT x_posts.id, cast(x_posts.id as TEXT) as id_str, x_posts.action_taken, x_posts.is_saved, x_post_details.text, x_post_details.files, x_post_details.date, accounts.x_handle, accounts.rating FROM x_posts
LEFT JOIN x_post_details LEFT JOIN x_post_details
ON x_posts.id = x_post_details.id ON x_posts.id = x_post_details.id
LEFT JOIN accounts LEFT JOIN accounts

View File

@ -10,10 +10,4 @@ class AccountStats(Resource):
def get(self): def get(self):
db : Database = app.databases["Archive"] db : Database = app.databases["Archive"]
result = db.get_account_stats() result = db.get_account_stats()
return db.wrap_query_response(result)
class AccountStatsOld(Resource):
def get(self):
db : Database = app.databases["ArchiveOld"]
result = db.get_account_stats()
return db.wrap_query_response(result) return db.wrap_query_response(result)

View File

@ -11,21 +11,6 @@ class Command(Resource):
def post(self): def post(self):
db : Database = app.databases["Archive"] db : Database = app.databases["Archive"]
auth = request.headers.get('auth') auth = request.headers.get('auth')
if auth is not None:
hash_obj = hashlib.sha256(auth.encode('utf-8'))
if hash_obj.hexdigest() == "63a3b0dba950e1015a110486518e5ceff8cff415041aba3dedb8dc5aa3b3dd16":
query = request.data.decode("utf-8")
result = db.db.run_command(query)
else:
result = None
else:
result = None
return db.wrap_query_response(result, mode="text")
class CommandOld(Resource):
def post(self):
db : Database = app.databases["ArchiveOld"]
auth = request.headers.get('auth')
if auth is not None: if auth is not None:
hash_obj = hashlib.sha256(auth.encode('utf-8')) hash_obj = hashlib.sha256(auth.encode('utf-8'))
if hash_obj.hexdigest() == "63a3b0dba950e1015a110486518e5ceff8cff415041aba3dedb8dc5aa3b3dd16": if hash_obj.hexdigest() == "63a3b0dba950e1015a110486518e5ceff8cff415041aba3dedb8dc5aa3b3dd16":

View File

@ -12,21 +12,6 @@ class Commands(Resource):
def post(self): def post(self):
db : Database = app.databases["Archive"] db : Database = app.databases["Archive"]
auth = request.headers.get('auth') auth = request.headers.get('auth')
if auth is not None:
hash_obj = hashlib.sha256(auth.encode('utf-8'))
if hash_obj.hexdigest() == "63a3b0dba950e1015a110486518e5ceff8cff415041aba3dedb8dc5aa3b3dd16":
data = json.loads(request.data)
result = db.db.run_commands(data)
else:
result = None
else:
result = None
return db.wrap_query_response(result, mode="text")
class CommandsOld(Resource):
def post(self):
db : Database = app.databases["ArchiveOld"]
auth = request.headers.get('auth')
if auth is not None: if auth is not None:
hash_obj = hashlib.sha256(auth.encode('utf-8')) hash_obj = hashlib.sha256(auth.encode('utf-8'))
if hash_obj.hexdigest() == "63a3b0dba950e1015a110486518e5ceff8cff415041aba3dedb8dc5aa3b3dd16": if hash_obj.hexdigest() == "63a3b0dba950e1015a110486518e5ceff8cff415041aba3dedb8dc5aa3b3dd16":

View File

@ -14,14 +14,4 @@ class NewQuery(Resource):
result = db.db.run_query(query) result = db.db.run_query(query)
return db.wrap_query_response(result)
class NewQueryOld(Resource):
def post(self):
query = request.data.decode("utf-8")
db : Database = app.databases["ArchiveOld"]
result = db.db.run_query(query)
return db.wrap_query_response(result) return db.wrap_query_response(result)

View File

@ -11,13 +11,5 @@ class GetPost(Resource):
id = int(id) id = int(id)
db : Database = app.databases["Archive"] db : Database = app.databases["Archive"]
result = db.get_post(id)
return db.wrap_query_response(result)
class GetPostOld(Resource):
def get(self, id):
id = int(id)
db : Database = app.databases["ArchiveOld"]
result = db.get_post(id) result = db.get_post(id)
return db.wrap_query_response(result) return db.wrap_query_response(result)

View File

@ -51,53 +51,5 @@ class GetPosts(Resource):
real_page = page-1 real_page = page-1
offset = real_page * count offset = real_page * count
result = db.get_posts(count, artist, actions_taken=actions, last_id= -1, offset= offset, include_ratings= ratings, order=order)
return db.wrap_query_response(result)
class GetPostsOld(Resource):
def get(self):
db : Database = app.databases["ArchiveOld"]
try:
count = int(request.args["count"]) if "count" in request.args else 20
page = int(request.args["page"]) if "page" in request.args else 1
artist = request.args["artist"] if "artist" in request.args else None
last_id = int(request.args["last_id"]) if "last_id" in request.args else -1
except:
response = app.response_class(status=400)
response.headers.add("Access-Control-Allow-Origin", "*")
return response
actions = []
if "undecided" in request.args:
actions.append(0)
if "approved" in request.args:
actions.append(1)
if "denied" in request.args:
actions.append(2)
if "hidden" in request.args:
actions.append(3)
if actions == []:
actions = [0,1,2,3]
ratings = []
if "SFW" in request.args:
ratings.append("SFW")
if "NSFW" in request.args:
ratings.append("NSFW")
if "NSFL" in request.args:
ratings.append("NSFL")
if ratings == []:
ratings = ["SFW", "NSFW"]
if "random" in request.args:
order = "RAND"
elif "ascending" in request.args:
order = "ASC"
else:
order = "DESC"
real_page = page-1
offset = real_page * count
result = db.get_posts(count, artist, actions_taken=actions, last_id= -1, offset= offset, include_ratings= ratings, order=order) result = db.get_posts(count, artist, actions_taken=actions, last_id= -1, offset= offset, include_ratings= ratings, order=order)
return db.wrap_query_response(result) return db.wrap_query_response(result)

View File

@ -38,40 +38,5 @@ class GetPostsCount(Resource):
if ratings == []: if ratings == []:
ratings = ["SFW", "NSFW"] ratings = ["SFW", "NSFW"]
result = db.get_posts_count(artist, actions_taken=actions, last_id= -1, include_ratings= ratings)
return db.wrap_query_response(result, mode="text")
class GetPostsCountOld(Resource):
def get(self):
db : Database = app.databases["ArchiveOld"]
try:
artist = request.args["artist"] if "artist" in request.args else None
except:
response = app.response_class(status=400)
response.headers.add("Access-Control-Allow-Origin", "*")
return response
actions = []
if "undecided" in request.args:
actions.append(0)
if "approved" in request.args:
actions.append(1)
if "denied" in request.args:
actions.append(2)
if "hidden" in request.args:
actions.append(3)
if actions == []:
actions = [0,1,2,3]
ratings = []
if "SFW" in request.args:
ratings.append("SFW")
if "NSFW" in request.args:
ratings.append("NSFW")
if "NSFL" in request.args:
ratings.append("NSFL")
if ratings == []:
ratings = ["SFW", "NSFW"]
result = db.get_posts_count(artist, actions_taken=actions, last_id= -1, include_ratings= ratings) result = db.get_posts_count(artist, actions_taken=actions, last_id= -1, include_ratings= ratings)
return db.wrap_query_response(result, mode="text") return db.wrap_query_response(result, mode="text")

View File

@ -15,15 +15,4 @@ class Query(Resource):
result = db.db.run_query(query) result = db.db.run_query(query)
result = [list(d.values()) for d in result] result = [list(d.values()) for d in result]
return db.wrap_query_response(result)
class QueryOld(Resource):
def post(self):
query = request.data.decode("utf-8")
db : Database = app.databases["ArchiveOld"]
result = db.db.run_query(query)
result = [list(d.values()) for d in result]
return db.wrap_query_response(result) return db.wrap_query_response(result)

View File

@ -31,32 +31,5 @@ class SetAction(Resource):
if not bypass: if not bypass:
query += " AND action_taken = 0" query += " AND action_taken = 0"
result = db.db.run_command(query)
return db.wrap_query_response(result, mode="text")
class SetActionOld(Resource):
def post(self):
data = json.loads(request.data)
try:
bypass = ("allow_override" in data) and data["allow_override"]
action = data["action_taken"]
if "id_str" in data:
id = int(data["id_str"])
elif "id" in data:
id = data["id"]
else:
raise Exception("no id (int) or id_str (str) specified")
except Exception as e:
print(e)
response = app.response_class(response=e, status=400)
response.headers.add("Access-Control-Allow-Origin", "*")
return response
db : Database = app.databases["ArchiveOld"]
query = f"UPDATE x_posts SET action_taken = {action} WHERE id = {id}"
if not bypass:
query += " AND action_taken = 0"
result = db.db.run_command(query) result = db.db.run_command(query)
return db.wrap_query_response(result, mode="text") return db.wrap_query_response(result, mode="text")

View File

@ -1,8 +1,22 @@
from flask_restful import Resource from flask_restful import Resource
from flask import current_app as app, request from flask import current_app as app, request, Request
import requests import requests
def relayRequest(user_request : Request, url, headers):
with requests.Session() as session:
requests.utils.add_dict_to_cookiejar(session.cookies, user_request.cookies)
response = session.post(url, headers=headers, data=request.data)
result = app.response_class(
response=response.text,
status=200,
mimetype='application/json'
)
result.headers.add("Access-Control-Allow-Origin", "*")
return result
class LaunchProxy(Resource): class LaunchProxy(Resource):
def post(self): def post(self):
url = "https://apidgp-gameplayer.games.dmm.com/v5/launch/cl" url = "https://apidgp-gameplayer.games.dmm.com/v5/launch/cl"
@ -11,36 +25,24 @@ class LaunchProxy(Resource):
"Client-version": "5.3.12", "Client-version": "5.3.12",
"Content-Type": "application/json"} "Content-Type": "application/json"}
with requests.Session() as session: return relayRequest(request, url, headers)
requests.utils.add_dict_to_cookiejar(session.cookies, request.cookies)
response = session.post(url, headers=headers, data=request.data)
result = app.response_class(
response=response.text,
status=200,
mimetype='application/json'
)
result.headers.add("Access-Control-Allow-Origin", "*")
return result
class FilelistProxy(Resource): class UpdateProxy(Resource):
def post(self): def post(self):
url = "https://apidgp-gameplayer.games.dmm.com/v5/r2/filelist/cl" url = "https://apidgp-gameplayer.games.dmm.com/v5/r2/launch/cl"
headers = {"User-Agent": "DMMGamePlayer5-Win/5.3.12 Electron/32.1.0", headers = {"User-Agent": "DMMGamePlayer5-Win/5.3.12 Electron/32.1.0",
"Client-App": "DMMGamePlayer5", "Client-App": "DMMGamePlayer5",
"Client-version": "5.3.12", "Client-version": "5.3.12",
"Content-Type": "application/json"} "Content-Type": "application/json"}
with requests.Session() as session: return relayRequest(request, url, headers)
requests.utils.add_dict_to_cookiejar(session.cookies, request.cookies)
response = session.post(url, headers=headers, data=request.data) class AgreementProxy(Resource):
def post(self):
result = app.response_class( url = "https://apidgp-gameplayer.games.dmm.com/v5/agreement/confirm/client"
response=response.text, headers = {"User-Agent": "DMMGamePlayer5-Win/5.3.12 Electron/32.1.0",
status=200, "Client-App": "DMMGamePlayer5",
mimetype='application/json' "Client-version": "5.3.12",
) "Content-Type": "application/json"}
result.headers.add("Access-Control-Allow-Origin", "*")
return result return relayRequest(request, url, headers)