diff options
author | Vincent Ambo <mail@tazj.in> | 2020-06-26T19·24+0100 |
---|---|---|
committer | tazjin <mail@tazj.in> | 2020-06-26T19·33+0000 |
commit | a46ffd85f50e75c3bcb3cac52eade6b35f4c0300 (patch) | |
tree | 3e9d74ba0ee410f5d2f79a17f20ecfb91e352e9e /web/tazblog_lisp/store.lisp | |
parent | 0fe66627dde9e64287fbe2172a830d08bd2de7dd (diff) |
chore(web): Remove tazblog_lisp r/1086
This isn't actually used for anything. Change-Id: Ief1128e934b1626189453abe3564cb64e1fe5a95 Reviewed-on: https://cl.tvl.fyi/c/depot/+/602 Reviewed-by: tazjin <mail@tazj.in>
Diffstat (limited to 'web/tazblog_lisp/store.lisp')
-rw-r--r-- | web/tazblog_lisp/store.lisp | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/web/tazblog_lisp/store.lisp b/web/tazblog_lisp/store.lisp deleted file mode 100644 index 01935a68a023..000000000000 --- a/web/tazblog_lisp/store.lisp +++ /dev/null @@ -1,79 +0,0 @@ -(defpackage #:tazblog/store - (:documentation - "This module implements fetching of individual blog entries from DNS. - Yes, you read that correctly. - - Each blog post is stored as a set of records in a designated DNS - zone. For the production blog, this zone is `blog.tazj.in.`. - - A top-level record at `_posts` contains a list of all published - post IDs. - - For each of these post IDs, there is a record at `_meta.$postID` - that contains the title and number of post chunks. - - For each post chunk, there is a record at `_$chunkID.$postID` that - contains a base64-encoded post fragment. - - This module implements logic for assembling a post out of these - fragments and caching it based on the TTL of its `_meta` record.") - - (:use #:cl #:dns #:iterate) - (:import-from #:cl-base64 #:base64-string-to-string)) -(in-package :tazblog/store) - -;; TODO: -;; -;; - implement DNS caching - -(defvar *tazblog-zone* ".blog.tazj.in." - "DNS zone in which blog posts are persisted.") - -(deftype entry-id () 'string) - -(defun list-entries (&key (offset 0) (count 4) (zone *tazblog-zone*)) - "Retrieve COUNT entry IDs from ZONE at OFFSET." - (let ((answers (lookup-txt (concatenate 'string "_posts" zone)))) - (map 'vector #'dns-rr-rdata (subseq answers offset (+ offset count))))) - -(defun get-entry-meta (entry-id zone) - (let* ((name (concatenate 'string "_meta." entry-id zone)) - (answer (lookup-txt name)) - (encoded (dns-rr-rdata (alexandria:first-elt answer))) - (meta-json (base64-string-to-string encoded))) - (json:decode-json-from-string meta-json))) - -(defun base64-add-padding (string) - "Adds padding to the base64-encoded STRING if required." - (let ((rem (- 4 (mod (length string) 4)))) - (if (= 0 rem) string - (format nil "~A~v@{~A~:*~}" string rem "=")))) - -(defun collect-entry-fragments (entry-id count zone) - (let* ((fragments - (iter (for i from 0 below count) - (for name = (format nil "_~D.~A~A" i entry-id zone)) - (collect (alexandria:first-elt (lookup-txt name))))) - (decoded (map 'list (lambda (f) - (base64-string-to-string - (base64-add-padding (dns-rr-rdata f)))) - fragments))) - (apply #'concatenate 'string decoded))) - -(defstruct entry - (id "" :type string) - (title "" :type string) - (content "" :type string) - (date "" :type string)) - -(defun get-entry (entry-id &optional (zone *tazblog-zone*)) - "Retrieve the entry at ENTRY-ID from ZONE." - (let* ((meta (get-entry-meta entry-id zone)) - (count (cdr (assoc :c meta))) - (title (cdr (assoc :t meta))) - (date (cdr (assoc :d meta))) - (content (collect-entry-fragments entry-id count zone))) - (make-entry :id entry-id - :date date - :title title - :content content))) |