Completed
Push — master ( 14eda7...a429c1 )
by Pierre
03:00
created

Repository::auth()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 25
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 3.009

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 20
nc 3
nop 2
dl 0
loc 25
ccs 18
cts 20
cp 0.9
crap 3.009
rs 9.6
c 1
b 0
f 0
1
<?php
2
3
namespace App\Component\Auth\Adapters;
4
5
use Nymfonya\Component\Config;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, App\Component\Auth\Adapters\Config. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
6
use Nymfonya\Component\Container;
7
use App\Component\Auth\AdapterInterface;
8
use App\Component\Crypt;
9
use App\Model\Repository\Users;
10
use App\Component\Db\Core;
11
12
class Repository implements AdapterInterface
13
{
14
15
    const _PASSWORD = 'password';
16
17
    /**
18
     * container
19
     *
20
     * @var Container
21
     */
22
    protected $container;
23
24
    /**
25
     * instanciate
26
     *
27
     * @param Container $container
28
     */
29 3
    public function __construct(Container $container)
30
    {
31 3
        $this->container = $container;
32
    }
33
34
    /**
35
     * auth process
36
     *
37
     * @return array
38
     */
39 2
    public function auth(string $login, string $password): array
40
    {
41 2
        $repo = (new Users($this->container))->getByEmail($login);
42 2
        $dbc = new Core($this->container);
43
        $dbc
44 2
            ->fromOrm($repo)
45 2
            ->run($repo->getSql(), $repo->getBuilderValues())
46 2
            ->hydrate();
47 2
        $result = $dbc->getRowset();
48 2
        if (empty($result)) {
49 1
            unset($repo, $dbc, $result);
50 1
            return [];
51
        }
52 1
        $user = $result[0];
53 1
        $config = $this->container->getService(Config::class);
54 1
        $clearPassword = (new Crypt($config))->decrypt(
55 1
            $user[self::_PASSWORD],
56 1
            true
57
        );
58 1
        if ($password == $clearPassword) {
59 1
            unset($config, $repo, $dbc, $result);
60 1
            return $user;
61
        }
62
        unset($config, $repo, $dbc, $result);
63
        return [];
64
    }
65
}
66