1
0
mirror of https://github.com/typemill/typemill.git synced 2025-08-09 07:36:34 +02:00

fix api for navigation, usermodel, usersearch

This commit is contained in:
trendschau
2023-09-06 21:50:59 +02:00
parent 65c8a38e64
commit 0ec5ab79a6
10 changed files with 100 additions and 50 deletions

View File

@@ -14,7 +14,8 @@ class ControllerApiGlobals extends Controller
$systemNavigation = $navigation->getSystemNavigation(
$userrole = $request->getAttribute('c_userrole'),
$acl = $this->c->get('acl'),
$urlinfo = $this->c->get('urlinfo')
$urlinfo = $this->c->get('urlinfo'),
$dispatcher = $this->c->get('dispatcher')
);
# won't work because api has no session, instead you have to pass user

View File

@@ -10,24 +10,26 @@ use Typemill\Static\Translations;
class ControllerApiSystemUsers extends Controller
{
# getCurrentUser
# getUserByName
#returns userdata
#returns userdata no in use???
public function getUsersByNames(Request $request, Response $response, $args)
{
$usernames = $request->getQueryParams()['usernames'] ?? false;
$user = new User();
$userdata = [];
if($usernames)
$validate = new Validation();
if($usernames && is_array($usernames))
{
foreach($usernames as $username)
{
$existinguser = $user->setUser($username);
if($existinguser)
if($validate->username(['username' => $username]))
{
$userdata[] = $user->getUserData();
$existinguser = $user->setUser($username);
if($existinguser)
{
$userdata[] = $user->getUserData();
}
}
}
}
@@ -46,14 +48,20 @@ class ControllerApiSystemUsers extends Controller
$user = new User();
$userdata = [];
$usernames = $user->findUsersByEmail($email);
$validate = new Validation();
$valresult = $validate->emailsearch(['email' => $email]);
if($usernames)
if($valresult)
{
foreach($usernames as $username)
$usernames = $user->findUsersByEmail($email);
if($usernames)
{
$user->setUser($username);
$userdata[] = $user->getUserData();
foreach($usernames as $username)
{
$user->setUser($username);
$userdata[] = $user->getUserData();
}
}
}
@@ -71,14 +79,21 @@ class ControllerApiSystemUsers extends Controller
$user = new User();
$userdata = [];
$usernames = $user->findUsersByRole($role);
$userroles = $this->c->get('acl')->getRoles();
if($usernames)
if($role && in_array($role, $userroles))
{
foreach($usernames as $username)
$usernames = $user->findUsersByRole($role);
if($usernames)
{
$user->setUser($username);
$userdata[] = $user->getUserData();
foreach($usernames as $username)
{
if($user->setUser($username))
{
$userdata[] = $user->getUserData();
}
}
}
}

View File

@@ -119,8 +119,10 @@ class ApiAuthentication
$response = new Response();
$response->getBody()->write('Access not allowed.');
$response->getBody()->write(json_encode([
'message' => 'Authentication required.'
]));
return $response->withStatus(401);
}
}

View File

@@ -217,7 +217,7 @@ class User
}
}
public function generatePassword($password)
public function generatePassword(string $password)
{
return \password_hash($password, PASSWORD_DEFAULT, ['cost' => 10]);
}
@@ -232,7 +232,7 @@ class User
*/
# accepts email with or without asterix and returns userdata
public function findUsersByEmail($email)
public function findUsersByEmail(string $email)
{
$usernames = [];
@@ -269,7 +269,7 @@ class User
}
}
private function searchEmailSimple($usernames, $email)
private function searchEmailSimple(array $usernames, string $email)
{
foreach($usernames as $username)
{
@@ -284,7 +284,7 @@ class User
return false;
}
private function searchEmailByIndex($email)
private function searchEmailByIndex(string $email)
{
# if there are more than 10 users, search with an index
$usermails = $this->getUserMailIndex();
@@ -388,7 +388,9 @@ class User
foreach($usernames as $username)
{
$userdata = $this->getSecureUser($username);
$this->setUser($username);
$userdata = $this->getUserData();
$userroleindex[$userdata['userrole']][] = $username;
}
@@ -400,12 +402,15 @@ class User
protected function deleteUserIndex()
{
$userDir = __DIR__ . '/../../settings/users';
if(file_exists($userDir . DIRECTORY_SEPARATOR . 'tmuserindex-mail.txt'))
if(file_exists($this->userDir . DIRECTORY_SEPARATOR . 'tmuserindex-mail.txt'))
{
# read and return the file
unlink($userDir . DIRECTORY_SEPARATOR . 'tmuserindex-mail.txt');
unlink($this->userDir . DIRECTORY_SEPARATOR . 'tmuserindex-mail.txt');
}
if(file_exists($this->userDir . DIRECTORY_SEPARATOR . 'tmuserindex-role.txt'))
{
unlink($this->userDir . DIRECTORY_SEPARATOR . 'tmuserindex-role.txt');
}
}
}

View File

@@ -303,7 +303,7 @@ class Validation
$v->rule('noHTML', 'firstname')->message(" contains HTML");
$v->rule('lengthBetween', 'firstname', 2, 40);
$v->rule('noHTML', 'lastname')->message(" contains HTML");
$v->rule('lengthBetween', 'lastname', 2, 40);
$v->rule('lengthBetween', 'lastname', 2, 40);
$v->rule('email', 'email')->message("e-mail is invalid");
$v->rule('emailChanged', 'email')->message("Email already taken");
$v->rule('in', 'userrole', $userroles);
@@ -316,6 +316,33 @@ class Validation
return $v->errors();
}
public function username(array $params)
{
$v = new Validator($params);
$v->rule('required', ['username'])->message("required");
$v->rule('alphaNum', 'username')->message("invalid");
$v->rule('lengthBetween', 'username', 3, 20)->message("Length between 3 - 20");
if($v->validate())
{
return true;
}
return false;
}
public function emailsearch(array $params)
{
# param can be "trend*"
$v = new Validator($params);
$v->rule('required', ['email'])->message("required");
$v->rule('noHTML', 'email')->message(" contains HTML");
$v->rule('lengthBetween', 'email', 3, 50)->message("Length between 3 - 50");
if($v->validate())
{
return true;
}
return false;
}
public function newLicense(array $params)
{
$v = new Validator($params);