Ctrl K
ComunidadGuías…

cli/dockercompose/auth.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package dockercompose

import (
	"fmt"

	"github.com/nhost/be/services/mimir/model"
	"github.com/nhost/be/services/mimir/schema/appconfig"
)

func traefikHostMatch(name string) string {
	return fmt.Sprintf(
		"(HostRegexp(`^.+\\.%s\\.local\\.nhost\\.run$`) || Host(`local.%s.nhost.run`))", name, name,
	)
}

func authPatchPre022(svc Service, useTLS bool) *Service {
	svc.Labels = Ingresses{
		{
			Name:    "auth",
			TLS:     useTLS,
			Rule:    traefikHostMatch("auth"),
			Port:    authPort,
			Rewrite: nil,
		},
	}.Labels()

	return &svc
}

func auth( //nolint:funlen
	cfg *model.ConfigConfig,
	subdomain string,
	httpPort uint,
	useTLS bool,
	nhostFolder string,
	exposePort uint,
) (*Service, error) {
	if exposePort != 0 {
		httpPort = exposePort
	}

	envars, err := appconfig.HasuraAuthEnv(
		cfg,
		"http://graphql:8080/v1/graphql",
		URL(subdomain, "auth", httpPort, useTLS && exposePort == 0)+"/v1",
		"postgres://nhost_hasura@postgres:5432/local",
		"postgres://nhost_auth_admin@postgres:5432/local",
		&model.ConfigSmtp{
			User:     new("user"),
			Password: new("password"),
			Sender:   new("auth@example.com"),
			Host:     new("mailhog"),
			Port:     new(uint16(1025)), //nolint:mnd
			Secure:   new(false),
			Method:   new("LOGIN"),
		},
		false,
		false,
		"00000000-0000-0000-0000-000000000000",
		"5181f67e2844e4b60d571fa346cac9c37fc00d1ff519212eae6cead138e639ba",
	)
	if err != nil {
		return nil, fmt.Errorf("failed to get hasura env vars: %w", err)
	}

	env := make(map[string]string, len(envars))
	for _, v := range envars {
		env[v.Name] = v.Value
	}

	svc := &Service{
		Image: "nhost/auth:" + *cfg.Auth.Version,
		DependsOn: map[string]DependsOn{
			"graphql": {
				Condition: "service_healthy",
			},
			"postgres": {
				Condition: "service_healthy",
			},
		},
		EntryPoint:  nil,
		Command:     nil,
		Environment: env,
		ExtraHosts:  extraHosts,
		HealthCheck: &HealthCheck{
			Test:        []string{"CMD", "wget", "--spider", "-S", "http://localhost:4000/healthz"},
			Timeout:     "60s",
			Interval:    "5s",
			StartPeriod: "60s",
		},
		Labels: Ingresses{
			{
				Name: "auth",
				TLS:  useTLS,
				Rule: traefikHostMatch("auth") + " && PathPrefix(`/v1`)",
				Port: authPort,
				Rewrite: &Rewrite{
					Regex:       "/v1(/|$$)(.*)",
					Replacement: "/$$2",
				},
			},
		}.Labels(),
		Networks: networkAliases("hasura-auth-service"),
		Ports:    ports(exposePort, authPort),
		Restart:  "always",
		User:     nil,
		Volumes: []Volume{
			{
				Type:     "bind",
				Source:   nhostFolder + "/emails",
				Target:   "/app/email-templates",
				ReadOnly: new(false),
			},
		},
		WorkingDir: nil,
	}

	if *cfg.Auth.Version != "0.0.0-dev" &&
		appconfig.CompareVersions(*cfg.Auth.Version, "0.22.0") >= 0 {
		svc = authPatchPre022(*svc, useTLS)
	}

	return svc, nil
}