diff --git a/src/web.lisp b/src/web.lisp index eb2101f..51212bf 100644 --- a/src/web.lisp +++ b/src/web.lisp @@ -741,8 +741,10 @@ (if (nera:get-storage-file :slug slug) `(200 (:content-type ,(files::file-type-of - (nera:get-storage-file :slug slug))) - ,(storage:open-binary-file "" "media" slug)) + (nera:get-storage-file :slug slug))) + ,(storage:open-binary-file + "" "media" (files::name-of + (nera:get-storage-file :slug slug)))) (on-exception *web* 404))) (defroute ("/storage/thumb/archive/:slug" :method :GET) (&key slug) @@ -766,68 +768,46 @@ (progn (utils:set-alert "You are not logged in.") (redirect "/login")))) -(defroute ("/storage/upload" :method :POST) () - (destructuring-bind - (&key file-name storage-file authenticity-token &allow-other-keys) - (utils:request-params - (lack.request:request-body-parameters ningle:*request*)) - (if (not (string= authenticity-token (auth:csrf-token))) - `(,+forbidden+ (:content-type "text/plain") ("Denied")) - (hermetic:auth - (:logged-in) - ;; Authorised - (cond ((utils:string-is-nil-or-empty? (cadr storage-file)) - (utils:set-alert "No file provided.") - (redirect "/storage/manage")) - - ((not (null (nera:get-storage-file :filename file-name))) - (utils:set-alert "File with that name already exists. File not saved.") - (redirect "/storage/manage")) - - (t (storage:store-file "" "media" (utils:slugify file-name) storage-file) - (nera:add-storage-file file-name - (utils:slugify file-name) - (caddr storage-file)) - (utils:create-thumbnail "media" (utils:slugify file-name)) - (utils:set-alert "File uploaded.") - (redirect "/storage/manage"))) - ;; Not Authorised - (progn - (utils:set-alert "You are not authorised to view this page.") - (redirect "/login")))))) - (defroute ("/storage/multi-upload" :method :POST) () (destructuring-bind (&key authenticity-token &allow-other-keys) (utils:request-params (lack.request:request-body-parameters ningle:*request*)) - (if (not (string= authenticity-token (auth:csrf-token))) - `(,+forbidden+ (:content-type "text/plain") ("Denied")) - (let ((files (utils:separate-files-in-web-request - (lack.request:request-body-parameters ningle:*request*) - "STORAGE-FILES"))) - (format t "[INFO] Files: ~a" (length files)) - (hermetic:auth - (:logged-in) - ;; Authorised - (cond ((utils:string-is-nil-or-empty? (caddr (car files))) - (utils:set-alert "No files provided.") - (redirect "/storage/manage")) - - (t (loop :for item :in files :do - (storage:store-file - "" "media" - (utils:slugify (caddr item)) (cdr item)) - (nera:add-storage-file (caddr item) - (utils:slugify (caddr item)) - (cadddr item)) - (utils:create-thumbnail "media" (utils:slugify (caddr item)))) - (utils:set-alert "Multi-File upload complete.") - (redirect "/storage/manage"))) - ;; Not Authorised - (progn - (utils:set-alert "You are not authorised to view this page.") - (redirect "/login"))))))) + (if (not (string= authenticity-token (auth:csrf-token))) + `(,+forbidden+ (:content-type "text/plain") ("Denied")) + (let ((files (utils:separate-files-in-web-request + (lack.request:request-body-parameters ningle:*request*) + "STORAGE-FILES"))) + (hermetic:auth + (:logged-in) + ;; Authorised + (cond ((utils:string-is-nil-or-empty? (caddr (car files))) + (utils:set-alert "No files provided.") + (redirect "/storage/manage")) + + (t (loop + :for item :in files + :do (storage:store-file + "" "media" (utils:format-filename (caddr item)) (cdr item)) + + (nera:add-storage-file (caddr item) + (utils:slugify (caddr item)) + (cadddr item)) + + (when (str:contains? "image" (caddr item) :ignore-case t) + (utils:create-thumbnail + "media" (utils:format-filename (caddr item)) nil) + (nera:add-storage-file + (format nil "thumbnail-~a" (caddr item)) + (utils:slugify (format nil "thumbnail-~a" (caddr item))) + (cadddr item)))) + + (utils:set-alert "Multi-File upload complete.") + (redirect "/storage/manage"))) + ;; Not Authorised + (progn + (utils:set-alert "You are not authorised to view this page.") + (redirect "/login"))))))) (defroute ("/storage/rename/:slug" :method :POST) (&key slug) (destructuring-bind