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}
config.gno
1.59 Kb ยท 85 lines