Ctrl K
ComunidadGuías…

store.go

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

Archivo original ↗Preguntar a KiBot
package main

import (
	"context"
	"encoding/json"
	"log/slog"

	"github.com/sophotechlabs/spinoza/internal/api"
	"github.com/sophotechlabs/spinoza/internal/baseline"
	settingsstore "github.com/sophotechlabs/spinoza/internal/settings"
	"github.com/sophotechlabs/spinoza/internal/store"
)

func settingsStore(ctx context.Context) *settingsstore.Store {
	path, err := settingsstore.DefaultPath()
	if err != nil {
		slog.Warn("settings will not be kept", "error", err)
		return settingsstore.Memory()
	}
	held, openErr := settingsstore.Open(ctx, path)
	if openErr != nil {
		slog.Warn("the stored settings could not be read", "error", openErr)
	}
	return held
}

func baselineStore() *baseline.Store {
	dir, err := baseline.DefaultDir()
	if err != nil {
		slog.Warn("audit baselines will not be kept", "error", err)
		return baseline.Open("")
	}
	return baseline.Open(dir)
}

func historyStore(ctx context.Context) *store.Store {
	path, err := store.DefaultPath()
	if err != nil {
		slog.Warn("spinoza will not record what it does", "error", err)
	}
	held, openErr := store.Open(ctx, path)
	if openErr != nil {
		slog.Warn("spinoza will not record what it does", "error", openErr)
	}
	return held
}

func allowNodeShell(flagged bool, held *settingsstore.Store) func() bool {
	if flagged {
		return func() bool { return true }
	}
	return func() bool {
		return held.On(settingsstore.NodeShellKey)
	}
}

func readableNamespaces(held *settingsstore.Store) func() map[string][]string {
	return func() map[string][]string {
		return parseNamespaces(held.All()[settingsstore.NamespacesKey])
	}
}

func parseNamespaces(raw string) map[string][]string {
	if raw == "" {
		return nil
	}
	var held map[string][]string
	err := json.Unmarshal([]byte(raw), &held)
	if err != nil {
		return nil
	}
	return held
}

func customColumns(held *settingsstore.Store) func() map[string][]api.CustomColumn {
	return func() map[string][]api.CustomColumn {
		return api.ParseColumns(held.All()[settingsstore.ColumnsKey])
	}
}