From d7aa109dc6a6620e711a8b406833f383154df3a2 Mon Sep 17 00:00:00 2001
From: 0ko <0ko@noreply.codeberg.org>
Date: Thu, 19 Sep 2024 20:29:34 +0500
Subject: [PATCH] chore: remove some Windows-specific files

---
 go.mod                              |   1 -
 go.sum                              |   5 -
 modules/graceful/manager_windows.go | 190 ----------------------------
 modules/graceful/net_windows.go     |  19 ---
 modules/process/manager_windows.go  |  15 ---
 modules/util/file_windows.go        |  15 ---
 routers/private/manager_windows.go  |  27 ----
 services/auth/sspiauth_windows.go   |  19 ---
 8 files changed, 291 deletions(-)
 delete mode 100644 modules/graceful/manager_windows.go
 delete mode 100644 modules/graceful/net_windows.go
 delete mode 100644 modules/process/manager_windows.go
 delete mode 100644 modules/util/file_windows.go
 delete mode 100644 routers/private/manager_windows.go
 delete mode 100644 services/auth/sspiauth_windows.go

diff --git a/go.mod b/go.mod
index f8f62b0ca8..a5aa483563 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 dd7370ab28..a093c8a9e1 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
-}