summaryrefslogtreecommitdiff
path: root/internal/router/router.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/router/router.go')
-rw-r--r--internal/router/router.go42
1 files changed, 28 insertions, 14 deletions
diff --git a/internal/router/router.go b/internal/router/router.go
index aef5c32e4..aa588906f 100644
--- a/internal/router/router.go
+++ b/internal/router/router.go
@@ -26,6 +26,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
+ "github.com/spf13/viper"
"github.com/superseriousbusiness/gotosocial/internal/config"
"github.com/superseriousbusiness/gotosocial/internal/db"
"golang.org/x/crypto/acme/autocert"
@@ -58,7 +59,6 @@ type Router interface {
type router struct {
engine *gin.Engine
srv *http.Server
- config *config.Config
certManager *autocert.Manager
}
@@ -69,10 +69,16 @@ func (r *router) AttachStaticFS(relativePath string, fs http.FileSystem) {
// Start starts the router nicely. It will serve two handlers if letsencrypt is enabled, and only the web/API handler if letsencrypt is not enabled.
func (r *router) Start() {
- if r.config.LetsEncryptConfig.Enabled {
+ keys := config.Keys
+ leEnabled := viper.GetBool(keys.LetsEncryptEnabled)
+
+ if leEnabled {
+ bindAddress := viper.GetString(keys.BindAddress)
+ lePort := viper.GetInt(keys.LetsEncryptPort)
+
// serve the http handler on the selected letsencrypt port, for receiving letsencrypt requests and solving their devious riddles
go func() {
- listen := fmt.Sprintf("%s:%d", r.config.BindAddress, r.config.LetsEncryptConfig.Port)
+ listen := fmt.Sprintf("%s:%d", bindAddress, lePort)
if err := http.ListenAndServe(listen, r.certManager.HTTPHandler(http.HandlerFunc(httpsRedirect))); err != nil && err != http.ErrServerClosed {
logrus.Fatalf("listen: %s", err)
}
@@ -103,7 +109,9 @@ func (r *router) Stop(ctx context.Context) error {
//
// The given DB is only used in the New function for parsing config values, and is not otherwise
// pinned to the router.
-func New(ctx context.Context, cfg *config.Config, db db.DB) (Router, error) {
+func New(ctx context.Context, db db.DB) (Router, error) {
+ keys := config.Keys
+
gin.SetMode(gin.ReleaseMode)
// create the actual engine here -- this is the core request routing handler for gts
@@ -116,12 +124,13 @@ func New(ctx context.Context, cfg *config.Config, db db.DB) (Router, error) {
engine.MaxMultipartMemory = 8 << 20
// set up IP forwarding via x-forward-* headers.
- if err := engine.SetTrustedProxies(cfg.TrustedProxies); err != nil {
+ trustedProxies := viper.GetStringSlice(keys.TrustedProxies)
+ if err := engine.SetTrustedProxies(trustedProxies); err != nil {
return nil, err
}
// enable cors on the engine
- if err := useCors(cfg, engine); err != nil {
+ if err := useCors(engine); err != nil {
return nil, err
}
@@ -129,17 +138,19 @@ func New(ctx context.Context, cfg *config.Config, db db.DB) (Router, error) {
loadTemplateFunctions(engine)
// load templates onto the engine
- if err := loadTemplates(cfg, engine); err != nil {
+ if err := loadTemplates(engine); err != nil {
return nil, err
}
// enable session store middleware on the engine
- if err := useSession(ctx, cfg, db, engine); err != nil {
+ if err := useSession(ctx, db, engine); err != nil {
return nil, err
}
// create the http server here, passing the gin engine as handler
- listen := fmt.Sprintf("%s:%d", cfg.BindAddress, cfg.Port)
+ bindAddress := viper.GetString(keys.BindAddress)
+ port := viper.GetInt(keys.Port)
+ listen := fmt.Sprintf("%s:%d", bindAddress, port)
s := &http.Server{
Addr: listen,
Handler: engine,
@@ -151,15 +162,19 @@ func New(ctx context.Context, cfg *config.Config, db db.DB) (Router, error) {
// We need to spawn the underlying server slightly differently depending on whether lets encrypt is enabled or not.
// In either case, the gin engine will still be used for routing requests.
+ leEnabled := viper.GetBool(keys.LetsEncryptEnabled)
var m *autocert.Manager
- if cfg.LetsEncryptConfig.Enabled {
+ if leEnabled {
// le IS enabled, so roll up an autocert manager for handling letsencrypt requests
+ host := viper.GetString(keys.Host)
+ leCertDir := viper.GetString(keys.LetsEncryptCertDir)
+ leEmailAddress := viper.GetString(keys.LetsEncryptEmailAddress)
m = &autocert.Manager{
Prompt: autocert.AcceptTOS,
- HostPolicy: autocert.HostWhitelist(cfg.Host),
- Cache: autocert.DirCache(cfg.LetsEncryptConfig.CertDir),
- Email: cfg.LetsEncryptConfig.EmailAddress,
+ HostPolicy: autocert.HostWhitelist(host),
+ Cache: autocert.DirCache(leCertDir),
+ Email: leEmailAddress,
}
s.TLSConfig = m.TLSConfig()
}
@@ -167,7 +182,6 @@ func New(ctx context.Context, cfg *config.Config, db db.DB) (Router, error) {
return &router{
engine: engine,
srv: s,
- config: cfg,
certManager: m,
}, nil
}