• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

webeweb / haveibeenpwned-library / 4101946401

pending completion
4101946401

push

github

webeweb
Update CHANGELOG

240 of 244 relevant lines covered (98.36%)

45.96 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.14
/src/Serializer/ResponseDeserializer.php
1
<?php
2

3
/*
4
 * This file is part of the haveibeenpwned-library package.
5
 *
6
 * (c) 2019 WEBEWEB
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11

12
namespace WBW\Library\HaveIBeenPwned\Serializer;
13

14
use DateTime;
15
use DateTimeZone;
16
use WBW\Library\HaveIBeenPwned\Api\ResponseInterface;
17
use WBW\Library\HaveIBeenPwned\Model\Breach;
18
use WBW\Library\HaveIBeenPwned\Model\DataClass;
19
use WBW\Library\HaveIBeenPwned\Model\Paste;
20
use WBW\Library\HaveIBeenPwned\Model\Range;
21
use WBW\Library\HaveIBeenPwned\Response\BreachesResponse;
22
use WBW\Library\HaveIBeenPwned\Response\DataClassesResponse;
23
use WBW\Library\HaveIBeenPwned\Response\PastesResponse;
24
use WBW\Library\HaveIBeenPwned\Response\RangesResponse;
25
use WBW\Library\Types\Helper\ArrayHelper;
26

27
/**
28
 * Response deserializer.
29
 *
30
 * @author webeweb <https://github.com/webeweb>
31
 * @package WBW\Library\HaveIBeenPwned\Serializer
32
 */
