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.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)

View File

@ -3,31 +3,30 @@ 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")
@ -37,16 +36,6 @@ class Database:
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/<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):
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

View File

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

View File

@ -21,18 +21,3 @@ class Command(Resource):
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":
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:
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":
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)
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)
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)
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)
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]
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)
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 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)
return relayRequest(request, url, headers)
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):
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)
return relayRequest(request, url, headers)
result = app.response_class(
response=response.text,
status=200,
mimetype='application/json'
)
result.headers.add("Access-Control-Allow-Origin", "*")
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
return relayRequest(request, url, headers)