| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // Copyright (c) Tailscale Inc & AUTHORS
- // SPDX-License-Identifier: BSD-3-Clause
- package feature
- import (
- "net/http"
- "net/url"
- "os"
- "sync"
- "tailscale.com/types/logger"
- "tailscale.com/types/persist"
- )
- // HookCanAutoUpdate is a hook for the clientupdate package
- // to conditionally initialize.
- var HookCanAutoUpdate Hook[func() bool]
- var testAllowAutoUpdate = sync.OnceValue(func() bool {
- return os.Getenv("TS_TEST_ALLOW_AUTO_UPDATE") == "1"
- })
- // CanAutoUpdate reports whether the current binary is built with auto-update
- // support and, if so, whether the current platform supports it.
- func CanAutoUpdate() bool {
- if testAllowAutoUpdate() {
- return true
- }
- if f, ok := HookCanAutoUpdate.GetOk(); ok {
- return f()
- }
- return false
- }
- // HookProxyFromEnvironment is a hook for feature/useproxy to register
- // a function to use as http.ProxyFromEnvironment.
- var HookProxyFromEnvironment Hook[func(*http.Request) (*url.URL, error)]
- // HookProxyInvalidateCache is a hook for feature/useproxy to register
- // [tshttpproxy.InvalidateCache].
- var HookProxyInvalidateCache Hook[func()]
- // HookProxyGetAuthHeader is a hook for feature/useproxy to register
- // [tshttpproxy.GetAuthHeader].
- var HookProxyGetAuthHeader Hook[func(*url.URL) (string, error)]
- // HookProxySetSelfProxy is a hook for feature/useproxy to register
- // [tshttpproxy.SetSelfProxy].
- var HookProxySetSelfProxy Hook[func(...string)]
- // HookProxySetTransportGetProxyConnectHeader is a hook for feature/useproxy to register
- // [tshttpproxy.SetTransportGetProxyConnectHeader].
- var HookProxySetTransportGetProxyConnectHeader Hook[func(*http.Transport)]
- // HookTPMAvailable is a hook that reports whether a TPM device is supported
- // and available.
- var HookTPMAvailable Hook[func() bool]
- var HookGenerateAttestationKeyIfEmpty Hook[func(p *persist.Persist, logf logger.Logf) (bool, error)]
- // TPMAvailable reports whether a TPM device is supported and available.
- func TPMAvailable() bool {
- if f, ok := HookTPMAvailable.GetOk(); ok {
- return f()
- }
- return false
- }
- // HookHardwareAttestationAvailable is a hook that reports whether hardware
- // attestation is supported and available.
- var HookHardwareAttestationAvailable Hook[func() bool]
- // HardwareAttestationAvailable reports whether hardware attestation is
- // supported and available (TPM on Windows/Linux, Secure Enclave on macOS|iOS,
- // KeyStore on Android)
- func HardwareAttestationAvailable() bool {
- if f, ok := HookHardwareAttestationAvailable.GetOk(); ok {
- return f()
- }
- return false
- }
|