11var fs = require ( 'fs' ) ;
2+ var qs = require ( 'qs' ) ;
23var express = require ( 'express' ) ;
34var router = express . Router ( ) ;
45var Request = require ( '../models/Request' ) ;
6+ var legRequest = require ( 'request' ) ;
57
68var latestVersion = '1.1' ;
79
@@ -13,7 +15,52 @@ router.get('/:version', (req, res, next) => {
1315 genUser ( req , res , req . params . version ) ;
1416} ) ;
1517
18+ let legacy = {
19+ "0.1" : {
20+ hash : "916ad3d01e4040cc0a67e0367f887f19" ,
21+ max : 5
22+ } ,
23+ "0.2" : {
24+ hash : "74af1a1572d1065ba63f11afb6ba34ee" ,
25+ max : 5
26+ } ,
27+ "0.2.1" : {
28+ hash : "d462956eec6157ab03164c565682f3d6" ,
29+ max : 5
30+ } ,
31+ "0.3" : {
32+ hash : "cc4b5abca158d7fe0bbb92dcd591114c" ,
33+ max : 10
34+ } ,
35+ "0.3.1" : {
36+ hash : "52432a28e766d8142b811436742ec905" ,
37+ max : 10
38+ } ,
39+ "0.3.2" : {
40+ hash : "7c25fc35021cdab8bcc0bc20d352a064" ,
41+ max : 10
42+ } ,
43+ "0.4" : {
44+ hash : "884bcc24441f39bddfe17e12a080ab7f" ,
45+ max : 20
46+ } ,
47+ "0.4.1" : {
48+ hash : "127ee4298ee834d84b33b4ff6f544ed0" ,
49+ max : 100
50+ } ,
51+ "0.5" : {
52+ hash : "4111cf8ceae827c5c7659e2ed6238a18" ,
53+ max : 100
54+ } ,
55+ "0.6" : {
56+ hash : "418b98dfb9a79a966bf4bb951665856f" ,
57+ max : 100
58+ }
59+ } ;
60+
1661function genUser ( req , res , version ) {
62+ req . query . fmt = req . query . format ;
63+
1764 var ip = req . headers [ 'cf-connecting-ip' ] || req . headers [ 'x-real-ip' ] || req . headers [ 'x-forwarded-for' ] || req . connection . remoteAddress ;
1865
1966 if ( clients [ ip ] >= settings . limit ) {
@@ -25,6 +72,55 @@ function genUser(req, res, version) {
2572
2673 version = version || latestVersion ;
2774
75+ // Legacy versions
76+ if ( version in legacy ) {
77+ req . query . results = req . query . results || 1 ;
78+
79+ var results = req . query . results ;
80+ if ( results > legacy [ version ] . max || results < 1 || isNaN ( results ) || results % 1 !== 0 ) {
81+ results = 1 ;
82+ req . query . results = 1 ;
83+ }
84+
85+ if ( ! ( ip in clients ) ) {
86+ clients [ ip ] = Number ( req . query . results ) ;
87+ } else {
88+ clients [ ip ] += Number ( req . query . results ) ;
89+ }
90+
91+ return legRequest ( `https://beta.randomapi.com/api/${ legacy [ version ] . hash } ?noinfo&${ qs . stringify ( req . query ) } ` , ( err , ret ) => {
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+ var payload = {
107+ 'bandwidth' : ret . body . length ,
108+ 'total' : req . query . results
109+ } ;
110+ payload [ version . replace ( / \. / g, '_' ) ] = req . query . results ;
111+
112+ Request . findOrCreate ( { date : getDateTime ( ) } , payload , ( err , obj , created ) => {
113+ // Update record
114+ if ( ! created ) {
115+ Request . update ( { date : getDateTime ( ) } , { $inc : payload } , ( err ) => {
116+
117+ } ) ;
118+ }
119+ res . send ( ret . body )
120+ } ) ;
121+ } ) ;
122+ }
123+
28124 // Version doesn't exist
29125 if ( typeof Generator [ version ] === 'undefined' ) {
30126 res . sendStatus ( 404 ) ;
@@ -80,7 +176,7 @@ function genUser(req, res, version) {
80176 'bandwidth' : output . length ,
81177 'total' : results
82178 } ;
83- payload [ version . replace ( '.' , '_' ) ] = results ;
179+ payload [ version . replace ( / \. / g , '_' ) ] = results ;
84180
85181 Request . findOrCreate ( { date : getDateTime ( ) } , payload , ( err , obj , created ) => {
86182 // Update record
@@ -96,7 +192,7 @@ function genUser(req, res, version) {
96192 fs . unlink ( name ) ;
97193 } ) ;
98194 } else {
99- // Hacky PS extension formatting
195+ // Hacky PS extension formatting
100196 if ( req . query . extension === "true" ) {
101197 output = JSON . parse ( output ) ;
102198 var extObj = {
0 commit comments