1package database
2
3import (
4 "context"
5
6 "github.com/charmbracelet/soft-serve/pkg/access"
7 "github.com/charmbracelet/soft-serve/pkg/db"
8 "github.com/charmbracelet/soft-serve/pkg/store"
9)
10
11type settingsStore struct{}
12
13var _ store.SettingStore = (*settingsStore)(nil)
14
15// GetAllowKeylessAccess implements store.SettingStore.
16func (*settingsStore) GetAllowKeylessAccess(ctx context.Context, tx db.Handler) (bool, error) {
17 var allow bool
18 query := tx.Rebind(`SELECT value FROM settings WHERE "key" = 'allow_keyless'`)
19 if err := tx.GetContext(ctx, &allow, query); err != nil {
20 return false, db.WrapError(err) //nolint:wrapcheck
21 }
22 return allow, nil
23}
24
25// GetAnonAccess implements store.SettingStore.
26func (*settingsStore) GetAnonAccess(ctx context.Context, tx db.Handler) (access.AccessLevel, error) {
27 var level string
28 query := tx.Rebind(`SELECT value FROM settings WHERE "key" = 'anon_access'`)
29 if err := tx.GetContext(ctx, &level, query); err != nil {
30 return access.NoAccess, db.WrapError(err) //nolint:wrapcheck
31 }
32 return access.ParseAccessLevel(level), nil
33}
34
35// SetAllowKeylessAccess implements store.SettingStore.
36func (*settingsStore) SetAllowKeylessAccess(ctx context.Context, tx db.Handler, allow bool) error {
37 query := tx.Rebind(`UPDATE settings SET value = ?, updated_at = CURRENT_TIMESTAMP WHERE "key" = 'allow_keyless'`)
38 _, err := tx.ExecContext(ctx, query, allow)
39 return db.WrapError(err) //nolint:wrapcheck
40}
41
42// SetAnonAccess implements store.SettingStore.
43func (*settingsStore) SetAnonAccess(ctx context.Context, tx db.Handler, level access.AccessLevel) error {
44 query := tx.Rebind(`UPDATE settings SET value = ?, updated_at = CURRENT_TIMESTAMP WHERE "key" = 'anon_access'`)
45 _, err := tx.ExecContext(ctx, query, level.String())
46 return db.WrapError(err) //nolint:wrapcheck
47}