impr: keep a list of ips that accessed the account

part of #4490
This commit is contained in:
Miodec 2023-11-30 13:01:19 +00:00
parent 25b1ecbe15
commit 6c3cfe0ff4
3 changed files with 22 additions and 0 deletions

View file

@ -371,6 +371,7 @@ export async function getUser(
const agentLog = buildAgentLog(req);
Logger.logToDb("user_data_requested", agentLog, uid);
UserDAL.logIpAddress(uid, agentLog.ip, userInfo);
let inboxUnreadSize = 0;
if (req.ctx.configuration.users.inbox.enabled) {

View file

@ -1050,3 +1050,21 @@ export async function checkIfUserIsPremium(
if (expirationDate === -1) return true; //lifetime
return expirationDate > Date.now();
}
export async function logIpAddress(
uid: string,
ip: string,
userInfoOverride?: MonkeyTypes.User
): Promise<void> {
const user = userInfoOverride ?? (await getUser(uid, "logIpAddress"));
const currentIps = user.ips ?? [];
const ipIndex = currentIps.indexOf(ip);
if (ipIndex !== -1) {
currentIps.splice(ipIndex, 1);
}
currentIps.unshift(ip);
if (currentIps.length > 10) {
currentIps.pop();
}
await getUsersCollection().updateOne({ uid }, { $set: { ips: currentIps } });
}

View file

@ -61,6 +61,8 @@ declare namespace MonkeyTypes {
rewards: AllRewards[];
}
type UserIpHistory = string[];
interface User {
autoBanTimestamps?: number[];
addedAt: number;
@ -98,6 +100,7 @@ declare namespace MonkeyTypes {
lastReultHashes?: string[];
lbOptOut?: boolean;
premium?: PremiumInfo;
ips?: UserIpHistory;
}
interface UserStreak {