From 72e42a9c42b50b8ec89500f57f7f11cbd57249ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Sat, 12 Dec 2020 22:07:00 +0100 Subject: [PATCH] feat: add ipv6 and tls support (resolve #79) --- README.md | 7 +- config.default.yml | 5 +- config/config.go | 17 +- coverage/coverage.out | 367 +++++++++++++++++++++--------------------- main.go | 57 ++++++- version.txt | 2 +- 6 files changed, 258 insertions(+), 197 deletions(-) diff --git a/README.md b/README.md index 1d1c3d1..34c1975 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ By default, SQLite is used as a database. To run Wakapi in Docker with MySQL or ### Running tests ```bash -CGO_FLAGS="-g -O2 -Wno-return-local-addr" -coverprofile=coverage/coverage.out go test ./... +CGO_FLAGS="-g -O2 -Wno-return-local-addr" go test -json -coverprofile=coverage/coverage.out ./... -run ./... ``` ## 🔧 Configuration @@ -71,7 +71,10 @@ You can specify configuration options either via a config file (default: `config | `env` | `ENVIRONMENT` | `dev` | Whether to use development- or production settings | | `app.custom_languages` | - | - | Map from file endings to language names | | `server.port` | `WAKAPI_PORT` | `3000` | Port to listen on | -| `server.listen_ipv4` | `WAKAPI_LISTEN_IPV4` | `127.0.0.1` | Network address to listen on | +| `server.listen_ipv4` | `WAKAPI_LISTEN_IPV4` | `127.0.0.1` | IPv4 network address to listen on (leave blank to disable IPv4) | +| `server.listen_ipv6` | `WAKAPI_LISTEN_IPV6` | `` | IPv6 network address to listen on (leave blank to disable IPv6) | +| `server.tls_cert_path` | `WAKAPI_TLS_CERT_PATH` | - | Path of SSL server certificate (leave blank to not use HTTPS) | +| `server.tls_key_path` | `WAKAPI_TLS_KEY_PATH` | - | Path of SSL server private key (leave blank to not use HTTPS) | | `server.base_path` | `WAKAPI_BASE_PATH` | `/` | Web base path (change when running behind a proxy under a sub-path) | | `security.password_salt` | `WAKAPI_PASSWORD_SALT` | - | Pepper to use for password hashing | | `security.insecure_cookies` | `WAKAPI_INSECURE_COOKIES` | `false` | Whether or not to allow cookies over HTTP | diff --git a/config.default.yml b/config.default.yml index 4cf2ecb..3f03dea 100644 --- a/config.default.yml +++ b/config.default.yml @@ -1,7 +1,10 @@ env: development server: - listen_ipv4: 127.0.0.1 + listen_ipv4: 127.0.0.1 # leave blank to disable ipv4 + listen_ipv6: ::1 # leave blank to disable ipv6 + tls_cert_path: # leave blank to not use https + tls_key_path: # leave blank to not use https port: 3000 base_path: / diff --git a/config/config.go b/config/config.go index aa024d1..1536cd3 100644 --- a/config/config.go +++ b/config/config.go @@ -57,9 +57,12 @@ type dbConfig struct { } type serverConfig struct { - Port int `default:"3000" env:"WAKAPI_PORT"` - ListenIpV4 string `yaml:"listen_ipv4" default:"127.0.0.1" env:"WAKAPI_LISTEN_IPV4"` - BasePath string `yaml:"base_path" default:"/" env:"WAKAPI_BASE_PATH"` + Port int `default:"3000" env:"WAKAPI_PORT"` + ListenIpV4 string `yaml:"listen_ipv4" default:"127.0.0.1" env:"WAKAPI_LISTEN_IPV4"` + ListenIpV6 string `yaml:"listen_ipv6" default:"::1" env:"WAKAPI_LISTEN_IPV6"` + BasePath string `yaml:"base_path" default:"/" env:"WAKAPI_BASE_PATH"` + TlsCertPath string `yaml:"tls_cert_path" default:"" env:"WAKAPI_TLS_CERT_PATH"` + TlsKeyPath string `yaml:"tls_key_path" default:"" env:"WAKAPI_TLS_KEY_PATH"` } type Config struct { @@ -95,6 +98,10 @@ func (c *Config) IsDev() bool { return IsDev(c.Env) } +func (c *Config) UseTLS() bool { + return c.Server.TlsCertPath != "" && c.Server.TlsKeyPath != "" +} + func (c *Config) GetMigrationFunc(dbDialect string) models.MigrationFunc { switch dbDialect { default: @@ -260,6 +267,10 @@ func Load() *Config { } } + if config.Server.ListenIpV4 == "" && config.Server.ListenIpV6 == "" { + log.Fatalln("either of listen_ipv4 or listen_ipv6 must be set") + } + Set(config) return Get() } diff --git a/coverage/coverage.out b/coverage/coverage.out index 467a8d3..7dc3423 100644 --- a/coverage/coverage.out +++ b/coverage/coverage.out @@ -1,4 +1,8 @@ mode: set +github.com/muety/wakapi/models/language_mapping.go:11.42,13.2 1 0 +github.com/muety/wakapi/models/language_mapping.go:15.51,17.2 1 0 +github.com/muety/wakapi/models/language_mapping.go:19.52,21.2 1 0 +github.com/muety/wakapi/models/models.go:3.14,5.2 0 1 github.com/muety/wakapi/models/filters.go:16.56,17.16 1 0 github.com/muety/wakapi/models/filters.go:29.2,29.19 1 0 github.com/muety/wakapi/models/filters.go:18.22,19.32 1 0 @@ -45,10 +49,37 @@ github.com/muety/wakapi/models/heartbeat.go:51.23,52.19 1 1 github.com/muety/wakapi/models/heartbeat.go:53.17,54.26 1 1 github.com/muety/wakapi/models/heartbeat.go:55.22,56.18 1 1 github.com/muety/wakapi/models/heartbeat.go:59.15,61.3 1 1 -github.com/muety/wakapi/models/models.go:3.14,5.2 0 1 +github.com/muety/wakapi/models/heartbeats.go:7.31,9.2 1 0 +github.com/muety/wakapi/models/heartbeats.go:11.41,13.2 1 0 +github.com/muety/wakapi/models/heartbeats.go:15.36,17.2 1 0 +github.com/muety/wakapi/models/heartbeats.go:19.43,22.2 2 0 +github.com/muety/wakapi/models/heartbeats.go:24.41,26.18 1 0 +github.com/muety/wakapi/models/heartbeats.go:29.2,29.16 1 0 +github.com/muety/wakapi/models/heartbeats.go:26.18,28.3 1 0 +github.com/muety/wakapi/models/heartbeats.go:32.40,34.18 1 0 +github.com/muety/wakapi/models/heartbeats.go:37.2,37.24 1 0 +github.com/muety/wakapi/models/heartbeats.go:34.18,36.3 1 0 +github.com/muety/wakapi/models/user.go:34.43,37.2 1 0 +github.com/muety/wakapi/models/user.go:39.33,43.2 1 0 +github.com/muety/wakapi/models/user.go:45.45,47.2 1 0 +github.com/muety/wakapi/models/user.go:49.45,51.2 1 0 +github.com/muety/wakapi/models/shared.go:34.52,37.16 3 0 +github.com/muety/wakapi/models/shared.go:40.2,42.12 3 0 +github.com/muety/wakapi/models/shared.go:37.16,39.3 1 0 +github.com/muety/wakapi/models/shared.go:46.52,52.22 2 0 +github.com/muety/wakapi/models/shared.go:68.2,71.12 3 0 +github.com/muety/wakapi/models/shared.go:53.14,55.17 2 0 +github.com/muety/wakapi/models/shared.go:58.13,60.8 2 0 +github.com/muety/wakapi/models/shared.go:61.17,63.8 2 0 +github.com/muety/wakapi/models/shared.go:64.10,65.64 1 0 +github.com/muety/wakapi/models/shared.go:55.17,57.4 1 0 +github.com/muety/wakapi/models/shared.go:74.51,77.2 2 0 +github.com/muety/wakapi/models/shared.go:79.37,82.2 2 0 +github.com/muety/wakapi/models/shared.go:84.35,86.2 1 0 +github.com/muety/wakapi/models/shared.go:88.34,90.2 1 0 github.com/muety/wakapi/models/summary.go:29.27,33.2 1 0 github.com/muety/wakapi/models/summary.go:83.29,85.2 1 1 -github.com/muety/wakapi/models/summary.go:87.37,94.2 6 0 +github.com/muety/wakapi/models/summary.go:87.37,94.2 6 1 github.com/muety/wakapi/models/summary.go:96.35,98.2 1 1 github.com/muety/wakapi/models/summary.go:100.57,108.2 1 1 github.com/muety/wakapi/models/summary.go:121.33,126.26 4 1 @@ -93,71 +124,9 @@ github.com/muety/wakapi/models/summary.go:216.31,218.60 1 1 github.com/muety/wakapi/models/summary.go:218.60,219.55 1 1 github.com/muety/wakapi/models/summary.go:219.55,221.6 1 1 github.com/muety/wakapi/models/summary.go:221.11,229.6 1 1 -github.com/muety/wakapi/models/summary.go:246.33,248.2 1 0 -github.com/muety/wakapi/models/summary.go:250.43,252.2 1 0 -github.com/muety/wakapi/models/summary.go:254.38,256.2 1 0 -github.com/muety/wakapi/models/user.go:34.43,37.2 1 0 -github.com/muety/wakapi/models/user.go:39.33,43.2 1 0 -github.com/muety/wakapi/models/user.go:45.45,47.2 1 0 -github.com/muety/wakapi/models/user.go:49.45,51.2 1 0 -github.com/muety/wakapi/models/heartbeats.go:7.31,9.2 1 0 -github.com/muety/wakapi/models/heartbeats.go:11.41,13.2 1 0 -github.com/muety/wakapi/models/heartbeats.go:15.36,17.2 1 0 -github.com/muety/wakapi/models/heartbeats.go:19.43,22.2 2 0 -github.com/muety/wakapi/models/heartbeats.go:24.41,26.18 1 0 -github.com/muety/wakapi/models/heartbeats.go:29.2,29.16 1 0 -github.com/muety/wakapi/models/heartbeats.go:26.18,28.3 1 0 -github.com/muety/wakapi/models/heartbeats.go:32.40,34.18 1 0 -github.com/muety/wakapi/models/heartbeats.go:37.2,37.24 1 0 -github.com/muety/wakapi/models/heartbeats.go:34.18,36.3 1 0 -github.com/muety/wakapi/models/language_mapping.go:11.42,13.2 1 0 -github.com/muety/wakapi/models/language_mapping.go:15.51,17.2 1 0 -github.com/muety/wakapi/models/language_mapping.go:19.52,21.2 1 0 -github.com/muety/wakapi/models/shared.go:34.52,37.16 3 0 -github.com/muety/wakapi/models/shared.go:40.2,42.12 3 0 -github.com/muety/wakapi/models/shared.go:37.16,39.3 1 0 -github.com/muety/wakapi/models/shared.go:46.52,52.22 2 0 -github.com/muety/wakapi/models/shared.go:68.2,71.12 3 0 -github.com/muety/wakapi/models/shared.go:53.14,55.17 2 0 -github.com/muety/wakapi/models/shared.go:58.13,60.8 2 0 -github.com/muety/wakapi/models/shared.go:61.17,63.8 2 0 -github.com/muety/wakapi/models/shared.go:64.10,65.64 1 0 -github.com/muety/wakapi/models/shared.go:55.17,57.4 1 0 -github.com/muety/wakapi/models/shared.go:74.51,77.2 2 0 -github.com/muety/wakapi/models/shared.go:79.37,82.2 2 0 -github.com/muety/wakapi/models/shared.go:84.35,86.2 1 0 -github.com/muety/wakapi/models/shared.go:88.34,90.2 1 0 -github.com/muety/wakapi/utils/common.go:9.48,11.2 1 0 -github.com/muety/wakapi/utils/common.go:13.40,15.2 1 0 -github.com/muety/wakapi/utils/common.go:17.45,19.2 1 0 -github.com/muety/wakapi/utils/common.go:21.56,24.45 3 1 -github.com/muety/wakapi/utils/common.go:27.2,27.40 1 1 -github.com/muety/wakapi/utils/common.go:24.45,26.3 1 1 -github.com/muety/wakapi/utils/date.go:8.31,10.2 1 0 -github.com/muety/wakapi/utils/date.go:12.43,14.2 1 0 -github.com/muety/wakapi/utils/date.go:16.30,20.2 3 0 -github.com/muety/wakapi/utils/date.go:22.31,25.2 2 0 -github.com/muety/wakapi/utils/date.go:27.30,30.2 2 0 -github.com/muety/wakapi/utils/date.go:32.67,35.33 2 0 -github.com/muety/wakapi/utils/date.go:44.2,44.18 1 0 -github.com/muety/wakapi/utils/date.go:35.33,37.19 2 0 -github.com/muety/wakapi/utils/date.go:40.3,41.10 2 0 -github.com/muety/wakapi/utils/date.go:37.19,39.4 1 0 -github.com/muety/wakapi/utils/date.go:47.50,53.2 5 0 -github.com/muety/wakapi/utils/date.go:56.79,59.36 3 0 -github.com/muety/wakapi/utils/date.go:63.2,63.21 1 0 -github.com/muety/wakapi/utils/date.go:67.2,67.21 1 0 -github.com/muety/wakapi/utils/date.go:71.2,71.13 1 0 -github.com/muety/wakapi/utils/date.go:59.36,62.3 2 0 -github.com/muety/wakapi/utils/date.go:63.21,66.3 2 0 -github.com/muety/wakapi/utils/date.go:67.21,70.3 2 0 -github.com/muety/wakapi/utils/http.go:9.73,12.58 3 0 -github.com/muety/wakapi/utils/http.go:12.58,14.3 1 0 -github.com/muety/wakapi/utils/strings.go:8.34,10.2 1 0 -github.com/muety/wakapi/utils/strings.go:12.77,13.29 1 0 -github.com/muety/wakapi/utils/strings.go:18.2,18.19 1 0 -github.com/muety/wakapi/utils/strings.go:13.29,14.18 1 0 -github.com/muety/wakapi/utils/strings.go:14.18,16.4 1 0 +github.com/muety/wakapi/models/summary.go:246.33,248.2 1 1 +github.com/muety/wakapi/models/summary.go:250.43,252.2 1 1 +github.com/muety/wakapi/models/summary.go:254.38,256.2 1 1 github.com/muety/wakapi/utils/summary.go:10.71,13.18 2 0 github.com/muety/wakapi/utils/summary.go:37.2,37.22 1 0 github.com/muety/wakapi/utils/summary.go:14.28,15.24 1 0 @@ -206,51 +175,85 @@ github.com/muety/wakapi/utils/color.go:8.93,10.41 2 0 github.com/muety/wakapi/utils/color.go:15.2,15.15 1 0 github.com/muety/wakapi/utils/color.go:10.41,11.50 1 0 github.com/muety/wakapi/utils/color.go:11.50,13.4 1 0 -github.com/muety/wakapi/config/config.go:74.70,76.2 1 0 -github.com/muety/wakapi/config/config.go:78.65,80.2 1 0 -github.com/muety/wakapi/config/config.go:82.82,92.2 1 0 -github.com/muety/wakapi/config/config.go:94.31,96.2 1 0 -github.com/muety/wakapi/config/config.go:98.74,99.19 1 0 -github.com/muety/wakapi/config/config.go:100.10,101.34 1 0 -github.com/muety/wakapi/config/config.go:101.34,110.4 8 0 -github.com/muety/wakapi/config/config.go:114.73,115.33 1 0 -github.com/muety/wakapi/config/config.go:115.33,123.17 5 0 -github.com/muety/wakapi/config/config.go:127.3,128.13 2 0 -github.com/muety/wakapi/config/config.go:123.17,125.4 1 0 -github.com/muety/wakapi/config/config.go:132.50,133.19 1 0 -github.com/muety/wakapi/config/config.go:146.2,146.12 1 0 -github.com/muety/wakapi/config/config.go:134.23,138.5 1 0 -github.com/muety/wakapi/config/config.go:139.26,142.5 1 0 -github.com/muety/wakapi/config/config.go:143.24,144.48 1 0 -github.com/muety/wakapi/config/config.go:149.53,159.2 1 1 -github.com/muety/wakapi/config/config.go:161.56,169.2 1 1 -github.com/muety/wakapi/config/config.go:171.54,173.2 1 1 -github.com/muety/wakapi/config/config.go:175.29,177.2 1 1 -github.com/muety/wakapi/config/config.go:179.27,181.16 2 0 -github.com/muety/wakapi/config/config.go:184.2,187.16 3 0 -github.com/muety/wakapi/config/config.go:191.2,191.22 1 0 -github.com/muety/wakapi/config/config.go:181.16,183.3 1 0 -github.com/muety/wakapi/config/config.go:187.16,189.3 1 0 -github.com/muety/wakapi/config/config.go:194.45,204.16 4 0 -github.com/muety/wakapi/config/config.go:208.2,208.57 1 0 -github.com/muety/wakapi/config/config.go:212.2,212.30 1 0 -github.com/muety/wakapi/config/config.go:216.2,216.15 1 0 -github.com/muety/wakapi/config/config.go:204.16,206.3 1 0 -github.com/muety/wakapi/config/config.go:208.57,210.3 1 0 -github.com/muety/wakapi/config/config.go:212.30,214.3 1 0 -github.com/muety/wakapi/config/config.go:219.38,220.43 1 0 -github.com/muety/wakapi/config/config.go:224.2,224.15 1 0 -github.com/muety/wakapi/config/config.go:220.43,222.3 1 0 -github.com/muety/wakapi/config/config.go:227.26,229.2 1 0 -github.com/muety/wakapi/config/config.go:231.20,233.2 1 0 -github.com/muety/wakapi/config/config.go:235.21,242.96 4 0 -github.com/muety/wakapi/config/config.go:246.2,253.52 4 0 -github.com/muety/wakapi/config/config.go:257.2,257.47 1 0 -github.com/muety/wakapi/config/config.go:263.2,264.14 2 0 -github.com/muety/wakapi/config/config.go:242.96,244.3 1 0 -github.com/muety/wakapi/config/config.go:253.52,255.3 1 0 -github.com/muety/wakapi/config/config.go:257.47,258.14 1 0 -github.com/muety/wakapi/config/config.go:258.14,260.4 1 0 +github.com/muety/wakapi/utils/common.go:9.48,11.2 1 0 +github.com/muety/wakapi/utils/common.go:13.40,15.2 1 0 +github.com/muety/wakapi/utils/common.go:17.45,19.2 1 0 +github.com/muety/wakapi/utils/common.go:21.56,24.45 3 1 +github.com/muety/wakapi/utils/common.go:27.2,27.40 1 1 +github.com/muety/wakapi/utils/common.go:24.45,26.3 1 1 +github.com/muety/wakapi/utils/date.go:8.31,10.2 1 0 +github.com/muety/wakapi/utils/date.go:12.43,14.2 1 0 +github.com/muety/wakapi/utils/date.go:16.30,20.2 3 0 +github.com/muety/wakapi/utils/date.go:22.31,25.2 2 0 +github.com/muety/wakapi/utils/date.go:27.30,30.2 2 0 +github.com/muety/wakapi/utils/date.go:32.67,35.33 2 0 +github.com/muety/wakapi/utils/date.go:44.2,44.18 1 0 +github.com/muety/wakapi/utils/date.go:35.33,37.19 2 0 +github.com/muety/wakapi/utils/date.go:40.3,41.10 2 0 +github.com/muety/wakapi/utils/date.go:37.19,39.4 1 0 +github.com/muety/wakapi/utils/date.go:47.50,53.2 5 0 +github.com/muety/wakapi/utils/date.go:56.79,59.36 3 0 +github.com/muety/wakapi/utils/date.go:63.2,63.21 1 0 +github.com/muety/wakapi/utils/date.go:67.2,67.21 1 0 +github.com/muety/wakapi/utils/date.go:71.2,71.13 1 0 +github.com/muety/wakapi/utils/date.go:59.36,62.3 2 0 +github.com/muety/wakapi/utils/date.go:63.21,66.3 2 0 +github.com/muety/wakapi/utils/date.go:67.21,70.3 2 0 +github.com/muety/wakapi/utils/http.go:9.73,12.58 3 0 +github.com/muety/wakapi/utils/http.go:12.58,14.3 1 0 +github.com/muety/wakapi/utils/strings.go:8.34,10.2 1 0 +github.com/muety/wakapi/utils/strings.go:12.77,13.29 1 0 +github.com/muety/wakapi/utils/strings.go:18.2,18.19 1 0 +github.com/muety/wakapi/utils/strings.go:13.29,14.18 1 0 +github.com/muety/wakapi/utils/strings.go:14.18,16.4 1 0 +github.com/muety/wakapi/config/config.go:77.70,79.2 1 0 +github.com/muety/wakapi/config/config.go:81.65,83.2 1 0 +github.com/muety/wakapi/config/config.go:85.82,95.2 1 0 +github.com/muety/wakapi/config/config.go:97.31,99.2 1 0 +github.com/muety/wakapi/config/config.go:101.32,103.2 1 0 +github.com/muety/wakapi/config/config.go:105.74,106.19 1 0 +github.com/muety/wakapi/config/config.go:107.10,108.34 1 0 +github.com/muety/wakapi/config/config.go:108.34,117.4 8 0 +github.com/muety/wakapi/config/config.go:121.73,122.33 1 0 +github.com/muety/wakapi/config/config.go:122.33,130.17 5 0 +github.com/muety/wakapi/config/config.go:134.3,135.13 2 0 +github.com/muety/wakapi/config/config.go:130.17,132.4 1 0 +github.com/muety/wakapi/config/config.go:139.50,140.19 1 0 +github.com/muety/wakapi/config/config.go:153.2,153.12 1 0 +github.com/muety/wakapi/config/config.go:141.23,145.5 1 0 +github.com/muety/wakapi/config/config.go:146.26,149.5 1 0 +github.com/muety/wakapi/config/config.go:150.24,151.48 1 0 +github.com/muety/wakapi/config/config.go:156.53,166.2 1 1 +github.com/muety/wakapi/config/config.go:168.56,176.2 1 1 +github.com/muety/wakapi/config/config.go:178.54,180.2 1 1 +github.com/muety/wakapi/config/config.go:182.29,184.2 1 1 +github.com/muety/wakapi/config/config.go:186.27,188.16 2 0 +github.com/muety/wakapi/config/config.go:191.2,194.16 3 0 +github.com/muety/wakapi/config/config.go:198.2,198.22 1 0 +github.com/muety/wakapi/config/config.go:188.16,190.3 1 0 +github.com/muety/wakapi/config/config.go:194.16,196.3 1 0 +github.com/muety/wakapi/config/config.go:201.45,211.16 4 0 +github.com/muety/wakapi/config/config.go:215.2,215.57 1 0 +github.com/muety/wakapi/config/config.go:219.2,219.30 1 0 +github.com/muety/wakapi/config/config.go:223.2,223.15 1 0 +github.com/muety/wakapi/config/config.go:211.16,213.3 1 0 +github.com/muety/wakapi/config/config.go:215.57,217.3 1 0 +github.com/muety/wakapi/config/config.go:219.30,221.3 1 0 +github.com/muety/wakapi/config/config.go:226.38,227.43 1 0 +github.com/muety/wakapi/config/config.go:231.2,231.15 1 0 +github.com/muety/wakapi/config/config.go:227.43,229.3 1 0 +github.com/muety/wakapi/config/config.go:234.26,236.2 1 0 +github.com/muety/wakapi/config/config.go:238.20,240.2 1 0 +github.com/muety/wakapi/config/config.go:242.21,249.96 4 0 +github.com/muety/wakapi/config/config.go:253.2,260.52 4 0 +github.com/muety/wakapi/config/config.go:264.2,264.47 1 0 +github.com/muety/wakapi/config/config.go:270.2,270.70 1 0 +github.com/muety/wakapi/config/config.go:274.2,275.14 2 0 +github.com/muety/wakapi/config/config.go:249.96,251.3 1 0 +github.com/muety/wakapi/config/config.go:260.52,262.3 1 0 +github.com/muety/wakapi/config/config.go:264.47,265.14 1 0 +github.com/muety/wakapi/config/config.go:265.14,267.4 1 0 +github.com/muety/wakapi/config/config.go:270.70,272.3 1 0 github.com/muety/wakapi/config/legacy.go:13.33,14.57 1 0 github.com/muety/wakapi/config/legacy.go:14.57,16.3 1 0 github.com/muety/wakapi/config/legacy.go:16.8,16.16 1 0 @@ -318,76 +321,6 @@ github.com/muety/wakapi/middlewares/authenticate.go:125.3,125.15 1 0 github.com/muety/wakapi/middlewares/authenticate.go:120.58,124.4 3 0 github.com/muety/wakapi/middlewares/logging.go:11.48,13.2 1 0 github.com/muety/wakapi/middlewares/logging.go:15.66,17.2 1 0 -github.com/muety/wakapi/services/aggregation.go:24.142,31.2 1 0 -github.com/muety/wakapi/services/aggregation.go:40.43,42.37 1 0 -github.com/muety/wakapi/services/aggregation.go:46.2,47.18 2 0 -github.com/muety/wakapi/services/aggregation.go:42.37,44.3 1 0 -github.com/muety/wakapi/services/aggregation.go:50.67,54.40 3 0 -github.com/muety/wakapi/services/aggregation.go:58.2,58.50 1 0 -github.com/muety/wakapi/services/aggregation.go:63.2,63.60 1 0 -github.com/muety/wakapi/services/aggregation.go:69.2,69.35 1 0 -github.com/muety/wakapi/services/aggregation.go:54.40,56.3 1 0 -github.com/muety/wakapi/services/aggregation.go:58.50,60.3 1 0 -github.com/muety/wakapi/services/aggregation.go:63.60,67.3 3 0 -github.com/muety/wakapi/services/aggregation.go:72.109,73.24 1 0 -github.com/muety/wakapi/services/aggregation.go:73.24,74.111 1 0 -github.com/muety/wakapi/services/aggregation.go:74.111,76.4 1 0 -github.com/muety/wakapi/services/aggregation.go:76.9,79.4 2 0 -github.com/muety/wakapi/services/aggregation.go:83.80,84.33 1 0 -github.com/muety/wakapi/services/aggregation.go:84.33,85.60 1 0 -github.com/muety/wakapi/services/aggregation.go:85.60,87.4 1 0 -github.com/muety/wakapi/services/aggregation.go:91.100,95.59 3 0 -github.com/muety/wakapi/services/aggregation.go:110.2,111.16 2 0 -github.com/muety/wakapi/services/aggregation.go:117.2,118.16 2 0 -github.com/muety/wakapi/services/aggregation.go:124.2,125.44 2 0 -github.com/muety/wakapi/services/aggregation.go:130.2,130.41 1 0 -github.com/muety/wakapi/services/aggregation.go:144.2,144.12 1 0 -github.com/muety/wakapi/services/aggregation.go:95.59,98.3 2 0 -github.com/muety/wakapi/services/aggregation.go:98.8,98.47 1 0 -github.com/muety/wakapi/services/aggregation.go:98.47,100.30 2 0 -github.com/muety/wakapi/services/aggregation.go:100.30,101.43 1 0 -github.com/muety/wakapi/services/aggregation.go:101.43,103.5 1 0 -github.com/muety/wakapi/services/aggregation.go:105.8,107.3 1 0 -github.com/muety/wakapi/services/aggregation.go:111.16,114.3 2 0 -github.com/muety/wakapi/services/aggregation.go:118.16,121.3 2 0 -github.com/muety/wakapi/services/aggregation.go:125.44,127.3 1 0 -github.com/muety/wakapi/services/aggregation.go:130.41,131.21 1 0 -github.com/muety/wakapi/services/aggregation.go:131.21,135.4 1 0 -github.com/muety/wakapi/services/aggregation.go:135.9,135.62 1 0 -github.com/muety/wakapi/services/aggregation.go:135.62,139.4 1 0 -github.com/muety/wakapi/services/aggregation.go:147.83,162.41 5 0 -github.com/muety/wakapi/services/aggregation.go:162.41,172.3 3 0 -github.com/muety/wakapi/services/aggregation.go:175.34,178.2 2 0 -github.com/muety/wakapi/services/alias.go:16.77,21.2 1 1 -github.com/muety/wakapi/services/alias.go:25.63,27.16 2 1 -github.com/muety/wakapi/services/alias.go:30.2,30.12 1 1 -github.com/muety/wakapi/services/alias.go:27.16,29.3 1 1 -github.com/muety/wakapi/services/alias.go:33.108,34.32 1 1 -github.com/muety/wakapi/services/alias.go:40.2,41.46 2 1 -github.com/muety/wakapi/services/alias.go:46.2,46.19 1 1 -github.com/muety/wakapi/services/alias.go:34.32,35.53 1 1 -github.com/muety/wakapi/services/alias.go:35.53,37.4 1 1 -github.com/muety/wakapi/services/alias.go:41.46,42.48 1 1 -github.com/muety/wakapi/services/alias.go:42.48,44.4 1 1 -github.com/muety/wakapi/services/alias.go:49.60,50.43 1 1 -github.com/muety/wakapi/services/alias.go:53.2,53.14 1 1 -github.com/muety/wakapi/services/alias.go:50.43,52.3 1 1 -github.com/muety/wakapi/services/heartbeat.go:17.141,23.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:25.80,27.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:29.111,31.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:34.2,34.43 1 0 -github.com/muety/wakapi/services/heartbeat.go:31.16,33.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:37.78,39.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:41.62,43.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:45.116,47.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:51.2,51.28 1 0 -github.com/muety/wakapi/services/heartbeat.go:55.2,55.24 1 0 -github.com/muety/wakapi/services/heartbeat.go:47.16,49.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:51.28,53.3 1 0 -github.com/muety/wakapi/services/key_value.go:14.89,19.2 1 0 -github.com/muety/wakapi/services/key_value.go:21.83,23.2 1 0 -github.com/muety/wakapi/services/key_value.go:25.72,27.2 1 0 -github.com/muety/wakapi/services/key_value.go:29.60,31.2 1 0 github.com/muety/wakapi/services/language_mapping.go:17.118,23.2 1 0 github.com/muety/wakapi/services/language_mapping.go:25.86,27.2 1 0 github.com/muety/wakapi/services/language_mapping.go:29.96,30.53 1 0 @@ -509,3 +442,73 @@ github.com/muety/wakapi/services/user.go:64.106,66.96 2 0 github.com/muety/wakapi/services/user.go:71.2,71.68 1 0 github.com/muety/wakapi/services/user.go:66.96,68.3 1 0 github.com/muety/wakapi/services/user.go:68.8,70.3 1 0 +github.com/muety/wakapi/services/aggregation.go:24.142,31.2 1 0 +github.com/muety/wakapi/services/aggregation.go:40.43,42.37 1 0 +github.com/muety/wakapi/services/aggregation.go:46.2,48.19 3 0 +github.com/muety/wakapi/services/aggregation.go:42.37,44.3 1 0 +github.com/muety/wakapi/services/aggregation.go:51.67,55.40 3 0 +github.com/muety/wakapi/services/aggregation.go:59.2,59.50 1 0 +github.com/muety/wakapi/services/aggregation.go:64.2,64.60 1 0 +github.com/muety/wakapi/services/aggregation.go:70.2,70.35 1 0 +github.com/muety/wakapi/services/aggregation.go:55.40,57.3 1 0 +github.com/muety/wakapi/services/aggregation.go:59.50,61.3 1 0 +github.com/muety/wakapi/services/aggregation.go:64.60,68.3 3 0 +github.com/muety/wakapi/services/aggregation.go:73.109,74.24 1 0 +github.com/muety/wakapi/services/aggregation.go:74.24,75.111 1 0 +github.com/muety/wakapi/services/aggregation.go:75.111,77.4 1 0 +github.com/muety/wakapi/services/aggregation.go:77.9,80.4 2 0 +github.com/muety/wakapi/services/aggregation.go:84.80,85.33 1 0 +github.com/muety/wakapi/services/aggregation.go:85.33,86.60 1 0 +github.com/muety/wakapi/services/aggregation.go:86.60,88.4 1 0 +github.com/muety/wakapi/services/aggregation.go:92.100,96.59 3 0 +github.com/muety/wakapi/services/aggregation.go:111.2,112.16 2 0 +github.com/muety/wakapi/services/aggregation.go:118.2,119.16 2 0 +github.com/muety/wakapi/services/aggregation.go:125.2,126.44 2 0 +github.com/muety/wakapi/services/aggregation.go:131.2,131.41 1 0 +github.com/muety/wakapi/services/aggregation.go:145.2,145.12 1 0 +github.com/muety/wakapi/services/aggregation.go:96.59,99.3 2 0 +github.com/muety/wakapi/services/aggregation.go:99.8,99.47 1 0 +github.com/muety/wakapi/services/aggregation.go:99.47,101.30 2 0 +github.com/muety/wakapi/services/aggregation.go:101.30,102.43 1 0 +github.com/muety/wakapi/services/aggregation.go:102.43,104.5 1 0 +github.com/muety/wakapi/services/aggregation.go:106.8,108.3 1 0 +github.com/muety/wakapi/services/aggregation.go:112.16,115.3 2 0 +github.com/muety/wakapi/services/aggregation.go:119.16,122.3 2 0 +github.com/muety/wakapi/services/aggregation.go:126.44,128.3 1 0 +github.com/muety/wakapi/services/aggregation.go:131.41,132.21 1 0 +github.com/muety/wakapi/services/aggregation.go:132.21,136.4 1 0 +github.com/muety/wakapi/services/aggregation.go:136.9,136.62 1 0 +github.com/muety/wakapi/services/aggregation.go:136.62,140.4 1 0 +github.com/muety/wakapi/services/aggregation.go:148.83,163.41 5 0 +github.com/muety/wakapi/services/aggregation.go:163.41,173.3 3 0 +github.com/muety/wakapi/services/aggregation.go:176.34,179.2 2 0 +github.com/muety/wakapi/services/alias.go:16.77,21.2 1 1 +github.com/muety/wakapi/services/alias.go:25.63,27.16 2 1 +github.com/muety/wakapi/services/alias.go:30.2,30.12 1 1 +github.com/muety/wakapi/services/alias.go:27.16,29.3 1 1 +github.com/muety/wakapi/services/alias.go:33.108,34.32 1 1 +github.com/muety/wakapi/services/alias.go:40.2,41.46 2 1 +github.com/muety/wakapi/services/alias.go:46.2,46.19 1 1 +github.com/muety/wakapi/services/alias.go:34.32,35.53 1 1 +github.com/muety/wakapi/services/alias.go:35.53,37.4 1 1 +github.com/muety/wakapi/services/alias.go:41.46,42.48 1 1 +github.com/muety/wakapi/services/alias.go:42.48,44.4 1 1 +github.com/muety/wakapi/services/alias.go:49.60,50.43 1 1 +github.com/muety/wakapi/services/alias.go:53.2,53.14 1 1 +github.com/muety/wakapi/services/alias.go:50.43,52.3 1 1 +github.com/muety/wakapi/services/heartbeat.go:17.141,23.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:25.80,27.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:29.111,31.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:34.2,34.43 1 0 +github.com/muety/wakapi/services/heartbeat.go:31.16,33.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:37.78,39.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:41.62,43.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:45.116,47.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:51.2,51.28 1 0 +github.com/muety/wakapi/services/heartbeat.go:55.2,55.24 1 0 +github.com/muety/wakapi/services/heartbeat.go:47.16,49.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:51.28,53.3 1 0 +github.com/muety/wakapi/services/key_value.go:14.89,19.2 1 0 +github.com/muety/wakapi/services/key_value.go:21.83,23.2 1 0 +github.com/muety/wakapi/services/key_value.go:25.72,27.2 1 0 +github.com/muety/wakapi/services/key_value.go:29.60,31.2 1 0 diff --git a/main.go b/main.go index 5f1b05f..12c53dc 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "github.com/gorilla/handlers" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/migrations/common" @@ -178,15 +179,55 @@ func main() { router.PathPrefix("/assets").Handler(http.FileServer(http.Dir("./static"))) // Listen HTTP - portString := config.Server.ListenIpV4 + ":" + strconv.Itoa(config.Server.Port) - s := &http.Server{ - Handler: router, - Addr: portString, - ReadTimeout: 10 * time.Second, - WriteTimeout: 10 * time.Second, + listen(router) +} + +func listen(handler http.Handler) { + var s4, s6 *http.Server + + // IPv4 + if config.Server.ListenIpV4 != "" { + bindString4 := config.Server.ListenIpV4 + ":" + strconv.Itoa(config.Server.Port) + s4 = &http.Server{ + Handler: handler, + Addr: bindString4, + ReadTimeout: 10 * time.Second, + WriteTimeout: 10 * time.Second, + } } - log.Printf("Listening on %+s\n", portString) - s.ListenAndServe() + + // IPv6 + if config.Server.ListenIpV6 != "" { + bindString6 := "[" + config.Server.ListenIpV6 + "]:" + strconv.Itoa(config.Server.Port) + s6 = &http.Server{ + Handler: handler, + Addr: bindString6, + ReadTimeout: 10 * time.Second, + WriteTimeout: 10 * time.Second, + } + } + + if config.UseTLS() { + if s4 != nil { + fmt.Printf("Listening for HTTPS on %s.\n", s4.Addr) + go s4.ListenAndServeTLS(config.Server.TlsCertPath, config.Server.TlsKeyPath) + } + if s6 != nil { + fmt.Printf("Listening for HTTPS on %s.\n", s6.Addr) + go s6.ListenAndServeTLS(config.Server.TlsCertPath, config.Server.TlsKeyPath) + } + } else { + if s4 != nil { + fmt.Printf("Listening for HTTP on %s.\n", s4.Addr) + go s4.ListenAndServe() + } + if s6 != nil { + fmt.Printf("Listening for HTTP on %s.\n", s6.Addr) + go s6.ListenAndServe() + } + } + + <-make(chan interface{}, 1) } func runDatabaseMigrations() { diff --git a/version.txt b/version.txt index b9a05a6..b5aaf81 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.17.3 +1.17.4