in core/src/services/webdav/backend.rs [196:247]
fn build(&mut self) -> Result<Self::Accessor> {
debug!("backend build started: {:?}", &self);
let endpoint = match &self.endpoint {
Some(v) => v,
None => {
return Err(Error::new(ErrorKind::ConfigInvalid, "endpoint is empty")
.with_context("service", Scheme::Webdav));
}
};
let uri = http::Uri::from_str(endpoint).map_err(|err| {
Error::new(ErrorKind::ConfigInvalid, "endpoint is invalid")
.set_source(err)
.with_context("service", Scheme::Webdav)
})?;
// Some webdav server may have base dir like `/remote.php/webdav/`
// returned in the `href`.
let base_dir = uri.path().trim_end_matches('/');
let root = normalize_root(&self.root.take().unwrap_or_default());
debug!("backend use root {}", root);
let client = if let Some(client) = self.http_client.take() {
client
} else {
HttpClient::new().map_err(|err| {
err.with_operation("Builder::build")
.with_context("service", Scheme::Webdav)
})?
};
let mut auth = None;
if let Some(username) = &self.username {
auth = Some(format_authorization_by_basic(
username,
self.password.as_deref().unwrap_or_default(),
)?);
}
if let Some(token) = &self.token {
auth = Some(format_authorization_by_bearer(token)?)
}
debug!("backend build finished: {:?}", &self);
Ok(WebdavBackend {
endpoint: endpoint.to_string(),
base_dir: base_dir.to_string(),
authorization: auth,
root,
client,
})
}