33
class ResponseDeserializer {
34

35
    /**
36
     * Cleans a raw response.
37
     *
38
     * @param string $rawResponse The raw response.
39
     * @return string Returns the cleaned raw response.
40
     */
41
    public static function cleanResponse(string $rawResponse): string {
42

43
        $searches = [":True", ":False", ": True", ": False"];
56✔
44
        $replaces = [":true", ":false", ":true", ":false"];
56✔
45

46
        return str_replace($searches, $replaces, $rawResponse);
56✔
47
    }
48

49
    /**
50
     * Deserializes a breach.
51
     *
52
     * @param array $data The data.
53
     * @return Breach Returns a breach.
54
     */
55
    protected static function deserializeBreach(array $data): Breach {
56

57
        $addedDate    = DateTime::createFromFormat(ResponseInterface::DATETIME_FORMAT_ADDED, ArrayHelper::get($data, "AddedDate", ""), new DateTimeZone("UTC"));
49✔
58
        $breachDate   = DateTime::createFromFormat(ResponseInterface::DATETIME_FORMAT_BREACH, ArrayHelper::get($data, "BreachDate", ""), new DateTimeZone("UTC"));
49✔
59
        $modifiedDate = DateTime::createFromFormat(ResponseInterface::DATETIME_FORMAT_MODIFIED, ArrayHelper::get($data, "ModifiedDate", ""), new DateTimeZone("UTC"));
49✔
60

61
        $model = new Breach();
49✔
62
        $model->setName(ArrayHelper::get($data, "Name"));
49✔
63
        $model->setTitle(ArrayHelper::get($data, "Title"));
49✔
64
        $model->setDomain(ArrayHelper::get($data, "Domain"));
49✔
65
        $model->setBreachDate(false !== $breachDate ? $breachDate : null);
49✔
66
        $model->setAddedDate(false !== $addedDate ? $addedDate : null);
49✔
67
        $model->setModifiedDate(false !== $modifiedDate ? $modifiedDate : null);
49✔
68
        $model->setPwnCount(ArrayHelper::get($data, "PwnCount", 0));
49✔
69
        $model->setDescription(ArrayHelper::get($data, "Description"));
49✔
70
        $model->setVerified(ArrayHelper::get($data, "IsVerified", false));
49✔
71
        $model->setSensitive(ArrayHelper::get($data, "IsSensitive", false));
49✔
72
        $model->setRetired(ArrayHelper::get($data, "IsRetired", false));
49✔
73
        $model->setSpamList(ArrayHelper::get($data, "IsSpamList", false));
49✔
74

75
        foreach (ArrayHelper::get($data, "DataClasses", []) as $current) {
49✔
76
            $model->addDataClass(static::deserializeDataClass($current));
49✔
77
        }
78

79
        return $model;
49✔
80
    }
81

82
    /**
83
     * Deserializes a breaches response.
84
     *
85
     * @param string $rawResponse The raw response.
86
     * @return BreachesResponse Returns the breaches response.
87
     */
88
    public static function deserializeBreachesResponse(string $rawResponse): BreachesResponse {
89

90
        $cleanedResponse = static::cleanResponse($rawResponse);
49✔
91

92
        $response = json_decode($cleanedResponse, true);
49✔
93

94
        $model = new BreachesResponse();
49✔
95
        $model->setRawResponse($rawResponse);
49✔
96

97
        if (true === ArrayHelper::isObject($response)) {
49✔
98
            $response = [$response];
14✔
99
        }
100

101
        foreach ($response as $current) {
49✔
102

103
            if (true === is_string($current)) {
49✔
104
                $current = ["Name" => $current];
×
105
            }
106

107
            $model->addBreach(static::deserializeBreach($current));
49✔
108
        }
109

110
        return $model;
49✔
111
    }
112

113
    /**
114
     * Deserializes a data class.
115
     *
116
     * @param string $rawResponse The raw response.
117
     * @return DataClass Returns a data class.
118
     */
119
    protected static function deserializeDataClass(string $rawResponse): DataClass {
120

121
        $model = new DataClass();
70✔
122
        $model->setName($rawResponse);
70✔
123

124
        return $model;
70✔
125
    }
126

127
    /**
128
     * Deserializes a data classes response.
129
     *
130
     * @param string $rawResponse The raw response.
131
     * @return DataClassesResponse Returns the data classes response.
132
     */
133
    public static function deserializeDataClassesResponse(string $rawResponse): DataClassesResponse {
134

135
        $response = json_decode($rawResponse, true);
21✔
136

137
        $model = new DataClassesResponse();
21✔
138
        $model->setRawResponse($rawResponse);
21✔
139

140
        foreach ($response as $current) {
21✔
141
            $model->addDataClass(static::deserializeDataClass($current));
21✔
142
        }
143

144
        return $model;
21✔
145
    }
146

147
    /**
148
     * Deserializes a paste.
149
     *
150
     * @param array $data The data.
151
     * @return Paste Returns the paste.
152
     */
153
    protected static function deserializePaste(array $data): Paste {
154

155
        $date = DateTime::createFromFormat(ResponseInterface::DATETIME_FORMAT_DATE, ArrayHelper::get($data, "Date", ""), new DateTimeZone("UTC"));
7✔
156

157
        $model = new Paste();
7✔
158
        $model->setSource(ArrayHelper::get($data, "Source"));
7✔
159
        $model->setId(ArrayHelper::get($data, "Id"));
7✔
160
        $model->setTitle(ArrayHelper::get($data, "Title"));
7✔
161
        $model->setDate(false !== $date ? $date : null);
7✔
162
        $model->setEmailCount(ArrayHelper::get($data, "EmailCount", 0));
7✔
163

164
        return $model;
7✔
165
    }
166

167
    /**
168
     * Deserializes a pastes response.
169
     *
170
     * @param string $rawResponse The raw response.
171
     * @return PastesResponse Returns the pastes response.
172
     */
173
    public static function deserializePastesResponse(string $rawResponse): PastesResponse {
174

175
        $cleanedResponse = static::cleanResponse($rawResponse);
7✔
176

177
        $response = json_decode($cleanedResponse, true);
7✔
178

179
        $model = new PastesResponse();
7✔
180
        $model->setRawResponse($rawResponse);
7✔
181

182
        foreach ($response as $current) {
7✔
183
            $model->addPaste(static::deserializePaste($current));
7✔
184
        }
185

186
        return $model;
7✔
187
    }
188

189
    /**
190
     * Deserializes a range.
191
     *
192
     * @param string $rawResponse The raw response.
193
     * @return Range Returns a range.
194
     */
195
    protected static function deserializeRange(string $rawResponse): Range {
196

197
        $response = explode(":", $rawResponse);
21✔
198

199
        if (count($response) < 2) {
21✔
200
            return new Range();
×
201
        }
202

203
        $model = new Range();
21✔
204
        $model->setHash(trim($response[0]));
21✔
205
        $model->setCount(intval($response[1]));
21✔
206

207
        return $model;
21✔
208
    }
209

210
    /**
211
     * Deserializes a ranges response.
212
     *
213
     * @param string $rawResponse The raw response.
214
     * @return RangesResponse Returns the ranges response.
215
     */
216
    public static function deserializeRangesResponse(string $rawResponse): RangesResponse {
217

218
        $response = explode("\n", $rawResponse);
21✔
219

220
        $model = new RangesResponse();
21✔
221
        $model->setRawResponse($rawResponse);
21✔
222

223
        foreach ($response as $current) {
21✔
224
            $model->addRange(static::deserializeRange($current));
21✔
225
        }
226

227
        return $model;
21✔
228
    }
229
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc