1
0
mirror of https://github.com/typemill/typemill.git synced 2025-07-31 11:20:15 +02:00

Fix setup controller

This commit is contained in:
trendschau
2023-11-08 21:15:16 +01:00
parent 0f25f61090
commit e3815f6315
8 changed files with 107 additions and 52 deletions

View File

@@ -23,7 +23,7 @@ class ControllerApiSystemUsers extends Controller
{
foreach($usernames as $username)
{
if($validate->username(['username' => $username]))
if($validate->username(['username' => $username]) === true)
{
$existinguser = $user->setUser($username);
if($existinguser)
@@ -51,7 +51,7 @@ class ControllerApiSystemUsers extends Controller
$validate = new Validation();
$valresult = $validate->emailsearch(['email' => $email]);
if($valresult)
if($valresult === true)
{
$usernames = $user->findUsersByEmail($email);

View File

@@ -34,7 +34,7 @@ class ControllerWebAuth extends Controller
$validation = new Validation();
# $settings = $this->c->get('settings');
if($validation->signin($input))
if($validation->signin($input) === true)
{
$user = new User();

View File

@@ -232,7 +232,7 @@ class ControllerWebRecover extends Controller
$validation = new Validation();
if(!$validation->recoverPassword($params))
if($validation->recoverPassword($params) !== true)
{
if($securitylog)
{

View File

@@ -9,6 +9,7 @@ use Typemill\Models\StorageWrapper;
use Typemill\Models\Validation;
use Typemill\Models\User;
use Typemill\Models\Settings;
use Typemill\Static\Translations;
class ControllerWebSetup extends Controller
{
@@ -65,39 +66,49 @@ class ControllerWebSetup extends Controller
$userroles = $this->c->get('acl')->getRoles();
# validate user
if($validate->newUser($params, $userroles))
if($validate->newSetupUser($params, $userroles) !== true)
{
$userdata = [
'username' => $params['username'],
'email' => $params['email'],
'userrole' => $params['userrole'],
'password' => $params['password']
];
$this->c->get('flash')->addMessage('error', Translations::translate('Please correct the errors in the form.'));
$user = new User();
# create initial user
$username = $user->createUser($userdata);
if($username)
{
usleep(30000);
$user->setUser($username);
$user->login();
# create initial settings file
$settingsModel = new Settings();
$settingsModel->createSettings();
$urlinfo = $this->c->get('urlinfo');
$route = $urlinfo['baseurl'] . '/tm/system';
usleep(30000);
return $response->withHeader('Location', $route)->withStatus(302);
}
return $response->withHeader('Location', $this->routeParser->urlFor('setup.show'))->withStatus(302);
}
$userdata = [
'username' => $params['username'],
'email' => $params['email'],
'userrole' => $params['userrole'],
'password' => $params['password']
];
$user = new User();
# create initial user
$username = $user->createUser($userdata);
if($username)
{
usleep(30000);
$user->setUser($username);
$user->login();
# create initial settings file
$settingsModel = new Settings();
$settingsModel->createSettings();
$urlinfo = $this->c->get('urlinfo');
$route = $urlinfo['baseurl'] . '/tm/system';
usleep(30000);
$this->c->get('flash')->addMessage('error', Translations::translate('Account created. Please login with your username and password now.'));
return $response->withHeader('Location', $route)->withStatus(302);
}
$this->c->get('flash')->addMessage('error', Translations::translate('We could not create the user. Please check if the settings folde is writable.'));
return $response->withHeader('Location', $this->routeParser->urlFor('setup.show'))->withStatus(302);
}
}

View File

@@ -3,9 +3,10 @@
namespace Typemill\Middleware;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;
use Slim\Psr7\Response;
#use Slim\Psr7\Response;
class AssetMiddleware implements MiddlewareInterface
{
@@ -34,8 +35,8 @@ class AssetMiddleware implements MiddlewareInterface
# $this->container['view']['base_url'] = $uri->getBaseUrl();
# $this->container['view']['current_url'] = $uri->getPath();
$response = $handler->handle($request);
return $response;
$response = $handler->handle($request);
return $response;
}
}

View File

@@ -1,5 +1,5 @@
<?php
namespace Typemill\Models;
use Valitron\Validator;
@@ -273,6 +273,44 @@ class Validation
return false;
}
/**
* validation for setup user (in backoffice)
*
* @param array $params with form data.
* @return obj $v the validation object passed to a result method.
*/
public function newSetupUser(array $params, array $userroles)
{
$v = new Validator($params);
$v->rule('required', ['username', 'email', 'password'])->message("required");
$v->rule('alphaNum', 'username')->message("invalid characters");
$v->rule('lengthBetween', 'password', 5, 40)->message("Length between 5 - 40");
$v->rule('lengthBetween', 'username', 3, 20)->message("Length between 3 - 20");
$v->rule('userAvailable', 'username')->message("User already exists");
$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('email', 'email')->message("e-mail is invalid");
$v->rule('emailAvailable', 'email')->message("Email already taken");
$v->rule('in', 'userrole', $userroles);
if($v->validate())
{
return true;
}
if(isset($_SESSION))
{
$_SESSION['errors'] = $v->errors();
}
return $v->errors();
}
/**
* validation for new user (in backoffice)
@@ -341,7 +379,7 @@ class Validation
return true;
}
return false;
return $v->errors();
}
public function emailsearch(array $params)
@@ -357,7 +395,7 @@ class Validation
return true;
}
return false;
return $v->errors();
}
public function newLicense(array $params)

View File

@@ -13,7 +13,7 @@
<form method="POST" action="{{ url_for("setup.create") }}" autocomplete="off">
<fieldset class="">
<fieldset>
<div class="my-2 {{ errors.username ? ' errors' : '' }}">
<label for="username">{{ translate('Username') }} <abbr title="{{ translate('required') }}">*</abbr></label>
@@ -23,8 +23,8 @@
value="{{ old.username }}"
class="form-control block w-full px-3 py-1.5 text-base font-normal text-gray-700 bg-white bg-clip-padding border border-solid border-gray-300 transition ease-in-out m-0 focus:text-gray-700 focus:bg-white focus:border-blue-600 focus:outline-none"
required>
{% if errors.signup_username %}
<span class="">{{ errors.username|first }}</span>
{% if errors.username %}
<span class="text-rose-300">{{ errors.username|first }}</span>
{% endif %}
</div>
@@ -36,8 +36,8 @@
value="{{ old.email }}"
class="form-control block w-full px-3 py-1.5 text-base font-normal text-gray-700 bg-white bg-clip-padding border border-solid border-gray-300 transition ease-in-out m-0 focus:text-gray-700 focus:bg-white focus:border-blue-600 focus:outline-none"
required>
{% if errors.signup_email %}
<span class="">{{ errors.email|first }}</span>
{% if errors.email %}
<span class="text-rose-300">{{ errors.email|first }}</span>
{% endif %}
</div>
@@ -50,7 +50,7 @@
class="form-control block w-full px-3 py-1.5 text-base font-normal text-gray-700 bg-white bg-clip-padding border border-solid border-gray-300 transition ease-in-out m-0 focus:text-gray-700 focus:bg-white focus:border-blue-600 focus:outline-none"
required>
{% if errors.password %}
<span class="error">{{ errors.password|first }}</span>
<span class="text-rose-300">{{ errors.password|first }}</span>
{% endif %}
</div>

View File

@@ -1626,6 +1626,10 @@ video {
padding-left: 3rem;
}
.pl-24 {
padding-left: 6rem;
}
.pr-1 {
padding-right: 0.25rem;
}
@@ -1658,10 +1662,6 @@ video {
padding-top: 0.75rem;
}
.pl-24 {
padding-left: 6rem;
}
.text-left {
text-align: left;
}
@@ -1769,6 +1769,11 @@ video {
color: rgb(250 250 249 / var(--tw-text-opacity));
}
.text-rose-300 {
--tw-text-opacity: 1;
color: rgb(253 164 175 / var(--tw-text-opacity));
}
.text-stone-400 {
--tw-text-opacity: 1;
color: rgb(168 162 158 / var(--tw-text-opacity));