mirror of
https://github.com/gooba42/adventureland.git
synced 2026-10-14 10:33:47 -05:00
JSON API to save bandwidth and prevent double encoding
This commit is contained in:
@@ -1689,8 +1689,9 @@ def delete_map_api(**args):
|
||||
jhtml(self,[{"type":"success","message":"Done!"},selection_info(self,user,domain)])
|
||||
|
||||
def test_api(**args):
|
||||
self,user,server,domain=gdmuld(args,"self","user","server","domain")
|
||||
self,user,server,domain,a=gdmuld(args,"self","user","server","domain","a")
|
||||
logging.info("test")
|
||||
logging.info(a)
|
||||
jfunc(self,"alert",["lol"])
|
||||
jhtmls(self,"test")
|
||||
|
||||
@@ -1718,15 +1719,15 @@ def server_api(name="",extra="",extra2=""):
|
||||
domain=gdi(self)
|
||||
server=get_server(self,domain)
|
||||
args,method=gdmul(self,"arguments","method")
|
||||
if security_threat(self,domain): return "security_threat"
|
||||
if security_threat(self,domain): return jhtml(self,{"failed":1,"reason":"security_threat"})
|
||||
user=get_user(self,domain,api_override=(server and method and method!="start_character")) # only "start_character" has an auth check, the rest doesn't re-check user auths #IMPORTANT! [09/08/20]
|
||||
method="%s_api"%method
|
||||
if args: args=json.loads(args)
|
||||
if not args: args={}
|
||||
logging.info("\n\nAPI Method Called: %s Arguments: %s\n"%(method,simplify_args_for_logging(args)))
|
||||
if not user and method not in ["log_error_api","signup_or_login_api","load_article_api","get_server_api","test_api","create_server_api","stop_server_api","update_server_api","reload_server_api","set_friends_api","not_friends_api","password_reminder_api","server_event_api","reset_password_api","ban_user_api","send_mail_api","log_chat_api","take_item_from_mail_api","broadcast_api"]:
|
||||
if self.values.get("server_auth"): jhtml(self,{"failed":1,"reason":"nouser"}); return "nouser"
|
||||
jhtml(self,[{"type":"func","func":"add_log","args":["Not logged in."]}]); return "notloggedin"
|
||||
if self.values.get("server_auth"): return jhtml(self,{"failed":1,"reason":"nouser"})
|
||||
return jhtml(self,[{"type":"func","func":"add_log","args":["Not logged in."]}])
|
||||
function=globals().get(method)
|
||||
args["domain"]=domain
|
||||
args["user"]=user
|
||||
@@ -1740,3 +1741,45 @@ def server_api(name="",extra="",extra2=""):
|
||||
safe_commit(user); safe_commit(server); domain_routine(domain)
|
||||
return request.response
|
||||
|
||||
@app.route('/json_api', methods=['POST'])
|
||||
@app.route('/json_api/<name>', methods=['POST'])
|
||||
@app.route('/json_api/<name>/<extra>', methods=['POST'])
|
||||
@app.route('/json_api/<name>/<extra>/<extra2>', methods=['POST'])
|
||||
@ndb.toplevel
|
||||
def json_server_api(name="",extra="",extra2=""):
|
||||
json_data = json.loads(request.data.decode('utf-8'))
|
||||
args=json_data["args"]
|
||||
method=json_data["method"]
|
||||
self=request # [26/01/24] easier for now
|
||||
domain=gdi(self)
|
||||
server=None
|
||||
if json_data.get("server_auth"):
|
||||
#logging.info("here")
|
||||
id,auth=json_data.get("server_auth").split("-")
|
||||
s=get_by_iid("server|%s"%id)
|
||||
if s and gf(s,"auth")==auth:
|
||||
server=s
|
||||
#logging.info(server)
|
||||
if security_threat(self,domain): return jhtml(self,{"failed":1,"reason":"security_threat"})
|
||||
user=get_user(self,domain,api_override=(server and method and method!="start_character"),auth=json_data.get("auth"))
|
||||
# only "start_character" has an auth check, the rest doesn't re-check user auths #IMPORTANT! [09/08/20]
|
||||
method="%s_api"%method
|
||||
if not args: args={}
|
||||
logging.info("\n\nAPI Method Called: %s Arguments: %s\n"%(method,simplify_args_for_logging(args)))
|
||||
if not user and method not in ["log_error_api","signup_or_login_api","load_article_api","get_server_api","test_api","create_server_api","stop_server_api","update_server_api","reload_server_api","set_friends_api","not_friends_api","password_reminder_api","server_event_api","reset_password_api","ban_user_api","send_mail_api","log_chat_api","take_item_from_mail_api","broadcast_api"]:
|
||||
if json_data.get("server_auth"): return jhtml(self,{"failed":1,"reason":"nouser"})
|
||||
return jhtml(self,[{"type":"func","func":"add_log","args":["Not logged in."]}])
|
||||
function=globals().get(method)
|
||||
args["domain"]=domain
|
||||
args["user"]=user
|
||||
args["server"]=server
|
||||
args["self"]=self
|
||||
if user and not server and gf(user,"blocked_until",really_old)>datetime.now() and method not in ["logout_api_X"]: return jhtml(self,[{"type":"func","func":"add_log","args":["Blocked"]}])
|
||||
if function: function(**args)
|
||||
else:
|
||||
if args.get("dataType")=="json": jhtml(self,[{"type":"ui_log","message":"Invalid method"}])
|
||||
else: logging.error("no function")
|
||||
safe_commit(user); safe_commit(server); domain_routine(domain)
|
||||
return request.response
|
||||
|
||||
|
||||
|
||||
@@ -114,13 +114,15 @@ if is_production:
|
||||
#maps["desertland"]["key"]="jayson_desertland_copy"
|
||||
pass
|
||||
|
||||
game_version=831
|
||||
game_version=833
|
||||
SALES=4+5+388+5101+125/20 #donation+manual+macos+steam+sales
|
||||
update_notes=[
|
||||
"Happy Holidays!",
|
||||
"Last Update [21st of December]",
|
||||
"Last Update [1st of January]",
|
||||
"New Item: Orb of Temporal Forces",
|
||||
]
|
||||
"New JSON API to save bandwidth (Internal)",
|
||||
"(Slight change something might break)"
|
||||
]
|
||||
ip_to_subdomain={ #IMPORTANT: SPECIAL PAGE RULES ARE NEEDED: https://dash.cloudflare.com/b6f5a13bded5fdd273e4a1cd3777162d/adventure.land/page-rules - uss1 / eus1 was best
|
||||
"35.187.255.184":"asia1",
|
||||
"35.246.244.105":"eu1",
|
||||
|
||||
+2
-2
@@ -299,7 +299,7 @@ def disable_email(email,logging=None):
|
||||
user.put()
|
||||
logging.info("Disabled emails for %s"%user)
|
||||
|
||||
def get_user(request=None,domain=None,email=None,phrase_check=False,api_override=None):
|
||||
def get_user(request=None,domain=None,email=None,phrase_check=False,api_override=None,auth=None):
|
||||
if email:
|
||||
try:
|
||||
email=purify_email(email)
|
||||
@@ -312,7 +312,7 @@ def get_user(request=None,domain=None,email=None,phrase_check=False,api_override
|
||||
except:
|
||||
logTrace()
|
||||
elif request:
|
||||
auth=get_cookie(request,"auth") or request.values.get("auth")
|
||||
auth=get_cookie(request,"auth") or request.values.get("auth") or auth
|
||||
if auth:
|
||||
id,auth=auth.replace('"',"").split("-")
|
||||
get_user_data(id,_async=True) #trigger the get
|
||||
|
||||
+4
-3
@@ -5424,12 +5424,13 @@ function d_text(message,x,y,args)
|
||||
function api_call(method,args,r_args)
|
||||
{
|
||||
if(!args) args={}; if(!r_args) r_args={};
|
||||
var api_path="/api/"+method,disable=r_args.disable;
|
||||
var api_path="/json_api/"+method,disable=r_args.disable;
|
||||
if(args.ui_loader) { r_args.r_id=randomStr(10); delete args.ui_loader; }
|
||||
if(args.callback) { r_args.callback=args.callback; delete args.callback; }
|
||||
if(disable) disable.addClass("disable");
|
||||
if(window.is_electron) args.epl=electron_data.platform;
|
||||
data={ 'method':method, 'arguments':JSON.stringify(args) };
|
||||
// data={ 'method':method, 'arguments':JSON.stringify(args) };
|
||||
data={ 'method':method, 'args':args };
|
||||
function on_success(r_args,disable) {
|
||||
return function(ct) {
|
||||
if(r_args.r_id) hide_loader(r_args.r_id);
|
||||
@@ -5453,7 +5454,7 @@ function api_call(method,args,r_args)
|
||||
}
|
||||
}
|
||||
if(r_args.r_id) show_loader(r_args.r_id);
|
||||
call_args={type:'POST',dataType:"json",url:window.location.origin+api_path,data:data,success:on_success(r_args,disable),error:on_error(r_args,disable)}
|
||||
call_args={type:'POST',dataType:"json",contentType: "application/json; charset=utf-8", url:window.location.origin+api_path,data:JSON.stringify(data),success:on_success(r_args,disable),error:on_error(r_args,disable)}
|
||||
$.ajax(call_args);
|
||||
if(r_args.promise)
|
||||
{
|
||||
|
||||
@@ -3196,7 +3196,7 @@ function xy_upush_logic(element) {
|
||||
}
|
||||
|
||||
function appengine_call(method, args, on_success, on_error) {
|
||||
var api_path = "/api/" + method,
|
||||
var api_path = "/json_api/" + method,
|
||||
suffix = "";
|
||||
if (
|
||||
mode.prevent_external &&
|
||||
@@ -3231,16 +3231,16 @@ function appengine_call(method, args, on_success, on_error) {
|
||||
suffix = args.suffix;
|
||||
delete args.suffix;
|
||||
}
|
||||
var arguments = JSON.stringify(args);
|
||||
// var arguments = JSON.stringify(args);
|
||||
var data = {
|
||||
method: method,
|
||||
arguments: arguments,
|
||||
args: args,
|
||||
server_auth: server_id + "-" + server_auth,
|
||||
auth: args.auth,
|
||||
};
|
||||
if (suffix.includes("unmount")) console.log(arguments.length);
|
||||
// if (suffix.includes("unmount")) console.log(arguments.length);
|
||||
try {
|
||||
request.post({ url: base_url + api_path, form: data }, function (err, response, body) {
|
||||
request.post({ url: base_url + api_path, json: data }, function (err, response, body) {
|
||||
try {
|
||||
if (err || !response || response.statusCode != 200) {
|
||||
// node.request sends an undefined response when there is an issue ...
|
||||
@@ -3279,9 +3279,9 @@ function appengine_call(method, args, on_success, on_error) {
|
||||
on_error("" + err + " " + (response && response.statusCode));
|
||||
}
|
||||
} else {
|
||||
ct = JSON.parse(body);
|
||||
if (typeof body === "string") body = JSON.parse(body);
|
||||
if (on_success) {
|
||||
on_success.apply(this, [ct]);
|
||||
on_success.apply(this, [body]);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
runtime: python313
|
||||
runtime: python312
|
||||
app_engine_apis: true
|
||||
builtins:
|
||||
- deferred: on
|
||||
|
||||
Reference in New Issue
Block a user