atm0s_media_server_secure/
lib.rs1use 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
14pub 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
25pub 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
32pub 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}