diff --git a/src/admin/web/views/admin_view-user.ejs b/src/admin/web/views/admin_view-user.ejs
index 445f975..6200da2 100644
--- a/src/admin/web/views/admin_view-user.ejs
+++ b/src/admin/web/views/admin_view-user.ejs
@@ -50,7 +50,7 @@
| IPs |
- <%- include("partials/shared_user_ip_list", { user }) %>
+ <%- include("partials/shared_user_ip_list", { user, shouldRedact: false }) %>
|
<% if (user.type === "temporary") { %>
diff --git a/src/shared/inject-locals.ts b/src/shared/inject-locals.ts
index bd60212..250d267 100644
--- a/src/shared/inject-locals.ts
+++ b/src/shared/inject-locals.ts
@@ -1,6 +1,7 @@
import { RequestHandler } from "express";
import { config } from "../config";
import { getTokenCostUsd, prettyTokens } from "./stats";
+import { redactIp } from "./utils";
import * as userStore from "./users/user-store";
export const injectLocals: RequestHandler = (req, res, next) => {
@@ -25,6 +26,7 @@ export const injectLocals: RequestHandler = (req, res, next) => {
// view helpers
res.locals.prettyTokens = prettyTokens;
res.locals.tokenCost = getTokenCostUsd;
+ res.locals.redactIp = redactIp;
next();
};
diff --git a/src/shared/utils.ts b/src/shared/utils.ts
index 8452b2e..7e46166 100644
--- a/src/shared/utils.ts
+++ b/src/shared/utils.ts
@@ -75,3 +75,8 @@ export function makeOptionalPropsNullable(
);
return z.object(newProps);
}
+
+export function redactIp(ip: string) {
+ const ipv6 = ip.includes(":");
+ return ipv6 ? "redacted:ipv6" : ip.replace(/\.\d+\.\d+$/, ".xxx.xxx");
+}
diff --git a/src/shared/views/partials/shared_user_ip_list.ejs b/src/shared/views/partials/shared_user_ip_list.ejs
index b1adfff..baf7126 100644
--- a/src/shared/views/partials/shared_user_ip_list.ejs
+++ b/src/shared/views/partials/shared_user_ip_list.ejs
@@ -1,7 +1,7 @@
Show all (<%- user.ip.length %>)
<% user.ip.forEach((ip) => { %>
- <%- ip %>
+ <%- shouldRedact ? redactIp(ip) : ip %>
<% }) %>
diff --git a/src/user/web/views/user_lookup.ejs b/src/user/web/views/user_lookup.ejs
index f8d99df..7570709 100644
--- a/src/user/web/views/user_lookup.ejs
+++ b/src/user/web/views/user_lookup.ejs
@@ -52,7 +52,7 @@
| IPs<%- maxIps ? ` (max ${maxIps})` : "" %> |
- <%- include("partials/shared_user_ip_list", { user }) %> |
+ <%- include("partials/shared_user_ip_list", { user, shouldRedact: true }) %> |
<% if (user.type === "temporary") { %>