use ip-lookup-api to determine users country

This commit is contained in:
Phillip Thelen
2025-09-05 12:51:54 +02:00
parent d952239d35
commit 6f63583a12
3 changed files with 7743 additions and 5190 deletions
+7731 -5187
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -43,6 +43,7 @@
"habitica-markdown": "^3.0.0", "habitica-markdown": "^3.0.0",
"helmet": "^4.6.0", "helmet": "^4.6.0",
"in-app-purchase": "^1.11.3", "in-app-purchase": "^1.11.3",
"ip-location-api": "^4.0.0",
"js2xmlparser": "^5.0.0", "js2xmlparser": "^5.0.0",
"jsonwebtoken": "^9.0.2", "jsonwebtoken": "^9.0.2",
"jwks-rsa": "^2.1.5", "jwks-rsa": "^2.1.5",
+11 -3
View File
@@ -2,6 +2,8 @@
import nconf from 'nconf'; import nconf from 'nconf';
import Amplitude from 'amplitude'; import Amplitude from 'amplitude';
import useragent from 'useragent'; import useragent from 'useragent';
import { lookup } from 'ip-location-api'
import { createHash } from 'crypto';
import { import {
omit, omit,
toArray, toArray,
@@ -56,7 +58,7 @@ function _lookUpItemName (itemKey) {
return itemName; return itemName;
} }
function _formatUserData (user) { function _formatUserData (user, ipaddress) {
const properties = {}; const properties = {};
if (user.stats) { if (user.stats) {
@@ -103,6 +105,12 @@ function _formatUserData (user) {
properties.loginIncentives = user.loginIncentives; properties.loginIncentives = user.loginIncentives;
} }
if (ipaddress) {
const location = lookup(ipaddress);
properties.country = location.country;
properties.region = location.region1;
}
return properties; return properties;
} }
@@ -156,7 +164,7 @@ function _formatDataForAmplitude (data) {
}; };
if (data.user) { if (data.user) {
ampData.user_properties = _formatUserData(data.user); ampData.user_properties = _formatUserData(data.user, data.ipaddress);
} }
const itemName = _lookUpItemName(data.itemKey); const itemName = _lookUpItemName(data.itemKey);
@@ -260,7 +268,7 @@ async function updateUserData (data) {
return null; return null;
} }
const toUpdate = { const toUpdate = {
..._formatUserData(user), ..._formatUserData(user, data.ipaddress),
...properties, ...properties,
}; };