]> git.proxmox.com Git - proxmox-backup.git/commitdiff
proxmox-rest-server: improve docs
authorDietmar Maurer <dietmar@proxmox.com>
Thu, 30 Sep 2021 09:59:21 +0000 (11:59 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Thu, 30 Sep 2021 10:29:15 +0000 (12:29 +0200)
And rename enable_file_log to enable_access_log.

proxmox-rest-server/src/api_config.rs
proxmox-rest-server/src/lib.rs
proxmox-rest-server/src/rest.rs
proxmox-rest-server/src/state.rs
src/bin/proxmox-backup-api.rs
src/bin/proxmox-backup-proxy.rs

index e09f7af9e5390214b16df4b6a4e27145964467db..712c591b96c585686bbb2385c735cf6bf88fefc5 100644 (file)
@@ -18,6 +18,7 @@ use crate::{ApiAuth, FileLogger, FileLogOptions, CommandoSocket};
 
 pub type GetIndexFn = fn(Option<String>, Option<String>, &ApiConfig, Parts) -> Response<Body>;
 
+/// REST server configuration
 pub struct ApiConfig {
     basedir: PathBuf,
     router: &'static Router,
@@ -27,11 +28,25 @@ pub struct ApiConfig {
     template_files: RwLock<HashMap<String, (SystemTime, PathBuf)>>,
     request_log: Option<Arc<Mutex<FileLogger>>>,
     auth_log: Option<Arc<Mutex<FileLogger>>>,
-    pub api_auth: Arc<dyn ApiAuth + Send + Sync>,
+    pub(crate) api_auth: Arc<dyn ApiAuth + Send + Sync>,
     get_index_fn: GetIndexFn,
 }
 
 impl ApiConfig {
+    /// Creates a new instance
+    ///
+    /// `basedir` - File lookups are relative to this directory.
+    ///
+    /// `router` - The REST API definition.
+    ///
+    /// `env_type` - The environment type.
+    ///
+    /// `api_auth` - The Authentification handler
+    ///
+    /// `get_index_fn` - callback to generate the root page
+    /// (index). Please note that this fuctions gets a reference to
+    /// the [ApiConfig], so it can use [Handlebars] templates
+    /// ([render_template](Self::render_template) to generate pages.
     pub fn new<B: Into<PathBuf>>(
         basedir: B,
         router: &'static Router,
@@ -53,7 +68,7 @@ impl ApiConfig {
         })
     }
 
-    pub fn get_index(
+    pub(crate) fn get_index(
         &self,
         auth_id: Option<String>,
         language: Option<String>,
@@ -62,7 +77,7 @@ impl ApiConfig {
         (self.get_index_fn)(auth_id, language, self, parts)
     }
 
-    pub fn find_method(
+    pub(crate) fn find_method(
         &self,
         components: &[&str],
         method: Method,
@@ -72,7 +87,7 @@ impl ApiConfig {
         self.router.find_method(components, method, uri_param)
     }
 
-    pub fn find_alias(&self, components: &[&str]) -> PathBuf {
+    pub(crate) fn find_alias(&self, components: &[&str]) -> PathBuf {
 
         let mut prefix = String::new();
         let mut filename = self.basedir.clone();
@@ -89,6 +104,18 @@ impl ApiConfig {
         filename
     }
 
+    /// Register a path alias
+    ///
+    /// This can be used to redirect file lookups to a specific
+    /// directory, e.g.:
+    ///
+    /// ```
+    /// use proxmox_rest_server::ApiConfig;
+    /// // let mut config = ApiConfig::new(...);
+    /// # fn fake(config: &mut ApiConfig) {
+    /// config.add_alias("extjs", "/usr/share/javascript/extjs");
+    /// # }
+    /// ```
     pub fn add_alias<S, P>(&mut self, alias: S, path: P)
         where S: Into<String>,
               P: Into<PathBuf>,
@@ -96,10 +123,13 @@ impl ApiConfig {
         self.aliases.insert(alias.into(), path.into());
     }
 
-    pub fn env_type(&self) -> RpcEnvironmentType {
+    pub(crate) fn env_type(&self) -> RpcEnvironmentType {
         self.env_type
     }
 
+    /// Register a [Handlebars] template file
+    ///
+    /// Those templates cane be use with [render_template](Self::render_template) to generate pages.
     pub fn register_template<P>(&self, name: &str, path: P) -> Result<(), Error>
     where
         P: Into<PathBuf>
@@ -148,7 +178,12 @@ impl ApiConfig {
         }
     }
 
-    pub fn enable_file_log<P>(
+    /// Enable the access log feature
+    ///
+    /// When enabled, all requests are logged to the specified file.
+    /// This function also registers a `api-access-log-reopen`
+    /// command one the [CommandoSocket].
+    pub fn enable_access_log<P>(
         &mut self,
         path: P,
         dir_opts: Option<CreateOptions>,
@@ -182,6 +217,11 @@ impl ApiConfig {
         Ok(())
     }
 
+    /// Enable the authentification log feature
+    ///
+    /// When enabled, all authentification requests are logged to the
+    /// specified file. This function also registers a
+    /// `api-auth-log-reopen` command one the [CommandoSocket].
     pub fn enable_auth_log<P>(
         &mut self,
         path: P,
@@ -217,11 +257,11 @@ impl ApiConfig {
         Ok(())
     }
 
-    pub fn get_access_log(&self) -> Option<&Arc<Mutex<FileLogger>>> {
+    pub(crate) fn get_access_log(&self) -> Option<&Arc<Mutex<FileLogger>>> {
         self.request_log.as_ref()
     }
 
-    pub fn get_auth_log(&self) -> Option<&Arc<Mutex<FileLogger>>> {
+    pub(crate) fn get_auth_log(&self) -> Option<&Arc<Mutex<FileLogger>>> {
         self.auth_log.as_ref()
     }
 }
index 4b8cce96c4b058849370c83e80fdcc202563e078..fc952f2b0fe728dca1434772e0ea81d3c8fed6e1 100644 (file)
@@ -73,14 +73,14 @@ lazy_static::lazy_static!{
 /// Retruns the current process ID (see [libc::getpid])
 ///
 /// The value is cached at startup (so it is invalid after a fork)
-pub fn pid() -> i32 {
+pub(crate) fn pid() -> i32 {
     *PID
 }
 
 /// Returns the starttime of the process (see [PidStat])
 ///
 /// The value is cached at startup (so it is invalid after a fork)
-pub fn pstart() -> u64 {
+pub(crate) fn pstart() -> u64 {
     *PSTART
 }
 
index 8c1e34a3d52596f65266943f0885226372ecef16..bf4dbb40010eefc34cbacbbab095860ba94eb255 100644 (file)
@@ -52,8 +52,9 @@ impl UserInformation for EmptyUserInformation {
     fn lookup_privs(&self, _userid: &str, _path: &[&str]) -> u64 { 0 }
 }
 
+/// REST server implementation (configured with [ApiConfig])
 pub struct RestServer {
-    pub api_config: Arc<ApiConfig>,
+    api_config: Arc<ApiConfig>,
 }
 
 const MAX_URI_QUERY_LENGTH: usize = 3072;
index 4585b2661a4509f6cec5e031ae94967aad440a69..955e3ce350e3c6e3303b752de9b1f53c2b883b4a 100644 (file)
@@ -134,8 +134,8 @@ pub(crate) fn check_last_worker() {
 }
 
 /// Spawns a tokio task that will be tracked for reload
-/// and if it is finished, notify the last_worker_listener if we
-/// are in shutdown mode
+/// and if it is finished, notify the [last_worker_future] if we
+/// are in shutdown mode.
 pub fn spawn_internal_task<T>(task: T)
 where
     T: Future + Send + 'static,
index 35cfc5f06a052403f728d9b96a338d0685828b44..275876e5045bc34b2e308d0fb6bfca3d785567a3 100644 (file)
@@ -85,7 +85,7 @@ async fn run() -> Result<(), Error> {
     let dir_opts = CreateOptions::new().owner(backup_user.uid).group(backup_user.gid);
     let file_opts = CreateOptions::new().owner(backup_user.uid).group(backup_user.gid);
 
-    config.enable_file_log(
+    config.enable_access_log(
         pbs_buildcfg::API_ACCESS_LOG_FN,
         Some(dir_opts.clone()),
         Some(file_opts.clone()),
index a98d4c1fd1c98f0f09e4301356b12165b0c4b53b..617fd45a62a9b9f8dc3afd525c22782cacc30135 100644 (file)
@@ -192,7 +192,7 @@ async fn run() -> Result<(), Error> {
     let dir_opts = CreateOptions::new().owner(backup_user.uid).group(backup_user.gid);
     let file_opts = CreateOptions::new().owner(backup_user.uid).group(backup_user.gid);
 
-    config.enable_file_log(
+    config.enable_access_log(
         pbs_buildcfg::API_ACCESS_LOG_FN,
         Some(dir_opts.clone()),
         Some(file_opts.clone()),