Skip to content

Commit 2f8e87d

Browse files
committed
Fix consistency issues with setName and submitNameChange endpoints (soon to be deprecated)
1 parent 3475a80 commit 2f8e87d

File tree

2 files changed

+54
-6
lines changed

2 files changed

+54
-6
lines changed

api/setName.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { Filter } from "bad-words";
88
import UserStatsService from "../components/utils/userStatsService.js";
99
import ModerationLog from "../models/ModerationLog.js";
1010
import Report from "../models/Report.js";
11+
import NameChangeRequest from "../models/NameChangeRequest.js";
1112
const filter = new Filter();
1213

1314
export default async function handler(req, res) {
@@ -69,6 +70,48 @@ export default async function handler(req, res) {
6970
}
7071
}
7172

73+
// If user has a forced name change, submit for moderator review instead of direct change
74+
if (user.pendingNameChange) {
75+
// Check if user already has a pending request
76+
const existingRequest = await NameChangeRequest.findOne({
77+
'user.accountId': user._id.toString(),
78+
status: 'pending'
79+
});
80+
81+
if (existingRequest) {
82+
// Update the existing request with the new name
83+
await NameChangeRequest.findByIdAndUpdate(existingRequest._id, {
84+
requestedUsername: username,
85+
updatedAt: new Date()
86+
});
87+
88+
return res.status(200).json({
89+
success: true,
90+
pendingReview: true,
91+
message: 'Your name change request has been updated. Please wait for moderator review.',
92+
requestId: existingRequest._id
93+
});
94+
}
95+
96+
// Create new name change request
97+
const nameRequest = await NameChangeRequest.create({
98+
user: {
99+
accountId: user._id.toString(),
100+
currentUsername: user.username
101+
},
102+
requestedUsername: username,
103+
reason: user.pendingNameChangeReason || 'Forced name change',
104+
status: 'pending'
105+
});
106+
107+
return res.status(200).json({
108+
success: true,
109+
pendingReview: true,
110+
message: 'Your name change request has been submitted. Please wait for moderator review.',
111+
requestId: nameRequest._id
112+
});
113+
}
114+
72115
if (user.username) {
73116
// this means this is a name change, not a first time name set
74117
// check if the user has waited long enough since the last name change

api/submitNameChange.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import NameChangeRequest from '../models/NameChangeRequest.js';
77
* For users who have been forced to change their name.
88
* Submits a new username for moderator review.
99
*/
10+
11+
// TODO: FUNCTIONALTIY MERGED TO setName.js, SHOULD BE DEPRECATED SOON AFTER UPDATING CLIENT.
1012
export default async function handler(req, res) {
1113
if (req.method !== 'POST') {
1214
return res.status(405).json({ message: 'Method not allowed' });
@@ -26,15 +28,18 @@ export default async function handler(req, res) {
2628
// Validate username format
2729
const trimmedUsername = newUsername.trim();
2830

29-
if (trimmedUsername.length < 3 || trimmedUsername.length > 20) {
30-
return res.status(400).json({ message: 'Username must be between 3 and 20 characters' });
31+
if (trimmedUsername.length < 3 || trimmedUsername.length > 30) {
32+
return res.status(400).json({ message: 'Username must be between 3 and 30 characters' });
3133
}
3234

33-
// Only allow alphanumeric, underscore, and hyphen
34-
if (!/^[a-zA-Z0-9_-]+$/.test(trimmedUsername)) {
35-
return res.status(400).json({ message: 'Username can only contain letters, numbers, underscores, and hyphens' });
35+
// Only allow alphanumeric, underscores
36+
if (!/^[a-zA-Z0-9_]+$/.test(trimmedUsername)) {
37+
return res
38+
.status(400)
39+
.json({
40+
message: "Username must contain only letters, numbers, and underscores",
41+
});
3642
}
37-
3843
try {
3944
// Get the user
4045
const user = await User.findOne({ secret });

0 commit comments

Comments
 (0)