-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.js
115 lines (105 loc) · 3.01 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
var express = require('express')
var app = express()
const fs = require('fs');
const Reader = require('@maxmind/geoip2-node').Reader;
var ip = require('ip');
const random = require('random')
var requestIp = require('request-ip');
const Redis = require('ioredis');
//const client = redis.createClient({
// host: 'redis-13206.c267.us-east-1-4.ec2.cloud.redislabs.com',
// port: 13206,
// password: 'RIb6PnjsaMarOSE04aJEvnkSwmpkvri3'
//});
//
//client.on('error', err => {
// console.log('Error ' + err);
//});
//client.end(true);
app.get('/',function(req,res){
res.send('<h3 style="font-family:Sans-Serif">GeoIP API</h3><hr> <br>:: Get your key at <a href="/key">/key</a><br>:: then send request at /api/your-key')
});
app.get('/api/:apikey', function (req, res) {
const redis = new Redis({
port:13206,
host:"redis-13206.c267.us-east-1-4.ec2.cloud.redislabs.com",
password:"RIb6PnjsaMarOSE04aJEvnkSwmpkvri3",
//db:10840797
});
var clientIp = requestIp.getClientIp(req);
console.log(clientIp);
verifykey=redis.get(req.params.apikey).then(
function(resp){
//console.log(response)
currenttimestamp=new Date().getTime()
time=currenttimestamp-response
//console.log(time)
if (time>=1800000){
res.send( 'Error: Key Timed Out' );
//console.log('Error: Timed Out')
return;
}else{
res.send(response)
return}
return;
});
const dbBuffer =fs.readFileSync('./static/GeoLite2-City.mmdb')
const reader =Reader.openBuffer(dbBuffer)
//var cip = req.headers['X-Client-IP'] || req.headers['x-forwarded-for'] ||
// req.socket.remoteAddress ||
// null;
ips=clientIp
//console.log(ips)
response=reader.city(ips)
redis.quit()
//console.log(value)
//res.send(response)
//redis.quit()
//res.send('Key Error Try Again');
//redis.quit()
})
app.get('/key',function( req, res){
const unique_id = random.int(1000000000000,10000000000000).toString(36)
console.log(unique_id);
var timestamp = new Date().getTime();
const redis = new Redis({
port:13206,
host:"redis-13206.c267.us-east-1-4.ec2.cloud.redislabs.com",
password:"RIb6PnjsaMarOSE04aJEvnkSwmpkvri3",
//db:10840797
})
//.createClient({
//url: 'redis://RIb6PnjsaMarOSE04aJEvnkSwmpkvri3@redis-13206.c267.us-east-1-4.ec2.cloud.redislabs.com:13206/10840797',
//socket:{keepAlive:5000},
//});
//client.connect()
//s=client.ping();
//console.log(s)
redis.set(unique_id, timestamp)
// (err, reply) => {
// if (err) throw err;
// console.log(reply)
//})
//client.quit();
//client.disconnect();
redis.quit()
res.send(unique_id)
})
app.get('/v4', function (req, res) {
const dbBuffer =fs.readFileSync('static/GeoLite2-City.mmdb')
const reader =Reader.openBuffer(dbBuffer)
var cip = req.headers['x-forwarded-for'] ||
req.socket.remoteAddress ||
null;
ips=cip.split(", ")
if(ip.isV4Format(ips[0])==true){
// console.log(ips)
response=reader.city(ips[0])
}else{
response=reader.city(ips[1])
}
res.send(response)
})
app.listen(8080, function () {
console.log('Listening on port 8080...')
})