1
0
Fork 0

Add session manager

This commit is contained in:
Florian RICHER 2023-01-31 22:02:05 +01:00
parent a18fec21cd
commit 0e1a2dc817
7 changed files with 58 additions and 41 deletions

View file

@ -1,11 +1,11 @@
#![cfg_attr(not(unix), allow(unused_imports))]
use tonic::{Request, Response, Status};
use tonic::{Code, Request, Response, Status};
use libcommand::interpreter::{
unix_server::Unix,
AuthorizeRequest, AuthorizeResponse, AuthorizationStatus,
TerminateRequest, TerminateResponse, TerminateStatus
AuthorizeRequest, AuthorizeResponse,
TerminateRequest, TerminateResponse
};
#[derive(Default)]
@ -15,22 +15,25 @@ pub struct DaemonServer;
impl Unix for DaemonServer {
async fn authorize(
&self,
_request: Request<AuthorizeRequest>,
request: Request<AuthorizeRequest>,
) -> Result<Response<AuthorizeResponse>, Status> {
let reply = AuthorizeResponse {
status: AuthorizationStatus::Authorized.into(),
session_id: uuid::Uuid::new_v4().to_string()
};
Ok(Response::new(reply))
let session = libcommand::Session::from(request.get_ref().pid);
let session_id = session.id.clone();
super::SESSIONS.lock().unwrap().push(session);
Ok(Response::new(AuthorizeResponse {
session_id
}))
}
async fn terminate(
&self,
_request: Request<TerminateRequest>,
request: Request<TerminateRequest>,
) -> Result<Response<TerminateResponse>, Status> {
let reply = TerminateResponse {
status: TerminateStatus::Ok.into()
};
Ok(Response::new(reply))
let mut lock = super::get_sessions_lock()
.map_err(|e| Status::new(Code::Internal, e))?;
super::remove_session_by_id(&mut lock, &request.get_ref().session_id)
.map_err(|e| Status::new(Code::NotFound, e))?;
Ok(Response::new(TerminateResponse {}))
}
}