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

Repository   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Test Coverage

Coverage 90.91%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 24
dl 0
loc 52
ccs 20
cts 22
cp 0.9091
rs 10
c 1
b 0
f 0
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A auth() 0 25 3
A __construct() 0 3 1
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