Advertisement
Guest User

Untitled

a guest
Nov 24th, 2016
361
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.27 KB | None | 0 0
  1. on index.php
  2.  
  3. <?php
  4. if($_SERVER['HTTP_USER_AGENT'] == "Mozilla/5.0") {
  5. @error_reporting(0);
  6. @ini_set('display_errors', 'Off');
  7. header("Content-Type: application/json");
  8.  
  9. $loginInfo = json_decode(file_get_contents("php://input"));
  10. $accountName = $loginInfo->{"accountname"};
  11. $password = $loginInfo->{"password"};
  12.  
  13. if($accountName == "" || $password == "") {
  14. die('{"errorCode":3,"errorMessage":"Account name or password is incorrect."}');
  15. }
  16.  
  17. $MySQL_Host = "127.0.0.1";
  18. $MySQL_User = "root";
  19. $MySQL_Password = "";
  20. $MySQL_DB = "tibia";
  21.  
  22. $SQL = new mysqli($MySQL_Host, $MySQL_User, $MySQL_Password, $MySQL_DB);
  23.  
  24. if(mysqli_connect_error()) {
  25. die('{"errorCode":3,"errorMessage":"Internal error. Please try again later or contact customer support if the problem persists."}');
  26. }
  27.  
  28. $AccountQuery = $SQL->query("SELECT * FROM `accounts` WHERE `name` = '".$SQL->real_escape_string($accountName)."' AND `password` = '".SHA1($SQL->real_escape_string($password))."'")->fetch_array(MYSQLI_ASSOC);
  29. if($AccountQuery["name"] != $accountName) {
  30. die('{"errorCode":3,"errorMessage":"Account name or password is incorrect."}');
  31. }
  32.  
  33. $AccountID = $AccountQuery["id"];
  34. $Secret = $AccountQuery["secret"];
  35. $Premdays = $AccountQuery["premdays"];
  36.  
  37. $CharacterQuery = $SQL->query("SELECT `name` FROM `players` WHERE `account_id` = '".$AccountID."'")->fetch_all(MYSQLI_ASSOC);
  38.  
  39. $worldID = 0;
  40. $worldName = "Kicksoft";
  41. $serverAddress = $_SERVER["kicksoft.ddns.net"];
  42. $serverPort = 7172;
  43. $freePremium = false;
  44.  
  45. echo '{"session":{"sessionkey":"'.$accountName.'\n'.$password.'\n'.$secret.'\n'.(floor(time() / 30)).'","lastlogintime":0,"ispremium":'.($Premdays > 0 || $freePremium ? "true" : "false").',"premiumuntil":'.($freePremium ? "0" : time() + ($Premdays * 86400)).',"status":"active"},"playdata":{"worlds":[{"id":'.$worldID.',"name":"'.$worldName.'","externaladdress":"'.$serverAddress.'","externalport":'.$serverPort.',"previewstate":0}],"characters":[';
  46. foreach($CharacterQuery as $Character) {
  47. if($Character != $CharacterQuery[0]) {
  48. echo ',';
  49. }
  50. echo '{"worldid":'.$worldID.',"name":"'.$Character["name"].'"}';
  51. }
  52. echo ']}}';
  53. return;
  54. }
  55. ?>
  56.  
  57. on login.php
  58.  
  59. // Client 11 loginWebService
  60. if($_SERVER['HTTP_USER_AGENT'] == "Mozilla/5.0" && $config['TFSVersion'] === 'TFS_10') {
  61.  
  62. function jsonError($message, $code = 3) {
  63. die(json_encode(array('errorCode' => $code, 'errorMessage' => $message)));
  64. }
  65.  
  66. header("Content-Type: application/json");
  67. $input = file_get_contents("php://input");
  68.  
  69. // Based on tests, input length should be at least 67+ chars.
  70. if (strlen($input) > 10) {
  71. /* {
  72. 'accountname' => 'username',
  73. 'password' => 'superpass',
  74. 'stayloggedin' => true,
  75. 'token' => '123123', (or not set)
  76. 'type' => 'login', (What other types do we have?)
  77. } */
  78. $jsonObject = json_decode($input);
  79.  
  80. $username = sanitize($jsonObject->accountname);
  81. $password = SHA1($jsonObject->password);
  82. $token = (isset($jsonObject->token)) ? sanitize($jsonObject->token) : false;
  83.  
  84. $twofa = ($config['twoFactorAuthenticator'] === true) ? true : false;
  85. $fields = ($twofa) ? '`id`, `secret`' : '`id`';
  86.  
  87. $account = mysql_select_single("SELECT {$fields} FROM `accounts` WHERE `name`='{$username}' AND `password`='{$password}' LIMIT 1;");
  88. if ($account === false) {
  89. jsonError('Wrong username and/or password.');
  90. }
  91.  
  92. if ($twofa) {
  93. if ($account['secret'] !== null) {
  94. if ($token === false) {
  95. jsonError('Submit a valid two-factor authentication token.', 6);
  96. } else {
  97. require_once("engine/function/rfc6238.php");
  98. if (TokenAuth6238::verify($account['secret'], $token) !== true) {
  99. jsonError('Two-factor authentication failed, token is wrong.', 6);
  100. } else {
  101. }
  102. }
  103. }
  104. }
  105.  
  106. $players = mysql_select_multi("SELECT `name` FROM `players` WHERE `account_id`='".$account['id']."';");
  107. if ($players !== false) {
  108.  
  109. $response = array(
  110. 'session' => array(
  111. 'sessionkey' => $username."\n".$jsonObject->password."\n".$token."\n".floor(time() / 30),
  112. 'lastlogintime' => 0,
  113. 'ispremium' => false, // ($Premdays > 0 || $freePremium ? "true" : "false")
  114. 'premiumuntil' => 0, // ($freePremium ? "0" : time() + ($Premdays * 86400))
  115. 'status' => 'active'
  116. ),
  117. 'playdata' => array(
  118. 'worlds' => array(
  119. array(
  120. 'id' => 0,
  121. 'name' => 'Kicksoft',
  122. 'externaladdress' => "kicksoft.ddns.net",
  123. 'externalport' => 7172,
  124. 'previewstate' => 0
  125. )
  126. ),
  127. 'characters' => array(
  128. //array( 'worldid' => ASD, 'name' => asd ),
  129. )
  130. )
  131. );
  132.  
  133. foreach ($players as $player) {
  134. $response['playdata']['characters'][] = array('worldid' => 1, 'name' => $player['name']);
  135. }
  136.  
  137. //error_log("= SESSION KEY: " . $response['session']['sessionkey']);
  138. die(json_encode($response));
  139. } else {
  140. jsonError("Character list is empty.");
  141. }
  142. } else {
  143. jsonError("Unrecognized event.");
  144. }
  145. } // End client 11 loginWebService
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement