const http = require('http'); const url = require('url'); const querystring = require('querystring');
const PORT = process.argv[2] || 3000; const FEATURE_VALUE = process.argv[3] || 'default_feature';
const sessions = {};
function parseCookies(request) { const cookies = {}; if (request.headers.cookie) { request.headers.cookie.split(';').forEach(cookie => { const parts = cookie.trim().split('='); if (parts.length === 2) { cookies[parts[0]] = parts[1]; } }); } return cookies; }
function generateSessionId() { return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); }
const server = http.createServer((req, res) => { const parsedUrl = url.parse(req.url, true); const path = parsedUrl.pathname; const cookies = parseCookies(req);
res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Credentials', 'true'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
if (path === '/set-session' && req.method === 'GET') { const sessionId = generateSessionId(); sessions[sessionId] = FEATURE_VALUE; res.setHeader('Set-Cookie', [`sessionId=${sessionId}; HttpOnly; Path=/; Max-Age=3600`]); res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ success: true, sessionId: sessionId, message: 'Session set with feature value' })); } else if (path === '/validate-session' && req.method === 'GET') { const sessionId = cookies.sessionId; if (!sessionId) { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ valid: false, message: 'No session cookie found' })); return; } const storedFeatureValue = sessions[sessionId]; if (!storedFeatureValue) { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ valid: false, message: 'Invalid session' })); return; } const isValid = storedFeatureValue === FEATURE_VALUE; res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ valid: isValid, message: isValid ? 'Session valid' : 'Feature value mismatch' })); } else { res.writeHead(404, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ error: 'Not found' })); } });
server.listen(PORT, () => { console.log(`Server running on port ${PORT}`); console.log(`Feature value: ${FEATURE_VALUE}`); console.log('Endpoints:'); console.log(' GET /set-session - Sets a session with the feature value'); console.log(' GET /validate-session - Validates session using cookie'); });
|