pub mod address;
pub mod auth;
pub mod authenticator;
pub mod bootstrapped_identities_store;
pub mod cli_state;
pub mod cloud;
pub mod config;
pub mod echoer;
pub mod enroll;
pub mod error;
pub mod hop;
pub mod identity;
pub mod kafka;
pub mod minicbor_url;
pub mod nodes;
pub mod okta;
pub mod port_range;
pub mod trust_context;
pub mod uppercase;
pub mod authority_node;
mod influxdb_token_lease;
pub mod logs;
mod schema;
mod session;
mod util;
pub use influxdb_token_lease::*;
pub use session::sessions::ConnectionStatus;
pub use util::*;
#[macro_use]
extern crate tracing;
pub struct DefaultAddress;
impl DefaultAddress {
pub const AUTHENTICATED_SERVICE: &'static str = "authenticated";
pub const RELAY_SERVICE: &'static str = "forwarding_service";
pub const UPPERCASE_SERVICE: &'static str = "uppercase";
pub const ECHO_SERVICE: &'static str = "echo";
pub const HOP_SERVICE: &'static str = "hop";
pub const CREDENTIALS_SERVICE: &'static str = "credentials";
pub const SECURE_CHANNEL_LISTENER: &'static str = "api";
pub const DIRECT_AUTHENTICATOR: &'static str = "direct_authenticator";
pub const CREDENTIAL_ISSUER: &'static str = "credential_issuer";
pub const ENROLLMENT_TOKEN_ISSUER: &'static str = "enrollment_token_issuer";
pub const ENROLLMENT_TOKEN_ACCEPTOR: &'static str = "enrollment_token_acceptor";
pub const OKTA_IDENTITY_PROVIDER: &'static str = "okta";
pub const KAFKA_OUTLET: &'static str = "kafka_outlet";
pub const KAFKA_CONSUMER: &'static str = "kafka_consumer";
pub const KAFKA_PRODUCER: &'static str = "kafka_producer";
pub const KAFKA_DIRECT: &'static str = "kafka_direct";
pub fn is_valid(name: &str) -> bool {
matches!(
name,
Self::AUTHENTICATED_SERVICE
| Self::RELAY_SERVICE
| Self::UPPERCASE_SERVICE
| Self::ECHO_SERVICE
| Self::HOP_SERVICE
| Self::CREDENTIALS_SERVICE
| Self::SECURE_CHANNEL_LISTENER
| Self::DIRECT_AUTHENTICATOR
| Self::CREDENTIAL_ISSUER
| Self::ENROLLMENT_TOKEN_ISSUER
| Self::ENROLLMENT_TOKEN_ACCEPTOR
| Self::OKTA_IDENTITY_PROVIDER
| Self::KAFKA_CONSUMER
| Self::KAFKA_PRODUCER
| Self::KAFKA_OUTLET
| Self::KAFKA_DIRECT
)
}
pub fn iter() -> impl Iterator<Item = &'static str> {
[
Self::AUTHENTICATED_SERVICE,
Self::RELAY_SERVICE,
Self::UPPERCASE_SERVICE,
Self::ECHO_SERVICE,
Self::HOP_SERVICE,
Self::CREDENTIALS_SERVICE,
Self::SECURE_CHANNEL_LISTENER,
Self::DIRECT_AUTHENTICATOR,
Self::CREDENTIAL_ISSUER,
Self::ENROLLMENT_TOKEN_ISSUER,
Self::ENROLLMENT_TOKEN_ACCEPTOR,
Self::OKTA_IDENTITY_PROVIDER,
Self::KAFKA_CONSUMER,
Self::KAFKA_PRODUCER,
Self::KAFKA_OUTLET,
Self::KAFKA_DIRECT,
]
.iter()
.copied()
}
}
pub mod actions {
use ockam_abac::Action;
pub const HANDLE_MESSAGE: Action = Action::assert_inline("handle_message");
}
pub mod resources {
use ockam_abac::Resource;
pub const INLET: Resource = Resource::assert_inline("tcp-inlet");
pub const OUTLET: Resource = Resource::assert_inline("tcp-outlet");
}
use core::fmt;
use minicbor::{Decode, Encode};
use serde::{Deserialize, Deserializer, Serialize, Serializer};
#[derive(Debug, Clone, Default, Encode, Decode)]
#[cbor(transparent)]
pub struct HexByteVec(#[n(0)] pub Vec<u8>);
impl HexByteVec {
pub fn as_slice(&self) -> &[u8] {
&self.0
}
}
impl From<Vec<u8>> for HexByteVec {
fn from(v: Vec<u8>) -> Self {
Self(v)
}
}
impl From<HexByteVec> for Vec<u8> {
fn from(h: HexByteVec) -> Self {
h.0
}
}
impl Serialize for HexByteVec {
fn serialize<S: Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
if s.is_human_readable() {
hex::serde::serialize(&*self.0, s)
} else {
s.serialize_bytes(&self.0)
}
}
}
impl<'de> Deserialize<'de> for HexByteVec {
fn deserialize<D: Deserializer<'de>>(d: D) -> Result<Self, D::Error> {
if d.is_human_readable() {
let v: Vec<u8> = hex::serde::deserialize(d)?;
Ok(Self(v))
} else {
let v = <Vec<u8>>::deserialize(d)?;
Ok(Self(v))
}
}
}
impl fmt::Display for HexByteVec {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.serialize(f)
}
}
#[cfg(test)]
mod test {
use super::DefaultAddress;
#[test]
fn test_default_address_is_valid() {
assert!(!DefaultAddress::is_valid("foo"));
assert!(DefaultAddress::is_valid(
DefaultAddress::AUTHENTICATED_SERVICE
));
assert!(DefaultAddress::is_valid(DefaultAddress::RELAY_SERVICE));
assert!(DefaultAddress::is_valid(DefaultAddress::UPPERCASE_SERVICE));
assert!(DefaultAddress::is_valid(DefaultAddress::ECHO_SERVICE));
assert!(DefaultAddress::is_valid(DefaultAddress::HOP_SERVICE));
assert!(DefaultAddress::is_valid(
DefaultAddress::CREDENTIALS_SERVICE
));
assert!(DefaultAddress::is_valid(
DefaultAddress::SECURE_CHANNEL_LISTENER
));
assert!(DefaultAddress::is_valid(
DefaultAddress::DIRECT_AUTHENTICATOR
));
assert!(DefaultAddress::is_valid(DefaultAddress::CREDENTIAL_ISSUER));
assert!(DefaultAddress::is_valid(
DefaultAddress::ENROLLMENT_TOKEN_ISSUER
));
assert!(DefaultAddress::is_valid(
DefaultAddress::ENROLLMENT_TOKEN_ACCEPTOR
));
assert!(DefaultAddress::is_valid(
DefaultAddress::OKTA_IDENTITY_PROVIDER
));
assert!(DefaultAddress::is_valid(DefaultAddress::KAFKA_CONSUMER));
assert!(DefaultAddress::is_valid(DefaultAddress::KAFKA_PRODUCER));
}
}