diff --git a/README.md b/README.md
index 58b5bd5..7db2d63 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,10 @@
A simple blog engine based on Flair and SSW.
# TODO
-* Pass the directory location as environment vars
* A Dockerfile that works
+# Configuration
+The environment var "FLOG_ROOT_FOLDER" dictates the root directory of Flog, which must exist and contain the html and templates folder.
+
+Defaults to /opt/flog.

diff --git a/flog/Cargo.toml b/flog/Cargo.toml
index 228f7ec..d14b4d6 100644
--- a/flog/Cargo.toml
+++ b/flog/Cargo.toml
@@ -9,6 +9,13 @@ edition = "2021"
name = "flog"
path = "src/main.rs"
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+[profile.release]
+opt-level = 3
+strip = true
+lto = true
+codegen-units = 1
+
[dependencies]
flair = { git = "https://gitea.squi.fr/Rust/flair.git" }
ssw = { git = "https://gitea.squi.fr/Rust/ssw.git" }
diff --git a/flog/html/index.html b/flog/html/index.html
index 00a92b3..6be4ef7 100644
--- a/flog/html/index.html
+++ b/flog/html/index.html
@@ -17,7 +17,7 @@
-
Squi's awesome blog
+Squi's awesome git blog

Lately on this great blog
diff --git a/flog/src/main.rs b/flog/src/main.rs
index 4942504..aeb582e 100644
--- a/flog/src/main.rs
+++ b/flog/src/main.rs
@@ -2,6 +2,7 @@ use flair::flair;
use ssw::websrv::WebsrvConfig;
use ssw::websrv::run_server;
use std::fs;
+use std::env;
use std::collections::HashMap;
//1 - Ingest all the pages into a variable
@@ -11,7 +12,11 @@ use std::collections::HashMap;
//4 - Start the server and serve
//#1 : Sends (pages_summary, pages_content)
-fn ingest_pages(pages_path: &str) -> Option<(String, String)> {
+fn ingest_pages(pages_path: &str,
+ header_path: &str,
+ footer_path: &str,
+ html_path: &str,
+ ) -> Option<(String, String)> {
//Getting the name of existing pages
let mut pages: Vec = Vec::new();
@@ -26,7 +31,7 @@ fn ingest_pages(pages_path: &str) -> Option<(String, String)> {
.unwrap()
);
- &mut pages.push(mypage);
+ let _ = &mut pages.push(mypage);
}
pages.sort();
pages.reverse();
@@ -37,17 +42,13 @@ fn ingest_pages(pages_path: &str) -> Option<(String, String)> {
let mut page_sum = String::new();
for page in pages {
let vars: HashMap = HashMap::from([
- (String::from("header"), fs::read_to_string("./html/header.html").unwrap()),
- (String::from("footer"), fs::read_to_string("./html/footer.html").unwrap()),
+ (String::from("header"), fs::read_to_string(header_path).unwrap()),
+ (String::from("footer"), fs::read_to_string(footer_path).unwrap()),
]);
let fullpath = String::from(format!("{pages_path}/{page}"));
let page_res = flair::analyze_file(&fullpath, vars).unwrap();
- //TODO Write the pages to their own file
- //and put the correct address in %%sum%%
- //So the index is simply "latest articles
-
- page_sum.push_str(&page_link(&page, &page_res));
- &mut pages_content.push_str(&page_res);
+ page_sum.push_str(&page_link(&page, &page_res, html_path));
+ let _ = &mut pages_content.push_str(&page_res);
}
return Some((page_sum, pages_content));
} else {
@@ -55,29 +56,40 @@ fn ingest_pages(pages_path: &str) -> Option<(String, String)> {
}
}
-fn page_link(page_name: &str, content: &String) -> String {
+fn page_link(page_name: &str, content: &String, html_path: &str) -> String {
let page_html = str::replace(page_name, ".ft", "");
- let page_loc = format!("./html/pages/{page_html}");
+ let page_loc = format!("{html_path}/pages/{page_html}");
let page_name_short = str::replace(page_name, ".html.ft", "");
let page_link = format!("{page_name_short}
\n");
- fs::write(page_loc, content);
+ match fs::write(page_loc, content) {
+ Ok(_) => (),
+ Err(e) => panic!("{}", e),
+ };
return String::from(page_link);
}
//#2 & #3
-fn generate_index(pages: (String, String), index_path: &str, html_path: &str) {
+fn generate_index(pages: (String, String),
+ index_template_path: &str,
+ html_path: &str,
+ header_path: &str,
+ footer_path: &str,
+ ) {
+
+ let index_path = format!("{html_path}/index.html");
+
let vars: HashMap = HashMap::from([
- (String::from("header"), fs::read_to_string("./html/header.html").unwrap()),
- (String::from("footer"), fs::read_to_string("./html/footer.html").unwrap()),
+ (String::from("header"), fs::read_to_string(&header_path).unwrap()),
+ (String::from("footer"), fs::read_to_string(&footer_path).unwrap()),
(String::from("pages"), pages.1),
(String::from("sum"), pages.0),
]);
- let index = flair::analyze_file("./templates/index.html.ft", vars).unwrap();
+ let index = flair::analyze_file(index_template_path, vars).unwrap();
- fs::write("./html/index.html", index.as_str()).expect("Could not write index");
+ fs::write(&index_path, index.as_str()).expect("Could not write index");
}
//#4
@@ -89,18 +101,31 @@ fn start_websrv(conf: WebsrvConfig) {
}
fn main() {
- let pages = match ingest_pages("./templates/pages") {
+ //Initialize from env variables
+ let root_path_env = "FLOG_ROOT_FOLDER";
+ let root_folder = match env::var(root_path_env) {
+ Ok(v) => v,
+ Err(_) => String::from("/opt/flog"),
+ };
+
+ let pages_path = format!("{root_folder}/templates/pages");
+ let html_folder_path = format!("{root_folder}/html");
+ let index_template_path = format!("{root_folder}/templates/index.html.ft");
+ let header_path = format!("{html_folder_path}/header.html");
+ let footer_path = format!("{html_folder_path}/footer.html");
+
+ let pages = match ingest_pages(&pages_path, &header_path, &footer_path, &html_folder_path) {
Some(p) => p,
None => (String::new(), String::new()),
};
- generate_index(pages, "./templates/index.html.ft", "./html");
+ generate_index(pages, &index_template_path, &html_folder_path, &header_path, &footer_path);
//Web conf
let webconf = WebsrvConfig {
nbr_of_threads: 10,
bind_addr: String::from("0.0.0.0:8000"),
- root_folder: String::from("./html"),
+ root_folder: String::from(&html_folder_path),
};
start_websrv(webconf);