@@ -14,12 +14,16 @@ app.use(express.json());
1414const dataFilePath = path . join ( __dirname , "userData.json" ) ;
1515
1616// Load existing user IDs into memory at startup
17- let userIds = new Set ( ) ;
17+ let userIds = new Map ( ) ; // id -> token
1818if ( fs . existsSync ( dataFilePath ) ) {
1919 try {
2020 const data = JSON . parse ( fs . readFileSync ( dataFilePath , "utf8" ) ) ;
2121 if ( Array . isArray ( data . userIds ) ) {
22- userIds = new Set ( data . userIds ) ;
22+ // Backward compatibility with old format
23+ data . userIds . forEach ( id => userIds . set ( id , null ) ) ;
24+ } else if ( data . userIds ) {
25+ // New format: { "userIds": { "id1": "token1", "id2": "token2" } }
26+ Object . entries ( data . userIds ) . forEach ( ( [ id , token ] ) => userIds . set ( id , token ) ) ;
2327 }
2428 } catch ( err ) {
2529 console . error ( "Error reading userData.json:" , err . message ) ;
@@ -29,7 +33,7 @@ if (fs.existsSync(dataFilePath)) {
2933// Helper to save user IDs to file
3034function saveUserIdsToFile ( ) {
3135 try {
32- const data = { userIds : [ ... userIds ] } ;
36+ const data = { userIds : Object . fromEntries ( userIds ) } ;
3337 fs . writeFileSync ( dataFilePath , JSON . stringify ( data , null , 2 ) ) ;
3438 } catch ( err ) {
3539 console . error ( "Error writing to userData.json:" , err . message ) ;
@@ -38,11 +42,15 @@ function saveUserIdsToFile() {
3842
3943// Helper to validate user ID format
4044function isValidUserId ( userId ) {
41- // Must be a string, 18-20 characters, lowercase alphanumeric (a-z, 0-9)
4245 const userIdRegex = / ^ [ a - z 0 - 9 ] { 18 , 20 } $ / ;
4346 return typeof userId === "string" && userIdRegex . test ( userId ) ;
4447}
4548
49+ // Helper to generate a token
50+ function generateToken ( ) {
51+ return Math . random ( ) . toString ( 36 ) . substr ( 2 , 10 ) ;
52+ }
53+
4654// Middleware for logging requests
4755app . use ( ( req , res , next ) => {
4856 console . log ( `[${ new Date ( ) . toISOString ( ) } ] ${ req . method } ${ req . url } - IP: ${ req . ip } ` ) ;
@@ -53,7 +61,7 @@ app.use((req, res, next) => {
5361// REGISTER USER ID
5462// =======================
5563app . post ( "/api/registerUser" , ( req , res ) => {
56- const { userId } = req . body ;
64+ const { userId, token } = req . body ;
5765
5866 // Validate request body
5967 if ( ! userId ) {
@@ -67,13 +75,21 @@ app.post("/api/registerUser", (req, res) => {
6775
6876 // Check if userId already exists
6977 if ( userIds . has ( userId ) ) {
70- return res . status ( 200 ) . json ( { status : "exists" } ) ;
78+ const storedToken = userIds . get ( userId ) ;
79+ if ( token && storedToken && token === storedToken ) {
80+ return res . status ( 200 ) . json ( { status : "exists" } ) ;
81+ } else if ( ! token && ! storedToken ) {
82+ // Allow old clients without tokens (backward compatibility)
83+ return res . status ( 200 ) . json ( { status : "exists" } ) ;
84+ }
85+ return res . status ( 403 ) . json ( { error : "Invalid or missing token" } ) ;
7186 }
7287
73- // Add new userId
74- userIds . add ( userId ) ;
88+ // New userId: generate token, store, and return it
89+ const newToken = generateToken ( ) ;
90+ userIds . set ( userId , newToken ) ;
7591 saveUserIdsToFile ( ) ;
76- return res . status ( 201 ) . json ( { status : "registered" } ) ;
92+ return res . status ( 201 ) . json ( { status : "registered" , token : newToken } ) ;
7793} ) ;
7894
7995// =======================
0 commit comments