Merge branch 'mpolden:master' into master

This commit is contained in:
Marcell Martini 2022-01-25 15:58:22 -04:00 committed by GitHub
commit 11fc656391
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 85 additions and 68 deletions

30
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,30 @@
name: ci
on:
push:
branches: [master]
pull_request:
branches: [master]
jobs:
build:
runs-on: ubuntu-latest
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
steps:
- uses: actions/checkout@v2
- name: install go
uses: actions/setup-go@v2
with:
go-version: 1.16
- name: build and test
run: make
- name: enable experimental docker features
if: ${{ github.ref == 'refs/heads/master' }}
run: |
echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json
sudo service docker restart
- name: publish multi-arch docker image
if: ${{ github.ref == 'refs/heads/master' }}
run: make docker-pushx

View File

@ -1,23 +0,0 @@
dist: bionic
language: minimal
services:
- docker
env:
global:
- DOCKER_CLI_EXPERIMENTAL=enabled
before_install:
- echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- sudo apt-get update
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
script:
- make docker-build
deploy:
- provider: script
script: make docker-push

View File

@ -1,7 +1,8 @@
# Build
FROM golang:1.13-buster AS build
FROM golang:1.15-buster AS build
WORKDIR /go/src/github.com/mpolden/echoip
COPY . .
# Must build without cgo because libc is unavailable in runtime image
ENV GO111MODULE=on CGO_ENABLED=0
RUN make

View File

@ -57,7 +57,10 @@ docker-test:
$(eval DOCKER_PORT=$(shell $(DOCKER) port $(CONTAINER) | cut -d ":" -f 2))
curl -fsS -m 5 localhost:$(DOCKER_PORT) > /dev/null; $(DOCKER) stop $(CONTAINER)
docker-push: docker-test docker-multiarch-builder docker-login
docker-push: docker-test docker-login
$(DOCKER) push $(DOCKER_IMAGE)
docker-pushx: docker-multiarch-builder docker-test docker-login
$(DOCKER) buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t $(DOCKER_IMAGE) --push .
xinstall:
@ -71,4 +74,4 @@ endif
@sha256sum $(GOPATH)/bin/$(XBIN)
run:
go run cmd/echoip/main.go -a data/asn.mmdb -c data/city.mmdb -f data/country.mmdb -H x-forwarded-for -r -s
go run cmd/echoip/main.go -a data/asn.mmdb -c data/city.mmdb -f data/country.mmdb -H x-forwarded-for -r -s -p

View File

