Remove serde json from wasm (#2304)

* Remove serde json from wasm
* Fix missing json
This commit is contained in:
Firstyear 2023-11-12 15:38:37 +10:00 committed by GitHub
parent 8a40f5ab7b
commit a2a3010860
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
42 changed files with 157 additions and 134 deletions

4
Cargo.lock generated
View file

@ -3363,7 +3363,6 @@ dependencies = [
"kanidmd_web_ui_shared",
"serde",
"serde-wasm-bindgen 0.5.0",
"serde_json",
"time",
"uuid",
"wasm-bindgen",
@ -3385,7 +3384,6 @@ dependencies = [
"kanidmd_web_ui_shared",
"serde",
"serde-wasm-bindgen 0.5.0",
"serde_json",
"time",
"uuid",
"wasm-bindgen",
@ -3405,7 +3403,6 @@ dependencies = [
"kanidm_proto",
"serde",
"serde-wasm-bindgen 0.5.0",
"serde_json",
"time",
"url",
"uuid",
@ -3431,7 +3428,6 @@ dependencies = [
"regex",
"serde",
"serde-wasm-bindgen 0.5.0",
"serde_json",
"time",
"uuid",
"wasm-bindgen",

View file

@ -23,7 +23,6 @@ kanidmd_web_ui_shared = { workspace = true }
gloo = { workspace = true }
js-sys = { workspace = true }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
serde-wasm-bindgen = { workspace = true }
time = { workspace = true }
uuid = { workspace = true }

View file

@ -1,6 +1,7 @@
use std::collections::BTreeMap;
use gloo::console;
use wasm_bindgen::JsValue;
use yew::{html, Component, Context, Html, Properties};
use yew_router::prelude::Link;
@ -90,7 +91,8 @@ pub async fn get_accounts() -> Result<AdminListAccountsMsg, GetError> {
];
for (endpoint, object_type) in endpoints {
let (_, _, value, _) = match do_request(endpoint, RequestMethod::GET, None).await {
let (_, _, value, _) = match do_request(endpoint, RequestMethod::GET, None::<JsValue>).await
{
Ok(val) => val,
Err(error) => {
return Err(GetError {
@ -527,7 +529,7 @@ pub async fn get_person(uuid: &str) -> Result<AdminViewPersonMsg, GetError> {
let (_, _, value, _) = match do_request(
format!("/v1/person/{}", uuid).as_str(),
RequestMethod::GET,
None,
None::<JsValue>,
)
.await
{
@ -555,7 +557,7 @@ pub async fn get_service_account(uuid: &str) -> Result<AdminViewServiceAccountMs
let (_, _, value, _) = match do_request(
format!("/v1/service_account/{}", uuid).as_str(),
RequestMethod::GET,
None,
None::<JsValue>,
)
.await
{

View file

@ -2,6 +2,7 @@ use std::collections::BTreeMap;
use gloo::console;
use kanidmd_web_ui_shared::utils::{do_alert_error, do_page_header};
use wasm_bindgen::JsValue;
use yew::{html, Component, Context, Html, Properties};
use yew_router::prelude::Link;
@ -70,7 +71,8 @@ pub async fn get_groups() -> Result<AdminListGroupsMsg, GetError> {
let endpoints = [("/v1/group", EntityType::Group)];
for (endpoint, object_type) in endpoints {
let (_, _, value, _) = match do_request(endpoint, RequestMethod::GET, None).await {
let (_, _, value, _) = match do_request(endpoint, RequestMethod::GET, None::<JsValue>).await
{
Ok(val) => val,
Err(error) => {
return Err(GetError {
@ -136,12 +138,14 @@ impl Component for AdminListGroups {
match msg {
AdminListGroupsMsg::Responded { response } => {
// TODO: do we paginate here?
#[cfg(test)]
#[cfg(debug_assertions)]
for key in response.keys() {
console::debug!(
"response: {:?}",
serde_json::to_string(response.get(key).unwrap()).unwrap()
);
let j = response
.get(key)
.and_then(|k| serde_wasm_bindgen::to_value(&k).ok())
.and_then(|jsv| js_sys::JSON::stringify(&jsv).ok().map(|s| s.into()))
.unwrap_or_else(|| "Failed to dump response key".to_string());
console::log!("response: {}", j);
}
self.state = GroupsViewState::Responded { response };
return true;
@ -360,7 +364,7 @@ impl Component for AdminViewGroup {
/// pull the details for a single group by UUID
pub async fn get_group(groupid: &str) -> Result<AdminViewGroupMsg, GetError> {
let endpoint = format!("/v1/group/{}", groupid);
let (_, _, value, _) = match do_request(&endpoint, RequestMethod::GET, None).await {
let (_, _, value, _) = match do_request(&endpoint, RequestMethod::GET, None::<JsValue>).await {
Ok(val) => val,
Err(error) => {
return Err(GetError {

View file

@ -1,6 +1,7 @@
use std::collections::BTreeMap;
use gloo::console;
use wasm_bindgen::JsValue;
use yew::{html, Component, Context, Html, Properties};
use yew_router::prelude::Link;
@ -70,7 +71,8 @@ pub async fn get_entities() -> Result<AdminListOAuth2Msg, GetError> {
let endpoints = [("/v1/oauth2", EntityType::OAuth2RP)];
for (endpoint, object_type) in endpoints {
let (_, _, value, _) = match do_request(endpoint, RequestMethod::GET, None).await {
let (_, _, value, _) = match do_request(endpoint, RequestMethod::GET, None::<JsValue>).await
{
Ok(val) => val,
Err(error) => {
return Err(GetError {
@ -136,7 +138,8 @@ impl Component for AdminListOAuth2 {
for key in response.keys() {
let j = response
.get(key)
.and_then(|k| serde_json::to_string(k).ok())
.and_then(|k| serde_wasm_bindgen::to_value(&k).ok())
.and_then(|jsv| js_sys::JSON::stringify(&jsv).ok().map(|s| s.into()))
.unwrap_or_else(|| "Failed to dump response key".to_string());
console::log!("response: {}", j);
}
@ -396,7 +399,7 @@ impl Component for AdminViewOAuth2 {
pub async fn get_oauth2_rp(rs_name: &str) -> Result<AdminViewOAuth2Msg, GetError> {
let endpoint = format!("/v1/oauth2/{}", rs_name);
let (_, _, value, _) = match do_request(&endpoint, RequestMethod::GET, None).await {
let (_, _, value, _) = match do_request(&endpoint, RequestMethod::GET, None::<JsValue>).await {
Ok(val) => val,
Err(error) => {
return Err(GetError {

View file

@ -23,7 +23,6 @@ js-sys = { workspace = true }
kanidm_proto = { workspace = true, features = ["wasm"] }
kanidmd_web_ui_shared = { workspace = true }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
serde-wasm-bindgen = { workspace = true }
wasm-bindgen = { workspace = true }
wasm-bindgen-futures = { workspace = true }

View file

@ -160,9 +160,9 @@ impl LoginApp {
privileged: false,
},
};
let req_jsvalue = serde_json::to_string(&authreq)
.map(|s| JsValue::from(&s))
.expect_throw("Failed to serialise authreq");
let req_jsvalue =
serde_wasm_bindgen::to_value(&authreq).expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let (kopid, status, value, _) =
do_request("/v1/auth", RequestMethod::POST, Some(req_jsvalue)).await?;
@ -186,12 +186,12 @@ impl LoginApp {
async fn reauth_init() -> Result<LoginAppMsg, FetchError> {
let issue = AuthIssueSession::Token;
let authreq_jsvalue = serde_json::to_string(&issue)
.map(|s| JsValue::from(&s))
.expect_throw("Failed to serialise authreq");
let req_jsvalue =
serde_wasm_bindgen::to_value(&issue).expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let url = "/v1/reauth";
let (kopid, status, value, _) =
do_request(url, RequestMethod::POST, Some(authreq_jsvalue)).await?;
do_request(url, RequestMethod::POST, Some(req_jsvalue)).await?;
if status == 200 {
let state: AuthResponse = serde_wasm_bindgen::from_value(value)
@ -211,12 +211,12 @@ impl LoginApp {
}
async fn auth_step(authreq: AuthRequest) -> Result<LoginAppMsg, FetchError> {
let authreq_jsvalue = serde_json::to_string(&authreq)
.map(|s| JsValue::from(&s))
.expect_throw("Failed to serialise authreq");
let req_jsvalue =
serde_wasm_bindgen::to_value(&authreq).expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let (kopid, status, value, _) =
do_request("/v1/auth", RequestMethod::POST, Some(authreq_jsvalue)).await?;
do_request("/v1/auth", RequestMethod::POST, Some(req_jsvalue)).await?;
if status == 200 {
let state: AuthResponse = serde_wasm_bindgen::from_value(value)

View file

@ -7,7 +7,7 @@ use kanidmd_web_ui_shared::utils::{do_alert_error, do_footer, window};
use kanidmd_web_ui_shared::{
add_body_form_classes, fetch_session_valid, logo_img, remove_body_form_classes, SessionStatus,
};
use wasm_bindgen::{JsCast, JsValue, UnwrapThrowExt};
use wasm_bindgen::{JsCast, UnwrapThrowExt};
use wasm_bindgen_futures::JsFuture;
use web_sys::{Request, RequestInit, RequestMode, RequestRedirect, Response};
use yew::prelude::*;
@ -92,12 +92,12 @@ impl Oauth2App {
}
async fn fetch_authreq(authreq: AuthorisationRequest) -> Result<Oauth2Msg, FetchError> {
let authreq_jsvalue = serde_json::to_string(&authreq)
.map(|s| JsValue::from(&s))
.expect_throw("Failed to serialise authreq");
let req_jsvalue =
serde_wasm_bindgen::to_value(&authreq).expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let (kopid, status, value, headers) =
do_request(OAUTH2_AUTHORISE, RequestMethod::POST, Some(authreq_jsvalue)).await?;
do_request(OAUTH2_AUTHORISE, RequestMethod::POST, Some(req_jsvalue)).await?;
#[cfg(debug_assertions)]
console::debug!(&format!("fetch_authreq result {}", status));
@ -141,16 +141,16 @@ impl Oauth2App {
}
async fn fetch_consent_token(consent_token: String) -> Result<Oauth2Msg, FetchError> {
let consentreq_jsvalue = serde_json::to_string(&consent_token)
.map(|s| JsValue::from(&s))
.expect_throw("Failed to serialise consent_req");
let req_jsvalue =
serde_wasm_bindgen::to_value(&consent_token).expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let mut opts = RequestInit::new();
opts.method("POST");
opts.mode(RequestMode::SameOrigin);
opts.redirect(RequestRedirect::Manual); // can't replace with do_request because of this
opts.body(Some(&consentreq_jsvalue));
opts.body(Some(&req_jsvalue));
let request = Request::new_with_str_and_init(OAUTH2_AUTHORISE_PERMIT, &opts)?;

View file

@ -969,15 +969,15 @@ function __wbg_get_imports() {
const ret = wasm.memory;
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1236 = function(arg0, arg1, arg2) {
imports.wbg.__wbindgen_closure_wrapper1235 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 558, __wbg_adapter_38);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1370 = function(arg0, arg1, arg2) {
imports.wbg.__wbindgen_closure_wrapper1369 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 624, __wbg_adapter_41);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1451 = function(arg0, arg1, arg2) {
imports.wbg.__wbindgen_closure_wrapper1450 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 655, __wbg_adapter_44);
return addHeapObject(ret);
};

View file

@ -399,14 +399,14 @@ function __wbg_get_imports() {
const ret = false;
return ret;
};
imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
const ret = getObject(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_error_new = function(arg0, arg1) {
const ret = new Error(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
};
imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
const ret = getObject(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbg_setlistenerid_3183aae8fa5840fb = function(arg0, arg1) {
getObject(arg0).__yew_listener_id = arg1 >>> 0;
};
@ -910,6 +910,10 @@ function __wbg_get_imports() {
const ret = new Function(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
};
imports.wbg.__wbg_new_1b94180eeb48f2a2 = function() {
const ret = new Map();
return addHeapObject(ret);
};
imports.wbg.__wbg_next_15da6a3df9290720 = function(arg0) {
const ret = getObject(arg0).next;
return addHeapObject(ret);
@ -1005,6 +1009,10 @@ function __wbg_get_imports() {
const ret = getObject(arg0).toString();
return addHeapObject(ret);
};
imports.wbg.__wbg_set_3355b9f2d3092e3b = function(arg0, arg1, arg2) {
const ret = getObject(arg0).set(getObject(arg1), getObject(arg2));
return addHeapObject(ret);
};
imports.wbg.__wbg_isSafeInteger_c38b0a16d0c7cef7 = function(arg0) {
const ret = Number.isSafeInteger(getObject(arg0));
return ret;
@ -1062,6 +1070,10 @@ function __wbg_get_imports() {
const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));
return ret;
}, arguments) };
imports.wbg.__wbg_stringify_4039297315a25b00 = function() { return handleError(function (arg0) {
const ret = JSON.stringify(getObject(arg0));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbindgen_bigint_get_as_i64 = function(arg0, arg1) {
const v = getObject(arg1);
const ret = typeof(v) === 'bigint' ? v : undefined;
@ -1082,16 +1094,16 @@ function __wbg_get_imports() {
const ret = wasm.memory;
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1410 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 503, __wbg_adapter_48);
imports.wbg.__wbindgen_closure_wrapper1407 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 501, __wbg_adapter_48);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1773 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 632, __wbg_adapter_51);
imports.wbg.__wbindgen_closure_wrapper1770 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 630, __wbg_adapter_51);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1855 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 663, __wbg_adapter_54);
imports.wbg.__wbindgen_closure_wrapper1852 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 661, __wbg_adapter_54);
return addHeapObject(ret);
};

View file

@ -225,7 +225,7 @@ function makeMutClosure(arg0, arg1, dtor, f) {
return real;
}
function __wbg_adapter_48(arg0, arg1) {
wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h144ed1895d4228c0(arg0, arg1);
wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0b7ba1f7c88fe439(arg0, arg1);
}
let stack_pointer = 128;
@ -403,14 +403,14 @@ function __wbg_get_imports() {
const ret = false;
return ret;
};
imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
const ret = getObject(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_error_new = function(arg0, arg1) {
const ret = new Error(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
};
imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
const ret = getObject(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbg_clearTimeout_541ac0980ffcef74 = function(arg0) {
const ret = clearTimeout(takeObject(arg0));
return addHeapObject(ret);
@ -1117,6 +1117,10 @@ function __wbg_get_imports() {
const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));
return ret;
}, arguments) };
imports.wbg.__wbg_stringify_4039297315a25b00 = function() { return handleError(function (arg0) {
const ret = JSON.stringify(getObject(arg0));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbindgen_bigint_get_as_i64 = function(arg0, arg1) {
const v = getObject(arg1);
const ret = typeof(v) === 'bigint' ? v : undefined;
@ -1137,19 +1141,19 @@ function __wbg_get_imports() {
const ret = wasm.memory;
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1003 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 577, __wbg_adapter_48);
imports.wbg.__wbindgen_closure_wrapper1042 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 574, __wbg_adapter_48);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper3683 = function(arg0, arg1, arg2) {
imports.wbg.__wbindgen_closure_wrapper3684 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 1705, __wbg_adapter_51);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper3782 = function(arg0, arg1, arg2) {
imports.wbg.__wbindgen_closure_wrapper3783 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 1747, __wbg_adapter_54);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper3864 = function(arg0, arg1, arg2) {
imports.wbg.__wbindgen_closure_wrapper3865 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 1778, __wbg_adapter_57);
return addHeapObject(ret);
};

View file

@ -4,11 +4,4 @@ async function main() {
await init('/pkg/kanidmd_web_ui_login_flows_bg.wasm');
run_app();
}
main()
// this is used in modals
export function modal_hide_by_id(m) {
var elem = document.getElementById(m);
var modal = bootstrap.Modal.getInstance(elem);
modal.hide();
};
main()

View file

@ -22,7 +22,6 @@ gloo = { workspace = true }
js-sys = { workspace = true }
kanidm_proto = { workspace = true, features = ["wasm"] }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
serde-wasm-bindgen = { workspace = true }
time = { workspace = true }
url = { workspace = true }

View file

@ -44,10 +44,10 @@ pub fn push_auth_session_id(r: String) {
/// Build and send a request to the backend, with some standard headers and pull back
/// (kopid, status, json, headers)
pub async fn do_request(
pub async fn do_request<JV: AsRef<JsValue>>(
uri: &str,
method: RequestMethod,
body: Option<JsValue>,
body: Option<JV>,
) -> Result<(Option<String>, u16, JsValue, Headers), FetchError> {
let mut opts = RequestInit::new();
opts.method(&method.to_string());
@ -59,7 +59,7 @@ pub async fn do_request(
if method == RequestMethod::GET {
gloo::console::debug!("This seems odd, you've supplied a body with a GET request?")
}
opts.body(Some(&body));
opts.body(Some(body.as_ref()));
}
let request = Request::new_with_str_and_init(uri, &opts)?;
@ -167,7 +167,8 @@ impl ToString for SessionStatus {
/// Validate that the current stored session token is valid
pub async fn fetch_session_valid() -> Result<SessionStatus, FetchError> {
let (kopid, status, value, _) = do_request(V1_AUTH_VALID, RequestMethod::GET, None).await?;
let (kopid, status, value, _) =
do_request(V1_AUTH_VALID, RequestMethod::GET, None::<JsValue>).await?;
if status == 200 {
Ok(SessionStatus::TokenValid)

View file

@ -2,6 +2,7 @@
//!
use gloo::console;
use wasm_bindgen::JsValue;
use yew::{html, BaseComponent, Context, Html};
use crate::constants::{CSS_NAV_LINK, ID_SIGNOUTMODAL};
@ -19,7 +20,7 @@ pub fn signout_link() -> Html {
/// does the logout action, calling the api and clearing the local tokens
pub async fn ui_logout() -> Result<(), (String, Option<String>)> {
let (kopid, status, value, _) = do_request("/v1/logout", RequestMethod::GET, None)
let (kopid, status, value, _) = do_request("/v1/logout", RequestMethod::GET, None::<JsValue>)
.await
.map_err(|e| {
let emsg = format!("failed to logout -> {:?}", e);

View file

@ -24,7 +24,6 @@ kanidm_proto = { workspace = true, features = ["wasm"] }
kanidmd_web_ui_shared = { workspace = true }
qrcode = { workspace = true, features = ["svg"] }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
serde-wasm-bindgen = { workspace = true }
wasm-bindgen = { workspace = true }
wasm-bindgen-futures = { workspace = true }

View file

@ -4,7 +4,7 @@ use kanidmd_web_ui_shared::do_request;
use kanidmd_web_ui_shared::error::FetchError;
use kanidmd_web_ui_shared::RequestMethod;
use uuid::Uuid;
use wasm_bindgen::{JsCast, JsValue, UnwrapThrowExt};
use wasm_bindgen::{JsCast, UnwrapThrowExt};
use web_sys::{FormData, HtmlFormElement};
use yew::prelude::*;
@ -247,14 +247,15 @@ impl Component for ChangeUnixPassword {
impl ChangeUnixPassword {
async fn update_unix_password(id: Uuid, new_password: String) -> Result<Msg, FetchError> {
let changereq_jsvalue = serde_json::to_string(&SingleStringRequest {
let req_jsvalue = serde_wasm_bindgen::to_value(&SingleStringRequest {
value: new_password,
})
.map(|s| JsValue::from(&s))
.expect_throw("Failed to change request");
.expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let uri = format!("/v1/person/{}/_unix/_credential", id);
let (kopid, status, value, _) =
do_request(&uri, RequestMethod::PUT, Some(changereq_jsvalue)).await?;
do_request(&uri, RequestMethod::PUT, Some(req_jsvalue)).await?;
if status == 200 {
Ok(Msg::Success)

View file

@ -9,6 +9,7 @@ use yew::prelude::*;
use qrcode::render::svg;
use qrcode::QrCode;
use wasm_bindgen::JsValue;
use wasm_bindgen::UnwrapThrowExt;
use web_sys::Node;
@ -237,7 +238,8 @@ impl CreateResetCode {
async fn credential_get_update_intent_token(id: String) -> Result<Msg, FetchError> {
let uri = format!("/v1/person/{}/_credential/_update_intent?ttl=0", id);
let (kopid, status, value, _) = do_request(&uri, RequestMethod::GET, None).await?;
let (kopid, status, value, _) =
do_request(&uri, RequestMethod::GET, None::<JsValue>).await?;
if status == 200 {
let token: CUIntentToken =

View file

@ -7,6 +7,7 @@ use kanidmd_web_ui_shared::models::{
use kanidmd_web_ui_shared::utils::do_alert_error;
use kanidmd_web_ui_shared::{do_request, error::FetchError, RequestMethod};
use time::format_description::well_known::Rfc3339;
use wasm_bindgen::JsValue;
use wasm_bindgen::UnwrapThrowExt;
use yew::prelude::*;
use yew_router::prelude::*;
@ -254,7 +255,8 @@ impl ProfileApp {
async fn request_credential_update(id: String) -> Result<ProfileMessage, FetchError> {
let uri = format!("/v1/person/{}/_credential/_update", id);
let (kopid, status, value, _headers) = do_request(&uri, RequestMethod::GET, None).await?;
let (kopid, status, value, _headers) =
do_request(&uri, RequestMethod::GET, None::<JsValue>).await?;
if status == 200 {
let (token, status): (CUSessionToken, CUStatus) =

View file

@ -3,7 +3,7 @@ use gloo::console;
use gloo_timers::callback::{Interval, Timeout};
use kanidm_proto::internal::{IdentifyUserRequest, IdentifyUserResponse};
use kanidmd_web_ui_shared::constants::ID_IDENTITY_VERIFICATION_SYSTEM_TOTP_MODAL;
use wasm_bindgen::JsValue;
use wasm_bindgen::UnwrapThrowExt;
use wasm_timer::SystemTime;
use yew::prelude::*;
@ -55,11 +55,12 @@ impl TotpDisplayApp {
async fn renew_totp(other_id: String) -> Msg {
let uri = format!("/v1/person/{}/_identify_user", other_id);
let request = IdentifyUserRequest::DisplayCode;
let Ok(state_as_jsvalue) = serde_json::to_string(&request).map(|s| JsValue::from(&s))
else {
return Msg::Cancel;
};
let response = match do_request(&uri, RequestMethod::POST, Some(state_as_jsvalue)).await {
let req_jsvalue =
serde_wasm_bindgen::to_value(&request).expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let response = match do_request(&uri, RequestMethod::POST, Some(req_jsvalue)).await {
Ok((_, _, response, _)) => response,
Err(_) => return Msg::Cancel,
};

View file

@ -3,7 +3,7 @@ use gloo::console;
use kanidm_proto::v1::{CURequest, CUSessionToken, CUStatus};
use kanidmd_web_ui_shared::error::FetchError;
use kanidmd_web_ui_shared::utils::modal_hide_by_id;
use wasm_bindgen::{JsValue, UnwrapThrowExt};
use wasm_bindgen::UnwrapThrowExt;
use yew::prelude::*;
use super::reset::{EventBusMsg, ModalProps};
@ -47,9 +47,9 @@ impl DeleteApp {
req: CURequest,
cb: Callback<EventBusMsg>,
) -> Result<Msg, FetchError> {
let req_jsvalue = serde_json::to_string(&(req, token))
.map(|s| JsValue::from(&s))
.expect_throw("Failed to serialise pw curequest");
let req_jsvalue =
serde_wasm_bindgen::to_value(&(req, token)).expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let (kopid, status, value, _) = do_request(
"/v1/credential/_update",

View file

@ -3,7 +3,7 @@ use kanidm_proto::v1::{CURegState, CURequest, CUSessionToken, CUStatus};
use kanidm_proto::webauthn::{CreationChallengeResponse, RegisterPublicKeyCredential};
use kanidmd_web_ui_shared::constants::CLASS_BUTTON_SUCCESS;
use kanidmd_web_ui_shared::error::FetchError;
use wasm_bindgen::{JsValue, UnwrapThrowExt};
use wasm_bindgen::UnwrapThrowExt;
use wasm_bindgen_futures::JsFuture;
use yew::prelude::*;
@ -57,9 +57,9 @@ impl PasskeyModalApp {
req: CURequest,
cb: Callback<EventBusMsg>,
) -> Result<Msg, FetchError> {
let req_jsvalue = serde_json::to_string(&(req, token))
.map(|s| JsValue::from(&s))
.expect_throw("Failed to serialise pw curequest");
let req_jsvalue =
serde_wasm_bindgen::to_value(&(req, token)).expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let (kopid, status, value, _) = do_request(
"/v1/credential/_update",

View file

@ -2,7 +2,7 @@
use gloo::console;
use kanidm_proto::v1::{CURegState, CURequest, CUSessionToken, CUStatus};
use uuid::Uuid;
use wasm_bindgen::{JsValue, UnwrapThrowExt};
use wasm_bindgen::UnwrapThrowExt;
use yew::prelude::*;
use super::reset::{EventBusMsg, PasskeyRemoveModalProps};
@ -63,9 +63,9 @@ impl PasskeyRemoveModalApp {
req: CURequest,
cb: Callback<EventBusMsg>,
) -> Result<Msg, FetchError> {
let req_jsvalue = serde_json::to_string(&(req, token))
.map(|s| JsValue::from(&s))
.expect_throw("Failed to serialise pw curequest");
let req_jsvalue =
serde_wasm_bindgen::to_value(&(req, token)).expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
// this really should require a DELETE not a post!
let (kopid, status, value, _) = do_request(

View file

@ -1,6 +1,6 @@
use gloo::console;
use kanidm_proto::v1::{CURequest, CUSessionToken, CUStatus, OperationError, PasswordFeedback};
use wasm_bindgen::{JsValue, UnwrapThrowExt};
use wasm_bindgen::UnwrapThrowExt;
use yew::prelude::*;
@ -55,9 +55,9 @@ impl PwModalApp {
}
async fn submit_password_update(token: CUSessionToken, pw: String) -> Result<Msg, FetchError> {
let req_jsvalue = serde_json::to_string(&(CURequest::Password(pw), token))
.map(|s| JsValue::from(&s))
.expect_throw("Failed to serialise pw curequest");
let req_jsvalue = serde_wasm_bindgen::to_value(&(CURequest::Password(pw), token))
.expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let (kopid, status, value, _) = do_request(
"/v1/credential/_update",

View file

@ -9,7 +9,7 @@ use kanidmd_web_ui_shared::models::{get_cred_update_session, pop_return_location
use kanidmd_web_ui_shared::utils::{autofocus, do_footer};
use kanidmd_web_ui_shared::{add_body_form_classes, logo_img, remove_body_form_classes};
use uuid::Uuid;
use wasm_bindgen::{JsValue, UnwrapThrowExt};
use wasm_bindgen::UnwrapThrowExt;
use yew::prelude::*;
use yew_router::prelude::*;
@ -700,9 +700,9 @@ impl CredentialResetApp {
}
async fn exchange_intent_token(token: String) -> Result<Msg, FetchError> {
let req_jsvalue = serde_json::to_string(&CUIntentToken { token })
.map(|s| JsValue::from(&s))
.expect_throw("Failed to serialise intent request");
let req_jsvalue = serde_wasm_bindgen::to_value(&CUIntentToken { token })
.expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let (kopid, status, value, _) = do_request(
"/v1/credential/_exchange_intent",
@ -722,9 +722,9 @@ impl CredentialResetApp {
}
async fn end_session(token: CUSessionToken, url: &str) -> Result<Msg, FetchError> {
let req_jsvalue = serde_json::to_string(&token)
.map(|s| JsValue::from(&s))
.expect_throw("Failed to serialise session token");
let req_jsvalue =
serde_wasm_bindgen::to_value(&token).expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let (kopid, status, value, _) =
do_request(url, RequestMethod::POST, Some(req_jsvalue)).await?;

View file

@ -3,7 +3,7 @@ use gloo::console;
use kanidm_proto::v1::{CURegState, CURequest, CUSessionToken, CUStatus, TotpSecret};
use qrcode::render::svg;
use qrcode::QrCode;
use wasm_bindgen::{JsValue, UnwrapThrowExt};
use wasm_bindgen::UnwrapThrowExt;
use web_sys::Node;
use yew::prelude::*;
@ -68,9 +68,9 @@ impl TotpModalApp {
req: CURequest,
cb: Callback<EventBusMsg>,
) -> Result<Msg, FetchError> {
let req_jsvalue = serde_json::to_string(&(req, token))
.map(|s| JsValue::from(&s))
.expect_throw("Failed to serialise pw curequest");
let req_jsvalue =
serde_wasm_bindgen::to_value(&(req, token)).expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let (kopid, status, value, _) = do_request(
"/v1/credential/_update",

View file

@ -4,7 +4,7 @@ use gloo::console;
use kanidm_proto::v1::{CURequest, CUSessionToken, CUStatus};
use kanidmd_web_ui_shared::RequestMethod;
use kanidmd_web_ui_shared::{do_request, error::FetchError};
use wasm_bindgen::{JsValue, UnwrapThrowExt};
use wasm_bindgen::UnwrapThrowExt;
use yew::prelude::*;
pub enum Msg {
@ -101,9 +101,9 @@ impl TotpRemoveComp {
req: CURequest,
cb: Callback<EventBusMsg>,
) -> Result<Msg, FetchError> {
let req_jsvalue = serde_json::to_string(&(req, token))
.map(|s| JsValue::from(&s))
.expect_throw("Failed to serialise pw curequest");
let req_jsvalue =
serde_wasm_bindgen::to_value(&(req, token)).expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let (kopid, status, value, _) = do_request(
"/v1/credential/_update",

View file

@ -182,7 +182,7 @@ impl AppsApp {
async fn fetch_user_apps() -> Result<Msg, FetchError> {
let (kopid, status, value, _) =
do_request("/v1/self/_applinks", RequestMethod::GET, None).await?;
do_request("/v1/self/_applinks", RequestMethod::GET, None::<JsValue>).await?;
if status == 200 {
let apps: Vec<AppLink> = serde_wasm_bindgen::from_value(value)

View file

@ -3,7 +3,7 @@ use gloo::console;
use kanidm_proto::internal::{IdentifyUserRequest, IdentifyUserResponse};
use kanidmd_web_ui_shared::logo_img;
use regex::Regex;
use wasm_bindgen::JsValue;
use wasm_bindgen::{JsValue, UnwrapThrowExt};
use yew::prelude::*;
use crate::components::totpdisplay::TotpDisplayApp;
@ -490,13 +490,14 @@ impl IdentityVerificationApp {
other_id: &str,
) -> Result<IdentifyUserResponse, String> {
let uri = format!("/v1/person/{}/_identify_user", other_id);
let request_as_jsvalue = serde_json::to_string(&request)
.map(|s| JsValue::from(&s))
.map_err(|_| "Invalid request!".to_string())?;
let (_, status, response, _) =
do_request(&uri, RequestMethod::POST, Some(request_as_jsvalue))
.await
.map_err(|e| e.to_string())?;
let req_jsvalue =
serde_wasm_bindgen::to_value(&request).expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let (_, status, response, _) = do_request(&uri, RequestMethod::POST, Some(req_jsvalue))
.await
.map_err(|e| e.to_string())?;
if status != 200 {
Err(format!(
"The server responded with status code {status}, here is what went wrong: {}",
@ -511,7 +512,10 @@ impl IdentityVerificationApp {
async fn update_self_id(uuid: String) -> IdentifyUserTransition {
let uri = format!("/v1/person/{}/_attr/spn", uuid);
let outcome: Option<Vec<String>> =
match do_request(&uri, RequestMethod::GET, None).await.ok() {
match do_request(&uri, RequestMethod::GET, None::<JsValue>)
.await
.ok()
{
None => None,
Some((_, _, res, ..)) => serde_wasm_bindgen::from_value(res).ok(),
};

View file

@ -10,7 +10,7 @@ use kanidmd_web_ui_shared::constants::{
use kanidmd_web_ui_shared::models::push_return_location;
use kanidmd_web_ui_shared::ui::{signout_link, signout_modal, ui_logout};
use serde::{Deserialize, Serialize};
use wasm_bindgen::UnwrapThrowExt;
use wasm_bindgen::{JsValue, UnwrapThrowExt};
use yew::prelude::*;
use yew_router::prelude::*;
@ -299,7 +299,8 @@ impl ViewsApp {
}
async fn check_session_valid() -> Result<ViewsMsg, FetchError> {
let (kopid, status, value, _) = do_request(V1_AUTH_VALID, RequestMethod::GET, None).await?;
let (kopid, status, value, _) =
do_request(V1_AUTH_VALID, RequestMethod::GET, None::<JsValue>).await?;
if status == 200 {
Ok(ViewsMsg::Verified)
@ -313,7 +314,7 @@ impl ViewsApp {
async fn fetch_user_data() -> Result<ViewsMsg, FetchError> {
let (kopid, status, value, _) =
do_request("/v1/self/_uat", RequestMethod::GET, None).await?;
do_request("/v1/self/_uat", RequestMethod::GET, None::<JsValue>).await?;
if status == 200 {
let uat: UserAuthToken = serde_wasm_bindgen::from_value(value)