import 'dart:convert'; import 'dart:io'; import 'dart:math'; import 'package:http/http.dart' as http; import 'package:mhunt_launcher/Backend/Structures.dart'; import 'package:mhunt_launcher/Shared/Helpers.dart'; import 'package:path_provider/path_provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'DebugHelper.dart'; class Backend { static const String API_ENDPOINT = Helpers.WEB2_ENDPOINT; static const String GUEST_PREFIX = "slguest"; static List Games = [ GameData(0, "mhunt", "Metahunt", "High-Stake Battle Royale game with Play to earn abilities", "images/mhunt_thumbnail.png", true, "METAHUNT.exe"), GameData(1, "pop3d", "Pop3D", "a game I dont know much about xD", "images/pop3d_thumbnail.png", false, "pop3d.exe"), ]; static SharedPreferences? prefs; static Directory? docPath; static String Username = ""; static String displayName = ""; static String walletAddress = ""; static String pubKey = ""; static String ticketsATA = ""; static int SolBalance =0; static int TicketsBalance = 0; static Map UserJson = {'username': 'test', 'passwd': 'test123'}; static Future Login(String username, String password) async { var loginResponse = null; init(); try { String url = '${API_ENDPOINT}login.php'; loginResponse = (await http.post(Uri.parse(url), body: {"username": username, "password": password})); Debug.LogResponse(loginResponse.body.toString(), src: url); if(loginResponse.body.toString().contains("no user")){ return false; } try { Username = username; dynamic responseJson = jsonDecode(loginResponse.body.toString()); displayName = responseJson['display_name']; SetUsernamePassword(username, password); return true; } catch (e) {} } catch (e) { Debug.LogError("Error while login $e"); return false; } return false; } static void init() async { prefs = await SharedPreferences.getInstance(); docPath = await getDownloadsDirectory(); } static Future Register(String username, String password, String displayname) async { var loginResponse = null; init(); try { loginResponse = (await http.post(Uri.parse('${API_ENDPOINT}register.php'), body: {"username": username, "password": password, "display_name": displayname})); Debug.LogResponse(loginResponse.body.toString(), src: '${API_ENDPOINT}register.php'); try { SetUsernamePassword(username, password); Username = username; Debug.Log("User is " + username); displayName = displayname; return true; } catch (e) {} } catch (e) { Debug.LogError("Error while login $e"); } return false; } static Future GetPubkey() async{ String url ='${API_ENDPOINT}get_wallet.php?username=${Username}'; var response = await http.get(Uri.parse(url)); Debug.LogResponse(response.body.toString(), src: url); pubKey = jsonDecode(response.body.toString())["pub_key"]; ticketsATA = await GetTicketsAccount(); return pubKey; } static Future GetWalletBalance() async{ SolBalance = await GetSolBalance(); TicketsBalance = await GetTicketsBalance(); } static Future GetSolBalance() async{ try { String url = '${API_ENDPOINT}get_wallet_balance.php?wallet=${pubKey}'; var response = await http.get(Uri.parse(url)); Debug.LogResponse(response.body.toString(), src: url); return jsonDecode(response.body.toString())["balance"]; }catch(e){ return 0; } } static Future GetTicketsBalance() async{ try { String url = '${API_ENDPOINT}get_tickets_balance.php?wallet=${pubKey}'; var response = await http.get(Uri.parse(url)); Debug.LogResponse(response.body.toString(), src: url); String balanceString = jsonDecode(response.body.toString())["balance"]; return int.parse(balanceString); }catch(e){ return 0; } } static Future GetTicketsAccount() async{ try { String url = '${Helpers.SOBRIDGE_ENDPOINT}getTicketsATA?wallet=${pubKey}'; var response = await http.get(Uri.parse(url)); Debug.LogResponse(response.body.toString(), src: url); return jsonDecode(response.body.toString())["ATA"]; }catch(e){ return ""; } } static Future PurchaseTickets(int amount) async{ String email = UserJson['username']; String password = UserJson['passwd']; String url ='${Helpers.SOBRIDGE_ENDPOINT}purchaseTickets?email=$email&password=$password&amount=$amount'; Debug.Log("Requesting ticket purchase"); var response = await http.get(Uri.parse(url)); Debug.LogResponse(response.body.toString(), src: url); dynamic resJson = jsonDecode(response.body.toString()); return resJson; } static void SetUsernamePassword(String username, String passwd) { UserJson = {'username': username, 'passwd': passwd}; } static Future> GetLeaderboard(String gameCode) async { String url = '${API_ENDPOINT}/${gameCode}/get_leaderboard.php'; var leaderboardResponse = await http.get(Uri.parse(url)); return LeaderboardEntry.listFromJson(leaderboardResponse.body); } static Future>> GetNewsForGame(int gameId) async { String url = '${API_ENDPOINT}${Games[gameId].code}/get_news.php'; try { var res = await http.get(Uri.parse(url)); List jsonList = jsonDecode(res.body); List> output = []; jsonList.forEach((element) { output.add(element as Map); }); return output; } catch (e) { Debug.LogError(e); } return [{}]; } static Future> GetUserStatsForGame(int gameId) async { var loginResponse = null; init(); try { String url = '${API_ENDPOINT}${Games[gameId].code}/get_user_stats.php'; loginResponse = (await http.post(Uri.parse(url), body: {"username": Username ?? "test"})); Debug.LogResponse(loginResponse.body.toString(), src: url); return jsonDecode(loginResponse.body); } catch (e) { Debug.LogError("Error while login $e"); } return {}; } static Future CreateRequest() async { var loginResponse = null; try { String url = '${API_ENDPOINT}create_request.php'; loginResponse = await http.get(Uri.parse(url)); Debug.LogResponse(loginResponse.body.toString(), src: url); return loginResponse.body.toString(); } catch (e) { Debug.LogError("Error while login $e"); } return "-1"; } static Future GetRequestResponse(String id) async { var loginResponse = null; try { String url = '${API_ENDPOINT}get_request_response.php'; loginResponse = (await http.post(Uri.parse(url), body: {"id": id.toString()})); Debug.LogResponse(loginResponse.body.toString(), src: url); return loginResponse.body; } catch (e) { Debug.LogError("Error while login $e"); } return "-1"; } static Future GetDisplayName(String id) async { var response = null; try { String url = '${API_ENDPOINT}get_display_name.php'; response = (await http.post(Uri.parse(url), body: {"id": id.toString()})); Debug.LogResponse(response.body.toString()+":id=${id}", src: url); return response.body; } catch (e) { Debug.LogError("Error while login $e"); } return "-1"; } static Future GetUsernameValidation(String username) async { var loginResponse = null; try { String url = '${API_ENDPOINT}validate_username.php'; loginResponse = (await http.post(Uri.parse(url), body: {"username": username})); Debug.LogResponse(loginResponse.body.toString(), src: url); if (loginResponse.body == "0") { return true; } else { return false; } } catch (e) { Debug.LogError("Error while login $e"); } return false; } static Future GetNextGuestUsername() async{ try{ String url = '${API_ENDPOINT}get_next_guest_username.php'; var response = await http.get(Uri.parse(url)); return response.body.toString(); }catch(e){ } Random random = new Random(); return 'guest ${random.nextInt(10000000)}'; } static Future CreateNewRequest() async{ try{ String url = '${API_ENDPOINT}create_new_request.php'; var response = await http.get(Uri.parse(url)); Debug.LogResponse(response.body.toString(), src:url); return response.body.toString(); }catch(e){ } return ""; } static VaultData vault = VaultData('0x0', 0, 0); static Future RefreshVaultData() async{ var response = null; try{ String url = '${API_ENDPOINT}get_vault_data.php'; response = (await http.post(Uri.parse(url), body: {"id": Username})); Debug.LogResponse(response.body.toString(), src:url); vault = jsonDecode(response.body.toString()); }catch(e){ } return vault; } } class GameData { int id; String code; String name; String description; String imagePath; bool isAvailable; String exeName; GameData(this.id, this.code, this.name, this.description, this.imagePath, this.isAvailable, this.exeName); } class VaultData{ String address; int vc; int php; VaultData(this.address, this.vc, this.php); }