Start to implement devices enrollment
This commit is contained in:
32
central_backend/src/server/devices_api/mgmt_controller.rs
Normal file
32
central_backend/src/server/devices_api/mgmt_controller.rs
Normal file
@ -0,0 +1,32 @@
|
||||
use crate::devices::device::DeviceInfo;
|
||||
use crate::server::custom_error::HttpResult;
|
||||
use actix_web::{web, HttpResponse};
|
||||
use openssl::x509::X509Req;
|
||||
|
||||
#[derive(Debug, serde::Deserialize)]
|
||||
pub struct EnrollRequest {
|
||||
/// Device CSR
|
||||
csr: String,
|
||||
/// Associated device information
|
||||
info: DeviceInfo,
|
||||
}
|
||||
|
||||
/// Enroll a new device
|
||||
pub async fn enroll(req: web::Json<EnrollRequest>) -> HttpResult {
|
||||
let csr = match X509Req::from_pem(req.csr.as_bytes()) {
|
||||
Ok(r) => r,
|
||||
Err(e) => {
|
||||
log::error!("Failed to parse given CSR! {e}");
|
||||
return Ok(HttpResponse::BadRequest().json("Failed to parse given CSR!"));
|
||||
}
|
||||
};
|
||||
|
||||
if !csr.verify(csr.public_key()?.as_ref())? {
|
||||
log::error!("Invalid CSR signature!");
|
||||
return Ok(HttpResponse::BadRequest().json("Could not verify CSR signature!"));
|
||||
}
|
||||
|
||||
println!("{:#?}", &req);
|
||||
|
||||
Ok(HttpResponse::Ok().json("go on"))
|
||||
}
|
Reference in New Issue
Block a user