Completed
Push — master ( 4b4e40...af8835 )
by Craig
10:40 queued 04:02
created

SuperUserHelper::updateAdmin()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 24
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 18
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 24
rs 9.6666
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Zikula package.
7
 *
8
 * Copyright Zikula Foundation - https://ziku.la/
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Zikula\Bundle\CoreInstallerBundle\Helper;
15
16
use DateTime;
17
use Doctrine\ORM\EntityManagerInterface;
18
use Symfony\Component\HttpFoundation\RequestStack;
19
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
20
use Zikula\UsersModule\Entity\RepositoryInterface\UserRepositoryInterface;
21
use Zikula\UsersModule\Entity\UserEntity;
22
use Zikula\UsersModule\Helper\AccessHelper;
23
use Zikula\ZAuthModule\Entity\AuthenticationMappingEntity;
24
use Zikula\ZAuthModule\ZAuthConstant;
25
26
class SuperUserHelper
27
{
28
    /**
29
     * @var UserRepositoryInterface
30
     */
31
    private $userRepository;
32
33
    /**
34
     * @var EntityManagerInterface
35
     */
36
    private $entityManager;
37
38
    /**
39
     * @var ParameterHelper
40
     */
41
    private $parameterHelper;
42
43
    /**
44
     * @var RequestStack
45
     */
46
    private $requestStack;
47
48
    /**
49
     * @var AccessHelper
50
     */
51
    private $accessHelper;
52
53
    /**
54
     * @var EncoderFactoryInterface
55
     */
56
    private $encoderFactory;
57
58
    public function __construct(
59
        UserRepositoryInterface $userRepository,
60
        EntityManagerInterface $entityManager,
61
        ParameterHelper $parameterHelper,
62
        RequestStack $requestStack,
63
        AccessHelper $accessHelper,
64
        EncoderFactoryInterface $encoderFactory
65
    ) {
66
        $this->userRepository = $userRepository;
67
        $this->entityManager = $entityManager;
68
        $this->parameterHelper = $parameterHelper;
69
        $this->requestStack = $requestStack;
70
        $this->accessHelper = $accessHelper;
71
        $this->encoderFactory = $encoderFactory;
72
    }
73
74
    /**
75
     * This inserts the admin's user data
76
     */
77
    public function createAdmin(): bool
78
    {
79
        $params = $this->parameterHelper->decodeParameters($this->parameterHelper->getYamlHelper()->getParameters());
80
        /** @var UserEntity $userEntity */
81
        $userEntity = $this->userRepository->find(2);
82
        $userEntity->setUname($params['username']);
83
        $userEntity->setEmail($params['email']);
84
        $userEntity->setActivated(1);
85
        $userEntity->setRegistrationDate(new DateTime());
86
        $userEntity->setLastLogin(new DateTime());
87
        $this->entityManager->persist($userEntity);
88
89
        $mapping = new AuthenticationMappingEntity();
90
        $mapping->setUid($userEntity->getUid());
91
        $mapping->setUname($userEntity->getUname());
92
        $mapping->setEmail($userEntity->getEmail());
93
        $mapping->setVerifiedEmail(true);
94
        $mapping->setPass($this->encoderFactory->getEncoder($mapping)->encodePassword($params['password'], null));
95
        $mapping->setMethod(ZAuthConstant::AUTHENTICATION_METHOD_UNAME);
96
        $this->entityManager->persist($mapping);
97
98
        $this->entityManager->flush();
99
100
        return true;
101
    }
102
103
    public function loginAdmin(): bool
104
    {
105
        $params = $this->parameterHelper->decodeParameters($this->parameterHelper->getYamlHelper()->getParameters());
106
        $user = $this->userRepository->findOneBy(['uname' => $params['username']]);
107
        $request = $this->requestStack->getCurrentRequest();
108
        if (isset($request) && $request->hasSession()) {
109
            $this->accessHelper->login($user, true);
0 ignored issues
show
Bug introduced by
It seems like $user can also be of type null; however, parameter $user of Zikula\UsersModule\Helper\AccessHelper::login() does only seem to accept Zikula\UsersModule\Entity\UserEntity, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

109
            $this->accessHelper->login(/** @scrutinizer ignore-type */ $user, true);
Loading history...
110
        }
111
112
        return true;
113
    }
114
}
115