github.com/0chain/gosdk@v1.17.11/wasmsdk/auth_txn.go (about) 1 //go:build js && wasm 2 // +build js,wasm 3 4 package main 5 6 import ( 7 "fmt" 8 "syscall/js" 9 10 "github.com/0chain/gosdk/core/sys" 11 "github.com/0chain/gosdk/wasmsdk/jsbridge" 12 "github.com/0chain/gosdk/zcncore" 13 ) 14 15 type AuthCallbackFunc func(msg string) string 16 17 var authMsgCallback AuthCallbackFunc 18 var authCallback AuthCallbackFunc 19 var authResponseC chan string 20 var authMsgResponseC chan string 21 var authMsgLock = make(chan struct{}, 1) 22 23 // registerAuthorizer Register the callback function to authorize the transaction. 24 // This function is called from JavaScript. 25 // It stores the callback function in the global variable authCallback. 26 func registerAuthorizer(this js.Value, args []js.Value) interface{} { 27 // Store the callback function 28 authCallback = parseAuthorizerCallback(args[0]) 29 authResponseC = make(chan string, 1) 30 31 sys.Authorize = func(msg string) (string, error) { 32 authCallback(msg) 33 return <-authResponseC, nil 34 } 35 return nil 36 } 37 38 func registerZauthServer(serverAddr string) { 39 fmt.Println("registerZauthServer...") 40 jsbridge.SetZauthServer(serverAddr) 41 sys.SetAuthorize(zcncore.ZauthSignTxn(serverAddr)) 42 sys.SetAuthCommon(zcncore.ZauthAuthCommon(serverAddr)) 43 } 44 45 // zvaultNewWallet generates new split wallet 46 func zvaultNewWallet(serverAddr, token string) (string, error) { 47 return zcncore.CallZvaultNewWalletString(serverAddr, token, "") 48 } 49 50 // zvaultNewSplit generates new split wallet from existing clientID 51 func zvaultNewSplit(clientID, serverAddr, token string) (string, error) { 52 return zcncore.CallZvaultNewWalletString(serverAddr, token, clientID) 53 } 54 55 func zvaultStoreKey(serverAddr, token, privateKey string) (string, error) { 56 return zcncore.CallZvaultStoreKeyString(serverAddr, token, privateKey) 57 } 58 59 func zvaultRetrieveKeys(serverAddr, token, clientID string) (string, error) { 60 return zcncore.CallZvaultRetrieveKeys(serverAddr, token, clientID) 61 } 62 63 func zvaultRevokeKey(serverAddr, token, clientID, publicKey string) error { 64 return zcncore.CallZvaultRevokeKey(serverAddr, token, clientID, publicKey) 65 } 66 67 func zvaultDeletePrimaryKey(serverAddr, token, clientID string) error { 68 return zcncore.CallZvaultDeletePrimaryKey(serverAddr, token, clientID) 69 } 70 71 func zvaultRetrieveWallets(serverAddr, token string) (string, error) { 72 return zcncore.CallZvaultRetrieveWallets(serverAddr, token) 73 } 74 75 func zvaultRetrieveSharedWallets(serverAddr, token string) (string, error) { 76 return zcncore.CallZvaultRetrieveSharedWallets(serverAddr, token) 77 } 78 79 func registerAuthCommon(this js.Value, args []js.Value) interface{} { 80 authMsgCallback = parseAuthorizerCallback(args[0]) 81 authMsgResponseC = make(chan string, 1) 82 83 sys.AuthCommon = func(msg string) (string, error) { 84 authMsgLock <- struct{}{} 85 defer func() { 86 <-authMsgLock 87 }() 88 authMsgCallback(msg) 89 return <-authMsgResponseC, nil 90 } 91 return nil 92 } 93 94 // authResponse Publishes the response to the authorization request. 95 // `response` is the response to the authorization request. 96 func authResponse(response string) { 97 authResponseC <- response 98 } 99 100 // callAuth Call the authorization callback function and provide the message to pass to it. 101 // The message is passed as the first argument to the js calling. 102 func callAuth(this js.Value, args []js.Value) interface{} { 103 fmt.Println("callAuth is called") 104 if len(args) == 0 { 105 return nil 106 } 107 108 if authCallback != nil { 109 msg := args[0].String() 110 result, _ := sys.Authorize(msg) 111 fmt.Println("auth is called, result:", result) 112 return js.ValueOf(result) 113 } 114 115 return nil 116 } 117 118 // Parse the JavaScript callback function into Go AuthorizerCallback type 119 func parseAuthorizerCallback(jsCallback js.Value) AuthCallbackFunc { 120 return func(msg string) string { 121 // Call the JavaScript callback function from Go 122 result := jsCallback.Invoke(msg) 123 return result.String() 124 } 125 }