aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlackDex <[email protected]>2019-11-06 20:21:47 +0100
committerBlackDex <[email protected]>2019-11-06 20:21:47 +0100
commit0ff7fd939e9afe2197bb53eb37bce7d2b62f0b7f (patch)
tree64e515f3aa33542f17a6d44fad5888c2ed001fd1
parentca7c5129b2eadabed826cd82b6c291c0cb68cda9 (diff)
downloadvaultwarden-0ff7fd939e9afe2197bb53eb37bce7d2b62f0b7f.tar.gz
vaultwarden-0ff7fd939e9afe2197bb53eb37bce7d2b62f0b7f.zip
Next attempt for issue #709 fix
Now creates icon cache directory at startup. And it also creates the directory if it went missing during runtime. Also modified the icon_save/mark_negcache to be one.
-rw-r--r--src/api/icons.rs26
-rw-r--r--src/main.rs11
2 files changed, 23 insertions, 14 deletions
diff --git a/src/api/icons.rs b/src/api/icons.rs
index f403c695..0bac31c0 100644
--- a/src/api/icons.rs
+++ b/src/api/icons.rs
@@ -104,9 +104,6 @@ fn get_icon(domain: &str) -> Vec<u8> {
return FALLBACK_ICON.to_vec();
}
- // Create icon_cache_folder before fetching
- create_dir_all(&CONFIG.icon_cache_folder()).expect("Error creating icon cache");
-
// Get the icon, or fallback in case of error
match download_icon(&domain) {
Ok(icon) => {
@@ -115,7 +112,9 @@ fn get_icon(domain: &str) -> Vec<u8> {
}
Err(e) => {
error!("Error downloading icon: {:?}", e);
- mark_negcache(&path);
+ let miss_indicator = path.to_owned() + ".miss";
+ let empty_icon = Vec::new();
+ save_icon(&miss_indicator, &empty_icon);
FALLBACK_ICON.to_vec()
}
}
@@ -171,11 +170,6 @@ fn icon_is_negcached(path: &str) -> bool {
}
}
-fn mark_negcache(path: &str) {
- let miss_indicator = path.to_owned() + ".miss";
- File::create(&miss_indicator).expect("Error creating negative cache marker");
-}
-
fn icon_is_expired(path: &str) -> bool {
let expired = file_is_expired(path, CONFIG.icon_cache_ttl());
expired.unwrap_or(true)
@@ -398,9 +392,17 @@ fn download_icon(domain: &str) -> Result<Vec<u8>, Error> {
}
fn save_icon(path: &str, icon: &[u8]) {
- if let Ok(mut f) = File::create(path) {
- f.write_all(icon).expect("Error writing icon file");
- };
+ match File::create(path) {
+ Ok(mut f) => {
+ f.write_all(icon).expect("Error writing icon file");
+ }
+ Err(ref e) if e.kind() == std::io::ErrorKind::NotFound => {
+ create_dir_all(&CONFIG.icon_cache_folder()).expect("Error creating icon cache");
+ }
+ Err(e) => {
+ info!("Icon save error: {:?}", e);
+ }
+ }
}
fn _header_map() -> HeaderMap {
diff --git a/src/main.rs b/src/main.rs
index c23eca6f..862b53b1 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -25,6 +25,7 @@ extern crate num_derive;
use std::{
path::Path,
process::{exit, Command},
+ fs::create_dir_all,
};
#[macro_use]
@@ -52,6 +53,8 @@ fn main() {
check_web_vault();
migrations::run_migrations();
+ create_icon_cache_folder();
+
launch_rocket();
}
@@ -129,8 +132,7 @@ fn check_db() {
let path = Path::new(&url);
if let Some(parent) = path.parent() {
- use std::fs;
- if fs::create_dir_all(parent).is_err() {
+ if create_dir_all(parent).is_err() {
error!("Error creating database directory");
exit(1);
}
@@ -148,6 +150,11 @@ fn check_db() {
db::get_connection().expect("Can't connect to DB");
}
+fn create_icon_cache_folder() {
+ // Try to create the icon cache folder, and generate an error if it could not.
+ create_dir_all(&CONFIG.icon_cache_folder()).expect("Error creating icon cache directory");
+}
+
fn check_rsa_keys() {
// If the RSA keys don't exist, try to create them
if !util::file_exists(&CONFIG.private_rsa_key()) || !util::file_exists(&CONFIG.public_rsa_key()) {