feat(sessions): populate geo fields from GeoRecord on session create

This commit is contained in:
Damodar Lohani
2026-04-23 05:49:45 +00:00
parent a822a94545
commit 5cb3d4f4de
+48
View File
@@ -147,6 +147,18 @@ $createSession = function (string $userId, string $secret, Request $request, Res
'ip' => $request->getIP(),
'factors' => [$factor],
'countryCode' => $geoRecord->getCountryCode(),
'continentCode' => $geoRecord->getContinentCode() === '--' ? null : $geoRecord->getContinentCode(),
'latitude' => $geoRecord->getAttribute('latitude'),
'longitude' => $geoRecord->getAttribute('longitude'),
'timeZone' => $geoRecord->getAttribute('timeZone'),
'weatherCode' => $geoRecord->getAttribute('weatherCode'),
'postalCode' => $geoRecord->getAttribute('postalCode'),
'autonomousSystemNumber' => $geoRecord->getAttribute('autonomousSystemNumber'),
'autonomousSystemOrganization' => $geoRecord->getAttribute('autonomousSystemOrganization'),
'geoConnectionType' => $geoRecord->getAttribute('connection'),
'geoUserType' => $geoRecord->getAttribute('user'),
'geoOrganization' => $geoRecord->getAttribute('organization'),
'isp' => $geoRecord->getAttribute('isp'),
'expire' => DateTime::addSeconds(new \DateTime(), $duration)
],
$detector->getOS(),
@@ -961,6 +973,18 @@ Http::post('/v1/account/sessions/email')
'ip' => $request->getIP(),
'factors' => ['password'],
'countryCode' => $geoRecord->getCountryCode(),
'continentCode' => $geoRecord->getContinentCode() === '--' ? null : $geoRecord->getContinentCode(),
'latitude' => $geoRecord->getAttribute('latitude'),
'longitude' => $geoRecord->getAttribute('longitude'),
'timeZone' => $geoRecord->getAttribute('timeZone'),
'weatherCode' => $geoRecord->getAttribute('weatherCode'),
'postalCode' => $geoRecord->getAttribute('postalCode'),
'autonomousSystemNumber' => $geoRecord->getAttribute('autonomousSystemNumber'),
'autonomousSystemOrganization' => $geoRecord->getAttribute('autonomousSystemOrganization'),
'geoConnectionType' => $geoRecord->getAttribute('connection'),
'geoUserType' => $geoRecord->getAttribute('user'),
'geoOrganization' => $geoRecord->getAttribute('organization'),
'isp' => $geoRecord->getAttribute('isp'),
'expire' => DateTime::addSeconds(new \DateTime(), $duration)
],
$detector->getOS(),
@@ -1142,6 +1166,18 @@ Http::post('/v1/account/sessions/anonymous')
'ip' => $request->getIP(),
'factors' => ['anonymous'],
'countryCode' => $geoRecord->getCountryCode(),
'continentCode' => $geoRecord->getContinentCode() === '--' ? null : $geoRecord->getContinentCode(),
'latitude' => $geoRecord->getAttribute('latitude'),
'longitude' => $geoRecord->getAttribute('longitude'),
'timeZone' => $geoRecord->getAttribute('timeZone'),
'weatherCode' => $geoRecord->getAttribute('weatherCode'),
'postalCode' => $geoRecord->getAttribute('postalCode'),
'autonomousSystemNumber' => $geoRecord->getAttribute('autonomousSystemNumber'),
'autonomousSystemOrganization' => $geoRecord->getAttribute('autonomousSystemOrganization'),
'geoConnectionType' => $geoRecord->getAttribute('connection'),
'geoUserType' => $geoRecord->getAttribute('user'),
'geoOrganization' => $geoRecord->getAttribute('organization'),
'isp' => $geoRecord->getAttribute('isp'),
'expire' => DateTime::addSeconds(new \DateTime(), $duration)
],
$detector->getOS(),
@@ -1936,6 +1972,18 @@ Http::get('/v1/account/sessions/oauth2/:provider/redirect')
'ip' => $request->getIP(),
'factors' => [TYPE::EMAIL, 'oauth2'], // include a special oauth2 factor to bypass MFA checks
'countryCode' => $geoRecord->getCountryCode(),
'continentCode' => $geoRecord->getContinentCode() === '--' ? null : $geoRecord->getContinentCode(),
'latitude' => $geoRecord->getAttribute('latitude'),
'longitude' => $geoRecord->getAttribute('longitude'),
'timeZone' => $geoRecord->getAttribute('timeZone'),
'weatherCode' => $geoRecord->getAttribute('weatherCode'),
'postalCode' => $geoRecord->getAttribute('postalCode'),
'autonomousSystemNumber' => $geoRecord->getAttribute('autonomousSystemNumber'),
'autonomousSystemOrganization' => $geoRecord->getAttribute('autonomousSystemOrganization'),
'geoConnectionType' => $geoRecord->getAttribute('connection'),
'geoUserType' => $geoRecord->getAttribute('user'),
'geoOrganization' => $geoRecord->getAttribute('organization'),
'isp' => $geoRecord->getAttribute('isp'),
'expire' => DateTime::addSeconds(new \DateTime(), $duration)
], $detector->getOS(), $detector->getClient(), $detector->getDevice()));