Files
framework/app/core/auth/AuthController.php

232 lines
4.6 KiB
PHP

<?php
namespace App\Core\Auth;
use ORM\DBInstance;
use \App\Core\Template\Output as Output;
use Singleton;
use RR\Response;
use \App\Core\Auth\Classes\Auth as Auth;
use App\Core\Auth\Classes\AuthenticatedUser;
use App\Core\Auth\Classes\Token;
use \App\Core\Auth\Classes\User as User;
class AuthController
{
private static $user;
private static $permissions;
/**
* Index
* Show the main Auth list
*/
function index()
{
Output::render('index', ['list' => User::findAll()]);
}
/**
* Create
*
* Render the main Auth formulary
*/
function create(User $auth)
{
Output::render('form', $auth);
}
/**
* Store
*
* Store the param on the database
* @param User $auth
*/
function store(User $auth)
{
$auth->charge($_POST);
if (request('password') == '') {
unset($auth->password);
} else {
$auth->password = md5(request('password'));
}
$auth->save();
$auth->appendGroups(request('groups'));
Response::json($auth)->send();
}
/**
* Show
*
* Render one register
*
* @param Auth $auth
*/
function show(Auth $auth)
{
}
/**
* Edit
*
* Render the formular for a database Auth
*
* @param Auth $auth
*/
function edit(User $auth)
{
Output::render('form', $auth);
}
/**
* Update
* Store the changes of the param on the database
*
* @param User $auth
*/
function update(User $auth)
{
$auth->charge($_POST);
if (request('password') == '') {
unset($auth->password);
} else {
$auth->password = md5(request('password'));
}
$auth->save();
$auth->appendGroups(request('groups'));
Response::json($auth)->send();
}
/**
* Destroy
* If the object has soft delete.
*
* @param Auth $auth
*/
function destroy(Auth $auth)
{
}
/**
* Purge
* Remove object even with soft delete.
*
* @param Auth $auth
*/
function purge(Auth $auth)
{
}
function login()
{
if ($user = User::findOne(['username' => ['=', $_POST['login']], 'password' => ['=', md5($_POST['password'])]])) {
AuthController::executeLogin($user);
} else {
Output::setTemplate('NullTemplate');
Output::render('login', ['errors' => ['name' => 'Não há usuário com essa senha']]);
}
}
/**
* Prints the system login form
*/
function loginForm()
{
if (self::isLoggedIn()) {
Response::redirect('/');
} else {
Output::setTemplate('NullTemplate');
Output::render('login');
}
}
/**
* Just check if the user is set on the _SESSION variable
*
* @return bool
*/
public static function isLoggedIn()
{
if ($_SESSION['user']) {
AuthenticatedUser::load();
} else {
return false;
}
return true;
}
/**
* Check if the token passed on the wstoken param is valid
* by valid.
* - Exist
* - Not Expired
* - Has the permission
*
* @return bool
*/
public static function isTokenValid()
{
if ($token = Token::findOne(['token' => ['=', request('wstoken')]])) {
AuthenticatedUser::load($token->user());
} else {
return false;
}
return true;
}
/**
* Given a permission. Check if the loged user can execute it
*
* @param String $permission
*/
public static function canAccess($permission)
{
if (AuthenticatedUser::permissions() == null) {
return false;
}
if (in_array('sys:admin', AuthenticatedUser::permissions())) {
return true;
}
if (in_array($permission, AuthenticatedUser::permissions())) {
return true;
}
return false;
}
/**
* In case the login form is valid. Persist user data on SESSION
* so the login system words onwards
*
* TODO - Cache wantsPage
*
* @param User $user
*/
function executeLogin(User $user)
{
$_SESSION['user']['user'] = $user->id;
$_SESSION['user']['permission'] = $user->permissions();
header("location: /");
}
/**
* Execute the system logout
*/
function logout()
{
session_destroy();
header("location: /auth/login");
}
}