Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions app.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ type App struct {
// DefaultAuthKey is the default auth key to use for Tailscale if no other auth key is specified.
DefaultAuthKey string `json:"auth_key,omitempty" caddy:"namespace=tailscale.auth_key"`

// ControlURL specifies the default control URL to use for nodes.
ControlURL string `json:"control_url,omitempty" caddy:"namespace=tailscale.control_url"`

// Ephemeral specifies whether Tailscale nodes should be registered as ephemeral.
Ephemeral bool `json:"ephemeral,omitempty" caddy:"namespace=tailscale.ephemeral"`

Expand All @@ -38,6 +41,9 @@ type Node struct {
// AuthKey is the Tailscale auth key used to register the node.
AuthKey string `json:"auth_key,omitempty" caddy:"namespace=auth_key"`

// ControlURL specifies the control URL to use for the node.
ControlURL string `json:"control_url,omitempty" caddy:"namespace=tailscale.control_url"`

// Ephemeral specifies whether the node should be registered as ephemeral.
Ephemeral bool `json:"ephemeral,omitempty" caddy:"namespace=tailscale.ephemeral"`

Expand Down Expand Up @@ -82,6 +88,11 @@ func parseAppConfig(d *caddyfile.Dispenser, _ any) (any, error) {
return nil, d.ArgErr()
}
app.DefaultAuthKey = d.Val()
case "control_url":
if !d.NextArg() {
return nil, d.ArgErr()
}
app.ControlURL = d.Val()
case "ephemeral":
app.Ephemeral = true
default:
Expand Down Expand Up @@ -119,6 +130,11 @@ func parseNodeConfig(d *caddyfile.Dispenser) (Node, error) {
return node, segment.ArgErr()
}
node.AuthKey = segment.Val()
case "control_url":
if !segment.NextArg() {
return node, segment.ArgErr()
}
node.ControlURL = segment.Val()
case "ephemeral":
node.Ephemeral = true
default:
Expand Down
22 changes: 13 additions & 9 deletions module.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,10 @@ func getNode(ctx caddy.Context, name string) (*tailscaleNode, error) {
}

if s.AuthKey, err = getAuthKey(name, app); err != nil {
app.logger.Warn("error parsing auth key", zap.Error(err))
return nil, err
}
if s.ControlURL, err = getControlURL(name, app); err != nil {
return nil, err
}

if name != "" {
Expand Down Expand Up @@ -142,10 +145,6 @@ func getNode(ctx caddy.Context, name string) (*tailscaleNode, error) {
var repl = caddy.NewReplacer()

func getAuthKey(name string, app *App) (string, error) {
if app == nil {
return "", nil
}

if node, ok := app.Nodes[name]; ok {
if node.AuthKey != "" {
return repl.ReplaceOrErr(node.AuthKey, true, true)
Expand All @@ -167,14 +166,19 @@ func getAuthKey(name string, app *App) (string, error) {
return os.Getenv("TS_AUTHKEY"), nil
}

func getEphemeral(name string, app *App) bool {
if app == nil {
return false
func getControlURL(name string, app *App) (string, error) {
if node, ok := app.Nodes[name]; ok {
if node.ControlURL != "" {
return repl.ReplaceOrErr(node.ControlURL, true, true)
}
}
return repl.ReplaceOrErr(app.ControlURL, true, true)
}

func getEphemeral(name string, app *App) bool {
if node, ok := app.Nodes[name]; ok {
return node.Ephemeral
}

return app.Ephemeral
}

Expand Down