Files
api/common/Controller/Auth.php

77 lines
2.9 KiB
PHP
Raw Normal View History

2021-12-25 23:17:15 -03:00
<?php
namespace Incoviba\API\Common\Controller;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Incoviba\API\Common\Define\Controller\Json;
use Incoviba\API\Common\Service\Auth as Service;
2022-06-13 21:36:52 -04:00
use Incoviba\API\Common\Service\Login as LoginService;
use Incoviba\Mapper\User as UserMapper;
2021-12-25 23:17:15 -03:00
class Auth {
use Json;
public function generate(Request $request, Response $response, Service $service): Response {
$key = $service->generate();
return $this->withJson($response, compact('key'));
}
2022-06-13 21:36:52 -04:00
public function login(Request $request, Response $response, Service $service, LoginService $loginService, UserMapper $mapper): Response {
2021-12-25 23:17:15 -03:00
$post = json_decode($request->getBody());
2022-06-13 21:36:52 -04:00
$user = $mapper->fetchByName($post->name);
2021-12-25 23:17:15 -03:00
$output = [
'login' => false,
'token' => ''
];
2022-06-13 21:36:52 -04:00
if (!$user or !$user->enabled) {
return $this->withJson($response, $output);
2021-12-25 23:17:15 -03:00
}
if ($user->validate($post->password)) {
$token = $service->generateToken();
2022-06-13 21:36:52 -04:00
$status = $loginService->setToken($user, $token->selector, $token->token);
2021-12-25 23:17:15 -03:00
if ($status['logged_in']) {
$output['login'] = true;
$output['token'] = $token->full;
$output['expires'] = $status['expires'];
}
}
return $this->withJson($response, $output);
}
2022-06-13 21:36:52 -04:00
public function validate(Request $request, Response $response, LoginService $loginService): Response {
2021-12-25 23:17:15 -03:00
$post = json_decode($request->getBody());
2022-06-13 21:36:52 -04:00
$valid = $loginService->validate($post);
$output = [
'token' => $post->token
];
if ($valid) {
$output['status'] = 'Authorized';
} else {
$output['error'] = 'Not authorized';
2021-12-25 23:17:15 -03:00
}
2022-06-13 21:36:52 -04:00
return $this->withJson($response, $output, $valid ? 200 : 401);
2021-12-25 23:17:15 -03:00
}
2022-06-13 21:36:52 -04:00
public function user(Request $request, Response $response, LoginService $loginService): Response {
2021-12-25 23:17:15 -03:00
$post = json_decode($request->getBody());
2022-06-13 21:36:52 -04:00
$user = $loginService->getUser($post);
if (!$user) {
2021-12-25 23:17:15 -03:00
return $this->withJson($response, ['token' => $post->token, 'error' => 'Not authorized'], 401);
}
$output = [
'token' => $post->token,
2022-06-13 21:36:52 -04:00
'user' => $user->name
2021-12-25 23:17:15 -03:00
];
return $this->withJson($response, $output);
}
2022-06-13 21:36:52 -04:00
public function logout(Request $request, Response $response, LoginService $loginService): Response {
2021-12-25 23:17:15 -03:00
$post = json_decode($request->getBody());
2022-06-13 21:36:52 -04:00
$user = $loginService->getUser($post);
if (!$user) {
return $this->withJson($response, ['logout' => true]);
}
2021-12-25 23:17:15 -03:00
$output = [
'token' => $post->token,
2022-06-13 21:36:52 -04:00
'logout' => $loginService->logout($user)
2021-12-25 23:17:15 -03:00
];
return $this->withJson($response, $output);
}
}