pwa-spectre/wasm/wasm.go

65 lines
1.4 KiB
Go

package main
import (
"fmt"
"syscall/js"
"go.jolheiser.com/go-spectre"
)
const defaultScoper = "com.lyndir.masterpassword"
var Scoper string
//go:generate go build -ldflags "-X 'main.Scoper=$PWA_SPECTRE_SCOPER'" -o ../assets/spectre.wasm
func main() {
if Scoper == "" {
Scoper = defaultScoper
}
scoper := spectre.SimpleScoper{
Key: Scoper,
}
js.Global().Set("spectre", spectreWrapper(scoper))
js.Global().Set("defaultScoper", Scoper == defaultScoper)
fmt.Println("Spectre Init")
<-make(chan struct{})
}
func spectreWrapper(scoper spectre.Scoper) js.Func {
spectreFunc := js.FuncOf(func(this js.Value, args []js.Value) interface{} {
if len(args) != 2 {
return "Invalid number of arguments"
}
s, err := spectre.New(args[0].String(), args[1].String(), spectre.WithScoper(scoper))
if err != nil {
return err.Error()
}
return map[string]interface{}{
// Site(site, counter, scope, template)
"Site": js.FuncOf(func(this js.Value, args []js.Value) interface{} {
if len(args) != 4 {
return "Invalid number of arguments"
}
scope, err := spectre.ParseScope(args[2].String())
if err != nil {
return err.Error()
}
template, err := spectre.ParseTemplate(args[3].String())
if err != nil {
return err.Error()
}
return s.Site(args[0].String(),
spectre.WithCounter(args[1].Int()),
spectre.WithScope(scope),
spectre.WithTemplate(template),
)
}),
}
})
return spectreFunc
}