This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / spindle / storage / storage.go
1.2 kB 52 lines
1package storage 2 3import ( 4 "context" 5 "errors" 6 "fmt" 7 "io" 8 "path/filepath" 9 "regexp" 10 "strings" 11 12 "tangled.org/core/spindle/config" 13) 14 15var ErrNotExist = errors.New("storage: object does not exist") 16 17type Storage interface { 18 Get(ctx context.Context, key string) (io.ReadCloser, error) 19 Put(ctx context.Context, key string, r io.Reader) error 20 Delete(ctx context.Context, key string) error 21} 22 23var keyRe = regexp.MustCompile(`^[A-Za-z0-9][A-Za-z0-9._:/@%+=-]{0,511}$`) 24 25func ValidateKey(key string) error { 26 if !keyRe.MatchString(key) { 27 return fmt.Errorf("storage: invalid key %q", key) 28 } 29 for _, seg := range strings.Split(key, "/") { 30 if seg == "" || seg == "." || seg == ".." { 31 return fmt.Errorf("storage: invalid key %q", key) 32 } 33 } 34 return nil 35} 36 37func New(ctx context.Context, cfg *config.Config) (Storage, error) { 38 switch cfg.Cache.Backend { 39 case "": 40 return nil, nil 41 case "disk": 42 dir := cfg.Cache.DiskDir 43 if dir == "" { 44 dir = filepath.Join(filepath.Dir(cfg.Server.DBPath), "cache") 45 } 46 return NewDisk(dir) 47 case "s3": 48 return NewS3(ctx, cfg.Cache.S3Bucket, cfg.Cache.S3Prefix) 49 default: 50 return nil, fmt.Errorf("storage: unknown backend %q", cfg.Cache.Backend) 51 } 52}