Skip to content

Commit

Permalink
Headscale: Added an option to set an Access-Control-Allow-Origin resp…
Browse files Browse the repository at this point in the history
…onse header to enable Cross-Origin Resource Sharing (CORS)
  • Loading branch information
Jisse-Meruma committed Dec 18, 2024
1 parent ccc895b commit dfad6a1
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 0 deletions.
7 changes: 7 additions & 0 deletions config-example.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,13 @@ grpc_listen_addr: 127.0.0.1:50443
# are doing.
grpc_allow_insecure: false

# The Access-Control-Allow-Origin header specifies which origins are allowed to access resources.
# Options:
# - "*" to allow access from any origin (not recommended for sensitive data).
# - "http://example.com" to only allow access from a specific origin.
# - "" to disable Cross-Origin Resource Sharing (CORS).
access_control_allow_origin: ""

# The Noise section includes specific configuration for the
# TS2021 Noise protocol
noise:
Expand Down
11 changes: 11 additions & 0 deletions hscontrol/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -454,10 +454,21 @@ func (h *Headscale) ensureUnixSocketIsAbsent() error {
return os.Remove(h.cfg.UnixSocket)
}

func (h *Headscale) corsHeadersMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", h.cfg.AccessControlAllowOrigins)
next.ServeHTTP(w, r)
})
}

func (h *Headscale) createRouter(grpcMux *grpcRuntime.ServeMux) *mux.Router {
router := mux.NewRouter()
router.Use(prometheusMiddleware)

if h.cfg.AccessControlAllowOrigins != "" {
router.Use(h.corsHeadersMiddleware)
}

router.HandleFunc(ts2021UpgradePath, h.NoiseUpgradeHandler).Methods(http.MethodPost, http.MethodGet)

router.HandleFunc("/health", h.HealthHandler).Methods(http.MethodGet)
Expand Down
6 changes: 6 additions & 0 deletions hscontrol/types/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ type Config struct {
Log LogConfig
DisableUpdateCheck bool

AccessControlAllowOrigins string

Database DatabaseConfig

DERP DERPConfig
Expand Down Expand Up @@ -303,6 +305,8 @@ func LoadConfig(path string, isFile bool) error {
viper.SetDefault("tuning.batch_change_delay", "800ms")
viper.SetDefault("tuning.node_mapsession_buffered_chan_size", 30)

viper.SetDefault("access_control_allow_origin", "")

viper.SetDefault("prefixes.allocation", string(IPAllocationStrategySequential))

if err := viper.ReadInConfig(); err != nil {
Expand Down Expand Up @@ -868,6 +872,8 @@ func LoadServerConfig() (*Config, error) {
GRPCAllowInsecure: viper.GetBool("grpc_allow_insecure"),
DisableUpdateCheck: false,

AccessControlAllowOrigins: viper.GetString("access_control_allow_origin"),

PrefixV4: prefix4,
PrefixV6: prefix6,
IPAllocation: IPAllocationStrategy(alloc),
Expand Down

0 comments on commit dfad6a1

Please sign in to comment.