Skip to content

Commit 7cf2a9f

Browse files
authored
Merge branch 'main' into worktree-add-ip2location-service
2 parents e15cbae + 5cc5b40 commit 7cf2a9f

2 files changed

Lines changed: 64 additions & 31 deletions

File tree

psalm-baseline.xml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -222,18 +222,12 @@
222222
<PossiblyNullArgument>
223223
<code><![CDATA[$this->client->getErrors()]]></code>
224224
</PossiblyNullArgument>
225-
<PossiblyNullArrayOffset>
226-
<code><![CDATA[$output]]></code>
227-
</PossiblyNullArrayOffset>
228-
<PossiblyNullOperand>
225+
<PossiblyNullOperand>
229226
<code><![CDATA[$this->client->getErrors()]]></code>
230227
</PossiblyNullOperand>
231228
<PropertyNotSetInConstructor>
232229
<code><![CDATA[$continents]]></code>
233230
</PropertyNotSetInConstructor>
234-
<RedundantCastGivenDocblockType>
235-
<code><![CDATA[(string) $line]]></code>
236-
</RedundantCastGivenDocblockType>
237231
</file>
238232
<file src="src/Services/IPData.php">
239233
<ClassMustBeFinal>

src/Services/IPApi.php

Lines changed: 63 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
namespace InteractionDesignFoundation\GeoIP\Services;
66

7-
use Exception;
87
use Illuminate\Support\Arr;
98
use InteractionDesignFoundation\GeoIP\Support\HttpClient;
109

@@ -99,32 +98,10 @@ public function locate($ip): \InteractionDesignFoundation\GeoIP\Location
9998

10099
/**
101100
* Update function for service.
102-
* @throws \Exception
103101
*/
104102
public function update(): string
105103
{
106-
$data = $this->client->get('https://dev.maxmind.com/static/csv/codes/country_continent.csv');
107-
108-
// Verify server response
109-
if ($this->client->getErrors() !== null) {
110-
throw new Exception($this->client->getErrors());
111-
}
112-
113-
$lines = explode("\n", (string) $data[0]);
114-
115-
array_shift($lines);
116-
117-
$output = [];
118-
119-
foreach ($lines as $line) {
120-
$arr = str_getcsv((string) $line);
121-
122-
if (count($arr) < 2) {
123-
continue;
124-
}
125-
126-
$output[$arr[0]] = $arr[1];
127-
}
104+
$output = self::countryContinentMap();
128105

129106
// Get path
130107
$path = $this->config('continent_path');
@@ -134,6 +111,68 @@ public function update(): string
134111
return sprintf('Continent file (%s) updated.', $path);
135112
}
136113

