71 lines
2.3 KiB
PHP
71 lines
2.3 KiB
PHP
<?php
|
|
|
|
use Nickyeoman\Validation;
|
|
$v = new Nickyeoman\Validation\Validate();
|
|
|
|
$url_success = '/novaconium/dashboard';
|
|
$url_fail = '/novaconium/login';
|
|
|
|
|
|
// Don't go further if already logged in
|
|
if ( !empty($session->get('username')) ) {
|
|
$redirect->url($url_success);
|
|
makeitso();
|
|
}
|
|
|
|
// Make sure Session Token is correct
|
|
if ($session->get('token') != $post->get('token')) {
|
|
$messages->addMessage('error', "Invalid Session.");
|
|
$log->error("Login Authentication - Invalid Session Token");
|
|
}
|
|
|
|
// Handle Username
|
|
$rawUsername = $post->get('username', null);
|
|
$cleanUsername = $v->clean($rawUsername); // Clean the input
|
|
$username = strtolower($cleanUsername); // Convert to lowercase
|
|
if (!$username) {
|
|
$messages->addMessage('error', "No Username given.");
|
|
}
|
|
|
|
// Handle Password
|
|
$password = $v->clean($post->get('password', null));
|
|
if ( empty($password) ) {
|
|
$messages->addMessage('error', "Password Empty.");
|
|
}
|
|
|
|
/*************************************************************************************************************
|
|
* Query Database
|
|
************************************************************************************************************/
|
|
|
|
if ($messages->count('error') === 0) {
|
|
$query = "SELECT id, username, email, password, blocked FROM users WHERE username = ? OR email = ?";
|
|
$matched = $db->getRow($query, [$username, $username]);
|
|
if (empty($matched)) {
|
|
$messages->addMessage('error', "User or Password incorrect.");
|
|
$log->warning("Login Authentication - Login Error, user doesn't exist");
|
|
}
|
|
}
|
|
|
|
if ($messages->count('error') === 0) {
|
|
// Re-apply pepper
|
|
$peppered = hash_hmac('sha3-512', $password, $config['secure_key']);
|
|
|
|
// Verify hashed password
|
|
if (!password_verify($peppered, $matched['password'])) {
|
|
$messages->addMessage('error', "User or Password incorrect.");
|
|
$log->warning("Login Authentication - Login Error, password wrong");
|
|
}
|
|
}
|
|
|
|
// Process Login or Redirect
|
|
if ($messages->count('error') === 0) {
|
|
$query = "SELECT groupName FROM user_groups WHERE user_id = ?";
|
|
$groups = $db->getRow($query, [$matched['id']]);
|
|
$session->set('username', $cleanUsername);
|
|
$session->set('group', $groups['groupName']);
|
|
$redirect->url($url_success);
|
|
$log->info("Login Authentication - Login Success);
|
|
} else {
|
|
$redirect->url($url_fail);
|
|
}
|