@ -1,6 +1,6 @@
# echoip
[![Build Status](https://travis-ci.org/mpolden/echoip.svg)](https://travis-ci.org/mpolden/echoip)
![Build Status](https://github.com/mpolden/echoip/workflows/ci/badge.svg)
A simple service for looking up your IP address. This is the code that powers
https://ifconfig.co.
@ -93,9 +93,9 @@ between IPv4 and IPv6 lookup.
## Building
Compiling requires the [Golang compiler](https://golang.org/) to be installed.
This package can be installed with `go get`:
This package can be installed with:
`go get github.com/mpolden/echoip/...`
`go install github.com/mpolden/echoip/...@latest`
For more information on building a Go project, see the [official Go
documentation](https://golang.org/doc/code.html).

5
go.mod
View File

@ -2,4 +2,7 @@ module github.com/mpolden/echoip
go 1.13
require github.com/oschwald/geoip2-golang v1.4.0
require (
github.com/oschwald/geoip2-golang v1.5.0
golang.org/x/sys v0.0.0-20210223212115-eede4237b368 // indirect
)

19
go.sum
View File

@ -1,17 +1,20 @@
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/oschwald/geoip2-golang v1.4.0 h1:5RlrjCgRyIGDz/mBmPfnAF4h8k0IAcRv9PvrpOfz+Ug=
github.com/oschwald/geoip2-golang v1.4.0/go.mod h1:8QwxJvRImBH+Zl6Aa6MaIcs5YdlZSTKtzmPGzQqi9ng=
github.com/oschwald/maxminddb-golang v1.6.0 h1:KAJSjdHQ8Kv45nFIbtoLGrGWqHFajOIm7skTyz/+Dls=
github.com/oschwald/maxminddb-golang v1.6.0/go.mod h1:DUJFucBg2cvqx42YmDa/+xHvb0elJtOm3o4aFQ/nb/w=
github.com/oschwald/geoip2-golang v1.5.0 h1:igg2yQIrrcRccB1ytFXqBfOHCjXWIoMv85lVJ1ONZzw=
github.com/oschwald/geoip2-golang v1.5.0/go.mod h1:xdvYt5xQzB8ORWFqPnqMwZpCpgNagttWdoZLlJQzg7s=
github.com/oschwald/maxminddb-golang v1.8.0 h1:Uh/DSnGoxsyp/KYbY1AuP0tYEwfs0sCph9p/UMXK/Hk=
github.com/oschwald/maxminddb-golang v1.8.0/go.mod h1:RXZtst0N6+FY/3qCNmZMBApR19cdQj43/NM9VkrNAis=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
golang.org/x/sys v0.0.0-20191224085550-c709ea063b76 h1:Dho5nD6R3PcW2SH1or8vS0dszDaXRxIw55lBX7XiE5g=
golang.org/x/sys v0.0.0-20191224085550-c709ea063b76/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210223212115-eede4237b368 h1:fDE3p0qf2V1co1vfj3/o87Ps8Hq6QTGNxJ5Xe7xSp80=
golang.org/x/sys v0.0.0-20210223212115-eede4237b368/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@ -74,11 +74,11 @@
<h2>What do we know about this IP address?</h2>
<table class="info-table">
<tr>
<th scope="row">IP address</th>
<th scope="row">IP&nbsp;address</th>
<td>{{ .IP }}</td>
</tr>
<tr>
<th scope="row">IP address (decimal)</th>
<th scope="row">IP&nbsp;address (decimal)</th>
<td>{{ .IPDecimal }}</td>
</tr>
{{ if .Country }}
@ -103,7 +103,7 @@
</tr>
{{ end }} {{ if .RegionCode }}
<tr>
<th scope="row">Region code</th>
<th scope="row">Region&nbsp;code</th>
<td>{{ .RegionCode }}</td>
</tr>
{{ end }} {{ if .MetroCode }}
@ -113,7 +113,7 @@
</tr>
{{ end }} {{ if .PostalCode }}
<tr>
<th scope="row">Postal code</th>
<th scope="row">Postal&nbsp;code</th>
<td>{{ .PostalCode }}</td>
</tr>
{{ end }} {{ if .City }}
@ -153,17 +153,17 @@
</tr>
{{ end }} {{ if .UserAgent }} {{ if .UserAgent.Comment }}
<tr>
<th scope="row">User agent</th>
<th scope="row">User&nbsp;agent</th>
<td>{{ .UserAgent.Product }}/{{ .UserAgent.Version }}</td>
</tr>
{{ end }} {{ if .UserAgent.Comment }}
<tr>
<th scope="row">User agent: Comment</th>
<th scope="row">User&nbsp;agent: Comment</th>
<td>{{ .UserAgent.Comment }}</td>
</tr>
{{ end }} {{ if .UserAgent.RawValue }}
<tr>
<th scope="row">User agent: Raw</th>
<th scope="row">User&nbsp;agent: Raw</th>
<td>{{ .UserAgent.RawValue }}</td>
</tr>
{{ end }} {{ end }}
@ -200,52 +200,52 @@
</p>
<div class="pure-form">
<!-- COMMAND WIDGET -->
<div class="buttons">
<div class="input-buttons">
<button
name="ip"
class="button widget-select"
class="pure-button widget-select"
onclick="changeInput(this.name, this)"
>
ip
</button>
<button
name="country"
class="button widget-select"
class="pure-button widget-select"
onclick="changeInput(this.name, this)"
>
country
</button>
<button
name="country-iso"
class="button widget-select"
class="pure-button widget-select"
onclick="changeInput(this.name, this)"
>
country-iso
</button>
<button
name="city"
class="button widget-select"
class="pure-button widget-select"
onclick="changeInput(this.name, this)"
>
city
</button>
<button
name="asn"
class="button widget-select"
class="pure-button widget-select"
onclick="changeInput(this.name, this)"
>
asn
</button>
<button
name="json"
class="button widget-select"
class="pure-button widget-select"
onclick="changeInput(this.name, this)"
>
json
</button>
<button
name="port"
class="button widget-select"
class="pure-button widget-select"
onclick="changeInput(this.name, this)"
>
port
@ -266,12 +266,13 @@
</div>
<div id="output" class="widgetbox output"></div>
<form class="pure-form">
<form class="pure-form input-buttons">
<fieldset>
<label for="ipCheckBox">
<label for="ipInput">
Check another IP (optional)
<input
id="ipInput"
class="medium-input pure-input"
class=""
type="text"
placeholder="IP to query"
onkeyup="updateIP(this.value)"

View File

@ -71,7 +71,6 @@
function navigate(event) {
console.log("navigate", compositePath)
window.location = compositePath
event.preventDefault()
}
function updatePort(value) {

View File

@ -26,6 +26,7 @@
background: #f2f2f2;
font-size: 36px;
padding: 6px;
word-wrap: break-word;
}
svg.github-corner {
fill: #151513;
@ -52,12 +53,12 @@
.info-table th {
padding: 5px;
border: 2px solid #ababab;
word-wrap: break-word;
}
.info-table th[scope="row"] {
background-color: #d5d5d5;
text-align: left;
white-space: nowrap;
}
.widgetbox {
@ -88,11 +89,6 @@
text-align: right;
}
.narrow-input {
width: 5.5em;
margin-top: 0.2em;
}
.medium-input {
width: 10em;
}
@ -101,6 +97,11 @@
background-color: rgb(208 208 208);
}
.input-buttons {
line-height: 2.6em;
font-size: smaller;
}
/* POST CORRECTION */
.leafcloud-logo .letters {
fill: black;
@ -113,7 +114,6 @@
a {
background-color: #161719;
color: #d8d9da;
/* text-decoration: underline; */
}
.ip {
border: 1px solid #313233;
@ -137,13 +137,13 @@
background-color: #2e2e2e;
color: rgb(220, 220, 220);
text-align: left;
white-space: nowrap;
}
button {
.pure-button {
background-color: #2e2e2e;
color: rgb(220, 220, 220);
}
button.selected {
.pure-button.selected {
background-color: rgb(125 125 125);
}

View File

@ -370,7 +370,7 @@ func NotFoundHandler(w http.ResponseWriter, r *http.Request) *appError {
func cliMatcher(r *http.Request) bool {
ua := useragent.Parse(r.UserAgent())
switch ua.Product {
case "curl", "HTTPie", "httpie-go", "Wget", "fetch libfetch", "Go", "Go-http-client", "ddclient", "Mikrotik":
case "curl", "HTTPie", "httpie-go", "Wget", "fetch libfetch", "Go", "Go-http-client", "ddclient", "Mikrotik", "xh":
return true
}
return false