You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.0 KiB
40 lines
1.0 KiB
<?php
|
|
|
|
namespace IQBall\Api\Controller;
|
|
|
|
use IQBall\Core\Route\Control;
|
|
use IQBall\Core\Http\HttpRequest;
|
|
use IQBall\Core\Http\HttpResponse;
|
|
use IQBall\Core\Http\JsonHttpResponse;
|
|
use IQBall\Core\Model\AuthModel;
|
|
use IQBall\Core\Validation\Validators;
|
|
|
|
class APIAuthController {
|
|
private AuthModel $model;
|
|
|
|
/**
|
|
* @param AuthModel $model
|
|
*/
|
|
public function __construct(AuthModel $model) {
|
|
$this->model = $model;
|
|
}
|
|
|
|
|
|
public function authorize(): HttpResponse {
|
|
return Control::runChecked([
|
|
"email" => [Validators::regex("/^\\S+@\\S+\\.\\S+$/"), Validators::lenBetween(5, 256)],
|
|
"password" => [Validators::lenBetween(6, 256)],
|
|
], function (HttpRequest $req) {
|
|
$failures = [];
|
|
$account = $this->model->login($req["email"], $req["password"], $failures);
|
|
|
|
if (!empty($failures)) {
|
|
return new JsonHttpResponse($failures);
|
|
}
|
|
|
|
return new JsonHttpResponse(["authorization" => $account->getToken()]);
|
|
}, true);
|
|
}
|
|
|
|
}
|