diff --git a/src/services.ts b/src/services.ts index ee5176a..f703aa6 100644 --- a/src/services.ts +++ b/src/services.ts @@ -61,6 +61,19 @@ class Services { public async createId(event: Event): Promise { event.preventDefault(); + // verify we don't already have an user + const services = await Services.getInstance(); + try { + let user = await services.getUserInfo(); + if (user) { + console.error("User already exists, please recover"); + return; + } + } catch (error) { + console.error(error); + return; + } + const passwordElement = document.getElementById("password") as HTMLInputElement; const processElement = document.getElementById("selectProcess") as HTMLSelectElement; @@ -79,12 +92,11 @@ class Services { const birthday_signet = 50000; const birthday_main = 500000; - const services = await Services.getInstance(); let createUserReturn: createUserReturn = services.sdkClient.create_user(password, label, birthday_main, birthday_signet, this.current_process); let user = createUserReturn.user; - const shares = user.shares; + // const shares = user.shares; // send the shares on the network const revokeData = user.revoke_data; if (!revokeData) { @@ -92,7 +104,7 @@ class Services { return; } - user.shares = []; + // user.shares = []; user.revoke_data = null; try { @@ -103,16 +115,16 @@ class Services { console.error("Failed to write user object :", error); } - let sp_address = ""; try { - sp_address = services.sdkClient.get_receiving_address(user.pre_id); - console.info('Using sp_address:', sp_address); + this.sp_address = services.sdkClient.get_receiving_address(user.pre_id); + if (this.sp_address) { + console.info('Using sp_address:', this.sp_address); + await services.obtainTokenWithFaucet(this.sp_address); + } } catch (error) { console.error(error); } - await services.obtainTokenWithFaucet(sp_address); - await services.displayRevokeImage(new Uint8Array(revokeData)); } @@ -651,6 +663,28 @@ class Services { } return null; } + + public async getUserInfo(): Promise { + try { + const indexedDB = await IndexedDB.getInstance(); + const db = await indexedDB.getDb(); + let user = await indexedDB.getAll(db, indexedDB.getStoreList().AnkUser); + // This should never happen + if (user.length > 1) { + throw "Multiple users in db"; + } else { + let res = user.pop(); + if (res === undefined) { + return null; + } else { + return res; + } + } + } catch (error) { + console.error("Can't get user from db"); + return null; + } + } } export default Services;