From 9a5c5e9fcad530a874cba0d399230079a34c4f54 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 1 Jan 2024 01:42:32 +0800 Subject: [PATCH] :sparkles: Auto Redirect --- .gitignore | 3 ++- pkg/hypertext/server.go | 20 ++++++++++++++++-- settings.yml | 45 +++++++++++++++++++++-------------------- 3 files changed, 43 insertions(+), 25 deletions(-) diff --git a/.gitignore b/.gitignore index ef1066e..e5f2b59 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -/config \ No newline at end of file +/config +/letsencrypt \ No newline at end of file diff --git a/pkg/hypertext/server.go b/pkg/hypertext/server.go index 18e7f32..44c5a36 100644 --- a/pkg/hypertext/server.go +++ b/pkg/hypertext/server.go @@ -2,6 +2,7 @@ package hypertext import ( jsoniter "github.com/json-iterator/go" + "strings" "time" "github.com/gofiber/fiber/v2" @@ -46,8 +47,23 @@ func RunServer(app *fiber.App, ports []string, securedPorts []string, pem string for _, port := range ports { port := port go func() { - if err := app.Listen(port); err != nil { - log.Panic().Err(err).Msg("An error occurred when listening hypertext tls ports.") + if viper.GetBool("hypertext.certificate.redirect") { + redirector := fiber.New(fiber.Config{ + AppName: "RoadSign", + ServerHeader: "RoadSign", + DisableStartupMessage: true, + EnableIPValidation: true, + }) + redirector.All("/", func(c *fiber.Ctx) error { + return c.Redirect(strings.ReplaceAll(string(c.Request().URI().FullURI()), "http", "https")) + }) + if err := redirector.Listen(port); err != nil { + log.Panic().Err(err).Msg("An error occurred when listening hypertext common ports.") + } + } else { + if err := app.Listen(port); err != nil { + log.Panic().Err(err).Msg("An error occurred when listening hypertext common ports.") + } } }() } diff --git a/settings.yml b/settings.yml index 8ac6089..e473310 100644 --- a/settings.yml +++ b/settings.yml @@ -1,27 +1,28 @@ debug: - print_routes: true + print_routes: true hypertext: - sideload_ports: - - :81 - sideload_secured_ports: [] - certificate: - sideload_key: ./cert.key - sideload_pem: ./cert.pem - key: ./cert.key - pem: ./cert.pem - limitation: - max_body_size: 536870912 - max_qps: -1 - ports: - - :8000 - secured_ports: [] + sideload_ports: + - :81 + sideload_secured_ports: [ ] + certificate: + redirect: false + sideload_key: ./cert.key + sideload_pem: ./cert.pem + key: ./cert.key + pem: ./cert.pem + limitation: + max_body_size: 536870912 + max_qps: -1 + ports: + - :8000 + secured_ports: [ ] paths: - configs: ./config + configs: ./config performance: - request_logging: true - network_timeout: 3000 - prefork: false + request_logging: true + network_timeout: 3000 + prefork: false security: - sideload_trusted_proxies: - - localhost - credential: e81f43f32d934271af6322e5376f5f59 + sideload_trusted_proxies: + - localhost + credential: e81f43f32d934271af6322e5376f5f59