Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.09 KB | None | 0 0
  1. <?php
  2.  
  3. class User
  4. {
  5.     const DB_PATH = './example.db';
  6.    
  7.     private $id = NULL;
  8.     private $username = NULL;
  9.     private $password = NULL;
  10.     private $email = NULL;
  11.     private $date = NULL;
  12.    
  13.     public function __construct($id)
  14.     {
  15.         if(!is_int($id))
  16.             throw new InvalidArgumentException('User class constructor expects integer, value given was: '.$id);
  17.         $db = new PDO('sqlite:./example.db');
  18.         $query = $db->prepare('SELECT * FROM users WHERE id = :id');
  19.         $query->bindParam(':id', $id, PDO::PARAM_INT);
  20.         $query->execute();
  21.        
  22.         $query->bindColumn('id', $this->id, PDO::PARAM_INT);
  23.         $query->bindColumn('username', $this->username, PDO::PARAM_STR);
  24.         $query->bindColumn('password', $this->password, PDO::PARAM_STR);
  25.         $query->bindColumn('email', $this->email, PDO::PARAM_STR);
  26.         $query->bindColumn('date', $this->date, PDO::PARAM_INT);
  27.         $query->fetch(PDO::FETCH_BOUND);
  28.         if($this->id == NULL)
  29.             throw new OutOfBoundsException('No such ID found in database: '.$id);
  30.     }
  31.    
  32.    
  33.     public function getID()
  34.     {
  35.         return $this->id;
  36.     }
  37.    
  38.     public function getUsername()
  39.     {
  40.         return $this->username;
  41.     }
  42.    
  43. /*  public function getPassword()
  44.     {
  45.         return $this->password;
  46.     }*/
  47.    
  48.     public function getEmail()
  49.     {
  50.         return $this->email;
  51.     }
  52.    
  53.     public function getDate()
  54.     {
  55.         return $this->date;
  56.     }
  57.    
  58.    
  59.     public function setUsername($username)
  60.     {
  61.         if(!User::validateUsername($username))
  62.             throw new InvalidArgumentException('Invalid username passed to setUsername() method: '.$username);
  63.         if(!User::availableUsername($username))
  64.             throw new InvalidArgumentException('Unavailable username passed to setUsername() method: '.$username);
  65.         $db = new PDO('sqlite:./example.db');
  66.         $query = $db->prepare('UPDATE users SET username=:username WHERE id=:id');
  67.         $query->bindParam(':username', $username, PDO::PARAM_STR);
  68.         $query->bindParam(':id', $this->id, PDO::PARAM_INT);
  69.         $query->execute();
  70.         $this->username = $username;
  71.     }
  72.    
  73.     public function setPassword($password)
  74.     {
  75.         if(!User::validatePassword($password))
  76.             throw new InvalidArgumentException('Invalid password passed to setPassword() method: '.$password);
  77.         $db = new PDO('sqlite:./example.db');
  78.         $query = $db->prepare('UPDATE users SET password=:password WHERE id=:id');
  79.         $query->bindParam(':password', sha1($password), PDO::PARAM_STR);
  80.         $query->bindParam(':id', $this->id, PDO::PARAM_INT);
  81.         $query->execute();
  82.         $this->password = sha1($password);
  83.     }
  84.    
  85.     public function setEmail($email)
  86.     {
  87.         if(!User::validateEmail($email))
  88.             throw new InvalidArgumentException('Invalid email passed to setEmail() method: '.$email);
  89.         if(!User::availableEmail($email))
  90.             throw new InvalidArgumentException('Unavailable email passed to setEmail() method: '.$email);
  91.         $db = new PDO('sqlite:./example.db');
  92.         $query = $db->prepare('UPDATE users SET email=:email WHERE id=:id');
  93.         $query->bindParam(':email', $email, PDO::PARAM_STR);
  94.         $query->bindParam(':id', $this->id, PDO::PARAM_INT);
  95.         $query->execute();
  96.         $this->email = $email;
  97.     }
  98.    
  99.    
  100.     public function loggedIn()
  101.     {
  102.         if(isset($_POST['username']) && isset($_POST['password']))
  103.         {
  104.             if($_POST['username'] != $this->username)
  105.                 return false;
  106.             if(sha1($_POST['password']) != $this->password)
  107.                 return false;
  108.         }
  109.         else if(isset($_COOKIE['username']) && isset($_COOKIE['password']))
  110.         {
  111.             if($_COOKIE['username'] != $this->username)
  112.                 return false;
  113.             if(sha1($_COOKIE['password']) != $this->password)
  114.                 return false;
  115.         }
  116.         else
  117.         {
  118.             return false;
  119.         }
  120.         return true;
  121.     }
  122.    
  123.    
  124.     public static function add($username, $password, $email)
  125.     {
  126.         if(!User::validateUsername($username))
  127.             throw new InvalidArgumentException('Invalid username passed to User::add() method: '.$username);
  128.         if(!User::validatePassword($password))
  129.             throw new InvalidArgumentException('Invalid password passed to User::add() method: '.$password);
  130.         if(!User::validateEmail($email))
  131.             throw new InvalidArgumentException('Invalid email passed to User::add() method: '.$email);
  132.         if(!User::availableUsername($username))
  133.             throw new InvalidArgumentException('Unavailable username passed to User::add() method: '.$username);
  134.         if(!User::availableEmail($email))
  135.             throw new InvalidArgumentException('Unavailable email passed to User::add() method: '.$email);
  136.         $db = new PDO('sqlite:./example.db');
  137.         $query = $db->prepare('INSERT INTO users(username, password, email, date) VALUES(:username, :password, :email, :date)');
  138.         $query->bindParam(':username', $username, PDO::PARAM_STR);
  139.         $query->bindParam(':password', sha1($password), PDO::PARAM_STR);
  140.         $query->bindParam(':email', $email, PDO::PARAM_STR);
  141.         $query->bindParam(':date', time(), PDO::PARAM_STR);
  142.         $query->execute();
  143.     }
  144.    
  145.    
  146.     public static function validateUsername($username)
  147.     {
  148.         if(preg_match("/^\w{4,32}$/", $username))
  149.             return true;
  150.         return false;
  151.     }
  152.    
  153.     public static function validatePassword($password)
  154.     {
  155.         if(preg_match("/^.{6,128}$/", $password))
  156.             return true;
  157.         return false;
  158.     }
  159.    
  160.     public static function validateEmail($email)
  161.     {
  162.         if(preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i", $email))
  163.             return true;
  164.         return false;
  165.     }
  166.    
  167.  
  168.     public static function availableUsername($username)
  169.     {
  170.         $db = new PDO('sqlite:./example.db');
  171.         $query = $db->prepare('SELECT COUNT (*) FROM users WHERE username = :username');
  172.         $query->bindParam(':username', $username, PDO::PARAM_STR);
  173.         $query->execute();
  174.         if($query->fetchColumn() == 0)
  175.             return true;
  176.         return false;
  177.     }
  178.  
  179.     public static function availableEmail($email)
  180.     {
  181.         $db = new PDO('sqlite:./example.db');
  182.         $query = $db->prepare('SELECT COUNT (*) FROM users WHERE email = :email');
  183.         $query->bindParam(':email', $email, PDO::PARAM_STR);
  184.         $query->execute();
  185.         if($query->fetchColumn() == 0)
  186.             return true;
  187.         return false;
  188.     }
  189.    
  190.    
  191.     public static function setupDB()
  192.     {
  193.         $db = new PDO('sqlite:'.User::DB_PATH);
  194.  
  195.         $query = $db->prepare('CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, username TEXT NOT NULL UNIQUE COLLATE NOCASE, password TEXT NOT NULL, email TEXT NOT NULL UNIQUE COLLATE NOCASE, date INTEGER NOT NULL)');
  196.         $query->execute();
  197.     }
  198. }
  199.  
  200. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement