summaryrefslogtreecommitdiffhomepage
path: root/ipn/ipnauth/test_actor.go
blob: 80c5fcc8a6328b39eaf5ad9162c02ec70fd74056 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// Copyright (c) Tailscale Inc & AUTHORS
// SPDX-License-Identifier: BSD-3-Clause

package ipnauth

import (
	"cmp"
	"context"
	"errors"

	"tailscale.com/ipn"
)

var _ Actor = (*TestActor)(nil)

// TestActor is an [Actor] used exclusively for testing purposes.
type TestActor struct {
	UID         ipn.WindowsUserID // OS-specific UID of the user, if the actor represents a local Windows user
	Name        string            // username associated with the actor, or ""
	NameErr     error             // error to be returned by [TestActor.Username]
	CID         ClientID          // non-zero if the actor represents a connected LocalAPI client
	Ctx         context.Context   // context associated with the actor
	LocalSystem bool              // whether the actor represents the special Local System account on Windows
	LocalAdmin  bool              // whether the actor has local admin access
}

// UserID implements [Actor].
func (a *TestActor) UserID() ipn.WindowsUserID { return a.UID }

// Username implements [Actor].
func (a *TestActor) Username() (string, error) { return a.Name, a.NameErr }

// ClientID implements [Actor].
func (a *TestActor) ClientID() (_ ClientID, ok bool) { return a.CID, a.CID != NoClientID }

// Context implements [Actor].
func (a *TestActor) Context() context.Context { return cmp.Or(a.Ctx, context.Background()) }

// CheckProfileAccess implements [Actor].
func (a *TestActor) CheckProfileAccess(profile ipn.LoginProfileView, _ ProfileAccess, _ AuditLogFunc) error {
	return errors.New("profile access denied")
}

// IsLocalSystem implements [Actor].
func (a *TestActor) IsLocalSystem() bool { return a.LocalSystem }

// IsLocalAdmin implements [Actor].
func (a *TestActor) IsLocalAdmin(operatorUID string) bool { return a.LocalAdmin }