diff of 993870748bbc4d8315468a7f0a039e0daf60168a
993870748bbc4d8315468a7f0a039e0daf60168a
diff --git a/aggressive-murja.asd b/aggressive-murja.asd
index 203a241..4756fd5 100644
--- a/aggressive-murja.asd
+++ b/aggressive-murja.asd
@@ -41,10 +41,7 @@
(:file "migrations")
(:file "json")))
(:file "migration-list")
- (:module "users"
- :components ((:file "user-db")))
(:file "session-db")
- (:file "settings")
(:file "middleware-db")
(:module "model"
:components
@@ -71,8 +68,7 @@
(:module "routes"
:components
- ((:file "settings-routes")
- (:file "login-routes")
+ ((:file "login-routes")
(:file "post-routes")
(:file "media-routes")
(:file "rss-routes")
diff --git a/resources/sql/media-fns.sql b/resources/sql/media-fns.sql
index 5d905d4..fe04fa1 100644
--- a/resources/sql/media-fns.sql
+++ b/resources/sql/media-fns.sql
@@ -5,14 +5,6 @@ insert into blog.media (name, data) values ($1, $2) returning id;
-- returns: :array-hash
select name, data from blog.media where id = $1::uuid ;
--- name: list-pictures*
--- returns: :array-hash
-select id, name from blog.media;
-
-- name: delete-picture* :!
-- returns: :array-hash
delete from blog.media where id = $1::uuid;
-
--- name: select-referencing-posts* :?
--- returns: :array-hash
-select * from blog.media_post_pairing where media_id = $1;
diff --git a/src/media/media-db.lisp b/src/media/media-db.lisp
index af41a9b..746097f 100644
--- a/src/media/media-db.lisp
+++ b/src/media/media-db.lisp
@@ -3,11 +3,8 @@
(:import-from :com.inuoe.jzon :parse)
(:import-from :halisql :defqueries)
(:import-from :lisp-fixup :fix-timestamp)
- (:export :list-pictures :get-media :insert-media :select-referencing-posts*))
+ (:export :get-media :insert-media :select-referencing-posts*))
(in-package :murja.media.media-db)
(defqueries "media-fns")
-
-(defun list-pictures ()
- (list-pictures*))
diff --git a/src/middleware-db.lisp b/src/middleware-db.lisp
index 8cc9a45..e22299c 100644
--- a/src/middleware-db.lisp
+++ b/src/middleware-db.lisp
@@ -43,18 +43,17 @@
(defun @transaction (next)
(with-db
(handler-bind ((cl-postgres:database-socket-error
- (lambda (c)
- (log:error "Socket error from db: ~a~%" c)
- (setf (hunchentoot:return-code*) 500)
- (return-from @transaction "Internal Server Error")))
+ (lambda (c)
+ (log:error "Socket error from db: ~a~%" c)
+ (setf (hunchentoot:return-code*) 500)
+ (return-from @transaction "Internal Server Error")))
(cl-postgres:database-error
(lambda (c)
(log:error "Error from db: ~a~%" c)
(setf (hunchentoot:return-code*) 500)
(return-from @transaction "Internal Server Error"))))
(with-transaction (:repeatable-read-rw)
- (let* ((murja.settings:*settings* (murja.settings:get-settings)))
- (funcall next))))))
+ (funcall next)))))
(defun @db (next)
(with-db
@@ -68,5 +67,4 @@
(log:error "Error from db: ~a~%" c)
(setf (hunchentoot:return-code*) 500)
(return-from @db "Internal Server Error"))))
- (let* ((murja.settings:*settings* (murja.settings:get-settings)))
- (funcall next)))))
+ (funcall next))))
diff --git a/src/middleware/auth.lisp b/src/middleware/auth.lisp
index f1d39b8..ea9172e 100644
--- a/src/middleware/auth.lisp
+++ b/src/middleware/auth.lisp
@@ -1,6 +1,7 @@
(defpackage murja.middleware.auth
- (:use :cl :postmodern :murja.users.user-db)
+ (:use :cl :postmodern)
(:import-from :murja.model.user :user-username)
+ (:local-nicknames (:users :murja.model.user))
(:export :@ssr-authenticated :*now* :*session-key* :*user* :@can?))
(in-package :murja.middleware.auth)
@@ -52,10 +53,10 @@
(log:warn "assert-ownership-username failed for ~a" username-cookie)
"not authorized"))
(if user-id
- (let ((user (get-user-by-id user-id)))
+ (let ((user (users:get-user user-id)))
(if (and user
(string= (hunchentoot:session-value :logged-in-username)
- (gethash "username" user)))
+ (users:user-username user)))
(let ((*user* user)
(*session-key* session-cookie))
(funcall next))
@@ -73,8 +74,8 @@
;; this is used in murja.routes.media-routes and murja.routes.post-routes, but this (and the previous @authenticated middleware) is obviously deprecated and will hopefully disappear one of these years
(defun @can? (next ability)
(if (and *user*
- (member ability
- (gethash "permissions" *user*)
+ (member ability
+ (users:abilities *user*)
:test #'string=))
(funcall next)
(progn
diff --git a/src/model/settings.lisp b/src/model/settings.lisp
index 7db6d3d..aedc917 100644
--- a/src/model/settings.lisp
+++ b/src/model/settings.lisp
@@ -6,8 +6,8 @@
```
(define-settings
- (defsetting site-name \"default-site\")
- (defsetting test-setting 12345))
+ (site-name \"default-site\")
+ (test-setting 12345))
```
After running that form, one can get setting's current value by funcalling its symbol (for example: `(site-name) => \"default site\")`. If you wish to change
diff --git a/src/model/user.lisp b/src/model/user.lisp
index 3037975..43479d7 100644
--- a/src/model/user.lisp
+++ b/src/model/user.lisp
@@ -46,9 +46,29 @@ WHERE
GROUP BY
u.id;")
-(defun get-user (id)
+(defparameter *user-query-with-password*
+ "SELECT
+ u.id,
+ u.username,
+ u.nickname,
+ u.img_location,
+ u.password,
+ json_agg(DISTINCT perm.action) as abilities
+FROM
+ blog.users u
+ left JOIN blog.groupmapping gm ON u.id = gm.userid
+ left JOIN blog.grouppermissions gp ON gp.groupid = gm.groupid
+ left JOIN blog.permission perm ON gp.permissionid = perm.id
+WHERE
+ WHERE u.Username = $1 AND u.Password = $2
+GROUP BY
+ u.id;")
+
+(defun get-user (id-or-username &optional password)
"Gets user and populates its abilities"
- (let ((usr (postmodern:query *user-query* id (:dao User :single))))
+ (let ((usr (if password
+ (postmodern:query *user-query-with-password* id-or-username password (:dao User :single))
+ (postmodern:query *user-query* id-or-username (:dao User :single)))))
(with-slots (abilities) usr
(when (stringp abilities)
(setf abilities (json:parse abilities))))
diff --git a/src/posts/post-db.lisp b/src/posts/post-db.lisp
index 51e28cb..4ac8d8b 100644
--- a/src/posts/post-db.lisp
+++ b/src/posts/post-db.lisp
@@ -36,6 +36,7 @@
(fix-timestamp (gethash "created_at" post)))
post)
+;; still used in the outbound rss stuff
(defun get-page (page page-size &key allow-hidden? modified-since)
(let* ((page (if (< page 1)
1
@@ -48,20 +49,4 @@
(mapcar #'fix-post
resulting-page)))
-(defun get-post (id &key allow-hidden?)
- (let* ((posts (coerce (get-by-id* id allow-hidden?) 'list))
- (post (first posts)))
- (when post
- (fix-post post))))
-
-(defun get-post-version (id version)
- (let ((post (first (coerce (get-versioned-by-id* id version) 'list))))
- (when post
- (fix-post post ))))
-(defun get-tagged (tag &key allow-hidden?)
- (let ((posts (coerce (get-tagged* tag allow-hidden?) 'list)))
- (log:info "Tag ~a returns posts ~a~%" tag (mapcar #'alexandria:hash-table-alist posts))
- (when posts
- (mapcar #'fix-post
- posts))))
diff --git a/src/routes/login-routes.lisp b/src/routes/login-routes.lisp
index 2c452c2..6943f77 100644
--- a/src/routes/login-routes.lisp
+++ b/src/routes/login-routes.lisp
@@ -1,5 +1,5 @@
(defpackage murja.routes.login-routes
- (:use :cl :binding-arrows)
+ (:use :cl :binding-arrows :murja.setting-definitions)
(:export :get-session-key :set-session-cookies :formdata->hashmap)
(:import-from :cl-hash-util :hash)
(:import-from :murja.session :set-session-value)
@@ -10,11 +10,11 @@
(:import-from :murja.middleware.json :@json)
(:import-from :easy-routes :defroute)
(:import-from :com.inuoe.jzon :parse :stringify)
- (:local-nicknames (:user-db :murja.users.user-db)
- (:settings :murja.routes.settings-routes)))
+ (:local-nicknames (:users :murja.model.user)))
(in-package :murja.routes.login-routes)
+;; obviously called in forms-post-login
(defun get-session-key (username)
"Creates a new db-backed session for new logins"
(let ((old-sessions (coerce (murja.session.db:login-query-session* (murja.session.db:now) username) 'list)))
@@ -34,7 +34,8 @@
(simple-date:decode-interval max-age)
(values key (lisp-fixup:to-secs year month day hour min sec ms)))))))
-(defun set-session-cookies (username session-key max-age settings)
+;; obviously called in forms-post-login
+(defun set-session-cookies (username session-key max-age)
(hunchentoot:set-cookie "murja-username" :value username
;; :secure t breaks on localhost
:secure (not lisp-fixup:*dev?*)
@@ -43,7 +44,7 @@
:http-only t
:domain ;;send :domain only in linux production envs
(unless lisp-fixup:*dev?*
- (gethash "domain" settings))
+ (domain))
:same-site "Strict")
(hunchentoot:set-cookie "murja-session" :value session-key
@@ -52,34 +53,36 @@
:max-age max-age
:http-only t
:domain (unless lisp-fixup:*dev?*
- (gethash "domain" settings))
+ (domain))
:same-site "Strict"))
-(defun save-initial-data-dump (username nickname password domain blog_title rss_title rss_link rss_description rss_lang rss_email)
- (user-db:register-user username nickname "" password)
- (user-db:cast-only-user-as-admin)
+;; TODO rewrite the initial ui
- (settings:update-setting "domain" domain)
- (settings:update-setting "blog-title" blog_title)
- (settings:update-setting "rss-title" rss_title)
- (settings:update-setting "rss-link" rss_link)
- (settings:update-setting "rss-description" rss_description)
- (settings:update-setting "rss-lang" rss_lang)
- (settings:update-setting "rss-email" rss_email))
+;; (defun save-initial-data-dump (username nickname password domain blog_title rss_title rss_link rss_description rss_lang rss_email)
+;; (user-db:register-user username nickname "" password)
+;; (user-db:cast-only-user-as-admin)
+
+;; (settings:update-setting "domain" domain)
+;; (settings:update-setting "blog-title" blog_title)
+;; (settings:update-setting "rss-title" rss_title)
+;; (settings:update-setting "rss-link" rss_link)
+;; (settings:update-setting "rss-description" rss_description)
+;; (settings:update-setting "rss-lang" rss_lang)
+;; (settings:update-setting "rss-email" rss_email))
-(defroute initial-pageview? ("/api/initial" :method :post :decorators (@transaction
- @json)) ()
- (murja.json:bind-json (username nickname password domain blog_title rss_title rss_link rss_description rss_lang rss_email) () (hunchentoot:raw-post-data :force-text t)
- (if (user-db:no-users?)
- (progn
- (save-initial-data-dump username nickname password domain blog_title rss_title rss_link rss_description rss_lang rss_email)
- (setf (hunchentoot:return-code*) 204)
- "")
- (progn
- (log:warn "Someone called POST /api/initial while there are users")
- (setf (hunchentoot:return-code*) 500)
- ""))))
+;; (defroute initial-pageview? ("/api/initial" :method :post :decorators (@transaction
+;; @json)) ()
+;; (murja.json:bind-json (username nickname password domain blog_title rss_title rss_link rss_description rss_lang rss_email) () (hunchentoot:raw-post-data :force-text t)
+;; (if (user-db:no-users?)
+;; (progn
+;; (save-initial-data-dump username nickname password domain blog_title rss_title rss_link rss_description rss_lang rss_email)
+;; (setf (hunchentoot:return-code*) 204)
+;; "")
+;; (progn
+;; (log:warn "Someone called POST /api/initial while there are users")
+;; (setf (hunchentoot:return-code*) 500)
+;; ""))))
@@ -92,19 +95,18 @@
(let* ((form (lisp-fixup:formdata->hashmap (hunchentoot:raw-post-data :force-text t)))
(username (gethash "username" form))
(password (gethash "password" form))
- (user-row (murja.users.user-db:select-user-by-login username (sha-512 password))))
+ (user-row (users:get-user username (sha-512 password))))
(if (and user-row
- (string= (gethash "username" user-row) username))
- (let ((settings (murja.routes.settings-routes:get-settings))
- (murja.middleware.auth:*user* (murja.users.user-db:get-user-by-id (gethash "userid" user-row))))
+ (string= (users:user-username user-row) username))
+ (let ((murja.middleware.auth:*user* user-row))
(multiple-value-bind (session-key max-age) (get-session-key username)
(if session-key
(let ((murja.middleware.auth:*session-key* session-key))
(set-session-value :logged-in-username username)
- (set-session-value :logged-in-user-id (gethash "userid" user-row))
+ (set-session-value :logged-in-user-id (users:user-id user-row))
- (set-session-cookies username session-key max-age settings)
+ (set-session-cookies username session-key max-age)
(log:info "~a logged in successfully~%" username))
(progn
(log:error "~a tried to log-in but get-session-key didn't return a session key. This happening signifies a bug" username)))))
diff --git a/src/routes/media-routes.lisp b/src/routes/media-routes.lisp
index 6bf2e71..55f42da 100644
--- a/src/routes/media-routes.lisp
+++ b/src/routes/media-routes.lisp
@@ -3,7 +3,7 @@
(:import-from :lisp-fixup :slurp-bytes)
(:import-from :com.inuoe.jzon :stringify :parse)
(:import-from :murja.middleware.db :@transaction)
- (:import-from :murja.media.media-db :delete-picture* :list-pictures :insert-media :select-referencing-posts* :get-media)
+ (:import-from :murja.media.media-db :get-media :insert-media :delete-picture*)
(:import-from :murja.middleware.json :@json)
(:import-from :murja.middleware.auth :@authenticated :@can? :*user*)
@@ -44,7 +44,7 @@
(format nil "inline; filename=~a" (gethash "name" pic)))
(gethash "data" pic))))
-;; I don't think this is called anywhere, but I'm not atm able to improvise a regexp that would make sure it's not
+;; this is called in murja.view.admin.media-admin
(defroute delete-pic ("/api/pictures" :method :delete
:decorators (@transaction
@authenticated
diff --git a/src/routes/post-routes.lisp b/src/routes/post-routes.lisp
index cc6eab2..307ebca 100644
--- a/src/routes/post-routes.lisp
+++ b/src/routes/post-routes.lisp
@@ -1,6 +1,5 @@
(defpackage murja.routes.post-routes
(:use :cl)
- (:import-from :murja.routes.settings-routes :get-settings)
(:import-from :lisp-fixup :partial)
(:import-from :com.inuoe.jzon :stringify :parse)
(:import-from :murja.middleware.db :@transaction)
diff --git a/src/routes/root-routes.lisp b/src/routes/root-routes.lisp
index ab49942..221effe 100644
--- a/src/routes/root-routes.lisp
+++ b/src/routes/root-routes.lisp
@@ -5,11 +5,11 @@
(:import-from :murja.middleware.db :@transaction)
(:import-from :murja.middleware.json :@json)
- (:import-from :easy-routes :defroute)
- (:local-nicknames (:user-db :murja.users.user-db)))
+ (:import-from :easy-routes :defroute))
(in-package :murja.routes.root-routes)
+;; thsi whole package becomes unnecessary once murja.css has been embedded inside lisp image
(defparameter *allowed-resources*
(let ((result nil))
(cl-fad:walk-directory
@@ -35,16 +35,6 @@
(mapcar #'pathname))
:initial-value (make-hash-table :test 'equalp))))
-(define-condition unknown-mime (error)
- ((file-type :initarg :file-type
- :initform nil
- :accessor file-type))
- ;; the :report is the message into the debugger:
- (:report (lambda (condition stream)
- (format stream
- "Don't know how to transform file of type ~a to a mime type"
- (file-type condition)))))
-
(defun get-resource (file)
;; there are not other resources beside murja.css anymore, and I'd love to get rid of it too
(when (equalp file "murja.css")
diff --git a/src/routes/rss-routes.lisp b/src/routes/rss-routes.lisp
index a2d15ce..dc57161 100644
--- a/src/routes/rss-routes.lisp
+++ b/src/routes/rss-routes.lisp
@@ -1,20 +1,17 @@
(defpackage murja.routes.rss-routes
- (:use :cl)
+ (:use :cl :murja.setting-definitions)
(:import-from :easy-routes :defroute)
(:import-from :murja.posts.post-db :get-page)
- (:import-from :murja.routes.settings-routes :get-settings)
(:import-from :murja.middleware.db :@transaction)
(:import-from :murja.middleware.auth :@authenticated :*user*))
(in-package :murja.routes.rss-routes)
(defun posts->rss (posts)
- (let* ((settings (get-settings))
- (title (gethash "rss-title" settings))
- (link (gethash "rss-link" settings))
- (description (gethash "rss-description" settings))
- (lang (gethash "rss-lang" settings))
- (mail (gethash "rss-mail" settings))
+ (let* ((title (rss-title))
+ (link (rss-link))
+ (description (rss-description))
+ (lang (rss-lang))
(output (make-string-output-stream)))
(xml-emitter:with-rss2 (output)
(xml-emitter:rss-channel-header title
@@ -33,13 +30,11 @@
(defroute rsssss ("/api/rss" :method :get
:decorators ( @transaction)) ()
(let ((lisp-fixup:*rfc822* t))
- (let* ((settings (get-settings))
- (if-modified-since (when (hunchentoot:header-in* :if-modified-since)
+ (let* ((if-modified-since (when (hunchentoot:header-in* :if-modified-since)
(lisp-fixup:if-modified-since->simpledate-timestamp
(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))
+ (page (get-page 1 (page-size) :allow-hidden? nil
+ :modified-since if-modified-since))
(last-modified
;; this application's tz handling is a fucking joke
(str:replace-all "EST" "GMT"
diff --git a/src/routes/settings-routes.lisp b/src/routes/settings-routes.lisp
deleted file mode 100644
index d22bc50..0000000
--- a/src/routes/settings-routes.lisp
+++ /dev/null
@@ -1,31 +0,0 @@
-(defpackage murja.routes.settings-routes
- (:use :cl)
- (:import-from :halisql :defqueries)
- (:import-from :lisp-fixup :partial)
- (:import-from :com.inuoe.jzon :stringify :parse)
- (:import-from :binding-arrows :->>)
- (:import-from :murja.middleware.auth :@authenticated :*user*)
- (:import-from :murja.middleware.json :@json)
- (:import-from :murja.middleware.db :@transaction)
- (:import-from :easy-routes :defroute)
- (:export :update-setting :get-settings))
-
-(in-package :murja.routes.settings-routes)
-
-(defun get-settings ()
- (reduce (lambda (acc pair)
- (destructuring-bind (k v) pair
- (setf (gethash k acc) (com.inuoe.jzon:parse v))
- acc))
- (postmodern:query "SELECT key, value FROM blog.Settings")
-
- :initial-value (make-hash-table :test 'equal)))
-
-(defroute client-settings ("/api/settings/client-settings" :method :get
- :decorators (@transaction
- @json)) ()
- (com.inuoe.jzon:stringify
- (get-settings)))
-
-(defun update-setting (k v)
- (postmodern:execute "INSERT INTO blog.Settings (key, value) VALUES ($1, $2) ON CONFLICT (key) DO UPDATE SET value = excluded.value" k (stringify v)))
diff --git a/src/routes/user-editor.lisp b/src/routes/user-editor.lisp
index 757a787..594cda6 100644
--- a/src/routes/user-editor.lisp
+++ b/src/routes/user-editor.lisp
@@ -10,19 +10,19 @@
(:import-from :com.inuoe.jzon :stringify :parse)
(:import-from :easy-routes :defroute)
- (:local-nicknames (:user-db :murja.users.user-db)
- (:login :murja.routes.login-routes)
- (:settings :murja.routes.settings-routes)))
+ (:local-nicknames (:login :murja.routes.login-routes)
+ (:users :murja.model.user)))
(in-package :murja.routes.user-editor)
;; TODO redo with spinneret
-(defun can-save-user? (user-id old-password)
- (and *user*
- (equalp (gethash "id" *user*)
- user-id)
- (user-db:search-with-id-and-pwd* user-id (sha-512 old-password))))
+;; (defun can-save-user? (user-id old-password)
+;; (and *user*
+;; (equalp (users:user-id *user*)
+;; user-id)
+;; ;; (user-db:search-with-id-and-pwd* user-id (sha-512 old-password))
+;; ))
(defmacro patch (map symbol)
(let ((symbol-str (str:downcase (format nil "~s" symbol))))
diff --git a/src/rss/reader-db.lisp b/src/rss/reader-db.lisp
index 4086391..70a985b 100644
--- a/src/rss/reader-db.lisp
+++ b/src/rss/reader-db.lisp
@@ -15,36 +15,6 @@
(defqueries "reader-fns")
-(defun parse (key hashmap)
- (setf (gethash key hashmap)
- (com.inuoe.jzon:parse (gethash key hashmap)))
- hashmap)
-
-(defun get-user-feeds (user-id archived?)
- (let* ((feeds (coerce (get-user-feeds* user-id archived?) 'list))
- (fixed-feeds
- (mapcar (compose (partial #'parse "items")
- (partial #'parse "creator"))
- feeds)))
- (dolist (feed fixed-feeds)
- (setf (gethash "items" feed)
- (coerce (gethash "items" feed) 'list))
-
- (if (equalp (list 'null) (gethash "items" feed))
- (setf (gethash "items" feed) #())
-
- (dolist (item (gethash "items" feed))
- (setf (gethash "is_read" item)
- (not (equalp 'NULL (gethash "read_at" item))))
-
- ;; frontend doesn't need this
- (remhash "read_at" item))))
-
- fixed-feeds))
-
-(defun subscribe-to-feed (feed-name feed-url owner)
- (insert-feed feed-name feed-url (gethash "id" owner)))
-
(defun subscribe-to-feed2 (feed-name feed-url owner)
(insert-feed feed-name feed-url (murja.model.user:user-id owner)))
diff --git a/src/session.lisp b/src/session.lisp
index 74c02da..682b011 100644
--- a/src/session.lisp
+++ b/src/session.lisp
@@ -2,6 +2,7 @@
(:use :cl)
(:export :set-session-value :get-session-value)
(:import-from :murja.session.db :assert-ownership :set-session-val* :get-session-val*)
+ (:local-nicknames (:users :murja.model.user))
(:import-from :murja.middleware.auth :*user* :*session-key*))
(in-package :murja.session)
@@ -9,7 +10,7 @@
(defun set-session-value (key val)
(assert *user*)
(assert *session-key*)
- (let ((user-id (gethash "id" *user*)))
+ (let ((user-id (users:user-id *user*)))
(assert-ownership user-id *session-key*)
(set-session-val* *session-key* (str:downcase (symbol-name key)) val)
@@ -19,7 +20,7 @@
(defun get-session-value (key)
(assert *user*)
(assert *session-key*)
- (let* ((user-id (gethash "id" *user*))
+ (let* ((user-id (users:user-id *user*))
(res (coerce (get-session-val* (murja.session.db:now) user-id key) 'list)))
(when res
(gethash "val" (first res)))))
diff --git a/src/settings.lisp b/src/settings.lisp
deleted file mode 100644
index 896ca47..0000000
--- a/src/settings.lisp
+++ /dev/null
@@ -1,19 +0,0 @@
-(defpackage murja.settings
- (:use :cl)
- (:documentation "DEPRECATED.
-
-Please use murja.setting-definitions functions")
- (:export :*settings* :get-settings))
-
-(in-package :murja.settings)
-
-(defun get-settings ()
- (reduce (lambda (acc pair)
- (destructuring-bind (k v) pair
- (setf (gethash k acc) (com.inuoe.jzon:parse v))
- acc))
- (postmodern:query "SELECT key, value FROM blog.Settings")
-
- :initial-value (make-hash-table :test 'equal)))
-
-(defvar *settings* nil "A hashmap view of `select * from blog.settings`. If this variable is nil, wrap your route with @transaction middleware. If you setf keys here, remember to update db too with murja.routes.settings-routes:update-setting")
diff --git a/src/users/user-db.lisp b/src/users/user-db.lisp
deleted file mode 100644
index 060960c..0000000
--- a/src/users/user-db.lisp
+++ /dev/null
@@ -1,56 +0,0 @@
-(defpackage :murja.users.user-db
- (:use :cl :postmodern)
- (:import-from :lisp-fixup :sha-512)
- (:export :patch-user-img* :get-session-user-by-id :search-with-id-and-pwd* :get-user-by-id :select-user-by-login :register-user :patch-user :no-users? :cast-only-user-as-admin)
- (:import-from :halisql :defqueries))
-
-(in-package :murja.users.user-db)
-
-(defqueries "user-fns")
-
-(defun jsonize-key (hash key)
- (setf (gethash key hash)
- (coerce
- (com.inuoe.jzon:parse (gethash key hash))
- 'list))
- hash)
-
-(defun get-user-by-id (id)
- (let ((result (coerce (get-user-by-id* id) 'list)))
- (when result
- (jsonize-key (first result) "permissions"))))
-
-(defun get-session-user-by-id (id)
- (jsonize-key (aref (query-user-for-session id) 0) "permissions"))
-
-(defun select-user-by-login (username password-sha)
- (let ((usr (first (coerce (query-users* username password-sha) 'list))))
- (if usr
- (jsonize-key usr "permissions")
- (let ((usrs (coerce (postmodern:query "SELECT * FROM blog.Users" :alists) 'list)))
- (unless usrs
- (log:error "There are no users in the db"))
- nil))))
-
-(defun register-user (username nickname img-location password)
- "Inserts the new user into db and returns its id"
- (caar (postmodern:query "INSERT INTO blog.Users (username, nickname, img_location, password) VALUES ($1, $2, $3, $4) returning id"
- username
- nickname
- img-location
- (sha-512 password))))
-
-(defun cast-only-user-as-admin ()
- (let ((c (caar (query "SELECT count(*) FROM blog.users"))))
- (assert (equalp c 1))
- (execute "INSERT INTO blog.groupmapping SELECT usr.id, grp.id, true FROM blog.users usr JOIN blog.usergroup grp ON grp.name = 'Admins'")))
-
- ;;(postmodern:connect-toplevel "blogdb" "blogadmin" "blog" "localhost")
-
-(defun patch-user (usr)
- (cl-hash-util:with-keys ("nickname" "username" "password" "id") usr
- (patch-user* nickname username password id)))
-
-(defun no-users? ()
- (caar (postmodern:query "SELECT NOT EXISTS (SELECT * FROM blog.users)")))
-
diff --git a/src/view/admin/new-post.lisp b/src/view/admin/new-post.lisp
index 6ef1720..b532a1a 100644
--- a/src/view/admin/new-post.lisp
+++ b/src/view/admin/new-post.lisp
@@ -2,7 +2,6 @@
(:use :cl :easy-routes :binding-arrows :spinneret :murja.model.post :murja.view.admin.components.editor)
;; (:import-from :murja.model.post :article :post-title)
(:import-from :murja.middleware.db :@transaction :@db)
- (:import-from :murja.routes.login-routes :formdata->hashmap)
(:import-from :murja.middleware.auth :@authenticated :@ssr-authenticated :*user*)
(:import-from :murja.model.user :user-id )
(:import-from :murja.view.components.tabs :deftab)
@@ -49,7 +48,7 @@
(let ((abilities (coerce (murja.model.user:abilities *user*) 'list)))
(when (member "edit-post" abilities :test 'equal)
(let ((post (get-post (parse-integer id) :allow-hidden? t))
- (form (formdata->hashmap (hunchentoot:raw-post-data :force-text t))))
+ (form (lisp-fixup:formdata->hashmap (hunchentoot:raw-post-data :force-text t))))
(setf (article post) (gethash "article" form))
(setf (post-title post) (gethash "title" form))
diff --git a/src/view/admin/post-list.lisp b/src/view/admin/post-list.lisp
index 57da058..9c99df5 100644
--- a/src/view/admin/post-list.lisp
+++ b/src/view/admin/post-list.lisp
@@ -1,7 +1,6 @@
(defpackage murja.view.admin.post-list
(:use :cl :binding-arrows :spinneret
- :easy-routes
- :murja.settings :cl-hash-util
+ :easy-routes :cl-hash-util
:murja.view.components.blogpost)
(:import-from :murja.view.components.tabs :deftab)
(:import-from :murja.model.post :admin-get-all-titles :title :month :year :id :tags :hidden :unlisted)
diff --git a/src/view/blog-root.lisp b/src/view/blog-root.lisp
index 74177e2..d601d01 100644
--- a/src/view/blog-root.lisp
+++ b/src/view/blog-root.lisp
@@ -1,17 +1,17 @@
(defpackage murja.view.blog-root
(:use :cl :binding-arrows
:murja.view.components.blogpost
- :easy-routes
- :murja.settings :cl-hash-util)
+ :easy-routes :cl-hash-util)
(:export :root)
(:import-from :murja.view.components.tabs :deftab)
- (:import-from :murja.model.post :get-page))
+ (:import-from :murja.model.post :get-page)
+ (:local-nicknames (:settings :murja.setting-definitions)))
(in-package :murja.view.blog-root)
(deftab root (:url "/"
:title "Home")
- (let* ((recent-post-count (gethash "recent-post-count" murja.settings:*settings*))
+ (let* ((recent-post-count (settings:recent-post-count))
(loaded-page (get-page 1 recent-post-count)))
(page loaded-page 1)))
@@ -19,6 +19,6 @@
:subtab root
:captured-url-params (id))
(let* ((id (parse-integer id))
- (recent-post-count (gethash "recent-post-count" murja.settings:*settings*))
+ (recent-post-count (settings:recent-post-count))
(loaded-page (get-page id recent-post-count)))
(page loaded-page id)))
diff --git a/src/view/components/root.lisp b/src/view/components/root.lisp
index e2cdcbe..469c4e8 100644
--- a/src/view/components/root.lisp
+++ b/src/view/components/root.lisp
@@ -1,6 +1,6 @@
(defpackage murja.view.components.root
(:use :cl :spinneret :binding-arrows
- :murja.settings
+ :murja.setting-definitions
:murja.middleware.auth
:murja.model.user)
@@ -80,7 +80,7 @@
(:body
(:header
- (:a :href "/" (gethash "blog-title" *settings* )))
+ (:a :href "/" (blog-title)))
(:div :class "sidebar-flex"
,inner-component
diff --git a/src/view/components/tabs.lisp b/src/view/components/tabs.lisp
index 66b5e09..1846cb5 100644
--- a/src/view/components/tabs.lisp
+++ b/src/view/components/tabs.lisp
@@ -50,9 +50,8 @@
:component (lambda (&rest all)
(destructuring-bind ,captured-url-params all
(murja.middleware.db:with-db
- (let ((murja.settings:*settings* (murja.settings:get-settings)))
- (with-html
- ,@rst)))))))
+ (with-html
+ ,@rst))))))
(defroute ,sym (,(if lisp-fixup:*dev?*
;; we handle /blog prefix on our own only on dev
(format nil "/blog~A" url)
diff --git a/src/view/single-post.lisp b/src/view/single-post.lisp
index 70918a0..93396b2 100644
--- a/src/view/single-post.lisp
+++ b/src/view/single-post.lisp
@@ -1,7 +1,6 @@
(defpackage murja.view.single-post
(:use :cl :binding-arrows
- :easy-routes
- :murja.settings :cl-hash-util
+ :easy-routes :cl-hash-util
:murja.view.components.blogpost)
(:import-from :murja.view.components.tabs :deftab)
(:export :blog/post/id)