Passed
Pull Request — develop (#38)
by Pieter van der
03:26
created

Tiqr_UserSecretStorage_Pdo::getUserSecret()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 3.0261

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 6
c 1
b 0
f 0
dl 0
loc 10
ccs 6
cts 7
cp 0.8571
rs 10
cc 3
nc 3
nop 1
crap 3.0261
1
<?php
2
/**
3
 * This file is part of the tiqr project.
4
 * 
5
 * The tiqr project aims to provide an open implementation for 
6
 * authentication using mobile devices. It was initiated by 
7
 * SURFnet and developed by Egeniq.
8
 *
9
 * More information: http://www.tiqr.org
10
 *
11
 * @author Patrick Honing <[email protected]>
12
 * 
13
 * @package tiqr
14
 *
15
 * @license New BSD License - See LICENSE file for details.
16
 *
17
 * @copyright (C) 2010-2012 SURFnet BV
18
 * 
19
 * Create SQL table (MySQL):
20
 * CREATE TABLE `tiqrusersecret` (`userid` varchar(10) PRIMARY KEY, `secret` varchar(100))
21
 * 
22
 */
23
24 1
require_once 'Tiqr/UserSecretStorage/UserSecretStorageTrait.php';
25
26
use Psr\Log\LoggerInterface;
27
28
/**
29
 * This user storage implementation implements a user secret storage using PDO.
30
 * It is usable for any database with a PDO driver
31
 * 
32
 * @author Patrick Honing <[email protected]>
33
 */
34
class Tiqr_UserSecretStorage_Pdo implements Tiqr_UserSecretStorage_Interface
35
{
36
    use UserSecretStorageTrait;
37
38
    private $tableName;
39
40
    private $handle;
41
42
    /**
43
     * @var LoggerInterface
44
     */
45
    private $logger;
46
47
    /**
48
     * @param Tiqr_UserSecretStorage_Encryption_Interface $encryption
49
     * @param LoggerInterface $logger
50
     * @param PDO $handle
51
     */
52 6
    public function __construct(
53
        Tiqr_UserSecretStorage_Encryption_Interface $encryption,
54
        LoggerInterface $logger,
55
        PDO $handle,
56
        string $tableName
57
    ) {
58 6
        $this->encryption = $encryption;
59 6
        $this->logger = $logger;
60 6
        $this->handle = $handle;
61 6
        $this->tableName = $tableName;
62 6
    }
63 2
    private function userExists($userId)
64
    {
65 2
        $sth = $this->handle->prepare("SELECT userid FROM ".$this->tableName." WHERE userid = ?");
66 2
        $sth->execute(array($userId));
67 2
        $result = $sth->fetchColumn();
68 2
        if ($result !== false) {
69 1
            return true;
70
        }
71 1
        $this->logger->debug('Unable fot find user in user secret storage (PDO)');
72 1
        return false;
73
    }
74
75
    /**
76
     * Get the user's secret
77
     *
78
     * @param String $userId
79
     *
80
     * @return mixed: null|string
81
     */
82 1
    private function getUserSecret($userId)
0 ignored issues
show
Unused Code introduced by
The method getUserSecret() is not used, and could be removed.

This check looks for private methods that have been defined, but are not used inside the class.

Loading history...
83
    {
84 1
        $sth = $this->handle->prepare("SELECT secret FROM ".$this->tableName." WHERE userid = ?");
85 1
        if($sth->execute(array($userId))) {
86 1
            $secret = $sth->fetchColumn();
87 1
            if ($secret !== false) {
88 1
                return $secret;
89
            }
90
        }
91
        $this->logger->notice('Unable to retrieve user secret from user secret storage (PDO)');
92
    }
93
94
    /**
95
     * Store a secret for a user.
96
     *
97
     * @param String $userId
98
     * @param String $secret
99
     */
100 2
    private function setUserSecret($userId, $secret)
0 ignored issues
show
Unused Code introduced by
The method setUserSecret() is not used, and could be removed.

This check looks for private methods that have been defined, but are not used inside the class.

Loading history...
101
    {
102 2
        if ($this->userExists($userId)) {
103 1
            $sth = $this->handle->prepare("UPDATE ".$this->tableName." SET secret = ? WHERE userid = ?");
104
        } else {
105 1
            $sth = $this->handle->prepare("INSERT INTO ".$this->tableName." (secret,userid) VALUES (?,?)");
106
        }
107 2
        $result = $sth->execute(array($secret,$userId));
108 2
        if (!$result) {
109 1
            throw new ReadWriteException('Unable to persist user secret in user secret storage (PDO)');
110
        }
111 1
    }
112
}
113