diff --git a/go.mod b/go.mod index 55d70febc0..1f1618775d 100644 --- a/go.mod +++ b/go.mod @@ -84,7 +84,6 @@ require ( github.com/opencontainers/image-spec v1.1.0 github.com/pquerna/otp v1.4.0 github.com/prometheus/client_golang v1.18.0 - github.com/quasoft/websspi v1.1.2 github.com/redis/go-redis/v9 v9.6.1 github.com/robfig/cron/v3 v3.0.1 github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 diff --git a/go.sum b/go.sum index ffa5ce5cc4..5c52642881 100644 --- a/go.sum +++ b/go.sum @@ -379,10 +379,8 @@ github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1 h1:LqbZZ9sNMWVjeXS4NN5oVvhMjDyLhmA1LG86oSo+IqY= github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1/go.mod h1:YeAe0gNeiNT5hoiZRI4yiOky6jVdNvfO2N6Kav/HmxY= -github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA= github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo= -github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY= github.com/gorilla/sessions v1.2.2/go.mod h1:ePLdVu+jbEgHH+KWw8I1z2wqd0BAdAQh/8LRvBeoNcQ= github.com/h2non/gock v1.2.0 h1:K6ol8rfrRkUOefooBC8elXoaNGYkpp7y2qcxGG6BzUE= @@ -581,8 +579,6 @@ github.com/prometheus/common v0.46.0 h1:doXzt5ybi1HBKpsZOL0sSkaNHJJqkyfEWZGGqqSc github.com/prometheus/common v0.46.0/go.mod h1:Tp0qkxpb9Jsg54QMe+EAmqXkSV7Evdy1BTn+g2pa/hQ= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -github.com/quasoft/websspi v1.1.2 h1:/mA4w0LxWlE3novvsoEL6BBA1WnjJATbjkh1kFrTidw= -github.com/quasoft/websspi v1.1.2/go.mod h1:HmVdl939dQ0WIXZhyik+ARdI03M6bQzaSEKcgpFmewk= github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4= github.com/redis/go-redis/v9 v9.6.1/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= @@ -779,7 +775,6 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/modules/graceful/manager_windows.go b/modules/graceful/manager_windows.go deleted file mode 100644 index bee44381db..0000000000 --- a/modules/graceful/manager_windows.go +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright 2019 The Gitea Authors. All rights reserved. -// SPDX-License-Identifier: MIT -// This code is heavily inspired by the archived gofacebook/gracenet/net.go handler - -//go:build windows - -package graceful - -import ( - "os" - "runtime/pprof" - "strconv" - "time" - - "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/setting" - - "golang.org/x/sys/windows/svc" - "golang.org/x/sys/windows/svc/debug" -) - -// WindowsServiceName is the name of the Windows service -var WindowsServiceName = "gitea" - -const ( - hammerCode = 128 - hammerCmd = svc.Cmd(hammerCode) - acceptHammerCode = svc.Accepted(hammerCode) -) - -func (g *Manager) start() { - // Now label this and all goroutines created by this goroutine with the gracefulLifecycle manager - pprof.SetGoroutineLabels(g.managerCtx) - defer pprof.SetGoroutineLabels(g.ctx) - - if skip, _ := strconv.ParseBool(os.Getenv("SKIP_MINWINSVC")); skip { - log.Trace("Skipping SVC check as SKIP_MINWINSVC is set") - return - } - - // Make SVC process - run := svc.Run - - //lint:ignore SA1019 We use IsAnInteractiveSession because IsWindowsService has a different permissions profile - isAnInteractiveSession, err := svc.IsAnInteractiveSession() //nolint:staticcheck - if err != nil { - log.Error("Unable to ascertain if running as an Windows Service: %v", err) - return - } - if isAnInteractiveSession { - log.Trace("Not running a service ... using the debug SVC manager") - run = debug.Run - } - go func() { - _ = run(WindowsServiceName, g) - }() -} - -// Execute makes Manager implement svc.Handler -func (g *Manager) Execute(args []string, changes <-chan svc.ChangeRequest, status chan<- svc.Status) (svcSpecificEC bool, exitCode uint32) { - if setting.StartupTimeout > 0 { - status <- svc.Status{State: svc.StartPending, WaitHint: uint32(setting.StartupTimeout / time.Millisecond)} - } else { - status <- svc.Status{State: svc.StartPending} - } - - log.Trace("Awaiting server start-up") - // Now need to wait for everything to start... - if !g.awaitServer(setting.StartupTimeout) { - log.Trace("... start-up failed ... Stopped") - return false, 1 - } - - log.Trace("Sending Running state to SVC") - - // We need to implement some way of svc.AcceptParamChange/svc.ParamChange - status <- svc.Status{ - State: svc.Running, - Accepts: svc.AcceptStop | svc.AcceptShutdown | acceptHammerCode, - } - - log.Trace("Started") - - waitTime := 30 * time.Second - -loop: - for { - select { - case <-g.ctx.Done(): - log.Trace("Shutting down") - g.DoGracefulShutdown() - waitTime += setting.GracefulHammerTime - break loop - case <-g.shutdownRequested: - log.Trace("Shutting down") - waitTime += setting.GracefulHammerTime - break loop - case change := <-changes: - switch change.Cmd { - case svc.Interrogate: - log.Trace("SVC sent interrogate") - status <- change.CurrentStatus - case svc.Stop, svc.Shutdown: - log.Trace("SVC requested shutdown - shutting down") - g.DoGracefulShutdown() - waitTime += setting.GracefulHammerTime - break loop - case hammerCode: - log.Trace("SVC requested hammer - shutting down and hammering immediately") - g.DoGracefulShutdown() - g.DoImmediateHammer() - break loop - default: - log.Debug("Unexpected control request: %v", change.Cmd) - } - } - } - - log.Trace("Sending StopPending state to SVC") - status <- svc.Status{ - State: svc.StopPending, - WaitHint: uint32(waitTime / time.Millisecond), - } - -hammerLoop: - for { - select { - case change := <-changes: - switch change.Cmd { - case svc.Interrogate: - log.Trace("SVC sent interrogate") - status <- change.CurrentStatus - case svc.Stop, svc.Shutdown, hammerCmd: - log.Trace("SVC requested hammer - hammering immediately") - g.DoImmediateHammer() - break hammerLoop - default: - log.Debug("Unexpected control request: %v", change.Cmd) - } - case <-g.hammerCtx.Done(): - break hammerLoop - } - } - - log.Trace("Stopped") - return false, 0 -} - -func (g *Manager) awaitServer(limit time.Duration) bool { - c := make(chan struct{}) - go func() { - g.createServerCond.L.Lock() - for { - if g.createdServer >= numberOfServersToCreate { - g.createServerCond.L.Unlock() - close(c) - return - } - select { - case <-g.IsShutdown(): - g.createServerCond.L.Unlock() - return - default: - } - g.createServerCond.Wait() - } - }() - - var tc <-chan time.Time - if limit > 0 { - tc = time.After(limit) - } - select { - case <-c: - return true // completed normally - case <-tc: - return false // timed out - case <-g.IsShutdown(): - g.createServerCond.Signal() - return false - } -} - -func (g *Manager) notify(msg systemdNotifyMsg) { - // Windows doesn't use systemd to notify -} - -func KillParent() { - // Windows doesn't need to "kill parent" because there is no graceful restart -} diff --git a/modules/graceful/net_windows.go b/modules/graceful/net_windows.go deleted file mode 100644 index 9667bd4d13..0000000000 --- a/modules/graceful/net_windows.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2019 The Gitea Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -// This code is heavily inspired by the archived gofacebook/gracenet/net.go handler - -//go:build windows - -package graceful - -import "net" - -// DefaultGetListener obtains a listener for the local network address. -// On windows this is basically just a shim around net.Listen. -func DefaultGetListener(network, address string) (net.Listener, error) { - // Add a deferral to say that we've tried to grab a listener - defer GetManager().InformCleanup() - - return net.Listen(network, address) -} diff --git a/modules/process/manager_windows.go b/modules/process/manager_windows.go deleted file mode 100644 index 44a84f2203..0000000000 --- a/modules/process/manager_windows.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2022 The Gitea Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -//go:build windows - -package process - -import ( - "os/exec" -) - -// SetSysProcAttribute sets the common SysProcAttrs for commands -func SetSysProcAttribute(cmd *exec.Cmd) { - // Do nothing -} diff --git a/modules/util/file_windows.go b/modules/util/file_windows.go deleted file mode 100644 index 77a33d3c49..0000000000 --- a/modules/util/file_windows.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2022 The Gitea Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -//go:build windows - -package util - -import ( - "os" -) - -func ApplyUmask(f string, newMode os.FileMode) error { - // do nothing for Windows, because Windows doesn't use umask - return nil -} diff --git a/routers/private/manager_windows.go b/routers/private/manager_windows.go deleted file mode 100644 index f1b9365f52..0000000000 --- a/routers/private/manager_windows.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2020 The Gitea Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -//go:build windows - -package private - -import ( - "net/http" - - "code.gitea.io/gitea/modules/graceful" - "code.gitea.io/gitea/modules/private" - "code.gitea.io/gitea/services/context" -) - -// Restart is not implemented for Windows based servers as they can't fork -func Restart(ctx *context.PrivateContext) { - ctx.JSON(http.StatusNotImplemented, private.Response{ - UserMsg: "windows servers cannot be gracefully restarted - shutdown and restart manually", - }) -} - -// Shutdown causes the server to perform a graceful shutdown -func Shutdown(ctx *context.PrivateContext) { - graceful.GetManager().DoGracefulShutdown() - ctx.PlainText(http.StatusOK, "success") -} diff --git a/services/auth/sspiauth_windows.go b/services/auth/sspiauth_windows.go deleted file mode 100644 index 093caaed33..0000000000 --- a/services/auth/sspiauth_windows.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2023 The Gitea Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -//go:build windows - -package auth - -import ( - "github.com/quasoft/websspi" -) - -type SSPIUserInfo = websspi.UserInfo - -func sspiAuthInit() error { - var err error - config := websspi.NewConfig() - sspiAuth, err = websspi.New(config) - return err -}