github.com/secoba/wails/v2@v2.6.4/internal/frontend/dispatcher/securecalls.go (about) 1 package dispatcher 2 3 import ( 4 "encoding/json" 5 "fmt" 6 7 "github.com/secoba/wails/v2/internal/frontend" 8 ) 9 10 type secureCallMessage struct { 11 ID int `json:"id"` 12 Args []json.RawMessage `json:"args"` 13 CallbackID string `json:"callbackID"` 14 } 15 16 func (d *Dispatcher) processSecureCallMessage(message string, sender frontend.Frontend) (string, error) { 17 var payload secureCallMessage 18 err := json.Unmarshal([]byte(message[1:]), &payload) 19 if err != nil { 20 return "", err 21 } 22 23 var result interface{} 24 25 // Lookup method 26 registeredMethod := d.bindingsDB.GetObfuscatedMethod(payload.ID) 27 28 // Check we have it 29 if registeredMethod == nil { 30 return "", fmt.Errorf("method '%d' not registered", payload.ID) 31 } 32 33 args, err2 := registeredMethod.ParseArgs(payload.Args) 34 if err2 != nil { 35 errmsg := fmt.Errorf("error parsing arguments: %s", err2.Error()) 36 result, _ := d.NewErrorCallback(errmsg.Error(), payload.CallbackID) 37 return result, errmsg 38 } 39 result, err = registeredMethod.Call(args) 40 41 callbackMessage := &CallbackMessage{ 42 CallbackID: payload.CallbackID, 43 } 44 if err != nil { 45 callbackMessage.Err = err.Error() 46 } else { 47 callbackMessage.Result = result 48 } 49 messageData, err := json.Marshal(callbackMessage) 50 d.log.Trace("json call result data: %+v\n", string(messageData)) 51 if err != nil { 52 // what now? 53 d.log.Fatal(err.Error()) 54 } 55 56 return "c" + string(messageData), nil 57 }