Add full XCA curve and digest parity
This commit is contained in:
+28
-17
@@ -4,13 +4,15 @@ use sycamore::prelude::*;
|
||||
use wasm_bindgen_futures::spawn_local;
|
||||
|
||||
use crate::api;
|
||||
use crate::components::crypto::{key_parameter_input, key_type_select, signature_hash_input};
|
||||
use crate::components::nav::{app_nav, spinner, whoami};
|
||||
use crate::components::ui::{page_header, toast_error};
|
||||
use crate::model::Me;
|
||||
use crate::model::{Me, OptionsPage};
|
||||
|
||||
pub fn SettingsPage(vault_id: String) -> View {
|
||||
let id: &'static str = Box::leak(vault_id.clone().into_boxed_str());
|
||||
let me = create_signal(None::<Me>);
|
||||
let options = create_signal(None::<OptionsPage>);
|
||||
let error = create_signal(None::<String>);
|
||||
let info = create_signal(None::<String>);
|
||||
let loading = create_signal(true);
|
||||
@@ -25,6 +27,7 @@ pub fn SettingsPage(vault_id: String) -> View {
|
||||
let hide_unusable = create_signal(false);
|
||||
let default_key_type = create_signal("rsa".to_string());
|
||||
let default_key_size = create_signal("2048".to_string());
|
||||
let default_key_curve = create_signal("secp256r1".to_string());
|
||||
let default_validity = create_signal("365".to_string());
|
||||
let default_validity_unit = create_signal("days".to_string());
|
||||
|
||||
@@ -32,6 +35,9 @@ pub fn SettingsPage(vault_id: String) -> View {
|
||||
if let Ok(user) = api::me().await {
|
||||
me.set(Some(user));
|
||||
}
|
||||
if let Ok(page) = api::options(id).await {
|
||||
options.set(Some(page));
|
||||
}
|
||||
match api::vault_settings(&id).await {
|
||||
Ok(value) => {
|
||||
version.set(value.get("version").and_then(|v| v.as_i64()).unwrap_or(0));
|
||||
@@ -57,6 +63,9 @@ pub fn SettingsPage(vault_id: String) -> View {
|
||||
if let Some(v) = key.get("size").and_then(|v| v.as_i64()) {
|
||||
default_key_size.set(v.to_string());
|
||||
}
|
||||
if let Some(v) = key.get("curve").and_then(|v| v.as_str()) {
|
||||
default_key_curve.set(v.to_string());
|
||||
}
|
||||
}
|
||||
if let Some(validity) = settings.get("default_validity") {
|
||||
if let Some(v) = validity.get("amount").and_then(|v| v.as_i64()) {
|
||||
@@ -87,7 +96,11 @@ pub fn SettingsPage(vault_id: String) -> View {
|
||||
"default_key": {
|
||||
"type": default_key_type.get_clone(),
|
||||
"size": default_key_size.get_clone().parse::<i64>().unwrap_or(2048),
|
||||
"curve": null,
|
||||
"curve": if default_key_type.get_clone() == "ec" {
|
||||
json!(default_key_curve.get_clone())
|
||||
} else {
|
||||
serde_json::Value::Null
|
||||
},
|
||||
},
|
||||
"default_validity": {
|
||||
"amount": default_validity.get_clone().parse::<i64>().unwrap_or(365),
|
||||
@@ -130,14 +143,12 @@ pub fn SettingsPage(vault_id: String) -> View {
|
||||
div(class="form-section-title") { "Cryptography" }
|
||||
div(class="row g-3") {
|
||||
div(class="col-md-4") {
|
||||
label(class="form-label") { "Default signature hash" }
|
||||
select(class="form-select", bind:value=default_hash) {
|
||||
option(value="sha256") { "SHA-256" }
|
||||
option(value="sha384") { "SHA-384" }
|
||||
option(value="sha512") { "SHA-512" }
|
||||
option(value="sha224") { "SHA-224" }
|
||||
option(value="sha1") { "SHA-1" }
|
||||
}
|
||||
(signature_hash_input(
|
||||
"Default signature hash",
|
||||
options,
|
||||
|| None,
|
||||
default_hash,
|
||||
))
|
||||
}
|
||||
div(class="col-md-4") {
|
||||
label(class="form-label") { "Serial number length (bits)" }
|
||||
@@ -175,15 +186,15 @@ pub fn SettingsPage(vault_id: String) -> View {
|
||||
div(class="row g-3") {
|
||||
div(class="col-md-4") {
|
||||
label(class="form-label") { "Default key type" }
|
||||
select(class="form-select", bind:value=default_key_type) {
|
||||
option(value="rsa") { "RSA" }
|
||||
option(value="ec") { "EC" }
|
||||
option(value="ed25519") { "ED25519" }
|
||||
}
|
||||
(key_type_select(options, default_key_type))
|
||||
}
|
||||
div(class="col-md-4") {
|
||||
label(class="form-label") { "Default key size" }
|
||||
input(class="form-control", bind:value=default_key_size)
|
||||
(key_parameter_input(
|
||||
options,
|
||||
default_key_type,
|
||||
default_key_size,
|
||||
default_key_curve,
|
||||
))
|
||||
}
|
||||
div(class="col-md-4 d-flex align-items-end") {
|
||||
button(class="btn btn-primary", disabled=saving.get(), on:click=save) {
|
||||
|
||||
Reference in New Issue
Block a user