diff --git a/src/web.lisp b/src/web.lisp index 7eddef0..bdba758 100644 --- a/src/web.lisp +++ b/src/web.lisp @@ -1758,6 +1758,44 @@ "You are not authorised to delete page." "error") (redirect "/login"))))))) +(defroute ("/danger/restore-snapshot" :method :POST) () + (destructuring-bind + (&key snapshot-name authenticity-token &allow-other-keys) + (utils:request-params (lack.request:request-body-parameters ningle:*request*)) + (cond ((not (string= authenticity-token (auth:csrf-token))) + `(,+forbidden+ (:content-type "text/plain") ("Denied"))) + (t (hermetic:auth + (:administrator) + ;; Authorised + (cond ((validation::string-is-nil-or-empty? snapshot-name) + (utils:set-alert "No Snapshot Name provided." + "missing-data") + (redirect "/danger/manage-snapshots")) + ((not (storage:raw-directory-exists? + (format nil "snapshots/~a/" snapshot-name))) + (utils:set-alert "Cannot find selected Snapshot." + "invalid-data") + (redirect "/danger/manage-snapshots")) + (t (snapshot:restore-from-snapshot snapshot-name) + (if (str:contains? + "://localhost:" (utils:build-url-root ningle:*request*)) + (utils:set-alert + "Snapshot restored. Restart local server for changes to take effect." + "success") + (progn + (utils:set-alert + "Snapshot restored restarting server. Please wait..." + "success") + ;; TODO: WRITE SCRIPT TO RESTART SYSTEMD SERVICE. + ;; utils:run-bash-command "Restart Systemd Service" + (format + t "[INFO] Restarting Systemd service is not yet implemented."))) + (redirect "/danger/manage-snapshots"))) + ;; Not Authorised + (progn (utils:set-alert + "You are not authorised to delete page." "error") + (redirect "/login"))))))) + ;; ;; Error pages