package components import ( "bytes" "fmt" "github.com/maxence-charriere/go-app/v9/pkg/app" "go.mills.io/saltyim" ) const ( saltyIdentityKey = "salty-identity" saltyStateKey = "salty-state" ) func GetIdentityFromState(ctx app.Context) (identity *saltyim.Identity, err error) { var identityString string ctx.GetState(saltyIdentityKey, &identityString) if identityString != "" { return saltyim.GetIdentity(saltyim.WithIdentityBytes([]byte(identityString))) } return nil, fmt.Errorf("missing state at key %q", saltyIdentityKey) } func SetIdentityToState(ctx app.Context, identity *saltyim.Identity) (err error) { if identity == nil || identity.Contents() == nil || len(identity.Contents()) == 0 { return fmt.Errorf("no identity contents") } ctx.SetState(saltyIdentityKey, string(identity.Contents()), app.Persist, app.Encrypt) return } func GetStateFromState(ctx app.Context) (state *saltyim.State, err error) { var stateJson string ctx.GetState(saltyStateKey, &stateJson) if stateJson == "" { return nil, fmt.Errorf("no state found") } return saltyim.LoadState(bytes.NewBufferString(stateJson)) } func SetStateToState(ctx app.Context, state *saltyim.State) (err error) { jsonBytes, err := state.Bytes() if err != nil { return fmt.Errorf("error serializing state: %w", err) } ctx.SetState(saltyStateKey, string(jsonBytes), app.Persist, app.Encrypt) return }