MCPcopy Index your code
hub / github.com/RandomAPI/Randomuser.me-Node / genUser

Function genUser

routes/api.js:62–227  ·  view source on GitHub ↗
(req, res, version)

Source from the content-addressed store, hash-verified

60};
61
62async function genUser(req, res, version) {
63 let clients = store.get('clients');
64 req.query.fmt = req.query.fmt || req.query.format;
65
66 const ip = req.headers['cf-connecting-ip'] || req.headers['x-real-ip'] || req.headers['x-forwarded-for'] || req.connection.remoteAddress;
67
68 if (process.env.spec !== "true" && clients[ip] >= settings.limit) {
69 return res.status(429).json({
70 error: `Whoa, ease up there cowboy. You've requested ${clients[ip]} users in the last minute. Help us keep this service free and spare some bandwidth for other users please :)`
71 });
72 }
73
74 // Legacy versions
75 if (version in legacy) {
76 let results = req.query.results || 1;
77
78 if (results > legacy[version].max || results < 1 || isNaN(results) || !Number.isInteger(+results)) {
79 results = 1;
80 }
81
82 // Update query results for passing to randomapi
83 req.query.results = results;
84
85 if (!(ip in clients)) {
86 clients[ip] = Number(results);
87 } else {
88 clients[ip] += Number(results);
89 }
90
91 const ret = await legRequest(`https://api.randomapi.com/${legacy[version].hash}?noinfo&${qs.stringify(req.query)}`);
92 if (req.query.fmt === 'json') {
93 res.setHeader('Content-Type', 'application/json');
94 } else if (req.query.fmt === 'xml') {
95 res.setHeader('Content-Type', 'text/xml');
96 } else if (req.query.fmt === 'yaml') {
97 res.setHeader('Content-Type', 'text/x-yaml');
98 } else if (req.query.fmt === 'csv') {
99 res.setHeader('Content-Type', 'text/csv');
100 } else {
101 res.setHeader('Content-Type', 'text/plain');
102 }
103
104 res.setHeader('Cache-Control', 'no-cache');
105
106 const payload = {
107 'bandwidth': ret.length,
108 'total': results
109 };
110 payload[version.replace(/\./g, '_')] = results;
111
112 let doc = await Request.findOneAndUpdate(
113 {date: util.getDateTime()},
114 {$setOnInsert: payload},
115 {
116 returnOriginal: false,
117 upsert: true,
118 }
119 );

Callers 1

api.jsFile · 0.85

Calls 1

generateMethod · 0.45

Tested by

no test coverage detected