114+
/**
115+
* ISO 3166 country code to continent code mapping.
116+
*
117+
* @return array<string, string>
118+
*/
119+
private static function countryContinentMap(): array
120+
{
121+
return [
122+
'AD' => 'EU', 'AE' => 'AS', 'AF' => 'AS', 'AG' => 'NA', 'AI' => 'NA',
123+
'AL' => 'EU', 'AM' => 'AS', 'AO' => 'AF', 'AP' => 'AS', 'AQ' => 'AN',
124+
'AR' => 'SA', 'AS' => 'OC', 'AT' => 'EU', 'AU' => 'OC', 'AW' => 'NA',
125+
'AX' => 'EU', 'AZ' => 'AS', 'BA' => 'EU', 'BB' => 'NA', 'BD' => 'AS',
126+
'BE' => 'EU', 'BF' => 'AF', 'BG' => 'EU', 'BH' => 'AS', 'BI' => 'AF',
127+
'BJ' => 'AF', 'BL' => 'NA', 'BM' => 'NA', 'BN' => 'AS', 'BO' => 'SA',
128+
'BQ' => 'NA', 'BR' => 'SA', 'BS' => 'NA', 'BT' => 'AS', 'BV' => 'AN',
129+
'BW' => 'AF', 'BY' => 'EU', 'BZ' => 'NA', 'CA' => 'NA', 'CC' => 'AS',
130+
'CD' => 'AF', 'CF' => 'AF', 'CG' => 'AF', 'CH' => 'EU', 'CI' => 'AF',
131+
'CK' => 'OC', 'CL' => 'SA', 'CM' => 'AF', 'CN' => 'AS', 'CO' => 'SA',
132+
'CR' => 'NA', 'CU' => 'NA', 'CV' => 'AF', 'CW' => 'NA', 'CX' => 'AS',
133+
'CY' => 'AS', 'CZ' => 'EU', 'DE' => 'EU', 'DJ' => 'AF', 'DK' => 'EU',
134+
'DM' => 'NA', 'DO' => 'NA', 'DZ' => 'AF', 'EC' => 'SA', 'EE' => 'EU',
135+
'EG' => 'AF', 'EH' => 'AF', 'ER' => 'AF', 'ES' => 'EU', 'ET' => 'AF',
136+
'EU' => 'EU', 'FI' => 'EU', 'FJ' => 'OC', 'FK' => 'SA', 'FM' => 'OC',
137+
'FO' => 'EU', 'FR' => 'EU', 'GA' => 'AF', 'GB' => 'EU', 'GD' => 'NA',
138+
'GE' => 'AS', 'GF' => 'SA', 'GG' => 'EU', 'GH' => 'AF', 'GI' => 'EU',
139+
'GL' => 'NA', 'GM' => 'AF', 'GN' => 'AF', 'GP' => 'NA', 'GQ' => 'AF',
140+
'GR' => 'EU', 'GS' => 'AN', 'GT' => 'NA', 'GU' => 'OC', 'GW' => 'AF',
141+
'GY' => 'SA', 'HK' => 'AS', 'HM' => 'AN', 'HN' => 'NA', 'HR' => 'EU',
142+
'HT' => 'NA', 'HU' => 'EU', 'ID' => 'AS', 'IE' => 'EU', 'IL' => 'AS',
143+
'IM' => 'EU', 'IN' => 'AS', 'IO' => 'AS', 'IQ' => 'AS', 'IR' => 'AS',
144+
'IS' => 'EU', 'IT' => 'EU', 'JE' => 'EU', 'JM' => 'NA', 'JO' => 'AS',
145+
'JP' => 'AS', 'KE' => 'AF', 'KG' => 'AS', 'KH' => 'AS', 'KI' => 'OC',
146+
'KM' => 'AF', 'KN' => 'NA', 'KP' => 'AS', 'KR' => 'AS', 'KW' => 'AS',
147+
'KY' => 'NA', 'KZ' => 'AS', 'LA' => 'AS', 'LB' => 'AS', 'LC' => 'NA',
148+
'LI' => 'EU', 'LK' => 'AS', 'LR' => 'AF', 'LS' => 'AF', 'LT' => 'EU',
149+
'LU' => 'EU', 'LV' => 'EU', 'LY' => 'AF', 'MA' => 'AF', 'MC' => 'EU',
150+
'MD' => 'EU', 'ME' => 'EU', 'MF' => 'NA', 'MG' => 'AF', 'MH' => 'OC',
151+
'MK' => 'EU', 'ML' => 'AF', 'MM' => 'AS', 'MN' => 'AS', 'MO' => 'AS',
152+
'MP' => 'OC', 'MQ' => 'NA', 'MR' => 'AF', 'MS' => 'NA', 'MT' => 'EU',
153+
'MU' => 'AF', 'MV' => 'AS', 'MW' => 'AF', 'MX' => 'NA', 'MY' => 'AS',
154+
'MZ' => 'AF', 'NA' => 'AF', 'NC' => 'OC', 'NE' => 'AF', 'NF' => 'OC',
155+
'NG' => 'AF', 'NI' => 'NA', 'NL' => 'EU', 'NO' => 'EU', 'NP' => 'AS',
156+
'NR' => 'OC', 'NU' => 'OC', 'NZ' => 'OC', 'OM' => 'AS', 'PA' => 'NA',
157+
'PE' => 'SA', 'PF' => 'OC', 'PG' => 'OC', 'PH' => 'AS', 'PK' => 'AS',
158+
'PL' => 'EU', 'PM' => 'NA', 'PN' => 'OC', 'PR' => 'NA', 'PS' => 'AS',
159+
'PT' => 'EU', 'PW' => 'OC', 'PY' => 'SA', 'QA' => 'AS', 'RE' => 'AF',
160+
'RO' => 'EU', 'RS' => 'EU', 'RU' => 'EU', 'RW' => 'AF', 'SA' => 'AS',
161+
'SB' => 'OC', 'SC' => 'AF', 'SD' => 'AF', 'SE' => 'EU', 'SG' => 'AS',
162+
'SH' => 'AF', 'SI' => 'EU', 'SJ' => 'EU', 'SK' => 'EU', 'SL' => 'AF',
163+
'SM' => 'EU', 'SN' => 'AF', 'SO' => 'AF', 'SR' => 'SA', 'SS' => 'AF',
164+
'ST' => 'AF', 'SV' => 'NA', 'SX' => 'NA', 'SY' => 'AS', 'SZ' => 'AF',
165+
'TC' => 'NA', 'TD' => 'AF', 'TF' => 'AN', 'TG' => 'AF', 'TH' => 'AS',
166+
'TJ' => 'AS', 'TK' => 'OC', 'TL' => 'AS', 'TM' => 'AS', 'TN' => 'AF',
167+
'TO' => 'OC', 'TR' => 'EU', 'TT' => 'NA', 'TV' => 'OC', 'TW' => 'AS',
168+
'TZ' => 'AF', 'UA' => 'EU', 'UG' => 'AF', 'UM' => 'OC', 'US' => 'NA',
169+
'UY' => 'SA', 'UZ' => 'AS', 'VA' => 'EU', 'VC' => 'NA', 'VE' => 'SA',
170+
'VG' => 'NA', 'VI' => 'NA', 'VN' => 'AS', 'VU' => 'OC', 'WF' => 'OC',
171+
'WS' => 'OC', 'XK' => 'EU', 'YE' => 'AS', 'YT' => 'AF', 'ZA' => 'AF',
172+
'ZM' => 'AF', 'ZW' => 'AF',
173+
];
174+
}
175+
137176
/** Get a continent based on country code. */
138177
private function getContinent(string $code): string
139178
{

0 commit comments

Comments
 (0)