diff --git a/app.py b/app.py index c21dd29..902cac7 100644 --- a/app.py +++ b/app.py @@ -4,7 +4,7 @@ from flask_restful import Api from modules.KF3.database import Database as KF3DB from modules.Kingdom.database import Database as KFKDB 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.config['JSON_AS_ASCII'] = False @@ -12,12 +12,12 @@ app.databases = {} api = Api(app) +KFADB(api) +api.add_resource(LaunchProxy, "/DMM/launch") +api.add_resource(UpdateProxy, "/DMM/filelist", "/DMM/update") +api.add_resource(AgreementProxy, "/DMM/agreement") KF3DB(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__': app.run(host='127.0.0.1', port=8080, debug=True) \ No newline at end of file diff --git a/modules/Archive/database.py b/modules/Archive/database.py index 432812a..ae3b8c4 100644 --- a/modules/Archive/database.py +++ b/modules/Archive/database.py @@ -3,50 +3,39 @@ from flask import Flask from .databaseController import DatabaseController -from .endpoints.query import Query, QueryOld -from .endpoints.command import Command, CommandOld -from .endpoints.commands import Commands, CommandsOld -from .endpoints.post import GetPost, GetPostOld -from .endpoints.posts import GetPosts, GetPostsOld -from .endpoints.new_query import NewQuery, NewQueryOld -from .endpoints.set_action import SetAction, SetActionOld -from .endpoints.posts_count import GetPostsCount, GetPostsCountOld -from .endpoints.account_stats import AccountStats, AccountStatsOld +from .endpoints.query import Query +from .endpoints.command import Command +from .endpoints.commands import Commands +from .endpoints.post import GetPost +from .endpoints.posts import GetPosts +from .endpoints.new_query import NewQuery +from .endpoints.set_action import SetAction +from .endpoints.posts_count import GetPostsCount +from .endpoints.account_stats import AccountStats class Database: db : DatabaseController = None app : Flask = None - def __init__(self, api, database_name, database_path) -> None: + def __init__(self, api) -> None: self.app = api.app - if database_name in self.app.databases: - del self.app.databases[database_name] + if "Archive" in self.app.databases: + 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(NewQuery, "/Archive/NewQuery") - api.add_resource(Command, "/Archive/Command") - api.add_resource(Commands, "/Archive/Commands") - api.add_resource(GetPost, "/Archive/GetPost/") - api.add_resource(GetPosts, "/Archive/GetPosts") - api.add_resource(GetPostsCount, "/Archive/GetPosts/Count") - api.add_resource(AccountStats, "/Archive/AccountStats") - 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/") - 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") + api.add_resource(Query, "/Archive/Query") + api.add_resource(NewQuery, "/Archive/NewQuery") + api.add_resource(Command, "/Archive/Command") + api.add_resource(Commands, "/Archive/Commands") + api.add_resource(GetPost, "/Archive/GetPost/") + api.add_resource(GetPosts, "/Archive/GetPosts") + api.add_resource(GetPostsCount, "/Archive/GetPosts/Count") + api.add_resource(AccountStats, "/Archive/AccountStats") + api.add_resource(SetAction, "/Archive/SetAction") def get_accounts(self): query = f''' @@ -71,7 +60,7 @@ ORDER BY x_handle''' return self.db.run_query(query) 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 ON x_posts.id = x_post_details.id LEFT JOIN accounts @@ -118,7 +107,7 @@ ORDER BY x_handle''' where_query = self.build_where_query(artist, actions_taken, last_id, include_ratings) 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 ON x_posts.id = x_post_details.id LEFT JOIN accounts diff --git a/modules/Archive/endpoints/account_stats.py b/modules/Archive/endpoints/account_stats.py index d8697ba..b6aa1a4 100644 --- a/modules/Archive/endpoints/account_stats.py +++ b/modules/Archive/endpoints/account_stats.py @@ -10,10 +10,4 @@ class AccountStats(Resource): def get(self): db : Database = app.databases["Archive"] 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) \ No newline at end of file diff --git a/modules/Archive/endpoints/command.py b/modules/Archive/endpoints/command.py index ea92935..8594a22 100644 --- a/modules/Archive/endpoints/command.py +++ b/modules/Archive/endpoints/command.py @@ -11,21 +11,6 @@ class Command(Resource): def post(self): db : Database = app.databases["Archive"] 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: hash_obj = hashlib.sha256(auth.encode('utf-8')) if hash_obj.hexdigest() == "63a3b0dba950e1015a110486518e5ceff8cff415041aba3dedb8dc5aa3b3dd16": diff --git a/modules/Archive/endpoints/commands.py b/modules/Archive/endpoints/commands.py index d51ea97..f644ea5 100644 --- a/modules/Archive/endpoints/commands.py +++ b/modules/Archive/endpoints/commands.py @@ -12,21 +12,6 @@ class Commands(Resource): def post(self): db : Database = app.databases["Archive"] 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: hash_obj = hashlib.sha256(auth.encode('utf-8')) if hash_obj.hexdigest() == "63a3b0dba950e1015a110486518e5ceff8cff415041aba3dedb8dc5aa3b3dd16": diff --git a/modules/Archive/endpoints/new_query.py b/modules/Archive/endpoints/new_query.py index dc85e57..37d540c 100644 --- a/modules/Archive/endpoints/new_query.py +++ b/modules/Archive/endpoints/new_query.py @@ -14,14 +14,4 @@ class NewQuery(Resource): 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) \ No newline at end of file diff --git a/modules/Archive/endpoints/post.py b/modules/Archive/endpoints/post.py index fc609ff..d83d432 100644 --- a/modules/Archive/endpoints/post.py +++ b/modules/Archive/endpoints/post.py @@ -11,13 +11,5 @@ class GetPost(Resource): id = int(id) 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) return db.wrap_query_response(result) \ No newline at end of file diff --git a/modules/Archive/endpoints/posts.py b/modules/Archive/endpoints/posts.py index 21885a8..05d235c 100644 --- a/modules/Archive/endpoints/posts.py +++ b/modules/Archive/endpoints/posts.py @@ -51,53 +51,5 @@ class GetPosts(Resource): 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) - 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) return db.wrap_query_response(result) \ No newline at end of file diff --git a/modules/Archive/endpoints/posts_count.py b/modules/Archive/endpoints/posts_count.py index 01bf0ed..68712f4 100644 --- a/modules/Archive/endpoints/posts_count.py +++ b/modules/Archive/endpoints/posts_count.py @@ -38,40 +38,5 @@ class GetPostsCount(Resource): if ratings == []: 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) return db.wrap_query_response(result, mode="text") \ No newline at end of file diff --git a/modules/Archive/endpoints/query.py b/modules/Archive/endpoints/query.py index 13082a5..774ef4d 100644 --- a/modules/Archive/endpoints/query.py +++ b/modules/Archive/endpoints/query.py @@ -15,15 +15,4 @@ class Query(Resource): result = db.db.run_query(query) 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) \ No newline at end of file diff --git a/modules/Archive/endpoints/set_action.py b/modules/Archive/endpoints/set_action.py index cb8207d..eb6da8c 100644 --- a/modules/Archive/endpoints/set_action.py +++ b/modules/Archive/endpoints/set_action.py @@ -31,32 +31,5 @@ class SetAction(Resource): if not bypass: 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) return db.wrap_query_response(result, mode="text") \ No newline at end of file diff --git a/modules/proxy.py b/modules/proxy.py index 78631fc..1a90a06 100644 --- a/modules/proxy.py +++ b/modules/proxy.py @@ -1,8 +1,22 @@ from flask_restful import Resource -from flask import current_app as app, request +from flask import current_app as app, request, Request 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): def post(self): url = "https://apidgp-gameplayer.games.dmm.com/v5/launch/cl" @@ -11,36 +25,24 @@ class LaunchProxy(Resource): "Client-version": "5.3.12", "Content-Type": "application/json"} - with requests.Session() as session: - 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 + return relayRequest(request, url, headers) -class FilelistProxy(Resource): +class UpdateProxy(Resource): 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", "Client-App": "DMMGamePlayer5", "Client-version": "5.3.12", "Content-Type": "application/json"} - with requests.Session() as session: - 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 relayRequest(request, url, headers) + +class AgreementProxy(Resource): + def post(self): + url = "https://apidgp-gameplayer.games.dmm.com/v5/agreement/confirm/client" + headers = {"User-Agent": "DMMGamePlayer5-Win/5.3.12 Electron/32.1.0", + "Client-App": "DMMGamePlayer5", + "Client-version": "5.3.12", + "Content-Type": "application/json"} - return result \ No newline at end of file + return relayRequest(request, url, headers) \ No newline at end of file