aboutsummaryrefslogtreecommitdiff
path: root/extension/lib
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-02-19 04:23:00 +0100
committerFlorian Dold <florian.dold@gmail.com>2016-02-19 04:23:00 +0100
commit29dfafaa1282d6b1e03bd7211ce598a09c22bae7 (patch)
treede2973abea8b4dfedfd820d8c318e50b0ad2fa92 /extension/lib
parent5a12edcd5d49029d85c47dc1169a5cc26cc6d10b (diff)
downloadwallet-core-29dfafaa1282d6b1e03bd7211ce598a09c22bae7.tar.xz
error handling
Diffstat (limited to 'extension/lib')
-rw-r--r--extension/lib/wallet/wallet.ts103
-rw-r--r--extension/lib/wallet/wxApi.ts40
-rw-r--r--extension/lib/wallet/wxMessaging.ts (renamed from extension/lib/wallet/wxmessaging.ts)4
3 files changed, 100 insertions, 47 deletions
diff --git a/extension/lib/wallet/wallet.ts b/extension/lib/wallet/wallet.ts
index ed719211f..448714254 100644
--- a/extension/lib/wallet/wallet.ts
+++ b/extension/lib/wallet/wallet.ts
@@ -108,60 +108,55 @@ class MintInfo implements IMintInfo {
* the first error.
*/
mergeKeys(newKeys: KeysJson, wallet: Wallet): Promise<void> {
- return Promise.resolve().then(() => {
- if (!this.masterPublicKey) {
- this.masterPublicKey = newKeys.master_public_key;
- }
+ if (!this.masterPublicKey) {
+ this.masterPublicKey = newKeys.master_public_key;
+ }
- if (this.masterPublicKey != newKeys.master_public_key) {
- throw Error("public keys do not match");
- }
+ if (this.masterPublicKey != newKeys.master_public_key) {
+ throw Error("public keys do not match");
+ }
- for (let newDenom of newKeys.denoms) {
- let found = false;
- for (let oldDenom of this.denoms) {
- if (oldDenom.denom_pub === newDenom.denom_pub) {
- let a = Object.assign({}, oldDenom);
- let b = Object.assign({}, newDenom);
- // pub hash is only there for convenience in the wallet
- delete a["pub_hash"];
- delete b["pub_hash"];
- if (!_.isEqual(a, b)) {
- console.log("old/new:");
- console.dir(a);
- console.dir(b);
- throw Error("denomination modified");
- }
- // TODO: check if info still matches
- found = true;
- break;
+ let ps = newKeys.denoms.map((newDenom) => {
+ let found = false;
+ for (let oldDenom of this.denoms) {
+ if (oldDenom.denom_pub === newDenom.denom_pub) {
+ let a = Object.assign({}, oldDenom);
+ let b = Object.assign({}, newDenom);
+ // pub hash is only there for convenience in the wallet
+ delete a["pub_hash"];
+ delete b["pub_hash"];
+ if (!deepEquals(a, b)) {
+ console.log("old/new:");
+ console.dir(a);
+ console.dir(b);
+ throw Error("denomination modified");
}
+ found = true;
+ break;
}
+ }
- if (found) {
- continue;
- }
-
- console.log("validating denomination");
-
- return wallet.isValidDenom(newDenom, this.masterPublicKey)
- .then((valid) => {
- if (!valid) {
- throw Error("signature on denomination invalid");
- }
+ if (found) {
+ return Promise.resolve();
+ }
- let d: Denomination = Object.assign({}, newDenom);
- d.pub_hash = native.RsaPublicKey.fromCrock(d.denom_pub)
- .encode()
- .hash()
- .toCrock();
- this.denoms.push(d);
+ return wallet.isValidDenom(newDenom, this.masterPublicKey)
+ .then((valid) => {
+ if (!valid) {
+ throw Error("signature on denomination invalid");
+ }
- });
+ let d: Denomination = Object.assign({}, newDenom);
+ d.pub_hash = native.RsaPublicKey.fromCrock(d.denom_pub)
+ .encode()
+ .hash()
+ .toCrock();
+ this.denoms.push(d);
- }
- return;
+ });
});
+
+ return Promise.all(ps).then(() => void 0);
}
}
@@ -308,6 +303,21 @@ export interface Badge {
type PayCoinInfo = Array<{ updatedCoin: Coin, sig: CoinPaySig }>;
+function deepEquals(x, y) {
+ if (x === y) {
+ return true;
+ }
+
+ if (Array.isArray(x) && x.length !== y.length) {
+ return false;
+ }
+
+ var p = Object.keys(x);
+ return Object.keys(y).every((i) => p.indexOf(i) !== -1) &&
+ p.every((i) => deepEquals(x[i], y[i]));
+}
+
+
function getTalerStampSec(stamp: string) {
const m = stamp.match(/\/?Date\(([0-9]*)\)\/?/);
if (!m) {
@@ -603,6 +613,9 @@ export class Wallet {
payReq: payReq,
};
+ console.log("pay request");
+ console.dir(payReq);
+
let historyEntry = {
type: "pay",
timestamp: (new Date).getTime(),
diff --git a/extension/lib/wallet/wxApi.ts b/extension/lib/wallet/wxApi.ts
new file mode 100644
index 000000000..9871b6e7f
--- /dev/null
+++ b/extension/lib/wallet/wxApi.ts
@@ -0,0 +1,40 @@
+/*
+ This file is part of TALER
+ (C) 2016 GNUnet e.V.
+
+ TALER is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/licenses/>
+ */
+
+import {AmountJson} from "./types";
+import {ReserveCreationInfo} from "./types";
+
+/**
+ * Interface to the wallet through WebExtension messaging.
+ */
+
+
+export function getReserveCreationInfo(baseUrl: string,
+ amount: AmountJson): Promise<ReserveCreationInfo> {
+ let m = {type: "reserve-creation-info", detail: {baseUrl, amount}};
+ return new Promise((resolve, reject) => {
+ chrome.runtime.sendMessage(m, (resp) => {
+ if (resp.error) {
+ console.error("error response", resp);
+ let e = Error("call to reserve-creation-info failed");
+ (e as any).errorResponse = resp;
+ reject(e);
+ return;
+ }
+ resolve(resp);
+ });
+ });
+} \ No newline at end of file
diff --git a/extension/lib/wallet/wxmessaging.ts b/extension/lib/wallet/wxMessaging.ts
index fc99a2054..df79648ab 100644
--- a/extension/lib/wallet/wxmessaging.ts
+++ b/extension/lib/wallet/wxMessaging.ts
@@ -140,7 +140,7 @@ function dispatch(handlers, req, sendResponse) {
})
.catch((e) => {
console.log("exception during wallet handler");
- console.error(e.stack);
+ console.error(e);
sendResponse({
error: "exception",
hint: e.message,
@@ -206,7 +206,7 @@ export function wxMain() {
return dispatch(handlers, req, sendResponse)
} catch (e) {
console.log("exception during wallet handler (dispatch)");
- console.error(e.stack);
+ console.error(e);
sendResponse({
error: "exception",
hint: e.message,