package main import ( log "log" "os" "go.temporal.io/server/common/authorization" "go.temporal.io/server/common/config" templog "go.temporal.io/server/common/log" "go.temporal.io/server/temporal" ) func main() { configEnv := envOrDefault("TEMPORAL_CONFIG_ENV", "development") configDir := envOrDefault("TEMPORAL_CONFIG_DIR", "./config") cfg, err := config.LoadConfig(configEnv, configDir, "") if err != nil { log.Fatalf("load config: %v", err) } logger := templog.NewCLILogger() authorizer, err := authorization.GetAuthorizerFromConfig(&cfg.Global.Authorization) if err != nil { log.Fatalf("authorizer: %v", err) } claimMapper, err := authorization.GetClaimMapperFromConfig(&cfg.Global.Authorization, logger) if err != nil { log.Fatalf("claim mapper: %v", err) } audienceMapper, err := authorization.GetAudienceMapperFromConfig(&cfg.Global.Authorization) if err != nil { log.Fatalf("audience mapper: %v", err) } srv, err := temporal.NewServer( temporal.ForServices(temporal.DefaultServices), temporal.WithConfig(cfg), temporal.WithLogger(logger), temporal.InterruptOn(temporal.InterruptCh()), temporal.WithAuthorizer(authorizer), temporal.WithClaimMapper(func(*config.Config) authorization.ClaimMapper { return claimMapper }), temporal.WithAudienceGetter(func(*config.Config) authorization.JWTAudienceMapper { return audienceMapper }), ) if err != nil { log.Fatalf("setup server: %v", err) } defer srv.Stop() if err := srv.Start(); err != nil { log.Fatalf("start server: %v", err) } } func envOrDefault(key, fallback string) string { if value := os.Getenv(key); value != "" { return value } return fallback }