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  }