add city, subdivision1, subdivison2

This commit is contained in:
Francis Cao 2023-02-16 18:55:51 -08:00
parent 074fa2c5fc
commit 6bacfa5892

View File

@ -27,7 +27,7 @@ export function getIpAddress(req) {
return requestIp.getClientIp(req); return requestIp.getClientIp(req);
} }
export function getDevice(screen, browser, os) { export function getDevice(screen, os) {
if (!screen) return; if (!screen) return;
const [width] = screen.split('x'); const [width] = screen.split('x');
@ -55,12 +55,7 @@ export function getDevice(screen, browser, os) {
} }
} }
export async function getCountry(req, ip) { export async function getLocation(ip) {
// Cloudflare
if (req.headers['cf-ipcountry']) {
return req.headers['cf-ipcountry'];
}
// Ignore local ips // Ignore local ips
if (await isLocalhost(ip)) { if (await isLocalhost(ip)) {
return; return;
@ -72,19 +67,27 @@ export async function getCountry(req, ip) {
} }
const result = lookup.get(ip); const result = lookup.get(ip);
const country = result?.country?.iso_code ?? result?.registered_country?.iso_code;
const subdivision1 = result?.subdivisions[0].iso_code;
const subdivision2 = result?.subdivisions[1].iso_code;
const city = result?.city?.names?.en;
return result?.country?.iso_code; return { country, subdivision1, subdivision2, city };
} }
export async function getClientInfo(req, { screen }) { export async function getClientInfo(req, { screen }) {
const location = await getLocation(ip);
const userAgent = req.headers['user-agent']; const userAgent = req.headers['user-agent'];
const ip = getIpAddress(req); const ip = getIpAddress(req);
const country = await getCountry(req, ip); const country = location.country;
const subdivision1 = location.subdivision1;
const subdivision2 = location.subdivision2;
const city = location.city;
const browser = browserName(userAgent); const browser = browserName(userAgent);
const os = detectOS(userAgent); const os = detectOS(userAgent);
const device = getDevice(screen, browser, os); const device = getDevice(screen, browser, os);
return { userAgent, browser, os, ip, country, device }; return { userAgent, browser, os, ip, country, subdivision1, subdivision2, city, device };
} }
export function getJsonBody(req) { export function getJsonBody(req) {