// Copyright (C) 2017 The Syncthing Authors.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at https://mozilla.org/MPL/2.0/.

package syncthing

import "syscall"

// https://docs.microsoft.com/windows/win32/secauthz/well-known-sids
const securityLocalSystemRID = "S-1-5-18"

func isSuperUser() bool {
	tok, err := syscall.OpenCurrentProcessToken()
	if err != nil {
		l.Debugln("OpenCurrentProcessToken:", err)
		return false
	}
	defer tok.Close()

	user, err := tok.GetTokenUser()
	if err != nil {
		l.Debugln("GetTokenUser:", err)
		return false
	}

	if user.User.Sid == nil {
		l.Debugln("sid is nil")
		return false
	}

	sid, err := user.User.Sid.String()
	if err != nil {
		l.Debugln("Sid.String():", err)
		return false
	}

	l.Debugf("SID: %q", sid)
	return sid == securityLocalSystemRID
}
