From b837ef02aff4c0974161ff2e077551a9710fdac5 Mon Sep 17 00:00:00 2001 From: bigfoot547 Date: Thu, 11 Jan 2024 00:39:56 -0600 Subject: add auth --- src/launch.c | 60 ++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 18 deletions(-) (limited to 'src/launch.c') diff --git a/src/launch.c b/src/launch.c index a8ea689..942cbbb 100644 --- a/src/launch.c +++ b/src/launch.c @@ -3,6 +3,8 @@ #include "l2su.h" #include "launch.h" #include "macros.h" +#include "user.h" +#include "uuid/uuid.h" #include "version.h" #include "assets.h" #include "args.h" @@ -261,9 +263,12 @@ int l2_launch_init_substitutor(struct l2_launch *launch) #define L2_LAUNCH_ADD_SUB(_st, _name, _val) \ if (l2_subst_add(_st, _name, _val) < 0) goto cleanup + int ret = -1; char *keyname = NULL, *apath = NULL; size_t keycap = 0, acap = 0; + char *props_arr = NULL, *props_map = NULL; + char *classpath = launch->classpath; const char *ver_name; @@ -276,16 +281,38 @@ int l2_launch_init_substitutor(struct l2_launch *launch) if (l2_subst_init(&launch->arg_subst) < 0) goto cleanup; l2_subst_t *st = launch->arg_subst; - L2_LAUNCH_ADD_SUB(st, "auth_access_token", "-"); - L2_LAUNCH_ADD_SUB(st, "user_properties", "{}"); - L2_LAUNCH_ADD_SUB(st, "user_property_map", "{}"); - L2_LAUNCH_ADD_SUB(st, "auth_xuid", "null"); - L2_LAUNCH_ADD_SUB(st, "clientid", "null"); - L2_LAUNCH_ADD_SUB(st, "auth_session", "-"); + l2_user_session_t *session = NULL; + if (launch->user) session = launch->user->session; + + if (l2_user_session_fill_subst(session, st) < 0) goto cleanup; + + if (launch->user && *launch->user->profile.name) { + char uuidstr[UUID_STRLEN_SHORT + 1]; + + l2_uuid_to_string_short(&launch->user->profile.uuid, uuidstr); + + L2_LAUNCH_ADD_SUB(st, "auth_player_name", launch->user->profile.name); + L2_LAUNCH_ADD_SUB(st, "auth_uuid", uuidstr); + + props_arr = l2_user_properties_serialize(&launch->user->profile, true); + props_map = l2_user_properties_serialize(&launch->user->profile, false); - L2_LAUNCH_ADD_SUB(st, "auth_player_name", "figboot"); - L2_LAUNCH_ADD_SUB(st, "auth_uuid", "afc3f2d153844959bd05b2a5dc519c06"); - L2_LAUNCH_ADD_SUB(st, "user_type", "msa"); + if (!props_arr || !props_map) goto cleanup; + + L2_LAUNCH_ADD_SUB(st, "user_properties", props_arr); + L2_LAUNCH_ADD_SUB(st, "user_property_map", props_map); + } else { + uuid_t rnduuid; + char rnduuidstr[UUID_STRLEN_SHORT + 1]; + + l2_uuid_random(&rnduuid); + l2_uuid_to_string_short(&rnduuid, rnduuidstr); + + L2_LAUNCH_ADD_SUB(st, "auth_player_name", "Player$"); + L2_LAUNCH_ADD_SUB(st, "auth_uuid", rnduuidstr); + L2_LAUNCH_ADD_SUB(st, "user_properties", "[]"); + L2_LAUNCH_ADD_SUB(st, "user_property_map", "{}"); + } if (launch->instance) { L2_LAUNCH_ADD_SUB(st, "profile_name", launch->instance->name); @@ -339,23 +366,20 @@ int l2_launch_init_substitutor(struct l2_launch *launch) } } - free(keyname); - free(apath); - - keyname = NULL; - apath = NULL; - launch->classpath = classpath; - - return 0; + classpath = NULL; + ret = 0; cleanup: free(keyname); free(apath); + free(props_arr); + free(props_map); + if (classpath != launch->classpath) free(classpath); - return -1; + return ret; #undef L2_LAUNCH_ADD_SUB } -- cgit v1.2.3-70-g09d2