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 %>) 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") { %>