Skip to content

Commit 2eaa928

Browse files
committed
meta vault web:
- progress in the registration step - send http requests using meta-secret-core rust lib - migrate to openapi objects generation Signed-off-by: metabynull <[email protected]>
1 parent 49696ba commit 2eaa928

File tree

4 files changed

+140
-33
lines changed

4 files changed

+140
-33
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ web-cli/wasm/target
1313
web-cli/ui/src/model
1414
web-cli/ui/node_modules
1515
meta-secret-core/schema/openapitools.json
16+
/meta-secret-core/schema/openapitools.json

web-cli/ui/src/views/VaultView.vue

+119-30
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
<script lang="ts">
22
import {defineComponent} from 'vue'
3-
import init, {generate_security_box, get_user_sig, register} from "meta-secret-web-cli";
4-
import type {DeviceInfo, UserSecurityBox, UserSignature} from "@/model/models";
3+
import init, {generate_security_box, get_user_sig, get_vault, register} from "meta-secret-web-cli";
4+
import {
5+
type DeviceInfo,
6+
RegistrationStatus,
7+
type UserSecurityBox,
8+
type UserSignature,
9+
VaultInfoStatus
10+
} from "@/model/models";
511
612
interface User {
713
securityBox?: UserSecurityBox,
@@ -26,10 +32,15 @@ export default defineComponent({
2632
return {
2733
user: defaultUser,
2834
userId: '',
29-
passwordStorage: defaultPasswordStorage
35+
joinComponent: false,
36+
passwordStorage: defaultPasswordStorage,
3037
}
3138
},
3239
mounted() {
40+
if (localStorage.userId) {
41+
this.userId = localStorage.userId;
42+
}
43+
3344
if (localStorage.user) {
3445
this.user = localStorage.user;
3546
}
@@ -39,10 +50,13 @@ export default defineComponent({
3950
}
4051
},
4152
53+
/**
54+
* https://v2.vuejs.org/v2/cookbook/client-side-storage.html
55+
*/
4256
watch: {
4357
user(newUser) {
44-
localStorage.user = newUser;
45-
}
58+
localStorage.user = JSON.stringify(newUser);
59+
},
4660
},
4761
4862
methods: {
@@ -53,21 +67,59 @@ export default defineComponent({
5367
deviceName: "d1"
5468
}
5569
56-
let securityBox = generate_security_box("test_vault_web");
70+
let securityBox = generate_security_box(this.userId);
5771
let userSig = get_user_sig(securityBox, device);
72+
console.log("generated user sig: ", userSig);
5873
5974
this.user = {
6075
securityBox: securityBox,
6176
userSig: userSig
6277
};
78+
this.initUser();
6379
64-
let registrationStatus = await register(userSig);
65-
console.log("Registration status: ", registrationStatus);
80+
let vault = await get_vault(userSig);
81+
console.log("vault: ", JSON.stringify(vault));
6682
83+
if (vault.data.vaultInfo === VaultInfoStatus.NotFound) {
84+
await this.userRegistration();
85+
}
6786
87+
// Unknown status means, user is not a member of a vault
88+
if (vault.data.vaultInfo === VaultInfoStatus.Unknown) {
89+
//join to the vault or choose another vault name
90+
this.joinComponent = true;
91+
}
6892
})
6993
},
7094
95+
async join() {
96+
init().then(async () => {
97+
//send join request
98+
console.log("js user sig: ", JSON.parse(localStorage.user).userSig);
99+
return await this.userRegistration();
100+
})
101+
},
102+
103+
async userRegistration() {
104+
let userSig = JSON.parse(localStorage.user).userSig;
105+
alert("User registration with: " + userSig);
106+
107+
let registrationStatus = await register(userSig);
108+
console.log("registration status: ", registrationStatus.data);
109+
switch (registrationStatus.data) {
110+
case RegistrationStatus.Registered:
111+
// register button gets unavailable, userId kept in local storage
112+
alert("Your vault has been registered");
113+
return;
114+
case RegistrationStatus.AlreadyExists:
115+
alert("Join request has been sent, please wait for approval");
116+
return;
117+
default:
118+
alert("Unknown error!!!!! Unknown registration status! Invalid response from server");
119+
return;
120+
}
121+
},
122+
71123
addPassword() {
72124
console.log("Add password into a distributed storage");
73125
@@ -84,8 +136,23 @@ export default defineComponent({
84136
this.passwordStorage.shares.push(share1);
85137
},
86138
87-
alert() {
88-
alert('yay');
139+
cleanUpUser() {
140+
localStorage.setItem('userId', '');
141+
},
142+
143+
isNewUser() {
144+
if (localStorage.userId) {
145+
if (localStorage.userId !== '') {
146+
return false;
147+
}
148+
}
149+
150+
return true;
151+
},
152+
153+
initUser() {
154+
localStorage.userId = this.userId;
155+
localStorage.user = JSON.stringify(this.user);
89156
}
90157
}
91158
})
@@ -104,28 +171,52 @@ export default defineComponent({
104171

105172
<div class="py-4"></div>
106173

107-
<div class="container flex items-center justify-center max-w-md border-b border-t py-2 px-4">
108-
<label>@</label>
109-
<input
110-
class="appearance-none bg-transparent border-none w-full text-gray-700 mr-3 py-1 px-2 leading-tight focus:outline-none"
111-
type="text"
112-
placeholder="user_id"
113-
aria-label="Full name"
114-
v-model="userId"
115-
>
116-
<button
117-
class="flex-shrink-0 bg-teal-500 hover:bg-teal-700 border-teal-500 hover:border-teal-700 text-sm border-4 text-white py-1 px-2 rounded"
118-
type="button"
119-
@click="generateUser"
120-
>
121-
Register
122-
</button>
174+
<div>
175+
<div class="container flex items-center max-w-md py-2">
176+
<label>User:</label>
177+
</div>
178+
179+
<div class="container flex items-center justify-center max-w-md border-b border-t border-l border-r py-2 px-4">
180+
<label>@</label>
181+
<input
182+
class="appearance-none bg-transparent border-none w-full text-gray-700 mr-3 py-1 px-2 leading-tight focus:outline-none"
183+
type="text"
184+
placeholder="user_id"
185+
aria-label="Full name"
186+
v-model="userId"
187+
v-bind:disabled="!isNewUser"
188+
>
189+
<button
190+
class="flex-shrink-0 bg-teal-500 hover:bg-teal-700 border-teal-500 hover:border-teal-700 text-sm border-4 text-white py-1 px-2 rounded"
191+
type="button"
192+
@click="generateUser"
193+
v-if="isNewUser"
194+
>
195+
Register
196+
</button>
197+
</div>
198+
</div>
199+
200+
<div v-if="joinComponent">
201+
<div class="container flex items-center max-w-md py-2 px-4">
202+
<label
203+
class="appearance-none bg-transparent border-none w-full text-gray-700 mr-3 py-1 leading-tight focus:outline-none">
204+
Vault already exists, would you like to join?
205+
</label>
206+
<button
207+
class="flex-shrink-0 bg-teal-500 hover:bg-teal-700 border-teal-500 hover:border-teal-700 text-sm border-4 text-white py-1 px-4 rounded"
208+
type="button"
209+
@click="join"
210+
>
211+
Join
212+
</button>
213+
</div>
123214
</div>
124215

125-
<div class="py-4"/>
216+
<div class="py-8"/>
126217

127218
<div class="container flex flex-col items-center justify-center max-w-md py-2 px-4">
128-
<div class="">
219+
<div class="flex">
129220
<p class="text-xl py-2">Password</p>
130221
</div>
131222

@@ -141,8 +232,6 @@ export default defineComponent({
141232
<div class="px-4">id: 12345678</div>
142233
<div class="px-4">share: my share 1</div>
143234
</div>
144-
145-
146235
</div>
147236

148237

web-cli/wasm/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ default = ["console_error_panic_hook"]
1313
[dependencies]
1414
wasm-bindgen = { version = "0.2.83", features = ["serde-serialize"] }
1515

16-
meta-secret-core = { version = "1.10.0" }
17-
#meta-secret-core = { path = "../../../meta-secret-core/core" }
16+
#meta-secret-core = { version = "1.10.0" }
17+
meta-secret-core = { path = "../../meta-secret-core/core" }
1818

1919
serde = { version = "1.0.151", features = ["derive"] }
2020
serde_json = "1.0.90"

web-cli/wasm/src/lib.rs

+18-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ extern "C" {
3030

3131
#[wasm_bindgen]
3232
pub fn register(user_sig: JsValue) -> Promise {
33-
log("wasm: register a new user!");
33+
log(format!("wasm: register a new user! with: {:?}", user_sig).as_str());
3434

3535
let user_sig = serde_wasm_bindgen::from_value(user_sig).unwrap();
3636
let task = server_registration(user_sig);
@@ -43,6 +43,23 @@ async fn server_registration(user_sig: UserSignature) -> Result<JsValue, JsValue
4343
Ok(serde_wasm_bindgen::to_value(&register_async_task).unwrap())
4444
}
4545

46+
#[wasm_bindgen]
47+
pub fn get_vault(user_sig: JsValue) -> Promise {
48+
log("wasm: get vault!");
49+
50+
let user_sig = serde_wasm_bindgen::from_value(user_sig).unwrap();
51+
log("wasm: user sig!");
52+
let vault_future = get_vault_from_server(user_sig);
53+
log("wasm: request!");
54+
future_to_promise(vault_future)
55+
}
56+
57+
async fn get_vault_from_server(user_sig: UserSignature) -> Result<JsValue, JsValue> {
58+
log("wasm: get vault request");
59+
let get_vault_task = server_api::get_vault(&user_sig).await.unwrap();
60+
Ok(serde_wasm_bindgen::to_value(&get_vault_task).unwrap())
61+
}
62+
4663
#[wasm_bindgen]
4764
pub fn generate_security_box(vault_name: &str) -> JsValue {
4865
log("generate new user! wasm");

0 commit comments

Comments
 (0)