Advertisement
Guest User

Untitled

a guest
May 13th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.14 KB | None | 0 0
  1. <?php
  2. //Sweater FLASH Registered
  3. //By NICO
  4. final class Database extends PDO {
  5.  
  6.     private $config = [
  7.         "Host" => "127.0.0.1",
  8.         "User" => "root",
  9.         "Pass" => "0asiodjk3r9hj2r98yu8rfjrji8e4juehfuh",
  10.         "Name" => "sweater"
  11.     ];
  12.  
  13.     private $connection = null;
  14.  
  15.     public function __construct() {
  16.         $connectionString = sprintf("mysql:dbname=%s;host=%s", $this->config["Name"], $this->config["Host"]);
  17.  
  18.         parent::__construct($connectionString, $this->config["User"], $this->config["Pass"]);
  19.     }
  20.  
  21.     public function addUser($username, $password, $color, $email, $IP) {
  22.         $hashedPassword = strtoupper(md5($password));
  23.         $IP = $_SERVER['REMOTE_ADDR'];
  24.  
  25.         $insertPenguin = "INSERT INTO `users` (`ID`, `Username`, `Password`, `LoginKey`, `Active`, `Status`, `RegisteredTime`, `Coins`, `Color`, `Head`, `Face`, `Neck`, `Body`, `Hand`, `Feet`, `Photo`, `Flag`, `Buddies`, `Ignores`, `Banned`, `Inventory`, `Igloo`, `Igloos`, `Music`, `Floor`, `RoomFurniture`, `Furniture`, `Postcards`, `Moderator`, `Rank`, `LastLogin`, `Title`, `Nameglow`, `Namecolor`, `Text`, `Bubblecolor`, `Ringcolor`, `Moodcolor`, `Moodglow`, `Speed`, `Mood`, `IP`) VALUES ";
  26.         $insertPenguin .= "(NULL, :Username, :Password, NULL, :ee, :aa, NULL, :cc, :ee, :bb, :bb, :bb, :bb, :bb, :bb, :bb, :bb, :aa, :aa, :bb, NULL, :dd, :aa, :bb, :bb, :aa, :aa, :aa, :bb, :ee, NULL, :aa, :aa, :aa, :aa, :aa, :aa, :aa, :aa, :jj, :aa, :IP);";
  27.        
  28.         $insertStatement = $this->prepare($insertPenguin);
  29.         $insertStatement->bindValue(":Username", $username);
  30.         $insertStatement->bindValue(":Password", $hashedPassword);
  31.         $insertStatement->bindValue(":Email", $email);
  32.         $insertStatement->bindValue(":Color", $color);
  33.         $insertStatement->bindValue(":IP", $IP);
  34.         $insertStatement->bindValue(":aa", '');
  35.         $insertStatement->bindValue(":bb", '0');
  36.         $insertStatement->bindValue(":cc", '500');
  37.         $insertStatement->bindValue(":dd", '2');
  38.         $insertStatement->bindValue(":ee", '1');
  39.         $insertStatement->bindValue(":ff", '1%1%-1%1');
  40.         $insertStatement->bindValue(":gg", '4');
  41.         $insertStatement->bindValue(":hh", '100');
  42.         $insertStatement->bindValue(":ii", '0,0,0');
  43.         $insertStatement->bindValue(":jj", '4');
  44.        
  45.        
  46.         $insertStatement->execute();
  47.         $insertStatement->closeCursor();
  48.        
  49.         $penguinId = $this->lastInsertId();
  50.        
  51.         $this->addActiveIgloo($penguinId);
  52.         $this->sendMail($penguinId, "sys", 0, "", time(), 125);
  53.     }
  54.    
  55.     public function sendMail($recipientId, $senderName, $senderId, $postcardDetails, $sentDate, $postcardType) {
  56.         $sendMail = $this->prepare("INSERT INTO `postcards` (`ID`, `Recipient`, `SenderName`, `SenderID`, `Details`, `Date`, `Type`) VALUES (NULL, :Recipient, :SenderName, :SenderID, :Details, :Date, :Type)");
  57.         $sendMail->bindValue(":Recipient", $recipientId);
  58.         $sendMail->bindValue(":SenderName", $senderName);
  59.         $sendMail->bindValue(":SenderID", $senderId);
  60.         $sendMail->bindValue(":Details", $postcardDetails);
  61.         $sendMail->bindValue(":Date", $sentDate);
  62.         $sendMail->bindValue(":Type", $postcardType);
  63.         $sendMail->execute();
  64.         $sendMail->closeCursor();
  65.  
  66.         $postcardId = $this->lastInsertId();
  67.  
  68.         return $postcardId;
  69.     }
  70.  
  71.    
  72.     private function addActiveIgloo($penguinId) {
  73.         $insertStatement = $this->prepare("INSERT INTO `igloos` (`ID`, `Owner`) VALUES (NULL, :Owner);");
  74.         $insertStatement->bindValue(":Owner", $penguinId);
  75.         $insertStatement->execute();
  76.         $insertStatement->closeCursor();
  77.        
  78.         $iglooId = $this->lastInsertId();
  79.        
  80.         $setActiveIgloo = $this->prepare("UPDATE `users` SET `Igloo` = :Igloo WHERE ID = :Penguin;");
  81.         $setActiveIgloo->bindValue(":Igloo", $iglooId);
  82.         $setActiveIgloo->bindValue(":Penguin", $penguinId);
  83.         $setActiveIgloo->execute();
  84.         $setActiveIgloo->closeCursor();
  85.     }
  86.    
  87.     public function usernameTaken($username) {
  88.         $usernameTaken = "SELECT Username FROM `users` WHERE Username = :Username";
  89.        
  90.         $takenQuery = $this->prepare($usernameTaken);
  91.         $takenQuery->bindValue(":Username", $username);
  92.         $takenQuery->execute();
  93.        
  94.         $rowCount = $takenQuery->rowCount();
  95.         $takenQuery->closeCursor();
  96.        
  97.         return $rowCount > 0;
  98.     }
  99.    
  100.     public function ipTaken($IP) {
  101.         $ipTaken = "SELECT IP FROM `users` WHERE IP = :IP";
  102.         $IP = $_SERVER['REMOTE_ADDR'];
  103.        
  104.         $takenQuery = $this->prepare($ipTaken);
  105.         $takenQuery->bindValue(":IP", $IP);
  106.         $takenQuery->execute();
  107.        
  108.         $rowCount = $takenQuery->rowCount();
  109.         $takenQuery->closeCursor();
  110.        
  111.         return $rowCount > 3;
  112.     }
  113.    
  114.     public function takenUsernames($username) {
  115.         $usernamesTaken = "SELECT Username FROM `users` WHERE Username LIKE :Username";
  116.        
  117.         $usernamesQuery = $this->prepare($usernamesTaken);
  118.         $usernamesQuery->bindValue(":Username", $username . "%");
  119.         $usernamesQuery->execute();
  120.        
  121.         $usernames = $usernamesQuery->fetchAll(self::FETCH_COLUMN);
  122.         return $usernames;
  123.     }
  124.  
  125. }
  126.  
  127. session_start();
  128.  
  129. function response($data) {
  130.     die(http_build_query($data));
  131. }
  132.  
  133. function attemptDataRetrieval($key, $session = false) {
  134.     if(!$session && array_key_exists($key, $_POST)) {
  135.         return $_POST[$key];
  136.     }
  137.    
  138.     if($session && array_key_exists($key, $_SESSION)) {
  139.         return $_SESSION[$key];
  140.     }
  141.  
  142.     response([
  143.         "error" => ""
  144.     ]);
  145. }
  146.  
  147. $action = attemptDataRetrieval("action");
  148.  
  149. if($action == "validate_agreement") {
  150.     $agreeTerms = attemptDataRetrieval("agree_to_terms");
  151.     $agreeRules = attemptDataRetrieval("agree_to_rules");
  152.     if(!$agreeTerms || !$agreeRules) {
  153.         response([
  154.             "error" => "You must agree to the Rules and Terms of Use."
  155.         ]);
  156.     }
  157.    
  158.     response([
  159.         "success" => 1
  160.     ]);
  161. } elseif($action == "validate_username") {
  162.     $username = attemptDataRetrieval("username");
  163.     $color = attemptDataRetrieval("colour");
  164.     $colors = range(1, 15);
  165.     $IP = $_SERVER['REMOTE_ADDR'];
  166.    
  167.     if(strlen($username) == 0) {
  168.         response([
  169.             "error" => "You need to name your penguin."
  170.         ]);
  171.     } elseif(strlen($username) < 4 || strlen($username) > 12) {
  172.         response([
  173.             "error" => "Penguin name is too short."
  174.         ]);
  175.     } elseif(preg_match_all("/[0-9]/", $username) > 5) {
  176.         response([
  177.             "error" => "Penguin names can only contain 5 numbers."
  178.         ]);
  179.     } elseif(!preg_match("/[A-z]/i", $username)) {
  180.         response([
  181.             "error" => "Penguin names must contain at least 1 letter."
  182.         ]);
  183.     } elseif(preg_match("/[^A-Za-z0-9)(*&^$!`\_+={};:@~#>.<]/", $username)) {
  184.         response([
  185.             "error" => "That penguin name is not allowed."
  186.         ]);
  187.     } elseif(!is_numeric($color) || !in_array($color, $colors)) {
  188.         response([
  189.             "error" => ""
  190.         ]);
  191.     }
  192.    
  193.     $db = new Database();
  194.     $IP = $_SERVER['REMOTE_ADDR'];
  195.  
  196.     if($db->usernameTaken($username)) {
  197.         $username = preg_replace("/\d+$/", "", $username);
  198.         $takenUsernames = $db->takenUsernames($username);
  199.         $i = 1;
  200.         while(true) {
  201.             $suggestion = $username . $i++;
  202.             if(preg_match_all("/[0-9]/", $username) > 1) {
  203.                 response([
  204.                     "error" => "Penguin name is already taken."
  205.                 ]);
  206.             }
  207.             if(!in_array(strtolower($suggestion), $takenUsernames)) {
  208.                 break;
  209.             }
  210.         }
  211.         response([
  212.             "error" => "Penguin name is already taken. Try $suggestion"
  213.         ]);
  214.     }
  215.    
  216.     if($db->ipTaken($IP)) {
  217.         response([
  218.                     "error" => "You have registered more than 3 accounts!"
  219.                 ]);
  220.     }
  221.    
  222.     $_SESSION['sid'] = session_id();
  223.     $_SESSION['username'] = $username;
  224.     $_SESSION['colour'] = $color;
  225.     $_SERVER['REMOTE_ADDR'] = $IP;
  226.    
  227.     response([
  228.         "success" => 1,
  229.         "sid" => session_id()
  230.     ]);
  231. } elseif($action == "validate_password_email") {
  232.     $sessionId = attemptDataRetrieval("sid", true);
  233.     $username = attemptDataRetrieval("username", true);
  234.     $color = attemptDataRetrieval("colour", true);
  235.     $password = attemptDataRetrieval("password");
  236.     $passwordConfirm = attemptDataRetrieval("password_confirm");
  237.     $email = attemptDataRetrieval("email");
  238.    
  239.     if($sessionId !== session_id()) {
  240.         response([
  241.             "error" => ""
  242.         ]);
  243.     } elseif($password !== $passwordConfirm) {
  244.         response([
  245.             "error" => "Passwords do not match."
  246.         ]);
  247.     } elseif(strlen($password) < 4) {
  248.         response([
  249.             "error" => "Password is too short."
  250.         ]);
  251.     } elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
  252.         response([
  253.             "error" => "Invalid email address."
  254.         ]);
  255.     }
  256.    
  257.     $db = new Database();
  258.     $db->addUser($username, $password, $color, $email);
  259.    
  260.     session_destroy();
  261.    
  262.     response([
  263.         "success" => 1
  264.     ]);
  265. }
  266.  
  267. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement