Advertisement
Guest User

Houdini

a guest
Oct 28th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.25 KB | None | 0 0
  1. class Registration extends PDO {
  2. private $config = [
  3. 'Host' => '127.0.0.1',
  4. 'Database' => 'houdini',
  5. 'User' => 'root',
  6. 'Pass' => '',
  7. ];
  8. public function __construct(){
  9. parent::__construct('mysql:host='. $this->config['Host'] . ';dbname=' . $this->config['Database'], $this->config['User'], $this->config['Pass']);
  10. }
  11. public function encryptPassword($password, $md5 = true) {
  12. if($md5 !== false) {
  13. $password = md5($password);
  14. }
  15. $hash = substr($password, 16, 16) . substr($password, 0, 16);
  16. return $hash;
  17. }
  18. public function sendError($errorType, $message){
  19. switch($errorType){
  20. case "success":
  21. $error = "<div class=\"alert alert-success\">{$message}</div>";
  22. break;
  23. case "error":
  24. $error = "<div class=\"alert alert-danger\">{$message}</div>";
  25. break;
  26. }
  27. return $error;
  28. }
  29. public function getLoginHash($password, $staticKey) {
  30. $hash = $this->encryptPassword($password, false);
  31. $hash .= $staticKey;
  32. $hash .= 'Y(02.>\'H}t":E1';
  33. $hash = $this->encryptPassword($hash);
  34. $hash = password_hash($hash, PASSWORD_DEFAULT, [ 'cost' => 12 ]);
  35. return $hash;
  36. }
  37.  
  38. public function addUser($username, $email, $password, $color){
  39. $hashedPassword = strtoupper(md5($password));
  40. $staticKey = 'e4a2dbcca10a7246817a83cd';
  41. $fancyPassword = $this->getLoginHash($hashedPassword, $staticKey);
  42. $strQuery = "INSERT INTO penguins (ID, Username, Nickname, Password, LoginKey, Email, RegistrationDate, LastPaycheck, Color, Inventory, Igloos, Floors, Furniture, Stamps, Buddies, Ignore) VALUES (NULL, :username, :username, :password, '', :email, :TimeDate, '', :color, '', '1', '', '', '7', '', '')";
  43. $insertUser = $this->prepare($strQuery);
  44. $insertUser->bindValue(":username", $username);
  45. $insertUser->bindValue(":email", $email);
  46. $insertUser->bindValue(":TimeDate", time());
  47. $insertUser->bindValue(":password", $fancyPassword);
  48. $insertUser->bindValue(":color", $color);
  49. $insertUser->execute();
  50. $insertUser->closeCursor();
  51.  
  52. $penguinId = $this->lastInsertId();
  53. $this->addActiveIgloo($penguinId);
  54. $this->addColors($penguinId);
  55. return $penguinId;
  56. }
  57.  
  58. private function addColors($penguinId) {
  59. $insertStatement = $this->prepare("UPDATE `penguins` SET `Inventory` = '%14%1%2%3%4%5%6%7%8%9%10%11%12%13%15' WHERE ID = :Penguin;");
  60. $insertStatement->bindValue(":Penguin", $penguinId);
  61. $insertStatement->execute();
  62. $insertStatement->closeCursor();
  63. }
  64.  
  65. private function addActiveIgloo($penguinId) {
  66. $insertStatement = $this->prepare("INSERT INTO `igloos` (`ID`, `Owner`, `Furniture`) VALUES (NULL, :Owner, '');");
  67. $insertStatement->bindValue(":Owner", $penguinId);
  68. $insertStatement->execute();
  69. $insertStatement->closeCursor();
  70. $iglooId = $this->lastInsertId();
  71.  
  72. $setActiveIgloo = $this->prepare("UPDATE `penguins` SET `Igloo` = :Igloo WHERE ID = :Penguin;");
  73. $setActiveIgloo->bindValue(":Igloo", $iglooId);
  74. $setActiveIgloo->bindValue(":Penguin", $penguinId);
  75. $setActiveIgloo->execute();
  76. $setActiveIgloo->closeCursor();
  77. }
  78.  
  79. public function getID($penguinId){
  80. $strQuery = 'SELECT ID FROM penguins WHERE ID = :ID';
  81. $getID = $this->prepare($strQuery);
  82. $getID->bindValue(':ID', $penguinId);
  83. $getID->execute();
  84. $idExists = $getID->rowCount() > 0;
  85. return $idExists;
  86. }
  87.  
  88. public function usernameExists($username){
  89. $strQuery = 'SELECT Username FROM penguins WHERE Username = :username';
  90. $checkUsername = $this->prepare($strQuery);
  91. $checkUsername->bindValue(':username', $username);
  92. $checkUsername->execute();
  93. $usernameExists = $checkUsername->rowCount() > 0;
  94. return $usernameExists;
  95. }
  96.  
  97. public function EmailExists($email){
  98. $strQuery = 'SELECT Email FROM penguins WHERE Email = :email';
  99. $checkEmail = $this->prepare($strQuery);
  100. $checkEmail->bindValue(':email', $email);
  101. $checkEmail->execute();
  102. $emailExists = $checkEmail->rowCount() > 0;
  103. return $emailExists;
  104. }
  105. }
  106. $db = new Registration();
  107. if(isset($_POST) && !empty($_POST)){
  108. if(isset($_POST["username"],$_POST["email"], $_POST["password"], $_POST["repassword"], $_POST["penguinColor"], $_POST["g-recaptcha-response"]) && !empty($_POST["username"]) && !empty($_POST["email"]) && !empty($_POST["password"]) && !empty($_POST["repassword"]) && !empty($_POST["penguinColor"]) && !empty($_POST["g-recaptcha-response"])){
  109. $strUsername = $_POST["username"];
  110. $strEmail = $_POST["email"];
  111. $strPassword = $_POST["password"];
  112. $strRePassword = $_POST["repassword"];
  113. $intColor = $_POST["penguinColor"];
  114. $strCaptcha = $_POST["g-recaptcha-response"];
  115. $intIP = $_SERVER['REMOTE_ADDR'];
  116. $strSecretKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
  117. $strResponse = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$strSecretKey."&response=".$strCaptcha."&remoteip=".$intIP);
  118. $strResponseKeys = json_decode($strResponse, true);
  119. $censor = new CensorWords;
  120. $cen = $censor->censorString($strUsername);
  121. if($db->usernameExists($strUsername)){
  122. $error = $db->sendError('error', 'There was an error!');
  123. }
  124. //elseif(in_array($strUsername, $strBadNames)){
  125. elseif(count($cen['matched']) > 0){
  126. $strBad = "";
  127. foreach ($cen['matched'] as $bad) {
  128. $strBad .= "$bad ";
  129. }
  130. $error = $db->sendError('error', 'This username is not allowed: ' . $strBad);
  131. }
  132. elseif($db->emailExists($strEmail)){
  133. $error = $db->sendError('error', 'There was an error!');
  134. }
  135. elseif(strlen($strUsername) == 0){
  136. $error = sendError('error', 'You need to provide a name for your penguin.');
  137. }
  138. elseif(strlen($strUsername) < 4 || strlen($strUsername) > 21){
  139. $error = $db->sendError('error', 'Your penguin name is either too short or too long.');
  140. }
  141. elseif(preg_match_all("/[0-9]/", $strUsername) > 21){
  142. $error = $db->sendError('error', 'Your penguin name can only contain 21 numbers.');
  143. }
  144. elseif(!preg_match("/[A-z]/i", $strUsername)){
  145. $error = $db->sendError('error', 'Penguin names must contain at least 1 letter.');
  146. }
  147. elseif(preg_match('/[^a-z0-9\s]/i', $strUsername)){
  148. $error = $db->sendError('error', 'That username is not allowed.');
  149. }
  150. elseif(!filter_var($strEmail, FILTER_VALIDATE_EMAIL)){
  151. $error = $db->sendError('error', 'Your email isn\'t valid.');
  152. }
  153. elseif(strlen($strPassword) < 4) {
  154. $error = $db->sendError('error', "Your password is too short!");
  155. }
  156. elseif($strPassword != $strRePassword){
  157. $error = $db->sendError('error', "Passwords do not match!");
  158. }
  159. elseif(!$strCaptcha){
  160. $error = $db->sendError('error', 'Please fill out the captcha.');
  161. die();
  162. }
  163. /*elseif(intval($strResponseKeys["success"]) !== 1) {
  164. $error = $db->sendError('error', 'Invalid validation!');
  165. }*/
  166. if(empty($error)){
  167. $db->addUser($strUsername, $strEmail, $strPassword, $intColor);
  168. echo '<script language="javascript">';
  169. echo 'window.onload = function () {';
  170. echo 'swal("Well done!", "You have successfully registered!", "success")';
  171. echo '};';
  172. echo '</script>';
  173. }
  174. } else
  175. {
  176. $error = $db->sendError('error', "Please complete all the fields.");
  177. }
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement