Add session manager
This commit is contained in:
parent
a18fec21cd
commit
0e1a2dc817
7 changed files with 58 additions and 41 deletions
|
@ -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 {}))
|
||||
}
|
||||
}
|
Reference in a new issue