2021-02-06 16:26:23 +00:00
|
|
|
// Package server defines an interface to run the HTTP control server.
|
2020-04-30 23:41:57 +00:00
|
|
|
package server
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
2022-03-30 07:45:11 +00:00
|
|
|
"fmt"
|
2020-04-30 23:41:57 +00:00
|
|
|
|
2020-09-12 19:17:19 +00:00
|
|
|
"github.com/qdm12/gluetun/internal/dns"
|
2022-03-30 07:45:11 +00:00
|
|
|
"github.com/qdm12/gluetun/internal/httpserver"
|
2020-11-04 14:07:04 +00:00
|
|
|
"github.com/qdm12/gluetun/internal/models"
|
2021-08-01 15:01:28 +00:00
|
|
|
"github.com/qdm12/gluetun/internal/portforward"
|
2020-12-27 21:06:00 +00:00
|
|
|
"github.com/qdm12/gluetun/internal/publicip"
|
2020-09-12 19:17:19 +00:00
|
|
|
"github.com/qdm12/gluetun/internal/updater"
|
2021-08-18 22:01:04 +00:00
|
|
|
"github.com/qdm12/gluetun/internal/vpn"
|
2020-04-30 23:41:57 +00:00
|
|
|
)
|
|
|
|
|
|
2021-09-23 16:58:21 +00:00
|
|
|
func New(ctx context.Context, address string, logEnabled bool, logger Logger,
|
2021-08-18 22:01:04 +00:00
|
|
|
buildInfo models.BuildInformation, openvpnLooper vpn.Looper,
|
2021-08-01 15:01:28 +00:00
|
|
|
pfGetter portforward.Getter, unboundLooper dns.Looper,
|
2022-03-30 07:45:11 +00:00
|
|
|
updaterLooper updater.Looper, publicIPLooper publicip.Looper) (server httpserver.Runner, err error) {
|
2021-07-15 22:42:58 +00:00
|
|
|
handler := newHandler(ctx, logger, logEnabled, buildInfo,
|
2021-08-01 15:01:28 +00:00
|
|
|
openvpnLooper, pfGetter, unboundLooper, updaterLooper, publicIPLooper)
|
2022-03-30 07:45:11 +00:00
|
|
|
|
|
|
|
|
httpServerSettings := httpserver.Settings{
|
|
|
|
|
Address: address,
|
|
|
|
|
Handler: handler,
|
|
|
|
|
Logger: logger,
|
2020-04-30 23:41:57 +00:00
|
|
|
}
|
|
|
|
|
|
2022-03-30 07:45:11 +00:00
|
|
|
server, err = httpserver.New(httpServerSettings)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, fmt.Errorf("cannot create server: %w", err)
|
2020-05-02 17:08:15 +00:00
|
|
|
}
|
2022-03-30 07:45:11 +00:00
|
|
|
|
|
|
|
|
return server, nil
|
2020-05-02 17:08:15 +00:00
|
|
|
}
|