Db.php 2.47 KB
Newer Older
Bertrand Gauthier's avatar
Bertrand Gauthier committed
1
2
3
4
<?php

namespace UnicaenAuth\Authentication\Storage;

5
6
use PDOException;
use Zend\ServiceManager\Exception\ServiceNotFoundException;
Bertrand Gauthier's avatar
Bertrand Gauthier committed
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use Zend\Authentication\Exception\InvalidArgumentException;

/**
 * Db authentication storage.
 *
 * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
 */
class Db extends \ZfcUser\Authentication\Storage\Db
{
    /**
     * Returns the contents of storage
     *
     * Behavior is undefined when storage is empty.
     *
     * @throws InvalidArgumentException If reading contents from storage is impossible
     * @return \ZfcUser\Entity\UserInterface
     */
    public function read()
    {
26
27
28
29
30
31
32
33
34
        /**
         * 1ere tentative (mécanisme standard du module ZfcUser) :
         * 
         * Recherche dans la base de données de l'utilisateur dont l'id correspond à ce qui
         * est stoqué en session.
         * 
         * NB: En cas de problème de connexion ou de service 'zfcuser_user_mapper' introuvable,
         * cela signifie sans doute que l'application n'utilise pas de table des utilisateurs.
         */
Bertrand Gauthier's avatar
Bertrand Gauthier committed
35
36
37
        try {
            $identity = parent::read();
        }
38
        catch (PDOException $pdoe) {
Bertrand Gauthier's avatar
Bertrand Gauthier committed
39
40
            $identity = null;
        }
41
42
43
        catch (ServiceNotFoundException $e) {
            $identity = null;
        }
44
45
        // si on obtient autre chose qu'un scalaire, l'utilisateur a déjà été 
        // recherché/trouvé dans la base de données
Bertrand Gauthier's avatar
Bertrand Gauthier committed
46
47
48
49
        if ($identity && !is_scalar($identity)) {
            return $identity;
        }
        
50
51
52
53
54
55
56
57
58
        /**
         * 2e tentative : 
         * 
         * Recherche de l'utilisateur dont le supannAliasLogin correspond à ce qui
         * est stoqué en session.
         * 
         * NB: En cas de problème de connexion ou de service 'zfcuser_user_mapper' introuvable,
         * cela signifie sans doute que l'application n'utilise pas de table des utilisateurs.
         */
Bertrand Gauthier's avatar
Bertrand Gauthier committed
59
60
61
62
63
        $username = $this->getStorage()->read();
        if (is_string($username)) {
            try {
                $identity = $this->getMapper()->findByUsername($username);
            }
64
            catch (PDOException $pdoe) {
Bertrand Gauthier's avatar
Bertrand Gauthier committed
65
66
                $identity = null;
            }
67
68
69
            catch (ServiceNotFoundException $e) {
                $identity = null;
            }
Bertrand Gauthier's avatar
Bertrand Gauthier committed
70
        }
71
        
Bertrand Gauthier's avatar
Bertrand Gauthier committed
72
73
        if ($identity) {
            $this->resolvedIdentity = $identity;
74
75
        } 
        else {
Bertrand Gauthier's avatar
Bertrand Gauthier committed
76
77
78
79
80
            $this->resolvedIdentity = null;
        }
        
        return $this->resolvedIdentity;
    }
81
}