use crate::network::connection_manager::{
AuthorizationResult, Authorizer, AuthorizerCallback, AuthorizerError,
};
use crate::transport::Connection;
use super::ConnectionAuthorizationType;
use super::{AuthorizationConnector, AuthorizationManagerError, ConnectionAuthorizationState};
impl Authorizer for AuthorizationConnector {
fn authorize_connection(
&self,
connection_id: String,
connection: Box<dyn Connection>,
callback: AuthorizerCallback,
expected_authorization: Option<ConnectionAuthorizationType>,
local_authorization: Option<ConnectionAuthorizationType>,
) -> Result<(), AuthorizerError> {
self.add_connection(
connection_id,
connection,
expected_authorization,
local_authorization,
Box::new(move |state| (*callback)(state.into())),
)
.map_err(AuthorizerError::from)
}
}
impl From<ConnectionAuthorizationState> for AuthorizationResult {
fn from(state: ConnectionAuthorizationState) -> Self {
match state {
ConnectionAuthorizationState::Authorized {
connection_id,
connection,
identity,
expected_authorization,
local_authorization,
} => AuthorizationResult::Authorized {
connection_id,
connection,
identity,
expected_authorization,
local_authorization,
},
ConnectionAuthorizationState::Unauthorized {
connection_id,
connection,
} => AuthorizationResult::Unauthorized {
connection_id,
connection,
},
}
}
}
impl From<AuthorizationManagerError> for AuthorizerError {
fn from(err: AuthorizationManagerError) -> Self {
AuthorizerError(err.to_string())
}
}