diff of f6b934235aa3fe06ba5144d5f33651d672f94f4f

f6b934235aa3fe06ba5144d5f33651d672f94f4f
diff --git a/resources/sql/post-fns.sql b/resources/sql/post-fns.sql
index a857c4c..fa86742 100644
--- a/resources/sql/post-fns.sql
+++ b/resources/sql/post-fns.sql
@@ -180,3 +180,8 @@ INSERT INTO blog.Previously_Link VALUES ($1, $2) ON CONFLICT DO NOTHING;
 -- name: search-posts
 -- returns: :array-hash
 select post.id, post.title from blog.Post where (title ilike '%'||$1||'%' or content ilike '%'||$1||'%') and not unlisted and not hidden;
+
+-- name: last-modified*
+-- Returns whatever rss-server should return as its last-modified header.
+-- I can't be arsed to hack the 2 and a half time libraries this app uses to provide this functionality 
+select max(created_at) from blog.post where not hidden and not unlisted;
diff --git a/src/local-lib/lisp-fixup.lisp b/src/local-lib/lisp-fixup.lisp
index ca6efaf..4b85eaa 100644
--- a/src/local-lib/lisp-fixup.lisp
+++ b/src/local-lib/lisp-fixup.lisp
@@ -1,6 +1,7 @@
 (defpackage lisp-fixup
   (:use :cl)
   (:export :if-modified-since->simpledate-timestamp :*rfc822*
+	   :fix-timestamp
 	   :sha-512 :partial
 	   :compose :drop
 	   :slurp-bytes :slurp-utf-8))
diff --git a/src/posts/post-db.lisp b/src/posts/post-db.lisp
index ab24843..51e28cb 100644
--- a/src/posts/post-db.lisp
+++ b/src/posts/post-db.lisp
@@ -3,7 +3,7 @@
   (:import-from :com.inuoe.jzon :parse)
   (:import-from :halisql :defqueries)
   (:import-from :lisp-fixup :fix-timestamp)
-  (:export :search-posts :link-previously :get-tagged :get-post-version :get-page :get-titles-by-year :insert-post :update-post :get-post))
+  (:export :search-posts :last-modified* :link-previously :get-tagged :get-post-version :get-page :get-titles-by-year :insert-post :update-post :get-post))
 
 (in-package :murja.posts.post-db)
 
diff --git a/src/routes/rss-routes.lisp b/src/routes/rss-routes.lisp
index 3702252..1018b02 100644
--- a/src/routes/rss-routes.lisp
+++ b/src/routes/rss-routes.lisp
@@ -39,7 +39,12 @@
 				 (hunchentoot:header-in* :if-modified-since))))
 	   (page-size (gethash "recent-post-count" settings))
 	   (page (get-page 1 page-size :allow-hidden? nil
-				       :modified-since if-modified-since)))
+				       :modified-since if-modified-since))
+	   (last-modified 
+	     ;; this application's tz handling is a fucking joke 
+	     (str:replace-all "EST" "GMT" 
+			      (lisp-fixup:fix-timestamp (caar (murja.posts.post-db:last-modified*))))))
 
       (setf (hunchentoot:content-type*) "application/rss+xml")
+      (setf (hunchentoot:header-out "Last-Modified") last-modified)
       (posts->rss page))))
