Refactor username handling in API and v2 routes for improved normalization

This commit is contained in:
ImBenji
2026-01-02 18:45:27 +00:00
parent 1d51b9a341
commit e935513ba1
2 changed files with 28 additions and 9 deletions

18
api.js
View File

@@ -270,7 +270,7 @@ app.get('/generate', async (req, res) => {
const config = { const config = {
displayName: req.query.displayName || "Anonymous", displayName: req.query.displayName || "Anonymous",
username: req.query.username || "@anonymous", username: normalizeUsername(req.query.username),
avatarUrl: fixDataUri(req.query.avatarUrl) || null, avatarUrl: fixDataUri(req.query.avatarUrl) || null,
text: req.query.text || "No text provided", text: req.query.text || "No text provided",
imageUrl: fixDataUri(req.query.imageUrl) || null, imageUrl: fixDataUri(req.query.imageUrl) || null,
@@ -336,12 +336,22 @@ function fixDataUri(dataUri) {
} }
} }
function normalizeUsername(username) {
if (!username) return '@anonymous';
const trimmed = username.trim();
// If empty or just "@", return default
if (!trimmed || trimmed === '@') return '@anonymous';
// Add @ if it doesn't start with it
return trimmed.startsWith('@') ? trimmed : `@${trimmed}`;
}
app.post('/generate', async (req, res) => { app.post('/generate', async (req, res) => {
try { try {
const timestamp = req.body.timestamp ? formatTimestamp(parseInt(req.body.timestamp)) : formatTimestamp(Date.now() / 1000); const timestamp = req.body.timestamp ? formatTimestamp(parseInt(req.body.timestamp)) : formatTimestamp(Date.now() / 1000);
const username = req.body.username?.trim();
// Only include engagement if all fields are provded // Only include engagement if all fields are provded
let engagement = null; let engagement = null;
if (req.body.engagement && if (req.body.engagement &&
@@ -359,7 +369,7 @@ app.post('/generate', async (req, res) => {
const config = { const config = {
displayName: req.body.displayName || "Anonymous", displayName: req.body.displayName || "Anonymous",
username: (username && username !== "@") ? username : "@anonymous", username: normalizeUsername(req.body.username),
avatarUrl: fixDataUri(req.body.avatarUrl) || null, avatarUrl: fixDataUri(req.body.avatarUrl) || null,
text: req.body.text || "No text provided", text: req.body.text || "No text provided",
imageUrl: fixDataUri(req.body.imageUrl) || null, imageUrl: fixDataUri(req.body.imageUrl) || null,

View File

@@ -149,6 +149,18 @@ function fixDataUri(dataUri) {
} }
} }
function normalizeUsername(username) {
if (!username) return undefined;
const trimmed = username.trim();
// If empty or just "@", return undefined
if (!trimmed || trimmed === '@') return undefined;
// Add @ if it doesn't start with it
return trimmed.startsWith('@') ? trimmed : `@${trimmed}`;
}
const TEMPLATE_PATH = path.join(__dirname, 'template.html'); const TEMPLATE_PATH = path.join(__dirname, 'template.html');
const templateHtml = fs.readFileSync(TEMPLATE_PATH, 'utf8'); const templateHtml = fs.readFileSync(TEMPLATE_PATH, 'utf8');
@@ -207,11 +219,9 @@ async function generateQuoteBuffer(config) {
// POST /v2/quote - create new session // POST /v2/quote - create new session
router.post('/quote', (req, res) => { router.post('/quote', (req, res) => {
try { try {
const username = req.body.username?.trim();
const data = { const data = {
displayName: req.body.displayName?.trim(), displayName: req.body.displayName?.trim(),
username: (username && username !== "@") ? username : undefined, username: normalizeUsername(req.body.username),
text: req.body.text, text: req.body.text,
avatarUrl: fixDataUri(req.body.avatarUrl), avatarUrl: fixDataUri(req.body.avatarUrl),
imageUrl: fixDataUri(req.body.imageUrl), imageUrl: fixDataUri(req.body.imageUrl),
@@ -254,8 +264,7 @@ router.patch('/quote/:id', (req, res) => {
if (req.body.displayName !== undefined) data.displayName = req.body.displayName?.trim(); if (req.body.displayName !== undefined) data.displayName = req.body.displayName?.trim();
if (req.body.username !== undefined) { if (req.body.username !== undefined) {
const username = req.body.username?.trim(); data.username = normalizeUsername(req.body.username);
data.username = (username && username !== "@") ? username : undefined;
} }
if (req.body.text !== undefined) data.text = req.body.text; if (req.body.text !== undefined) data.text = req.body.text;
if (req.body.avatarUrl !== undefined) data.avatarUrl = fixDataUri(req.body.avatarUrl); if (req.body.avatarUrl !== undefined) data.avatarUrl = fixDataUri(req.body.avatarUrl);