atm0s_media_server_secure/
lib.rs

1use media_server_protocol::{
2    multi_tenancy::AppContext,
3    tokens::{RtpEngineToken, WebrtcToken, WhepToken, WhipToken},
4};
5use serde::{de::DeserializeOwned, Serialize};
6
7#[cfg(feature = "jwt-secure")]
8pub mod jwt;
9
10pub trait TokenObject: Serialize + DeserializeOwned {
11    fn id() -> &'static str;
12}
13
14/// This interface is for validating and generating data in each edge node like media-node
15pub trait MediaEdgeSecure {
16    fn decode_token<O: TokenObject>(&self, data: &str) -> Option<(AppContext, O)>;
17    fn encode_conn_id<C: Serialize + DeserializeOwned>(&self, conn: C, ttl_seconds: u64) -> String;
18    fn decode_conn_id<C: Serialize + DeserializeOwned>(&self, data: &str) -> Option<C>;
19}
20
21pub trait AppStorage: Send + Sync + 'static {
22    fn validate_app(&self, secret: &str) -> Option<AppContext>;
23}
24
25/// This interface for generating signed data for gateway, like connect token
26pub trait MediaGatewaySecure {
27    fn validate_app(&self, token: &str) -> Option<AppContext>;
28    fn encode_token<O: TokenObject>(&self, ctx: &AppContext, ob: O, ttl_seconds: u64) -> String;
29    fn decode_conn_id<C: Serialize + DeserializeOwned>(&self, data: &str) -> Option<C>;
30}
31
32/// This interface for console validate session
33pub trait MediaConsoleSecure {
34    fn validate_secret(&self, secret: &str) -> bool;
35    fn validate_token(&self, token: &str) -> bool;
36    fn generate_token(&self) -> String;
37}
38
39impl TokenObject for WhipToken {
40    fn id() -> &'static str {
41        "whip"
42    }
43}
44
45impl TokenObject for WhepToken {
46    fn id() -> &'static str {
47        "whep"
48    }
49}
50
51impl TokenObject for WebrtcToken {
52    fn id() -> &'static str {
53        "webrtc"
54    }
55}
56
57impl TokenObject for RtpEngineToken {
58    fn id() -> &'static str {
59        "rtp"
60    }
61}
62
63#[derive(Default)]
64pub struct DumpAppStorage {}
65
66impl AppStorage for DumpAppStorage {
67    fn validate_app(&self, _secret: &str) -> Option<AppContext> {
68        None
69    }
70}