dockerfiles/telize/telize.conf
Jess Frazelle 3a94bdf5f9
fix telize
Signed-off-by: Jess Frazelle <acidburn@microsoft.com>
2018-03-23 17:14:50 -04:00

163 lines
4.3 KiB
Plaintext

###############################################################################
# #
# Telize 2.0.0 #
# Copyright (c) 2013-2018, Frederic Cambus #
# https://www.telize.com #
# #
# Created: 2013-08-15 #
# Last Updated: 2018-03-15 #
# #
# Telize is released under the BSD 2-Clause license. #
# See LICENSE file for details. #
# #
###############################################################################
server {
# Configuration variables
set $cors "true";
set $cors_origin "*";
server_name 127.0.0.1;
# Uncomment when using Telize behind a load balancer
# set_real_ip_from 10.0.0.0/8; # Put your load balancer IP range here
# real_ip_header X-Forwarded-For;
charset_types application/json;
keepalive_timeout 0;
gzip off;
location ~ /ip$ {
charset off;
default_type text/plain;
add_header Cache-Control no-cache;
content_by_lua_block {
ngx.say(ngx.var.remote_addr)
}
}
location ~ /jsonip$ {
charset utf-8;
default_type application/json;
if ($cors = "true") {
add_header Access-Control-Allow-Origin $cors_origin;
}
content_by_lua_block {
local cjson = require "cjson"
ngx.header["Cache-Control"] = "no-cache";
local json = cjson.encode({
ip = ngx.var.remote_addr
})
local callback = ngx.var.arg_callback
if callback then
ngx.say(callback, "(", json, ");")
else
ngx.say(json)
end
}
}
location ~ /geoip/?(?<ip>.*) {
if ($ip = "") {
set $ip $remote_addr;
}
# Uncomment when using Telize behind a load balancer, and
# comment the directive setting X-Real-IP
# proxy_set_header X-Forwarded-For $ip;
proxy_set_header X-Real-IP $ip;
proxy_set_header Host $host;
proxy_pass $scheme://127.0.0.1/jsonify?callback=$arg_callback;
}
location /jsonify {
charset utf-8;
default_type application/json;
if ($cors = "true") {
add_header Access-Control-Allow-Origin $cors_origin;
}
set_real_ip_from 127.0.0.1;
access_log off;
content_by_lua_block {
local cjson = require "cjson"
ngx.header["Cache-Control"] = "no-cache";
-- Check for invalid IP addresses
if ngx.var.remote_addr == "127.0.0.1" then
ngx.status = ngx.HTTP_BAD_REQUEST
ngx.say(cjson.encode({
code = 401,
message = "Input string is not a valid IP address"
}))
ngx.exit(ngx.HTTP_OK)
end
local payload = {
ip = ngx.var.remote_addr,
continent_code = ngx.var.geoip2_continent_code,
country = ngx.var.geoip2_country,
country_code = ngx.var.geoip2_country_code,
country_code3 = ngx.var.geoip2_country_code3,
region = ngx.var.geoip2_region,
region_code = ngx.var.geoip2_region_code,
city = ngx.var.geoip2_city,
postal_code = ngx.var.geoip2_postal_code,
latitude = ngx.var.geoip2_latitude,
longitude = ngx.var.geoip2_longitude,
timezone = ngx.var.geoip2_timezone,
offset = ngx.var.geoip2_offset,
asn = ngx.var.geoip2_asn,
organization = ngx.var.geoip2_organization,
}
-- Validate payload
for item, value in pairs(payload) do
if payload[item] == "" then
payload[item] = nil
end
end
-- Convert latitude and longitude to numeric values
if payload.latitude ~= nil and payload.longitude ~= nil then
payload.latitude = tonumber(payload.latitude)
payload.longitude = tonumber(payload.longitude)
end
-- Convert timezone offset to numeric value
if payload.offset ~= nil then
payload.offset = tonumber(payload.offset)
end
-- Convert ASN to numeric value
if payload.asn ~= nil then
payload.asn = tonumber(payload.asn)
end
local json = cjson.encode(payload)
local callback = ngx.var.arg_callback
if callback ~= "" then
ngx.say(callback, "(", json, ");")
else
ngx.say(json)
end
}
}
}