Advertisement
Guest User

Houdini

a guest
Oct 28th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.26 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 = '6LcJnSwUAAAAANvxqWMD83s_xpn12awpQ7-QOlxx';
  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