91 lines
1.8 KiB
Go
Raw Normal View History

package main
import "C"
import (
2021-10-18 14:50:56 +03:00
"encoding/json"
"fmt"
2021-10-19 12:19:02 +03:00
"os"
"path/filepath"
2021-10-18 14:50:56 +03:00
"time"
skg "github.com/status-im/status-keycard-go"
2021-10-18 14:50:56 +03:00
"github.com/status-im/status-keycard-go/signal"
)
2021-10-18 14:50:56 +03:00
var flow *skg.KeycardFlow
var finished chan (struct{})
2021-10-19 12:19:02 +03:00
var ppIdx = 0
var pairingPasses = [2]string{"WrongOne", "KeycardTest"}
2021-10-18 14:50:56 +03:00
func signalHandler(j []byte) {
var sig signal.Envelope
json.Unmarshal(j, &sig)
go func() {
switch sig.Type {
case skg.InsertCard:
fmt.Print("Insert card\n")
case skg.CardInserted:
fmt.Printf("Card inserted\n")
case skg.SwapCard:
fmt.Printf("Swap card. You have 5 seconds\n")
time.Sleep(5 * time.Second)
flow.Resume(skg.FlowParams{})
2021-10-19 12:19:02 +03:00
case skg.EnterPairing:
fmt.Printf("Entering pass: %+v\n", pairingPasses[ppIdx])
flow.Resume(skg.FlowParams{skg.PairingPass: pairingPasses[ppIdx]})
ppIdx = (ppIdx + 1) % 2
2021-10-18 14:50:56 +03:00
case skg.FlowResult:
fmt.Printf("Flow result: %+v\n", sig.Event)
close(finished)
}
}()
}
2021-10-19 12:19:02 +03:00
func testFlow(typ skg.FlowType, params skg.FlowParams) {
finished = make(chan struct{})
err := flow.Start(typ, params)
2021-10-15 12:38:06 +03:00
if err != nil {
fmt.Printf("error: %+v\n", err)
}
2021-10-19 12:19:02 +03:00
<-finished
}
2021-10-18 14:50:56 +03:00
2021-10-19 12:19:02 +03:00
func testRecoverAccount() {
2021-10-18 14:50:56 +03:00
finished = make(chan struct{})
2021-10-19 12:19:02 +03:00
err := flow.Start(skg.RecoverAccount, skg.FlowParams{})
2021-10-15 12:38:06 +03:00
if err != nil {
fmt.Printf("error: %+v\n", err)
}
2021-10-18 10:22:45 +03:00
2021-10-18 14:50:56 +03:00
<-finished
}
2021-10-19 12:19:02 +03:00
func main() {
dir, err := os.MkdirTemp("", "status-keycard-go")
if err != nil {
fmt.Printf("error: %+v\n", err)
return
}
defer os.RemoveAll(dir)
pairingsFile := filepath.Join(dir, "keycard-pairings.json")
flow, err = skg.NewFlow(pairingsFile)
if err != nil {
fmt.Printf("error: %+v\n", err)
return
}
signal.SetKeycardSignalHandler(signalHandler)
testFlow(skg.GetAppInfo, skg.FlowParams{})
testFlow(skg.RecoverAccount, skg.FlowParams{})
}