<?php
namespace SHServ\Controllers;
use \SHServ\Models\Auth;
use \SHServ\Entities\User;
class AuthController extends \SHServ\Middleware\Controller {
public function signup_page() {
if(app() -> sessions -> is_auth()) {
return $this -> utils() -> redirect( app() -> routes -> urlto("SearchController@search_page") );
}
return $this -> new_template() -> make("site/signup", [
"page_title" => "Регистрация",
"page_alias" => "page signup"
]);
}
public function signin_page() {
if(app() -> sessions -> is_auth()) {
return $this -> utils() -> redirect( app() -> routes -> urlto("SearchController@search_page") );
}
return $this -> new_template() -> make("site/signin", [
"page_title" => "Войти в систему",
"page_alias" => "page signin"
]);
}
public function signout_page($redirect_to) {
$auth = new Auth();
$auth -> signout();
return $this -> utils() -> redirect($redirect_to);
}
public function signup($email, $password, $password_again) {
// TODO: generate event
if(app() -> sessions -> is_auth()){
return $this -> utils() -> response_error("already_logged");
}
$email = strtolower(trim(strip_tags($email)));
if(strlen($email) < 4 or !strpos($email, "@") or !strpos($email, ".")) {
return $this -> utils() -> response_error("incorrect_email", [ "email" ]);
}
if(strlen($password) < 8) {
return $this -> utils() -> response_error("too_short_password", [ "password" ]);
}
if($password != $password_again) {
return $this -> utils() -> response_error("different_passwords", [ "password", "password_again" ]);
}
if(User::is_exists_by("email", $email)) {
return $this -> utils() -> response_error("email_already_exists", [ "email" ]);
}
$auth = new Auth();
$user = $auth -> signup($email, $password);
if(!$user) {
return $this -> utils() -> response_error("undefined_error", [ "email" ]);
}
return $this -> utils() -> response_success([
"redirect_url" => app() -> routes -> urlto("AuthController@signin_page"),
"redirect_delay" => 250
]);
}
public function signin($email, $password) {
// TODO: generate event
if(app() -> sessions -> is_auth()){
return $this -> utils() -> response_error("already_logged");
}
$email = strtolower(trim(strip_tags($email)));
if(!strlen($email)) {
return $this -> utils() -> response_error("empty_field", [ "email" ]);
}
if(!strlen($password)) {
return $this -> utils() -> response_error("empty_field", [ "password" ]);
}
if(!User::is_exists_by("email", $email)) {
return $this -> utils() -> response_error("unregistered_email", [ "email" ]);
}
$auth = new Auth();
$token = $auth -> signin($email, $password);
if(!$token){
return $this -> utils() -> response_error("incorrect_password", [ "password" ]);
}
return $this -> utils() -> response_success([
"token" => $token,
"redirect_url" => "/",
"redirect_delay" => 250
]);
}
public function signout() {
if(!app() -> sessions -> is_auth()){
return $this -> utils() -> response_error("not_found_any_sessions");
}
$auth = new Auth();
$auth -> signout();
return $this -> utils() -> response_success();
}
}