gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-wallet-webex] branch master updated: Store bank acco


From: gnunet
Subject: [GNUnet-SVN] [taler-wallet-webex] branch master updated: Store bank account information for reserve.
Date: Thu, 20 Jul 2017 02:18:57 +0200

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository wallet-webex.

The following commit(s) were added to refs/heads/master by this push:
     new a8bd0529 Store bank account information for reserve.
a8bd0529 is described below

commit a8bd05298eccf3ac3f89afca4b28856fbb1be82f
Author: Florian Dold <address@hidden>
AuthorDate: Thu Jul 20 02:17:55 2017 +0200

    Store bank account information for reserve.
    
    Fixes #4852.
---
 src/webex/pages/confirm-create-reserve.tsx | 99 +++++++++++++++++-------------
 src/webex/wxApi.ts                         |  9 ++-
 src/webex/wxBackend.ts                     | 31 +++++++---
 3 files changed, 87 insertions(+), 52 deletions(-)

diff --git a/src/webex/pages/confirm-create-reserve.tsx 
b/src/webex/pages/confirm-create-reserve.tsx
index f8f53510..4e3b6748 100644
--- a/src/webex/pages/confirm-create-reserve.tsx
+++ b/src/webex/pages/confirm-create-reserve.tsx
@@ -35,6 +35,7 @@ import {
 
 import {ImplicitStateComponent, StateHolder} from "../components";
 import {
+  createReserve,
   getCurrency,
   getExchangeInfo,
   getReserveCreationInfo,
@@ -242,6 +243,7 @@ interface ExchangeSelectionProps {
   callback_url: string;
   wt_types: string[];
   currencyRecord: CurrencyRecord|null;
+  sender_wire: object | undefined;
 }
 
 interface ManualSelectionProps {
@@ -529,7 +531,8 @@ class ExchangeSelection extends 
ImplicitStateComponent<ExchangeSelectionProps> {
     this.confirmReserveImpl(this.reserveCreationInfo()!,
                             this.url()!,
                             this.props.amount,
-                            this.props.callback_url);
+                            this.props.callback_url,
+                            this.props.sender_wire);
   }
 
   /**
@@ -555,53 +558,55 @@ class ExchangeSelection extends 
ImplicitStateComponent<ExchangeSelectionProps> {
     }
   }
 
-  confirmReserveImpl(rci: ReserveCreationInfo,
+  async confirmReserveImpl(rci: ReserveCreationInfo,
                      exchange: string,
                      amount: AmountJson,
-                     callback_url: string) {
-    const d = {exchange: canonicalizeBaseUrl(exchange), amount};
-    const cb = (rawResp: any) => {
-      if (!rawResp) {
-        throw Error("empty response");
-      }
-      // FIXME: filter out types that bank/exchange don't have in common
-      const wireDetails = rci.wireInfo;
-      const filteredWireDetails: any = {};
-      for (const wireType in wireDetails) {
-        if (this.props.wt_types.findIndex((x) => x.toLowerCase() === 
wireType.toLowerCase()) < 0) {
-          continue;
-        }
-        const obj = Object.assign({}, wireDetails[wireType]);
-        // The bank doesn't need to know about fees
-        delete obj.fees;
-        // Consequently the bank can't verify signatures anyway, so
-        // we delete this extra data, to make the request URL shorter.
-        delete obj.salt;
-        delete obj.sig;
-        filteredWireDetails[wireType] = obj;
+                     callback_url: string,
+                     sender_wire: object | undefined) {
+    const rawResp = await createReserve({
+      amount,
+      exchange: canonicalizeBaseUrl(exchange),
+      senderWire: sender_wire,
+    });
+    if (!rawResp) {
+      throw Error("empty response");
+    }
+    // FIXME: filter out types that bank/exchange don't have in common
+    const wireDetails = rci.wireInfo;
+    const filteredWireDetails: any = {};
+    for (const wireType in wireDetails) {
+      if (this.props.wt_types.findIndex((x) => x.toLowerCase() === 
wireType.toLowerCase()) < 0) {
+        continue;
       }
-      if (!rawResp.error) {
-        const resp = CreateReserveResponse.checked(rawResp);
-        const q: {[name: string]: string|number} = {
-          amount_currency: amount.currency,
-          amount_fraction: amount.fraction,
-          amount_value: amount.value,
-          exchange: resp.exchange,
-          reserve_pub: resp.reservePub,
-          wire_details: JSON.stringify(filteredWireDetails),
-        };
-        const url = new URI(callback_url).addQuery(q);
-        if (!url.is("absolute")) {
-          throw Error("callback url is not absolute");
-        }
-        console.log("going to", url.href());
-        document.location.href = url.href();
-      } else {
-        this.statusString(
-          i18n.str`Oops, something went wrong. The wallet responded with error 
status (${rawResp.error}).`);
+      const obj = Object.assign({}, wireDetails[wireType]);
+      // The bank doesn't need to know about fees
+      delete obj.fees;
+      // Consequently the bank can't verify signatures anyway, so
+      // we delete this extra data, to make the request URL shorter.
+      delete obj.salt;
+      delete obj.sig;
+      filteredWireDetails[wireType] = obj;
+    }
+    if (!rawResp.error) {
+      const resp = CreateReserveResponse.checked(rawResp);
+      const q: {[name: string]: string|number} = {
+        amount_currency: amount.currency,
+        amount_fraction: amount.fraction,
+        amount_value: amount.value,
+        exchange: resp.exchange,
+        reserve_pub: resp.reservePub,
+        wire_details: JSON.stringify(filteredWireDetails),
+      };
+      const url = new URI(callback_url).addQuery(q);
+      if (!url.is("absolute")) {
+        throw Error("callback url is not absolute");
       }
-    };
-    chrome.runtime.sendMessage({type: "create-reserve", detail: d}, cb);
+      console.log("going to", url.href());
+      document.location.href = url.href();
+    } else {
+      this.statusString(
+        i18n.str`Oops, something went wrong. The wallet responded with error 
status (${rawResp.error}).`);
+    }
   }
 
   renderStatus(): any {
@@ -632,6 +637,11 @@ async function main() {
       throw Error(i18n.str`Can't parse wire_types: ${e.message}`);
     }
 
+    let sender_wire;
+    if (query.sender_wire) {
+      sender_wire = JSON.parse(query.sender_wire);
+    }
+
     const suggestedExchangeUrl = query.suggested_exchange_url;
     const currencyRecord = await getCurrency(amount.currency);
 
@@ -641,6 +651,7 @@ async function main() {
       currencyRecord,
       suggestedExchangeUrl,
       wt_types,
+      sender_wire,
     };
 
     ReactDOM.render(<ExchangeSelection {...args} />, document.getElementById(
diff --git a/src/webex/wxApi.ts b/src/webex/wxApi.ts
index a064b413..9d8ba4d1 100644
--- a/src/webex/wxApi.ts
+++ b/src/webex/wxApi.ts
@@ -264,7 +264,7 @@ export function paymentFailed(contractTermsHash: string): 
Promise<void> {
  * Get the payment cookie for the current tab, or undefined if no payment
  * cookie was set.
  */
-export function getTabCookie(contractTermsHash: string, merchantSig: string): 
Promise<any> {
+export function getTabCookie(): Promise<any> {
   return callBackend("get-tab-cookie", { });
 }
 
@@ -284,6 +284,13 @@ export function checkUpgrade(): Promise<UpgradeResponse> {
 }
 
 /**
+ * Create a reserve.
+ */
+export function createReserve(args: { amount: AmountJson, exchange: string, 
senderWire?: object }): Promise<any> {
+  return callBackend("create-reserve", args);
+}
+
+/**
  * Reset database
  */
 export function resetDb(): Promise<void> {
diff --git a/src/webex/wxBackend.ts b/src/webex/wxBackend.ts
index 0531b7d6..a8b72549 100644
--- a/src/webex/wxBackend.ts
+++ b/src/webex/wxBackend.ts
@@ -114,6 +114,7 @@ function handleMessage(sender: MessageSender,
       const d = {
         amount: detail.amount,
         exchange: detail.exchange,
+        senderWire: detail.senderWire,
       };
       const req = CreateReserveRequest.checked(d);
       return needsWallet().createReserve(req);
@@ -414,15 +415,29 @@ function handleBankRequest(wallet: Wallet, headerList: 
chrome.webRequest.HttpHea
     }
   }
 
-  const reservePub = headers["x-taler-reserve-pub"];
-  if (reservePub !== undefined) {
-    console.log(`confirming reserve ${reservePub} via 201`);
-    wallet.confirmReserve({reservePub});
+  const operation = headers["x-taler-operation"];
+
+  if (!operation) {
+    // Not a taler related request.
+    return;
+  }
+
+  if (operation == "confirm-reserve") {
+    const reservePub = headers["x-taler-reserve-pub"];
+    if (reservePub !== undefined) {
+      console.log(`confirming reserve ${reservePub} via 201`);
+      wallet.confirmReserve({reservePub});
+    }
+    console.warn("got 'X-Taler-Operation: confirm-reserve' without 
'X-Taler-Reserve-Pub'");
     return;
   }
 
-  const amount = headers["x-taler-amount"];
-  if (amount) {
+  if (operation == "create-reserve") {
+    const amount = headers["x-taler-amount"];
+    if (!amount) {
+      console.log("202 not understood (X-Taler-Amount missing)");
+      return;
+    }
     const callbackUrl = headers["x-taler-callback-url"];
     if (!callbackUrl) {
       console.log("202 not understood (X-Taler-Callback-Url missing)");
@@ -452,6 +467,7 @@ function handleBankRequest(wallet: Wallet, headerList: 
chrome.webRequest.HttpHea
       callback_url: new URI(callbackUrl) .absoluteTo(url),
       suggested_exchange_url: headers["x-taler-suggested-exchange"],
       wt_types: wtTypes,
+      sender_wire: headers["x-taler-sender-wire"],
     };
     const uri = new 
URI(chrome.extension.getURL("/src/webex/pages/confirm-create-reserve.html"));
     const redirectUrl = uri.query(params).href();
@@ -460,7 +476,8 @@ function handleBankRequest(wallet: Wallet, headerList: 
chrome.webRequest.HttpHea
     chrome.tabs.update(tabId, {url: redirectUrl});
     return;
   }
-  // no known headers found, not a taler request ...
+
+  console.log("Ignoring unknown X-Taler-Operation:", operation);
 }
 
 

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]