mirror of https://github.com/fafhrd91/actix-web
add support of filtering guards in Files of actix-files
This commit is contained in:
parent
515d0e3fb4
commit
d2d388ff83
|
@ -36,7 +36,8 @@ pub struct Files {
|
||||||
renderer: Rc<DirectoryRenderer>,
|
renderer: Rc<DirectoryRenderer>,
|
||||||
mime_override: Option<Rc<MimeOverride>>,
|
mime_override: Option<Rc<MimeOverride>>,
|
||||||
file_flags: named::Flags,
|
file_flags: named::Flags,
|
||||||
guards: Option<Rc<dyn Guard>>,
|
use_guards: Option<Rc<dyn Guard>>,
|
||||||
|
guards: Vec<Box<dyn Guard>>,
|
||||||
hidden_files: bool,
|
hidden_files: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,24 +47,6 @@ impl fmt::Debug for Files {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Clone for Files {
|
|
||||||
fn clone(&self) -> Self {
|
|
||||||
Self {
|
|
||||||
directory: self.directory.clone(),
|
|
||||||
index: self.index.clone(),
|
|
||||||
show_index: self.show_index,
|
|
||||||
redirect_to_slash: self.redirect_to_slash,
|
|
||||||
default: self.default.clone(),
|
|
||||||
renderer: self.renderer.clone(),
|
|
||||||
file_flags: self.file_flags,
|
|
||||||
path: self.path.clone(),
|
|
||||||
mime_override: self.mime_override.clone(),
|
|
||||||
guards: self.guards.clone(),
|
|
||||||
hidden_files: self.hidden_files,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Files {
|
impl Files {
|
||||||
/// Create new `Files` instance for a specified base directory.
|
/// Create new `Files` instance for a specified base directory.
|
||||||
///
|
///
|
||||||
|
@ -103,7 +86,8 @@ impl Files {
|
||||||
renderer: Rc::new(directory_listing),
|
renderer: Rc::new(directory_listing),
|
||||||
mime_override: None,
|
mime_override: None,
|
||||||
file_flags: named::Flags::default(),
|
file_flags: named::Flags::default(),
|
||||||
guards: None,
|
use_guards: None,
|
||||||
|
guards: Vec::new(),
|
||||||
hidden_files: false,
|
hidden_files: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -184,7 +168,15 @@ impl Files {
|
||||||
/// Default behaviour allows GET and HEAD.
|
/// Default behaviour allows GET and HEAD.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn use_guards<G: Guard + 'static>(mut self, guards: G) -> Self {
|
pub fn use_guards<G: Guard + 'static>(mut self, guards: G) -> Self {
|
||||||
self.guards = Some(Rc::new(guards));
|
self.use_guards = Some(Rc::new(guards));
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Specifies custom guards to use for directory listings and files.
|
||||||
|
///
|
||||||
|
#[inline]
|
||||||
|
pub fn guard<G: Guard + 'static>(mut self, guard: G) -> Self {
|
||||||
|
self.guards.push(Box::new(guard));
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,7 +217,13 @@ impl Files {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl HttpServiceFactory for Files {
|
impl HttpServiceFactory for Files {
|
||||||
fn register(self, config: &mut AppService) {
|
fn register(mut self, config: &mut AppService) {
|
||||||
|
let guards = if self.guards.is_empty() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(std::mem::take(&mut self.guards))
|
||||||
|
};
|
||||||
|
|
||||||
if self.default.borrow().is_none() {
|
if self.default.borrow().is_none() {
|
||||||
*self.default.borrow_mut() = Some(config.default_service());
|
*self.default.borrow_mut() = Some(config.default_service());
|
||||||
}
|
}
|
||||||
|
@ -236,7 +234,7 @@ impl HttpServiceFactory for Files {
|
||||||
ResourceDef::prefix(&self.path)
|
ResourceDef::prefix(&self.path)
|
||||||
};
|
};
|
||||||
|
|
||||||
config.register_service(rdef, None, self, None)
|
config.register_service(rdef, guards, self, None)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,7 +256,7 @@ impl ServiceFactory<ServiceRequest> for Files {
|
||||||
renderer: self.renderer.clone(),
|
renderer: self.renderer.clone(),
|
||||||
mime_override: self.mime_override.clone(),
|
mime_override: self.mime_override.clone(),
|
||||||
file_flags: self.file_flags,
|
file_flags: self.file_flags,
|
||||||
guards: self.guards.clone(),
|
guards: self.use_guards.clone(),
|
||||||
hidden_files: self.hidden_files,
|
hidden_files: self.hidden_files,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue