<?php

if (isset($_GET['show'])) highlight_file(__FILE__);

/**
 * Verifies user credentials.
 */
function verifyCreds($conn$username$password) {
  
$usr $conn->real_escape_string($username);
  
$res $conn->query("SELECT password FROM users WHERE username='".$usr."'");
  
$row $res->fetch_assoc();
  if (
$row) {
    if (
password_verify($password$row['password'])) return true;
    else 
addFailedLoginAttempt($conn$_SERVER['REMOTE_ADDR']);
  }
  return 
false;
}

/**
 * Determines if the given user is admin.
 */
function isAdmin($username) {
  return (
$username === 'santa');
}

/**
 * Determines if the given username is already taken.
 */
function isUsernameAvailable($conn$username) {
  
$usr $conn->real_escape_string($username);
  
$res $conn->query("SELECT COUNT(*) AS cnt FROM users WHERE LOWER(username) = BINARY LOWER('".$usr."')");
  
$row $res->fetch_assoc();
  return (int)
$row['cnt'] === 0;
}

/**
 * Registers a new user.
 */
function registerUser($conn$username$password) {
  
$usr $conn->real_escape_string($username);
  
$pwd password_hash($passwordPASSWORD_DEFAULT);
  
$conn->query("INSERT INTO users (username, password) VALUES (UPPER('".$usr."'),'".$pwd."') ON DUPLICATE KEY UPDATE password='".$pwd."'");
}

/**
 * Adds a failed login attempt for the given ip address. An ip address gets blacklisted for 15 minutes if there are more than 3 failed login attempts.
 */
function addFailedLoginAttempt($conn$ip) {
  
$ip $conn->real_escape_string($ip);
  
$conn->query("INSERT INTO fails (ip) VALUES ('".$ip."')");
}

?>