term/event/custodial_registration.go

57 lines
1.4 KiB
Go
Raw Normal View History

2024-10-24 17:00:46 +02:00
package event
import (
"context"
2024-10-24 17:00:46 +02:00
geEvent "github.com/grassrootseconomics/eth-tracker/pkg/event"
2024-11-04 00:53:36 +01:00
"git.defalsify.org/vise.git/persist"
"git.grassecon.net/urdt/ussd/common"
"git.grassecon.net/term/lookup"
2024-10-24 17:00:46 +02:00
)
const (
evReg = "CUSTODIAL_REGISTRATION"
2024-11-04 00:53:36 +01:00
accountCreatedFlag = 9
2024-10-24 17:00:46 +02:00
)
2024-11-03 20:04:44 +01:00
// fields used for handling custodial registration event.
2024-10-24 17:00:46 +02:00
type eventCustodialRegistration struct {
Account string
2024-10-24 17:00:46 +02:00
}
2024-11-03 20:04:44 +01:00
// attempt to coerce event as custodial registration.
2024-10-24 17:00:46 +02:00
func asCustodialRegistrationEvent(gev *geEvent.Event) (*eventCustodialRegistration, bool) {
var ok bool
var ev eventCustodialRegistration
if gev.TxType != evReg {
return nil, false
}
pl := gev.Payload
ev.Account, ok = pl["account"].(string)
2024-10-24 17:00:46 +02:00
if !ok {
return nil, false
}
2024-11-03 01:34:28 +01:00
logg.Debugf("parsed ev", "pl", pl, "ev", ev)
2024-10-24 17:00:46 +02:00
return &ev, true
}
2024-11-03 20:04:44 +01:00
// handle custodial registration.
2024-11-04 00:53:36 +01:00
//
// TODO: implement account created in userstore instead, so that
// the need for persister and state use here is eliminated (it
// introduces concurrency risks)
func handleCustodialRegistration(ctx context.Context, store *common.UserDataStore, pr *persist.Persister, ev *eventCustodialRegistration) error {
identity, err := lookup.IdentityFromAddress(ctx, store, ev.Account)
if err != nil {
return err
}
2024-11-04 00:53:36 +01:00
err = pr.Load(identity.SessionId)
if err != nil {
return err
}
st := pr.GetState()
st.SetFlag(accountCreatedFlag)
return pr.Save(identity.SessionId)
2024-10-24 17:00:46 +02:00
}