"
+func NewServer(be backend.Backend, domain string, opts ...Option) *Server {
+ app := fiber.New(fiber.Config{
+ AppName: "versitygw-website",
+ ServerHeader: "VERSITYGW",
+ DisableStartupMessage: true,
+ Network: fiber.NetworkTCP,
+ })
+
+ server := &Server{
+ app: app,
+ domain: domain,
+ }
+
+ for _, opt := range opts {
+ opt(server)
+ }
+
+ domainInfo := "catch-all"
+ if domain != "" {
+ domainInfo = "domain: " + domain
+ }
+
+ // Panic recovery
+ app.Use(recover.New())
+
+ // Request logging
+ if !server.quiet {
+ fmt.Printf("initializing website endpoint (%s)\n", domainInfo)
+ app.Use(logger.New(logger.Config{
+ Format: "${time} | website | ${status} | ${latency} | ${ip} | ${method} | ${path}\n",
+ }))
+ }
+
+ // initialize the debug logger in debug mode
+ if debuglogger.IsDebugEnabled() {
+ app.Use(middlewares.DebugLogger())
+ }
+
+ registerWebsiteRoutes(app, be, domain)
+
+ return server
+}
+
+// ServeMultiPort creates listeners for multiple address specifications and serves
+// on all of them simultaneously.
+func (s *Server) ServeMultiPort(ports []string) error {
+ if len(ports) == 0 {
+ return fmt.Errorf("no addresses specified")
+ }
+
+ var listeners []net.Listener
+
+ for _, addrSpec := range ports {
+ var ln net.Listener
+ var err error
+
+ if s.CertStorage != nil {
+ ln, err = utils.NewMultiAddrTLSListener(s.app.Config().Network, addrSpec, s.CertStorage.GetCertificate, utils.ListenerOptions{SocketPerm: s.socketPerm})
+ } else {
+ ln, err = utils.NewMultiAddrListener(s.app.Config().Network, addrSpec, utils.ListenerOptions{SocketPerm: s.socketPerm})
+ }
+
+ if err != nil {
+ return fmt.Errorf("failed to bind website listener %s: %w", addrSpec, err)
+ }
+
+ listeners = append(listeners, ln)
+ }
+
+ if len(listeners) == 0 {
+ return fmt.Errorf("failed to create any website listeners")
+ }
+
+ finalListener := utils.NewMultiListener(listeners...)
+
+ return s.app.Listener(finalListener)
+}
+
+// Shutdown gracefully shuts down the server.
+func (s *Server) Shutdown() error {
+ return s.app.Shutdown()
+}
diff --git a/webui/web/explorer.html b/webui/web/explorer.html
index b541f708..c2bb4df2 100644
--- a/webui/web/explorer.html
+++ b/webui/web/explorer.html
@@ -981,6 +981,8 @@ under the License.
• s3:GetBucketLocation
• s3:GetBucketPolicy
• s3:PutBucketTagging
+ • s3:PutBucketWebsite
+ • s3:GetBucketWebsite
@@ -4181,6 +4183,8 @@ under the License.
"s3:PutObject",
"s3:PutObjectRetention",
"s3:PutObjectTagging",
+ "s3:PutBucketWebsite",
+ "s3:GetBucketWebsite",
"s3:RestoreObject"
],
"Resource": [