diff --git a/hscontrol/types/common.go b/hscontrol/types/common.go index 32ad8a67..e3e25fad 100644 --- a/hscontrol/types/common.go +++ b/hscontrol/types/common.go @@ -3,8 +3,10 @@ package types import ( "context" "errors" + "fmt" "time" + "github.com/juanfont/headscale/hscontrol/util" "tailscale.com/tailcfg" "tailscale.com/util/ctxkey" ) @@ -123,3 +125,32 @@ func NotifyCtx(ctx context.Context, origin, hostname string) context.Context { ctx2 = NotifyHostnameKey.WithValue(ctx2, hostname) return ctx2 } + +const RegistrationIDLength = 24 + +type RegistrationID string + +func NewRegistrationID() (RegistrationID, error) { + rid, err := util.GenerateRandomStringURLSafe(RegistrationIDLength) + if err != nil { + return "", err + } + + return RegistrationID(rid), nil +} + +func RegistrationIDFromString(str string) (RegistrationID, error) { + if len(str) != RegistrationIDLength { + return "", fmt.Errorf("registration ID must be %d characters long", RegistrationIDLength) + } + return RegistrationID(str), nil +} + +func (r RegistrationID) String() string { + return string(r) +} + +type RegisterNode struct { + Node Node + Registered chan struct{} +}