this repo has no description
1package labeling
2
3import (
4 "github.com/bluesky-social/indigo/atproto/atcrypto"
5 "github.com/bluesky-social/indigo/atproto/labeling"
6 "github.com/bluesky-social/indigo/atproto/syntax"
7)
8
9type LabelMaker struct {
10 DID syntax.DID
11 SigningKey atcrypto.PrivateKey
12}
13
14// CID is optional, use empty string if not known.
15func (ls *LabelMaker) CreateLabel(uri string, cid string, val string) (*labeling.Label, error) {
16 return ls.CreateExpiringLabel(uri, cid, val, "")
17}
18
19// CID is optional, use empty string if not known.
20func (ls *LabelMaker) CreateExpiringLabel(uri string, cid string, val string, exp syntax.Datetime) (*labeling.Label, error) {
21 // TODO: validate 'val'?
22 l := labeling.Label{
23 CreatedAt: syntax.DatetimeNow().String(),
24 SourceDID: ls.DID.String(),
25 URI: uri,
26 Val: val,
27 Version: labeling.ATPROTO_LABEL_VERSION,
28 }
29 if cid != "" {
30 // TODO: copy string?
31 l.CID = &cid
32 }
33 if exp != "" {
34 expStr := exp.String()
35 l.ExpiresAt = &expStr
36 }
37
38 if err := l.Sign(ls.SigningKey); err != nil {
39 return nil, err
40 }
41 return &l, nil
42}
43
44// CID is optional, use empty string if not known.
45func (ls *LabelMaker) NegateLabel(uri string, cid string, val string) (*labeling.Label, error) {
46 yes := true
47 l := labeling.Label{
48 CreatedAt: syntax.DatetimeNow().String(),
49 SourceDID: ls.DID.String(),
50 URI: uri,
51 Val: val,
52 Negated: &yes,
53 Version: labeling.ATPROTO_LABEL_VERSION,
54 }
55
56 if err := l.Sign(ls.SigningKey); err != nil {
57 return nil, err
58 }
59 return &l, nil
60}