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 11edbf3abf
12 changed files with 58 additions and 242 deletions

10
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,12 @@ app.databases = {}
api = Api(app) 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) 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

@ -11,9 +11,3 @@ class AccountStats(Resource):
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) 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)

View File

@ -21,18 +21,3 @@ class Command(Resource):
else: else:
result = None result = None
return db.wrap_query_response(result, mode="text") 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":
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")

View File

@ -22,18 +22,3 @@ class Commands(Resource):
else: else:
result = None result = None
return db.wrap_query_response(result, mode="text") 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":
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")

View File

@ -15,13 +15,3 @@ class NewQuery(Resource):
result = db.db.run_query(query) result = db.db.run_query(query)
return db.wrap_query_response(result) 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)

View File

@ -13,11 +13,3 @@ class GetPost(Resource):
result = db.get_post(id) result = db.get_post(id)
return db.wrap_query_response(result) 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)

View File

@ -53,51 +53,3 @@ class GetPosts(Resource):
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)
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)

View File

@ -40,38 +40,3 @@ class GetPostsCount(Resource):
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")
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")

View File

@ -16,14 +16,3 @@ class Query(Resource):
result = [list(d.values()) for d in result] result = [list(d.values()) for d in result]
return db.wrap_query_response(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)

View File

@ -33,30 +33,3 @@ class SetAction(Resource):
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")
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")

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( class UpdateProxy(Resource):
response=response.text,
status=200,
mimetype='application/json'
)
result.headers.add("Access-Control-Allow-Origin", "*")
return result
class FilelistProxy(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)
result = app.response_class( class AgreementProxy(Resource):
response=response.text, def post(self):
status=200, url = "https://apidgp-gameplayer.games.dmm.com/v5/agreement/confirm/client"
mimetype='application/json' headers = {"User-Agent": "DMMGamePlayer5-Win/5.3.12 Electron/32.1.0",
) "Client-App": "DMMGamePlayer5",
result.headers.add("Access-Control-Allow-Origin", "*") "Client-version": "5.3.12",
"Content-Type": "application/json"}
return result return relayRequest(request, url, headers)