diff --git a/test/tests.lisp b/test/tests.lisp
index 6560b52..d04fdb0 100644
--- a/test/tests.lisp
+++ b/test/tests.lisp
@@ -175,9 +175,9 @@
 	 (dada "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed posuere interdum sem. Quisque ligula eros ullamcorper quis, lacinia quis facilisis sed sapien. Mauris varius diam vitae arcu. Sed arcu lectus auctor vitae, consectetuer et venenatis eget velit. Sed augue orci, lacinia eu tincidunt et eleifend nec lacus. Donec ultricies nisl ut felis, suspendisse potenti. Lorem ipsum ligula ut hendrerit mollis, ipsum erat vehicula risus, eu suscipit sem libero nec erat. Aliquam erat volutpat. Sed congue augue vitae neque. Nulla consectetuer porttitor pede. Fusce purus morbi tortor magna condimentum vel, placerat id blandit sit amet tortor.\n\nMauris sed libero. Suspendisse facilisis nulla in lacinia laoreet, lorem velit accumsan velit vel mattis libero nisl et sem. Proin interdum maecenas massa turpis sagittis in, interdum non lobortis vitae massa. Quisque purus lectus, posuere eget imperdiet nec sodales id arcu. Vestibulum elit pede dictum eu, viverra non tincidunt eu ligula.\n\nNam molestie nec tortor. Donec placerat leo sit amet velit. Vestibulum id justo ut vitae massa. Proin in dolor mauris consequat aliquam. Donec ipsum, vestibulum ullamcorper venenatis augue. Aliquam tempus nisi in auctor vulputate, erat felis pellentesque augue nec, pellentesque lectus justo nec erat. Aliquam et nisl. Quisque sit amet dolor in justo pretium condimentum.\n\nVivamus placerat lacus vel vehicula scelerisque, dui enim adipiscing lacus sit amet sagittis, libero enim vitae mi. In neque magna posuere, euismod ac tincidunt tempor est. Ut suscipit nisi eu purus. Proin ut pede mauris eget ipsum. Integer vel quam nunc commodo consequat. Integer ac eros eu tellus dignissim viverra. Maecenas erat aliquam erat volutpat. Ut venenatis ipsum quis turpis. Integer cursus scelerisque lorem. Sed nec mauris id quam blandit consequat. Cras nibh mi hendrerit vitae, dapibus et aliquam et magna. Nulla vitae elit. Mauris consectetuer odio vitae augue.")
 
 	 (pubdates (vector (simple-date:encode-timestamp 2015 8 25)
+			   (simple-date:encode-timestamp 2017 1 12)
 			   (simple-date:encode-timestamp 2015 10 12)
-			   (simple-date:encode-timestamp 2016 4 1)
-			   (simple-date:encode-timestamp 2017 1 12)))
+			   (simple-date:encode-timestamp 2016 4 1)))
 	 (dada-list (str:split #\Space dada))
 	 (size (length dada-list)))
     
@@ -208,13 +208,15 @@ values ($1, $2, $3, $4, $5, $6, $7) returning id;"
      And then we shall see that if we are querying the rss api with http/drakma with if-modified-since header set - only the newer titles are returned
 
      !L
-     (let* ((result (drakma->string (drakma:http-request (format nil "~a/api/rss" (url))
-							 :additional-headers `(("if-modified-since" . "Wed, 30 March 2016 08:09:00 GMT")))))
-	    (result-per-line (str:split #\Newline result))
-	    (pubdates (remove-if-not (lisp-fixup:partial #'str:contains? "<pubDate>") result-per-line)))
-       
-       (is (every (lambda (line) (not (str:contains? "2015" line))) pubdates))
-       (is (= 2 (length pubdates)))))))
+     (multiple-value-bind (body status headers) (drakma:http-request (format nil "~a/api/rss" (url))
+								     :additional-headers `(("if-modified-since" . "Wed, 30 March 2016 08:09:00 GMT")))
+       (let* ((result (drakma->string body))
+	      (last-modified (rest (assoc :last-modified headers)))
+	      (result-per-line (str:split #\Newline result))
+	      (pubdates (remove-if-not (lisp-fixup:partial #'str:contains? "<pubDate>") result-per-line)))
+	 (is (string= last-modified "Thu, 12 Jan 2017 00:00:00 GMT"))
+	 (is (every (lambda (line) (not (str:contains? "2015" line))) pubdates))
+	 (is (= 2 (length pubdates))))))))
 
 ;; (setf fiveam:*run-test-when-defined* t)