Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Config {
- public static function get($path = null) {
- if($path) {
- $config = $GLOBALS['config'];
- $path = explode('/', $path);
- foreach($path as $bit) {
- if(isset($config[$bit])) {
- $config = $config[$bit];
- }
- }
- return $config;
- }
- return false;
- }
- }
- <?php
- class Cookie {
- public static function exists($name) {
- return (isset($_COOKIE[$name])) ? true : false;
- }
- public static function get($name) {
- return $_COOKIE[$name];
- }
- public static function put($name, $value, $expiry) {
- if(setcookie($name, $value, time() + $expiry, '/')) {
- return true;
- }
- return false;
- }
- public static function delete($name) {
- self::put($name, '', time() -1);
- }
- }
- <?php
- class DB {
- private static $_instance = null;
- private $_pdo,
- $_query,
- $_error =false,
- $_results,
- $_count = 0;
- private function __construct() {
- try {
- $this->_pdo = new PDO('mysql:host=' . Config::get('mysql/host') . ';dbname=' . Config::get('mysql/db'), Config::get('mysql/username'), Config::get('mysql/password'));
- } catch(PDOException $e) {
- die($e->getMessage());
- }
- }
- public static function getInstance() {
- if(!isset(self::$_instance)) {
- self::$_instance = new DB();
- }
- return self::$_instance;
- }
- public function query($sql, $params = array()) {
- $this->_error = false;
- if($this->_query = $this->_pdo->prepare($sql)) {
- $x = 1;
- if(count($params)) {
- foreach($params as $param) {
- $this->_query->bindValue($x, $param);
- $x++;
- }
- }
- if($this->_query->execute()) {
- $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
- $this->_count = $this->_query->rowCount();
- } else {
- $this->_error = true;
- }
- }
- return $this;
- }
- public function action($action, $table, $where = array()) {
- if(count($where) === 3) {
- $operators = array('=', '>', '<', '>=', '<=');
- $field =$where[0];
- $operator =$where[1];
- $value =$where[2];
- if(in_array($operator, $operators)) {
- $sql = "{$action} FROM {$table} WHERE {$field} {$operator} ?";
- if(!$this->query($sql, array($value))->error()) {
- return $this;
- }
- }
- }
- return false;
- }
- public function get($table, $where) {
- return $this->action('SELECT *', $table, $where);
- }
- public function delete($table, $where) {
- return $this->action('DELETE *', $table, $where);
- }
- public function insert($table, $fields = array()) {
- $keys = array_keys($fields);
- $values = '';
- $x = 1;
- foreach($fields as $field) {
- $values .='?';
- if($x < count($fields)) {
- $values .=', ';
- }
- $x++;
- }
- $sql= "INSERT INTO {$table} (`" . implode('`, `', $keys) . "`) VALUES ({$values})";
- if(!$this->query($sql, $fields)->error()) {
- return true;
- }
- return false;
- }
- public function update($table, $id, $fields) {
- $set = '';
- $x = 1;
- foreach($fields as $name => $value) {
- $set .= "{$name} = ?";
- if($x < count($fields)) {
- $set .= ', ';
- }
- $x++;
- }
- $sql = "UPDATE {$table} SET {$set} WHERE id = ($id)";
- if(!$this->query($sql, $fields)->error()) {
- return true;
- }
- return false;
- }
- public function results() {
- return $this->_results;
- }
- Public function first() {
- return $this->results()[0];
- }
- public function error() {
- return $this->_error;
- }
- public function count() {
- return $this->_count;
- }
- }
- <?php
- class Hash {
- public static function make($string, $salt = '') {
- return hash('sha256', $string . $salt);
- }
- public static function salt($length) {
- #return mcrypt_create_iv($length);
- return substr(str_shuffle(str_repeat("0123456789abcdefghijklmnopqrstuvwxyz", $length)), 0, $length);
- }
- public static function unique() {
- return self::make(uniqid());
- }
- }
- <?php
- class Input {
- public static function exists($type = 'post') {
- switch($type) {
- case 'post':
- return (!empty($_POST)) ? true : false;
- break;
- case 'get':
- return (!empty($_GET)) ? true : false;
- break;
- default:
- return false;
- break;
- }
- }
- public static function get($item) {
- if(isset($_POST[$item])) {
- return $_POST[$item];
- } else if(isset($_GET[$item])) {
- return $_GET[$item];
- }
- return '';
- }
- }
- <?php
- class Redirect {
- public static function to($location = null) {
- if($location) {
- if(is_numeric($location)) {
- switch($location) {
- case 404:
- header('HTTP/1.0 404 Not Found');
- include 'includes/errors/404.php';
- exit();
- break;
- }
- }
- header('Location:' . $location);
- exit();
- }
- }
- }
- <?php
- class Redirect {
- public static function to($location = null) {
- if($location) {
- if(is_numeric($location)) {
- switch($location) {
- case 404:
- header('HTTP/1.0 404 Not Found');
- include 'includes/errors/404.php';
- exit();
- break;
- }
- }
- header('Location:' . $location);
- exit();
- }
- }
- }
- <?php
- class Token {
- public static function generate() {
- return Session::put(Config::get('session/token_name'), md5(uniqid()));
- }
- public static function check($token) {
- $tokenName = Config::get('session/token_name');
- if(Session::exists($tokenName) && $token === Session::get($tokenName)) {
- Session::delete($tokenName);
- return true;
- }
- return false;
- }
- }
- <?php
- class User {
- private $_db,
- $_data,
- $_sessionName,
- $_cookieName,
- $_isLoggedIn;
- public function __construct($user = null) {
- $this->_db = DB::getInstance();
- $this->_sessionName = Config::get('session/session_name');
- $this->_cookieName = Config::get('remember/cookie_name');
- if(!$user) {
- if(Session::exists($this->_sessionName)) {
- $user = Session::get($this->_sessionName);
- if($this->find($user)) {
- $this->_isLoggedIn = true;
- } else {
- // process Logout
- }
- }
- } else {
- $this->find($user);
- }
- }
- public function create($fields = array()) {
- if(!$this->_db->insert('users', $fields)) {
- throw new Exception('There was a problem creating an account.');
- }
- }
- public function find($user = null) {
- if($user) {
- $field = (is_numeric($user)) ? 'id' : 'username';
- $data = $this->_db->get('users', array($field, '=', $user));
- if($data->count()) {
- $this->_data = $data->first();
- return true;
- }
- }
- return false;
- }
- public function login($username = null, $password = null, $remember = false) {
- $user = $this->find($username);
- if($user) {
- if($this->data()->password === Hash::make($password, $this->data()->salt)) {
- Session::put($this->_sessionName, $this->data()->id);
- if($remember) {
- $hash = Hash::unique();
- $hashCheck = $this->_db->get('users_session', array('user_id', '=', $this->data()->id));
- if(!$hashCheck->count()) {
- $this->_db->insert('users_session', array(
- 'user_id' => $this->data()->id,
- 'hash' => $hash
- ));
- } else {
- $hash = $hashCheck->first()->hash;
- }
- Cookie::put($this->_cookieName, $hash, Config::get('remember/cookie_expiry'));
- }
- return true;
- }
- }
- return false;
- }
- public function logout() {
- Session::delete($this->_sessionName);
- }
- public function data() {
- return $this->_data;
- }
- public function isLoggedIn() {
- return $this->_isLoggedIn;
- }
- }
- <?php
- class Validate {
- private $_passed = false,
- $_errors = array(),
- $_db = null;
- public function __construct() {
- $this->_db = DB::getInstance();
- }
- Public function check($source, $items = array()) {
- foreach($items as $item => $rules) {
- foreach($rules as $rule => $rule_value) {
- $value = trim($source[$item]);
- $item = escape($item);
- if($rule === 'required' && empty($value)) {
- $this->addError("{$item} is required");
- } else if(!empty($value)){
- switch($rule) {
- case 'min':
- if(strlen($value) < $rule_value) {
- $this->addError("{$item} must be a minimun of {$rule_value} vcharacters.");
- }
- break;
- case 'max':
- if(strlen($value) > $rule_value) {
- $this->addError("{$item} must be a maximum of {$rule_value} characters.");
- }
- break;
- case 'matches':
- if($value != $source[$rule_value]) {
- $this->addError("{$rule_value} must match {$item}");
- }
- break;
- case 'unique':
- $check = $this->_db->get($rule_value, array($item, '=', $value));
- if($check->count()) {
- $this->addError("{$item} already exists.");
- }
- break;
- }
- }
- }
- }
- if(empty($this->_errors)) {
- $this->_passed = true;
- }
- return $this;
- }
- private function addError($error) {
- $this->_errors[] = $error;
- }
- public function errors() {
- return $this->_errors;
- }
- public function passed() {
- return $this->_passed;
- }
- }
- <?php
- session_start();
- $GLOBALS['config'] = array(
- 'mysql' => array(
- 'host' => 'localhost',
- 'username' => '******',
- 'password' => '******',
- 'db' => 'users-pass'
- ),
- 'remember' => array(
- 'cookie_name' => 'hash',
- 'cookie_expiry' => 604800
- ),
- 'session' => array(
- 'session_name' => 'user',
- 'token_name' => 'token'
- )
- );
- spl_autoload_register(function($class) {
- require_once 'classes/' . $class . '.php';
- });
- require_once 'functions/sanitize.php';
- if(Cookie::exists(Config::get('remember/cookie_name')) && !Session::exists(Config::get('session/session_name'))) {
- echo 'User asked to be remembered';
- }
- <?php
- function escape($string){
- return htmlentities($string, ENT_QUOTES, 'UTF-8');
- }
- <?php
- require_once 'core/init.php';
- if(Session::exists('home')) {
- echo '<p>' . Session::flash('home') . '</p>';
- }
- $user = new User();
- if($user->isLoggedIn()) {
- ?>
- <p>Hello <a href="#"><?php echo escape($user->data()->username); ?></a>!</p>
- <ul>
- <li><a href="logout.php">Log out</a></li>
- </ul>
- <?php
- } else {
- echo '<p>You need to <a href="login.php">log in</a> or <a href="register.php">register</a></p>';
- }
- <?php
- require_once 'core/init.php';
- if(Input::exists()) {
- if(Token::check(Input::get('token'))) {
- $validate = new Validate();
- $validation = $validate->check($_POST, array(
- 'username' => array('required' => true),
- 'password' => array('required' => true)
- ));
- if($validation->passed()) {
- $user = new User();
- $remember = (Input::get('remeber') === 'on') ? true : false;
- $login = $user->login(Input::get('username'), Input::get('password'), $remember);
- if($login) {
- Redirect::to('index.php');
- } else {
- echo '<p>Sorry, logging in failed.</p>';
- }
- } else {
- foreach ($validation->errors() as $error) {
- echo $error, '<br>';
- }
- }
- }
- }
- ?>
- <form action="" method="post">
- <div class="field">
- <label for="username">Username</label>
- <input type="text" name="username" id="username" autocomplete="off">
- </div>
- <div class="field">
- <label for="password">Password</label>
- <input type="password" name="password" id="password" autocomplete="off">
- </div>
- <div class="field">
- <label for="remember">
- <input type="checkbox" name="remember" id="remember"> Remember me
- </label>
- </div>
- <input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
- <input type="submit" value="Log in">
- </form>
- <?php
- require_once 'core/init.php';
- $user = new User();
- $user->logout();
- Redirect::to('index.php');
- <?php
- require_once 'core/init.php';
- if(Input::exists()) {
- if(Token::check(Input::get('token'))) {
- $validate = new Validate();
- $validation = $validate->check($_POST, array(
- 'username' => array(
- 'required' => true,
- 'min' => 2,
- 'max' => 20,
- 'unique' => 'users'
- ),
- 'password' => array(
- 'required' => true,
- 'min' => 6
- ),
- 'password_again' => array(
- 'required' => true,
- 'matches' => 'password'
- ),
- 'name' => array(
- 'required' => true,
- 'min' => 2,
- 'max' => 50
- )
- ));
- if($validation->passed()) {
- $user = new User();
- $salt = Hash::salt(32);
- try {
- $user->create(array(
- 'username' => Input::get('username'),
- 'password' => Hash::make(Input::get('password'), $salt),
- 'salt' => $salt,
- 'name' => Input::get('name'),
- 'joined'=> date('Y-m-d H:i:s'),
- 'group' => 1
- ));
- Session::flash('home', 'You have been registered and can now log in!');
- Redirect::to('index.php');
- } catch(Exception $e) {
- die($e->getMessage());
- }
- } else {
- foreach($validation->errors() as $error) {
- echo $error, '<br>';
- }
- }
- }
- }
- ?>
- <form action="" method="post">
- <div class="field">
- <label for="username">Username</label>
- <input type="text" name="username" id="username" value="<?php echo escape(Input::get('username')); ?>" autocomplete="off">
- </div>
- <div class="field">
- <label for="password">Choose a password</label>
- <input type="password" name="password" id="password">
- </div>
- <div class="field">
- <label for="password_again">Enter your password again</label>
- <input type="password" name="password_again" id="password_again">
- </div>
- <div class="field">
- <label for="name">Enter your name</label>
- <input type="text" name="name" value="<?php echo escape(Input::get('name')); ?>" id="name">
- </div>
- <input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
- <input type="submit" value="Register">
- </form>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement