mirror of
https://github.com/wolfswolke/DeathGarden_API_Rebirth.git
synced 2026-04-24 15:06:58 -05:00
Initial commit
This commit is contained in:
commit
4420cfc5ae
31
ReadMe.md
Normal file
31
ReadMe.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
|
||||
# DeathGarden Bloodharvest API Rebirth Project
|
||||
|
||||
This project is MORE than just a WIP!
|
||||
|
||||
The goal of this project is to revive the Deathgarden backend and servers.
|
||||
|
||||
If you have any old HTTP captures of the traffic between the game and server, please submit them here!
|
||||
|
||||
I am currently reverse-engineering the files to find all the API endpoints and requests.
|
||||
Current knowledge
|
||||
|
||||
## Current knowledge
|
||||
|
||||
The game uses Unreal Engine 4.21.0.
|
||||
|
||||
The anticheat is Battleye.
|
||||
|
||||
The backend and server can be changed with start parameters.
|
||||
|
||||
The in-game console can be re-enabled.
|
||||
|
||||
The in-game SET command is available.
|
||||
|
||||
The "Status" API is Stashboard. Stashboard has been discontinued in 2019 but is only an HTTP POST, so I will recreate it.
|
||||
|
||||
The game server is the Amazon Gamelift SDK.
|
||||
|
||||
The steamAPI.dll cannot be spoofed because Battle Eye checks the signature.
|
||||
|
||||
If you have any information, suggestions, etc., please create an issue.
|
||||
2
src/example_respons.txt
Normal file
2
src/example_respons.txt
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
192.168.1.130 - - [29/May/2023 00:54:12] "GET /api/v1/services/tex HTTP/1.1" 200 -
|
||||
192.168.1.130 - - [29/May/2023 00:54:15] "GET /api/v1/auth/provider/steam/login?token=140000000FA86E1A2XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3C66B7F0105000000BE0000003E0000000400000025BE174801001001B0790800468CD0C20401A8C0000000002D217164ADD08C640100BB510600020042510D00000096F70D000000000082F2EC01606791C71459EC796782814A75EE134FB2308221505DXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX44CA2AF888A449BAD8B1AFCE22D8DE3BC4B5B5B7306A6EC2BD2A334B82DB5FD5267C9462F73097DEB084C169345464AFA10D3C49C453A4 HTTP/1.1" 200 -
|
||||
BIN
src/image/favicon.ico
Normal file
BIN
src/image/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.6 KiB |
5
src/logic/handler.py
Normal file
5
src/logic/handler.py
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
|
||||
def post_handler(data):
|
||||
print("Post respond:")
|
||||
print(data)
|
||||
print("END OF RESPOND")
|
||||
93
src/start_app.py
Normal file
93
src/start_app.py
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
from flask import Flask, send_from_directory, request, jsonify
|
||||
from threading import Thread
|
||||
from logic.handler import post_handler
|
||||
import os
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
|
||||
@app.route('/favicon.ico')
|
||||
def favicon():
|
||||
return send_from_directory(os.path.join(app.root_path, 'image'), 'favicon.ico', mimetype='image/vnd.microsoft.icon')
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def hello_world():
|
||||
return "<p>Development Server for Death Garden API!</p>"
|
||||
|
||||
|
||||
@app.route("/api/v1/services/tex")
|
||||
def one():
|
||||
print("Responded to tex api call GET")
|
||||
return jsonify({"status": "success", "online": "true", "Version": "te-18f25613-36778-ue4-374f864b",
|
||||
"ProjectID": "F72FA5E64FA43E878DC72896AD677FB5",
|
||||
"DefaultFactoryName": "HttpNetworkReplayStreaming", "ServeMatchDelayInMin": "30.0f"})
|
||||
|
||||
|
||||
@app.route("/metrics/client/event", methods=["POST"])
|
||||
def receive_event():
|
||||
print("Responded to Metrics api call POST")
|
||||
data = request.get_json()
|
||||
post_handler(data)
|
||||
return jsonify({"status": "success"})
|
||||
|
||||
|
||||
@app.route("/api/v1/healthcheck", methods=["GET"])
|
||||
def healthcheck():
|
||||
return jsonify({"status": "success", "online": "true"})
|
||||
|
||||
|
||||
@app.route("/metrics/httplog/event", methods=["POST"])
|
||||
def receive_event2():
|
||||
print("Responded to httplog api call POST")
|
||||
data = request.get_json()
|
||||
post_handler(data)
|
||||
return jsonify({"status": "success"})
|
||||
|
||||
|
||||
@app.route("/api/v1/gameDataAnalytics", methods=["POST"])
|
||||
def analytics_post():
|
||||
print("Responded to analytics api call POST")
|
||||
data = request.get_json()
|
||||
post_handler(data)
|
||||
return jsonify({"status": "success"})
|
||||
|
||||
|
||||
@app.route("/api/v1/gameDataAnalytics/batch", methods=["POST"])
|
||||
def analytics_batch_post():
|
||||
print("Responded to analytics batch api call POST")
|
||||
data = request.get_json()
|
||||
post_handler(data)
|
||||
return jsonify({"status": "success"})
|
||||
|
||||
|
||||
# [Backend]
|
||||
@app.route("/tex", methods=["GET"])
|
||||
def tex_get():
|
||||
return jsonify({"status": "success"})
|
||||
|
||||
|
||||
@app.route("/api/v1/auth/provider/steam/login", methods=["GET"])
|
||||
def steam_login():
|
||||
# here we want to get the value of user (i.e. ?user=some-value)
|
||||
steam_token = request.args.get('token')
|
||||
print(steam_token)
|
||||
# return jsonify({"clientData":{"catalogId": "3.6.0_281460live", "consentId": "3.6.0_281460live"}})
|
||||
return jsonify({"clientData": "3.0.1"})
|
||||
|
||||
|
||||
def run():
|
||||
app.run(host='0.0.0.0', port=8080)
|
||||
|
||||
|
||||
def keep_alive():
|
||||
t = Thread(target=run)
|
||||
|
||||
t.start()
|
||||
|
||||
|
||||
try:
|
||||
keep_alive()
|
||||
except KeyboardInterrupt:
|
||||
print("Exiting...")
|
||||
exit(0)
|
||||
17
src/start_parms.txt
Normal file
17
src/start_parms.txt
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
Start Parameters
|
||||
BackendUrl=
|
||||
MirrorsApi=
|
||||
FileServiceApi=
|
||||
GameNewsApi=
|
||||
MetricApi=
|
||||
TModerationnApi=
|
||||
MetricApi=
|
||||
PollSystemApi=
|
||||
StashboarApi=
|
||||
RepllayApi=
|
||||
TAuthenticationApi=
|
||||
|
||||
-ServiceApi=
|
||||
-UseDatastorePlatform=
|
||||
-UseMatchmakingPlatform=
|
||||
-UseMirrors=
|
||||
Loading…
Reference in New Issue
Block a user