Create new user and write indexedDB
This commit is contained in:
parent
8cd7a8f361
commit
98e94799ef
@ -62,7 +62,7 @@ impl Into<JsValue> for ApiError {
|
|||||||
#[derive(Tsify, Serialize, Deserialize)]
|
#[derive(Tsify, Serialize, Deserialize)]
|
||||||
#[tsify(into_wasm_abi)]
|
#[tsify(into_wasm_abi)]
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
pub struct GenerateCreateUserReturn {
|
pub struct create_user_return {
|
||||||
pub user: User,
|
pub user: User,
|
||||||
pub output_list_vec: Vec<OutputList>,
|
pub output_list_vec: Vec<OutputList>,
|
||||||
}
|
}
|
||||||
@ -128,7 +128,8 @@ pub fn create_user(
|
|||||||
password: String,
|
password: String,
|
||||||
label: Option<String>,
|
label: Option<String>,
|
||||||
birthday: u32,
|
birthday: u32,
|
||||||
) -> ApiResult<GenerateCreateUserReturn> {
|
process: String
|
||||||
|
) -> ApiResult<create_user_return> {
|
||||||
let mut output_list: Vec<OutputList> = Vec::new();
|
let mut output_list: Vec<OutputList> = Vec::new();
|
||||||
//recover
|
//recover
|
||||||
let sp_wallet_recover = generate_sp_wallet(label.clone(), birthday, true)?;
|
let sp_wallet_recover = generate_sp_wallet(label.clone(), birthday, true)?;
|
||||||
@ -172,9 +173,9 @@ pub fn create_user(
|
|||||||
|
|
||||||
let user_keys = UserKeys::new(recover_keys, revoke_keys, main_keys);
|
let user_keys = UserKeys::new(recover_keys, revoke_keys, main_keys);
|
||||||
|
|
||||||
let user = User::new(user_keys, password)?;
|
let user = User::new(user_keys, password, process)?;
|
||||||
|
|
||||||
let generate_user = GenerateCreateUserReturn {
|
let generate_user = create_user_return {
|
||||||
user,
|
user,
|
||||||
output_list_vec: output_list,
|
output_list_vec: output_list,
|
||||||
};
|
};
|
||||||
|
@ -97,18 +97,19 @@ impl UserKeys {
|
|||||||
#[derive(Debug, Serialize, Deserialize, Clone, Tsify)]
|
#[derive(Debug, Serialize, Deserialize, Clone, Tsify)]
|
||||||
#[tsify(into_wasm_abi, from_wasm_abi)]
|
#[tsify(into_wasm_abi, from_wasm_abi)]
|
||||||
pub struct User {
|
pub struct User {
|
||||||
|
pre_id: String,
|
||||||
|
process: String,
|
||||||
recover_data: Vec<u8>,
|
recover_data: Vec<u8>,
|
||||||
revoke_data: Option<Vec<u8>>,
|
revoke_data: Option<Vec<u8>>,
|
||||||
sharding: Sharding,
|
sharding: Sharding,
|
||||||
pre_id: String,
|
// recovered_spend_key: Option<String>,
|
||||||
recovered_spend_key: Option<String>,
|
|
||||||
recovered_scan_key: Option<String>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl User {
|
impl User {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
user_keys: UserKeys,
|
user_keys: UserKeys,
|
||||||
user_password: String,
|
user_password: String,
|
||||||
|
process: String
|
||||||
) -> Result<Self> {
|
) -> Result<Self> {
|
||||||
let mut rng = thread_rng();
|
let mut rng = thread_rng();
|
||||||
|
|
||||||
@ -116,6 +117,7 @@ impl User {
|
|||||||
// We just take the 2 revoke keys
|
// We just take the 2 revoke keys
|
||||||
let revoke_scan_key = user_keys.get_keys(user_keys.revoke_keys.clone()).scan_key;
|
let revoke_scan_key = user_keys.get_keys(user_keys.revoke_keys.clone()).scan_key;
|
||||||
let revoke_spend_key = user_keys.get_keys(user_keys.revoke_keys.clone()).spend_key;
|
let revoke_spend_key = user_keys.get_keys(user_keys.revoke_keys.clone()).spend_key;
|
||||||
|
|
||||||
let mut revoke_data = Vec::with_capacity(64);
|
let mut revoke_data = Vec::with_capacity(64);
|
||||||
revoke_data.extend_from_slice(revoke_scan_key.as_ref());
|
revoke_data.extend_from_slice(revoke_scan_key.as_ref());
|
||||||
revoke_data.extend_from_slice(revoke_spend_key.as_ref());
|
revoke_data.extend_from_slice(revoke_spend_key.as_ref());
|
||||||
@ -205,12 +207,12 @@ impl User {
|
|||||||
//Receive List Items (PCD)
|
//Receive List Items (PCD)
|
||||||
|
|
||||||
Ok(User {
|
Ok(User {
|
||||||
|
pre_id: pre_id.to_string(),
|
||||||
|
process,
|
||||||
recover_data,
|
recover_data,
|
||||||
revoke_data: Some(revoke_data),
|
revoke_data: Some(revoke_data),
|
||||||
sharding,
|
sharding,
|
||||||
pre_id: pre_id.to_string(),
|
// recovered_spend_key: None,
|
||||||
recovered_spend_key: None,
|
|
||||||
recovered_scan_key: None,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,11 +4,11 @@ class Database {
|
|||||||
private dbName: string = '4nk';
|
private dbName: string = '4nk';
|
||||||
private dbVersion: number = 1;
|
private dbVersion: number = 1;
|
||||||
private storeDefinitions = {
|
private storeDefinitions = {
|
||||||
SpClient: {
|
// SpClient: {
|
||||||
name: "sp_client",
|
// name: "sp_client",
|
||||||
options: {},
|
// options: {},
|
||||||
indices: []
|
// indices: []
|
||||||
},
|
// },
|
||||||
SpOutputs: {
|
SpOutputs: {
|
||||||
name: "sp_outputs",
|
name: "sp_outputs",
|
||||||
options: {'autoIncrement': true},
|
options: {'autoIncrement': true},
|
||||||
@ -22,8 +22,14 @@ class Database {
|
|||||||
},
|
},
|
||||||
AnkUser: {
|
AnkUser: {
|
||||||
name: "user",
|
name: "user",
|
||||||
options: {},
|
options: {'keyPath': 'pre_id'},
|
||||||
indices: []
|
indices: [{
|
||||||
|
name: 'by_process',
|
||||||
|
keyPath: 'process',
|
||||||
|
options: {
|
||||||
|
'unique': false
|
||||||
|
}
|
||||||
|
}]
|
||||||
},
|
},
|
||||||
AnkSession: {
|
AnkSession: {
|
||||||
name: "session",
|
name: "session",
|
||||||
|
15
src/index.ts
15
src/index.ts
@ -5,20 +5,7 @@ document.addEventListener('DOMContentLoaded', async () => {
|
|||||||
try {
|
try {
|
||||||
const services = await Services.getInstance();
|
const services = await Services.getInstance();
|
||||||
|
|
||||||
if ((await services.isNewUser())) {
|
await services.displayCreateId();
|
||||||
services.displayCreateId();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
services.displayRecover()
|
|
||||||
}
|
|
||||||
|
|
||||||
let sp_wallet_return = services.new_sp_client("default", 0, true);
|
|
||||||
|
|
||||||
const indexedDB = await IndexedDB.getInstance();
|
|
||||||
const db = indexedDB.getDb();
|
|
||||||
await indexedDB.writeObject(db, indexedDB.getStoreList().SpClient, sp_wallet_return.sp_client_json, "default");
|
|
||||||
await indexedDB.writeObject(db, indexedDB.getStoreList().SpOutputs, sp_wallet_return.sp_outputs_json, null);
|
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { generate_sp_wallet_return, User } from '../dist/pkg/sdk_client';
|
import { create_user_return, User } from '../dist/pkg/sdk_client';
|
||||||
import IndexedDB from './database'
|
import IndexedDB from './database'
|
||||||
import Processstore from './store/processstore';
|
import Processstore from './store/processstore';
|
||||||
|
|
||||||
class Services {
|
class Services {
|
||||||
private static instance: Services;
|
private static instance: Services;
|
||||||
private sdkClient: any;
|
private sdkClient: any;
|
||||||
private static CURRENT_PROCESS = "currentprocess";
|
private current_process: string | null = null;
|
||||||
|
|
||||||
// Private constructor to prevent direct instantiation from outside
|
// Private constructor to prevent direct instantiation from outside
|
||||||
private constructor() {}
|
private constructor() {}
|
||||||
@ -25,28 +25,24 @@ class Services {
|
|||||||
this.sdkClient.setup();
|
this.sdkClient.setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
public new_sp_client(label: string, current_tip: number, is_testnet: boolean): generate_sp_wallet_return {
|
// public async getSpAddressDefaultClient(): Promise<string | null> {
|
||||||
return this.sdkClient.generate_sp_wallet(label, current_tip, is_testnet);
|
// try {
|
||||||
}
|
// const indexedDB = await IndexedDB.getInstance();
|
||||||
|
// const db = indexedDB.getDb();
|
||||||
|
// const spClient = await indexedDB.getObject<string>(db, indexedDB.getStoreList().SpClient, "default");
|
||||||
|
|
||||||
public async getSpAddressDefaultClient(): Promise<string | null> {
|
// if (spClient) {
|
||||||
try {
|
// return this.sdkClient.get_receiving_address(spClient);
|
||||||
const indexedDB = await IndexedDB.getInstance();
|
// } else {
|
||||||
const db = indexedDB.getDb();
|
// console.error("SP client not found");
|
||||||
const spClient = await indexedDB.getObject<string>(db, indexedDB.getStoreList().SpClient, "default");
|
// return null;
|
||||||
|
// }
|
||||||
|
// } catch (error) {
|
||||||
|
// console.error("Failed to retrieve object or get sp address:", error);
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
|
||||||
if (spClient) {
|
// }
|
||||||
return this.sdkClient.get_receiving_address(spClient);
|
|
||||||
} else {
|
|
||||||
console.error("SP client not found");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Failed to retrieve object or get sp address:", error);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async isNewUser(): Promise<boolean> {
|
public async isNewUser(): Promise<boolean> {
|
||||||
let isNew = false;
|
let isNew = false;
|
||||||
@ -65,7 +61,7 @@ class Services {
|
|||||||
|
|
||||||
public async displayCreateId(): Promise<void> {
|
public async displayCreateId(): Promise<void> {
|
||||||
Services.instance.injectHtml(Services.instance.get_html_create_id());
|
Services.instance.injectHtml(Services.instance.get_html_create_id());
|
||||||
Services.instance.attachSubmitListener("form4nk", Services.instance.createId);
|
Services.instance.attachSubmitListener("form4nk", (event) => this.createId(event));
|
||||||
Services.instance.attachClickListener("displayrecover", Services.instance.displayRecover);
|
Services.instance.attachClickListener("displayrecover", Services.instance.displayRecover);
|
||||||
Services.instance.displayProcess(await Services.instance.getAllProcess());
|
Services.instance.displayProcess(await Services.instance.getAllProcess());
|
||||||
}
|
}
|
||||||
@ -86,25 +82,22 @@ class Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const password = passwordElement.value;
|
const password = passwordElement.value;
|
||||||
const process = processElement.value;
|
this.current_process = processElement.value;
|
||||||
console.log("JS password: " + password + " process: " + process);
|
console.log("JS password: " + password + " process: " + this.current_process);
|
||||||
// To comment if test
|
// To comment if test
|
||||||
if (!Services.instance.isPasswordValid(password)) return;
|
// if (!Services.instance.isPasswordValid(password)) return;
|
||||||
|
|
||||||
const image_to_recover = Services.instance.getImage("assets/4nk_image.png");
|
|
||||||
const image_to_revoke = Services.instance.getImage("assets/revoke.jpeg");
|
|
||||||
let label = null;
|
let label = null;
|
||||||
let birthday = 50000;
|
let birthday = 50000;
|
||||||
const user: User = this.sdkClient.create_user(password, image_to_recover, image_to_revoke, label, birthday);
|
const user: create_user_return = this.sdkClient.create_user(password, label, birthday, this.current_process);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const indexedDb = await IndexedDB.getInstance();
|
const indexedDb = await IndexedDB.getInstance();
|
||||||
const db = indexedDb.getDb();
|
const db = indexedDb.getDb();
|
||||||
await indexedDb.writeObject(db, indexedDb.getStoreList().AnkUser, user, process);
|
await indexedDb.writeObject(db, indexedDb.getStoreList().AnkUser, user.user, null);
|
||||||
console.log("JS User added");
|
// console.log("JS User added");
|
||||||
|
|
||||||
await indexedDb.writeObject(db, indexedDb.getStoreList().AnkSession, process, Services.CURRENT_PROCESS);
|
await indexedDb.writeObject(db, indexedDb.getStoreList().SpOutputs, user.output_list_vec, null);
|
||||||
console.log("JS Sessionstore added currentprocess");
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Failed to write user object :", error);
|
console.error("Failed to write user object :", error);
|
||||||
}
|
}
|
||||||
@ -201,8 +194,6 @@ class Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async displayUpdateAnId() {
|
public async displayUpdateAnId() {
|
||||||
let currentProcess = await this.getCurrentProcess();
|
|
||||||
|
|
||||||
let body = "";
|
let body = "";
|
||||||
let style = "";
|
let style = "";
|
||||||
let script = "";
|
let script = "";
|
||||||
@ -210,7 +201,7 @@ class Services {
|
|||||||
const indexedDB = await IndexedDB.getInstance();
|
const indexedDB = await IndexedDB.getInstance();
|
||||||
const db = indexedDB.getDb();
|
const db = indexedDB.getDb();
|
||||||
try {
|
try {
|
||||||
let processObject = await indexedDB.getObject<Processstore>(db, indexedDB.getStoreList().AnkProcess, currentProcess);
|
let processObject = await indexedDB.getObject<Processstore>(db, indexedDB.getStoreList().AnkProcess, this.current_process!);
|
||||||
body = processObject.html;
|
body = processObject.html;
|
||||||
style = processObject.style;
|
style = processObject.style;
|
||||||
script = processObject.script;
|
script = processObject.script;
|
||||||
@ -356,17 +347,17 @@ class Services {
|
|||||||
container.innerHTML = html;
|
container.innerHTML = html;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getCurrentProcess(): Promise<string> {
|
// public async getCurrentProcess(): Promise<string> {
|
||||||
let currentProcess = "";
|
// let currentProcess = "";
|
||||||
try {
|
// try {
|
||||||
const indexedDB = await IndexedDB.getInstance();
|
// const indexedDB = await IndexedDB.getInstance();
|
||||||
const db = indexedDB.getDb();
|
// const db = indexedDB.getDb();
|
||||||
currentProcess = await indexedDB.getObject<string>(db, indexedDB.getStoreList().AnkSession, Services.CURRENT_PROCESS);
|
// currentProcess = await indexedDB.getObject<string>(db, indexedDB.getStoreList().AnkSession, Services.CURRENT_PROCESS);
|
||||||
} catch (error) {
|
// } catch (error) {
|
||||||
console.error("Failed to retrieve currentprocess object :", error);
|
// console.error("Failed to retrieve currentprocess object :", error);
|
||||||
}
|
// }
|
||||||
return currentProcess;
|
// return currentProcess;
|
||||||
}
|
// }
|
||||||
|
|
||||||
public isPasswordValid(password: string) {
|
public isPasswordValid(password: string) {
|
||||||
var alertElem = document.getElementById("passwordalert");
|
var alertElem = document.getElementById("passwordalert");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user