aboutsummaryrefslogtreecommitdiff
path: root/stream/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'stream/src/lib.rs')
-rw-r--r--stream/src/lib.rs16
1 files changed, 12 insertions, 4 deletions
diff --git a/stream/src/lib.rs b/stream/src/lib.rs
index 85ff382..e9b9a4b 100644
--- a/stream/src/lib.rs
+++ b/stream/src/lib.rs
@@ -10,9 +10,10 @@ pub mod segment;
use anyhow::{anyhow, bail, Context, Result};
use hls::{hls_master_stream, hls_variant_stream};
-use jellybase::CONF;
+use jellybase::{permission::PermissionSetExt, CONF};
use jellycommon::{
stream::{StreamFormat, StreamSpec},
+ user::{PermissionSet, UserPermission},
LocalTrack, MediaSource, Node,
};
use jhls::jhls_stream;
@@ -41,7 +42,14 @@ pub fn stream_head(spec: &StreamSpec) -> StreamHead {
}
}
-pub async fn stream(node: Node, spec: StreamSpec, range: Range<usize>) -> Result<DuplexStream> {
+pub async fn stream(
+ node: Node,
+ spec: StreamSpec,
+ range: Range<usize>,
+ perms: &PermissionSet,
+) -> Result<DuplexStream> {
+ perms.assert(&UserPermission::StreamFormat(spec.format))?;
+
let (a, b) = duplex(4096);
let track_sources = match node
@@ -59,8 +67,8 @@ pub async fn stream(node: Node, spec: StreamSpec, range: Range<usize>) -> Result
StreamFormat::Matroska => remux_stream(node, track_sources, spec, range, b).await?,
StreamFormat::HlsMaster => hls_master_stream(node, track_sources, spec, b).await?,
StreamFormat::HlsVariant => hls_variant_stream(node, track_sources, spec, b).await?,
- StreamFormat::Jhls => jhls_stream(node, track_sources, spec, b).await?,
- StreamFormat::Segment => segment_stream(node, track_sources, spec, b).await?,
+ StreamFormat::Jhls => jhls_stream(node, track_sources, spec, b, perms).await?,
+ StreamFormat::Segment => segment_stream(node, track_sources, spec, b, perms).await?,
}
Ok(a)