allow to set api token when creating user via API (#3380)

This commit is contained in:
Kevin Papst
2022-06-25 00:26:39 +02:00
committed by GitHub
parent aa8549b633
commit 9f1f7b989c
3 changed files with 25 additions and 2 deletions

View File

@@ -226,11 +226,17 @@ final class UserController extends BaseApiController
$password = $this->encoder->encodePassword($user, $user->getPlainPassword());
$user->setPassword($password);
if ($user->getPlainApiToken() !== null) {
$user->setApiToken($this->encoder->encodePassword($user, $user->getPlainApiToken()));
}
$this->repository->saveUser($user);
$view = new View($user, 200);
$view->getContext()->setGroups(self::GROUPS_ENTITY);
$user->eraseCredentials();
return $this->viewHandler->handle($view);
}

View File

@@ -156,8 +156,9 @@ class User implements UserInterface, EquatableInterface, \Serializable
*/
private $apiToken;
/**
* @var string
* @var string|null
* @internal to be set via form, must not be persisted
*
* @Assert\NotBlank(groups={"ApiTokenUpdate"})
* @Assert\Length(min="8", max="60", groups={"ApiTokenUpdate"})
*/
@@ -848,6 +849,7 @@ class User implements UserInterface, EquatableInterface, \Serializable
public function eraseCredentials()
{
$this->plainPassword = null;
$this->plainApiToken = null;
}
/**

View File

@@ -24,7 +24,9 @@ class UserApiCreateForm extends UserCreateType
{
parent::buildForm($builder, $options);
$builder->remove('plainPassword');
if ($builder->has('plainPassword')) {
$builder->remove('plainPassword');
}
$builder->add('plainPassword', PasswordType::class, [
'required' => true,
@@ -35,6 +37,19 @@ class UserApiCreateForm extends UserCreateType
],
]);
if ($builder->has('plainApiToken')) {
$builder->remove('plainApiToken');
}
$builder->add('plainApiToken', PasswordType::class, [
'required' => false,
'label' => 'label.api_token',
'documentation' => [
'type' => 'string',
'description' => 'Plain API token',
],
]);
if ($options['include_roles']) {
$builder->add('roles', UserRoleType::class, [
'label' => 'label.roles',