- Introduction
- Import this module
- Provided server, content and proxy handlers
- Access the API
- Github repository
- NPM package
Dashboard bundles everything a web app needs, all the "boilerplate" like signing in and changing passwords, into a parallel server so you can write a much smaller web app.
MaxMind provide a database that converts IP addresses to countries and this module adds API routes for identifying the country by IP and a server handler that will automatically attach a Country object to each HttpRequest using their database. There is much more data in the MaxMind database than is exposed via the API, pull requests are welcome to add more routes to access it.
Install the module with NPM:
$ npm install @layeredapps/maxmind-geoip
Edit your package.json
to activate the module:
"dashboard": {
"modules": [
"@layeredapps/maxmind-geoip"
]
}
This module comes with some convenience scripts you can add to your package.json
:
Type | Script path | Description |
---|---|---|
proxy | @layeredapps/maxmind-geoip/src/proxy/x-country.js | Include the Maxmind Country object in x-country header |
server | @layeredapps/maxmind-geoip/src/server/bind-country.js | The MaxMind Country object will be bound to req.country |
Dashboard and official modules are completely API-driven and you can access the same APIs on behalf of the user making requests. You perform GET
, POST
, PATCH
, and DELETE
HTTP requests against the API endpoints to fetch or modify data. This example fetches the user's country information using NodeJS, you can do this with any language:
const country = await proxy(`/api/user/geoip/country?ip=1.2.3.4`, accountid, sessionid)
const proxy = util.promisify((path, accountid, sessionid, callback) => {
const requestOptions = {
host: 'dashboard.example.com',
path: path,
port: '443',
method: 'GET',
headers: {
'x-application-server': 'application.example.com',
'x-application-server-token': process.env.APPLICATION_SERVER_TOKEN
}
}
if (accountid) {
requestOptions.headers['x-accountid'] = accountid
requestOptions.headers['x-sessionid'] = sessionid
}
const proxyRequest = require('https').request(requestOptions, (proxyResponse) => {
let body = ''
proxyResponse.on('data', (chunk) => {
body += chunk
})
return proxyResponse.on('end', () => {
return callback(null, JSON.parse(body))
})
})
proxyRequest.on('error', (error) => {
return callback(error)
})
return proxyRequest.end()
})
}