From 26f14273c68e12a7eb98ca7869791952e036f1e2 Mon Sep 17 00:00:00 2001
From: Pijar <pierre.jarriges@tutanota.com>
Date: Wed, 25 May 2022 15:06:43 +0200
Subject: [PATCH] dyn_sitemap.xml

---
 .gitignore                  |  2 +-
 public/standard/robots.txt  |  2 ++
 public/standard/sitemap.xml | 40 ++++++++++++++++++++-----------------
 src/service/articles.rs     |  2 +-
 src/static_view.rs          | 32 ++++++++++++++++++++++++-----
 5 files changed, 53 insertions(+), 25 deletions(-)

diff --git a/.gitignore b/.gitignore
index db6a2a9..ff96692 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,4 +8,4 @@ target
 public/**/*.js
 public/**/view/*
 public/standard/test_sitemap.xml
-public/standard/sitemap.xml
\ No newline at end of file
+public/standard/dyn_sitemap.xml
\ No newline at end of file
diff --git a/public/standard/robots.txt b/public/standard/robots.txt
index 003d94f..ebedbc1 100644
--- a/public/standard/robots.txt
+++ b/public/standard/robots.txt
@@ -1,2 +1,4 @@
 User-agent: *
 Sitemap: https://kuadrado-software.fr/sitemap.xml
+Sitemap: https://kuadrado-software.fr/dyn_sitemap.xml
+
diff --git a/public/standard/sitemap.xml b/public/standard/sitemap.xml
index 1e75f57..dca1ebf 100644
--- a/public/standard/sitemap.xml
+++ b/public/standard/sitemap.xml
@@ -1,19 +1,23 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-    <url>
-        <loc>https://kuadrado-software.fr</loc>
-        <lastmod>2021-11-19</lastmod>
-    </url>
-    <url>
-        <loc>https://kuadrado-software.fr/games/</loc>
-        <lastmod>2021-11-19</lastmod>
-    </url>
-    <url>
-        <loc>https://kuadrado-software.fr/education/</loc>
-        <lastmod>2021-11-19</lastmod>
-    </url>
-    <url>
-        <loc>https://kuadrado-software.fr/software-development/</loc>
-        <lastmod>2021-11-19</lastmod>
-    </url>
-</urlset>
+  <url>
+    <loc>https://kuadrado-software.fr/</loc>
+    <lastmod>2022-05-25T00:00:00+00:00</lastmod>
+  </url>
+  <url>
+    <loc>https://kuadrado-software.fr/games/</loc>
+    <lastmod>2022-05-25T00:00:00+00:00</lastmod>
+  </url>
+  <url>
+    <loc>https://kuadrado-software.fr/education/</loc>
+    <lastmod>2022-05-25T00:00:00+00:00</lastmod>
+  </url>
+  <url>
+    <loc>https://kuadrado-software.fr/software-development/</loc>
+    <lastmod>2022-05-25T00:00:00+00:00</lastmod>
+  </url>
+  <url>
+    <loc>https://localhost/games/view/fr/glitch/</loc>
+    <lastmod>2022-05-25T00:00:00+00:00</lastmod>
+  </url>
+</urlset>
\ No newline at end of file
diff --git a/src/service/articles.rs b/src/service/articles.rs
index 6133cf2..b9e4ee4 100644
--- a/src/service/articles.rs
+++ b/src/service/articles.rs
@@ -118,7 +118,7 @@ pub async fn post_article(
                     }
                 }
                 _ => {
-                    return HttpResponse::InternalServerError().body("Error creating article page")
+                    return HttpResponse::InternalServerError().body("Error creating article page");
                 }
             }
             HttpResponse::Created().json(res)
diff --git a/src/static_view.rs b/src/static_view.rs
index 3d3436c..059f001 100644
--- a/src/static_view.rs
+++ b/src/static_view.rs
@@ -118,6 +118,21 @@ pub fn delete_static_view(
     Ok(())
 }
 
+fn init_sitemap(sitemap_path: &PathBuf) -> Result<(), String> {
+    File::create(sitemap_path).expect("Couldn't create sitemap");
+    let sm = File::open(sitemap_path).unwrap();
+    let writer = SiteMapWriter::new(&sm);
+    match writer.start_urlset() {
+        Ok(url_w) => {
+            if let Err(e) = url_w.end() {
+                return Err(format!("Couldn't write new sitemap closing tags. {}", e));
+            }
+            Ok(())
+        }
+        Err(e) => Err(format!("Couldn't create new sitemap urlset. {}", e)),
+    }
+}
+
 fn update_sitemap(
     app_state: &AppState,
     uri: &Option<String>,
@@ -132,17 +147,24 @@ fn update_sitemap(
             if value.eq("testing") {
                 String::from("test_sitemap.xml")
             } else {
-                String::from("sitemap.xml")
+                String::from("dyn_sitemap.xml")
             }
         }
-        Err(_) => String::from("sitemap.xml"),
+        Err(_) => String::from("dyn_sitemap.xml"),
     };
 
     let standard_dir_pth = app_state.env.public_dir.join("standard");
     let uri = uri.as_ref().unwrap().to_owned();
 
-    let sitemap =
-        File::open(standard_dir_pth.join(&sitemap_name)).expect("Couldn't open file sitemap.xml");
+    let sitemap_path = standard_dir_pth.join(&sitemap_name);
+
+    if !sitemap_path.exists() {
+        if let Err(e) = init_sitemap(&sitemap_path) {
+            return Err(e);
+        }
+    }
+
+    let sitemap = File::open(&sitemap_path).expect("Couldn't open file sitemap.xml");
 
     let mut urls = Vec::new();
 
@@ -155,7 +177,7 @@ fn update_sitemap(
     let updated_sitemap = File::create(standard_dir_pth.join("tmp_sitemap.xml"))
         .expect("Couldn't create temporary sitemap");
 
-    let writer = SiteMapWriter::new(updated_sitemap);
+    let writer = SiteMapWriter::new(&updated_sitemap);
     let mut url_writer = writer
         .start_urlset()
         .expect("Unable to write sitemap urlset");
-- 
GitLab