main pico / pkg / apps / pgs / feature_flag.go
Eric Bower  ·  2026-08-17
 1package pgs
 2
 3import (
 4	"fmt"
 5	"strings"
 6
 7	pgsdb "github.com/picosh/pico/pkg/apps/pgs/db"
 8	"github.com/picosh/pico/pkg/db"
 9)
10
11func setFeatureLimits(ff *db.FeatureFlag, cfg *PgsConfig) {
12	ff.Data.StorageMax = ff.FindStorageMax(cfg.MaxSize)
13	ff.Data.FileMax = ff.FindFileMax(cfg.MaxAssetSize)
14	ff.Data.SpecialFileMax = ff.FindSpecialFileMax(cfg.MaxSpecialFileSize)
15}
16
17func findFeatureFlag(dbpool pgsdb.PgsDB, cfg *PgsConfig, userID string) (*db.FeatureFlag, error) {
18	ff, err := dbpool.FindFeature(userID, "plus")
19	if err == nil {
20		if ff.IsValid() {
21			setFeatureLimits(ff, cfg)
22			return ff, nil
23		}
24		err = fmt.Errorf("your pico+ has expired")
25	}
26
27	ffPgs, pgsErr := dbpool.FindFeature(userID, "pgs")
28	if pgsErr == nil {
29		if ffPgs.IsValid() {
30			setFeatureLimits(ffPgs, cfg)
31			return ffPgs, nil
32		}
33		pgsErr = fmt.Errorf("your pgs access has expired")
34	}
35
36	if err != nil && strings.Contains(err.Error(), "expired") {
37		return nil, err
38	}
39	if pgsErr != nil {
40		return nil, pgsErr
41	}
42	return nil, err
43}