config.gno

1.59 Kb ยท 85 lines
 1package config
 2
 3import (
 4	"errors"
 5	"std"
 6	"strings"
 7	"time"
 8
 9	"gno.land/p/demo/avl"
10	"gno.land/p/demo/ownable"
11	"gno.land/p/demo/seqid"
12)
13
14var (
15	cfgID   seqid.ID
16	configs = avl.NewTree()
17
18	absPath = strings.TrimPrefix(std.CurrentRealm().PkgPath(), std.ChainDomain())
19
20	// SafeObjects
21	OwnableMain   = ownable.NewWithAddress("g125em6arxsnj49vx35f0n0z34putv5ty3376fg5")
22	OwnableBackup = ownable.NewWithAddress("g1lavlav7zwsjqlzzl3qdl3nl242qtf638vnhdjh")
23
24	ErrUnauthorized = errors.New("leon's config: unauthorized")
25)
26
27type Config struct {
28	id      seqid.ID
29	name    string
30	lines   string
31	updated time.Time
32}
33
34func AddConfig(name, lines string) {
35	if !IsAuthorized(std.PreviousRealm().Address()) {
36		panic(ErrUnauthorized)
37	}
38
39	id := cfgID.Next()
40	configs.Set(id.String(), Config{
41		id:      id,
42		name:    name,
43		lines:   lines,
44		updated: time.Now(),
45	})
46}
47
48func EditConfig(id string, name, lines string) {
49	if !IsAuthorized(std.PreviousRealm().Address()) {
50		panic(ErrUnauthorized)
51	}
52
53	raw, ok := configs.Remove(id)
54	if !ok {
55		panic("no config with that id")
56	}
57
58	conf := raw.(Config)
59	// Overwrites data
60	conf.lines = lines
61	conf.name = name
62	conf.updated = time.Now()
63}
64
65func RemoveConfig(id string) {
66	if !IsAuthorized(std.PreviousRealm().Address()) {
67		panic(ErrUnauthorized)
68	}
69
70	if _, ok := configs.Remove(id); !ok {
71		panic("no config with that id")
72	}
73}
74
75func UpdateBanner(newBanner string) {
76	if !IsAuthorized(std.PreviousRealm().Address()) {
77		panic(ErrUnauthorized)
78	}
79
80	banner = newBanner
81}
82
83func IsAuthorized(addr std.Address) bool {
84	return addr == OwnableMain.Owner() || addr == OwnableBackup.Owner()
85}