Fix VNC connection issue
This commit is contained in:
@ -6,14 +6,14 @@ use std::time::Duration;
|
||||
|
||||
const TOKENS_CLEAN_INTERVAL: Duration = Duration::from_secs(60);
|
||||
const VNC_TOKEN_LEN: usize = 15;
|
||||
const VNC_TOKEN_LIFETIME: u64 = 120;
|
||||
pub const VNC_TOKEN_LIFETIME: u64 = 30;
|
||||
|
||||
#[derive(thiserror::Error, Debug)]
|
||||
enum VNCTokenError {
|
||||
#[error("Could not consume token, because it does not exist!")]
|
||||
ConsumeErrorTokenNotFound,
|
||||
#[error("Could not consume token, because it has expired!")]
|
||||
ConsumeErrorTokenExpired,
|
||||
#[error("Could not use token, because it does not exist!")]
|
||||
UseErrorTokenNotFound,
|
||||
#[error("Could not use token, because it has expired!")]
|
||||
UseErrorTokenExpired,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@ -64,24 +64,22 @@ impl Handler<IssueTokenReq> for VNCTokensActor {
|
||||
|
||||
#[derive(Message)]
|
||||
#[rtype(result = "anyhow::Result<XMLUuid>")]
|
||||
pub struct ConsumeTokenReq(String);
|
||||
pub struct UseTokenReq(String);
|
||||
|
||||
impl Handler<ConsumeTokenReq> for VNCTokensActor {
|
||||
impl Handler<UseTokenReq> for VNCTokensActor {
|
||||
type Result = anyhow::Result<XMLUuid>;
|
||||
|
||||
fn handle(&mut self, msg: ConsumeTokenReq, _ctx: &mut Self::Context) -> Self::Result {
|
||||
log::debug!("Attempt to consume a token {:?}", msg.0);
|
||||
fn handle(&mut self, msg: UseTokenReq, _ctx: &mut Self::Context) -> Self::Result {
|
||||
log::debug!("Attempt to use a token {:?}", msg.0);
|
||||
|
||||
let token_index = self
|
||||
let token = self
|
||||
.0
|
||||
.iter()
|
||||
.position(|i| i.token == msg.0)
|
||||
.ok_or(VNCTokenError::ConsumeErrorTokenNotFound)?;
|
||||
|
||||
let token = self.0.remove(token_index);
|
||||
.find(|i| i.token == msg.0)
|
||||
.ok_or(VNCTokenError::UseErrorTokenNotFound)?;
|
||||
|
||||
if token.is_expired() {
|
||||
return Err(VNCTokenError::ConsumeErrorTokenExpired.into());
|
||||
return Err(VNCTokenError::UseErrorTokenExpired.into());
|
||||
}
|
||||
|
||||
Ok(token.vm)
|
||||
@ -101,8 +99,8 @@ impl VNCTokensManager {
|
||||
self.0.send(IssueTokenReq(id)).await?
|
||||
}
|
||||
|
||||
/// Consume a VNC access token
|
||||
pub async fn consume_token(&self, token: String) -> anyhow::Result<XMLUuid> {
|
||||
self.0.send(ConsumeTokenReq(token)).await?
|
||||
/// Use a VNC access token
|
||||
pub async fn use_token(&self, token: String) -> anyhow::Result<XMLUuid> {
|
||||
self.0.send(UseTokenReq(token)).await?
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user