adapted to changes in signer lib

This commit is contained in:
polwex 2025-03-20 01:11:20 +07:00
parent cd4bf0c99e
commit 50d5f9f387
5 changed files with 50 additions and 25 deletions

View File

@ -29,6 +29,15 @@ wit_bindgen::generate!({
additional_derives: [PartialEq, serde::Deserialize, serde::Serialize, process_macros::SerdeJsonInto], additional_derives: [PartialEq, serde::Deserialize, serde::Serialize, process_macros::SerdeJsonInto],
}); });
#[derive(Debug, Serialize, Deserialize)]
enum SignerRequest {
Sign,
Verify { node: String, signature: Vec<u8> },
}
#[derive(Debug, Serialize, Deserialize, SerdeJsonInto)]
struct SignResponse {
signature: Vec<u8>,
}
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
enum FrontendRequest { enum FrontendRequest {
Sign, Sign,
@ -37,22 +46,11 @@ enum FrontendRequest {
Debug(String), Debug(String),
} }
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
enum SignerRequest { struct LoginMessage {
Sign(SignRequest),
Verify { from: Address, data: SignResponse },
}
#[derive(Debug, Serialize, Deserialize)]
struct SignRequest {
pub site: String, pub site: String,
pub time: u64, pub time: u64,
pub nonce: Option<String>, pub nonce: Option<String>,
} }
#[derive(Debug, Serialize, Deserialize, SerdeJsonInto)]
struct SignResponse {
pub body: SignRequest,
pub message: Vec<u8>,
pub signature: Vec<u8>,
}
const ICON: &str = include_str!("icon"); const ICON: &str = include_str!("icon");
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
@ -94,6 +92,35 @@ impl VersionedState {
} }
} }
fn _signer_test(our: &Address) -> anyhow::Result<()> {
let target = Address::new(our.node(), ("sign", "sign", "sys"));
let login_message = LoginMessage {
site: WEB2_URL.to_string(),
nonce: Some(WEB2_LOGIN_NONCE.to_string()),
time: get_now(),
};
let blob = serde_json::to_vec(&login_message)?;
// Get the signature from login:sys:sys
let res: SignResponse = Request::to(target.clone())
.blob_bytes(blob.clone())
.body(serde_json::to_vec(&SignerRequest::Sign)?)
.send_and_await_response(10)??
.body()
.try_into()?;
// Send signature to designated endpoint on Web2 app
let body2 = SignerRequest::Verify {
node: our.node().to_string(),
signature: res.signature,
};
let verify_res = Request::to(target)
.blob_bytes(blob)
.body(serde_json::to_vec(&body2)?)
.send_and_await_response(10)??;
let is_good: bool = serde_json::from_slice(verify_res.body())?;
kiprintln!("verify_res \n{:#?}", is_good);
Ok(())
}
call_init!(initialize); call_init!(initialize);
fn initialize(our: Address) { fn initialize(our: Address) {
init_logging(Level::DEBUG, Level::INFO, None, None, None).unwrap(); init_logging(Level::DEBUG, Level::INFO, None, None, None).unwrap();
@ -115,12 +142,6 @@ fn initialize(our: Address) {
http_server http_server
.bind_ws_path("/", WsBindingConfig::default()) .bind_ws_path("/", WsBindingConfig::default())
.unwrap(); .unwrap();
// let http_config = HttpBindingConfig::default().secure_subdomain(true);
// http_server
// .serve_ui("ui", vec!["/hypr-login"], http_config.clone())
// .expect("Failed to serve UI");
// http_server.secure_bind_http_path("/").unwrap();
main_loop(&our, &mut state, &mut http_server); main_loop(&our, &mut state, &mut http_server);
} }
@ -207,15 +228,17 @@ fn handle_login_request(
let request = serde_json::from_slice::<FrontendRequest>(request_bytes)?; let request = serde_json::from_slice::<FrontendRequest>(request_bytes)?;
match request { match request {
FrontendRequest::Sign => { FrontendRequest::Sign => {
let target = Address::new(our.node(), ("login", "login", "sys")); let target = Address::new(our.node(), ("sign", "sign", "sys"));
let lr = SignerRequest::Sign(SignRequest { let body = LoginMessage {
site: WEB2_URL.to_string(), site: WEB2_URL.to_string(),
nonce: Some(WEB2_LOGIN_NONCE.to_string()), nonce: Some(WEB2_LOGIN_NONCE.to_string()),
time: get_now(), time: get_now(),
}); };
let body_bytes = serde_json::to_vec(&body)?;
// Get the signature from login:sys:sys // Get the signature from login:sys:sys
let res: SignResponse = Request::to(target) let res: SignResponse = Request::to(target)
.body(serde_json::to_vec(&lr)?) .blob_bytes(body_bytes)
.body(serde_json::to_vec(&SignerRequest::Sign)?)
.send_and_await_response(10)?? .send_and_await_response(10)??
.body() .body()
.try_into()?; .try_into()?;
@ -255,7 +278,8 @@ fn attempt_login(
let mut json_headers = HashMap::new(); let mut json_headers = HashMap::new();
json_headers.insert("Content-type".to_string(), "application/json".to_string()); json_headers.insert("Content-type".to_string(), "application/json".to_string());
let node = our.node(); let node = our.node();
let message = signature_response.message; let blob = get_blob().ok_or(anyhow::anyhow!("no blob"))?;
let message = blob.bytes();
let signature = signature_response.signature; let signature = signature_response.signature;
let json = let json =
serde_json::to_vec(&json!({"node":node, "message": message, "signature": signature}))?; serde_json::to_vec(&json!({"node":node, "message": message, "signature": signature}))?;

View File

@ -227,6 +227,7 @@ fn mother_script(prefix: &str) -> String {
<script> <script>
const HYPERWARE_APP_PATH = '{0}'; const HYPERWARE_APP_PATH = '{0}';
</script> </script>
<script src="./proxy.js" />
"#, "#,
prefix prefix
); );

Binary file not shown.

Binary file not shown.

View File

@ -8,14 +8,14 @@
"homepage:homepage:sys", "homepage:homepage:sys",
"http-server:distro:sys", "http-server:distro:sys",
"http-client:distro:sys", "http-client:distro:sys",
"login:login:sys", "sign:sign:sys",
"vfs:distro:sys" "vfs:distro:sys"
], ],
"grant_capabilities": [ "grant_capabilities": [
"homepage:homepage:sys", "homepage:homepage:sys",
"http-server:distro:sys", "http-server:distro:sys",
"http-client:distro:sys", "http-client:distro:sys",
"login:login:sys", "sign:sign:sys",
"vfs:distro:sys" "vfs:distro:sys"
], ],
"public": false "public": false