diff --git a/api/api.go b/api/api.go index 3c6d7cb..40fbbd6 100644 --- a/api/api.go +++ b/api/api.go @@ -29,6 +29,9 @@ type API struct { lookupCountry func(net.IP) (string, error) testPort func(net.IP, uint64) error ipFromRequest func(*http.Request) (net.IP, error) + reverseLookup bool + countryLookup bool + portTesting bool } type Response struct { @@ -60,15 +63,18 @@ func (a *API) EnableCountryLookup(filepath string) error { a.lookupCountry = func(ip net.IP) (string, error) { return lookupCountry(db, ip) } + a.countryLookup = true return nil } func (a *API) EnableReverseLookup() { a.lookupAddr = net.LookupAddr + a.reverseLookup = true } func (a *API) EnablePortTesting() { a.testPort = testPort + a.portTesting = true } func ipFromRequest(r *http.Request) (net.IP, error) { @@ -199,7 +205,13 @@ func (a *API) DefaultHandler(w http.ResponseWriter, r *http.Request) *appError { if err != nil { return internalServerError(err) } - if err := t.Execute(w, &response); err != nil { + var data = struct { + Response + ReverseLookup bool + CountryLookup bool + PortTesting bool + }{response, a.reverseLookup, a.countryLookup, a.portTesting} + if err := t.Execute(w, &data); err != nil { return internalServerError(err) } return nil diff --git a/index.html b/index.html index fcaf9dc..87cc3bc 100644 --- a/index.html +++ b/index.html @@ -58,11 +58,13 @@ $ wget -qO- ifconfig.co $ fetch -qo- http://ifconfig.co {{ .IP }} +{{ if .CountryLookup }}

Country lookup:

 $ http ifconfig.co/country
 {{ .Country }}
         
+{{ end }}

JSON output:

@@ -73,11 +75,13 @@ Content-Length: 61 Content-Type: application/json Date: Fri, 15 Apr 2016 17:26:53 GMT -{ - "country": "{{ .Country }}", +{ {{ if .CountryLookup }} + "country": "{{ .Country }}",{{ end }}{{ if .ReverseLookup }} + "hostname": "{{ .Hostname }}",{{ end }} "ip": "{{ .IP }}" } +{{ if .PortTesting }}

Testing port connectivity (only supports JSON output):

 http --json localhost:8080/port/8080
@@ -92,6 +96,7 @@ Date: Fri, 15 Apr 2016 18:47:20 GMT
     "reachable": true
 }
         
+{{ end }}