diff --git a/plume-models/src/blogs.rs b/plume-models/src/blogs.rs index 09497ab0..0965f216 100644 --- a/plume-models/src/blogs.rs +++ b/plume-models/src/blogs.rs @@ -17,13 +17,14 @@ use webfinger::*; use {BASE_URL, USE_HTTPS, Connection}; use plume_common::activity_pub::{ ap_accept_header, ApSignature, ActivityStream, Id, IntoId, PublicKey, - inbox::WithInbox, + inbox::{Deletable, WithInbox}, sign }; use safe_string::SafeString; use instance::*; -use users::User; +use posts::Post; use schema::blogs; +use users::User; pub type CustomGroup = CustomObject; @@ -273,6 +274,13 @@ impl Blog { json["fqn"] = json!(self.get_fqn(conn)); json } + + pub fn delete(&self, conn: &Connection) { + for post in Post::get_for_blog(conn, &self) { + post.delete(conn); + } + diesel::delete(self).execute(conn).expect("Blog::delete: blog deletion error"); + } } impl IntoId for Blog { diff --git a/src/main.rs b/src/main.rs index cdd38b6b..8a1cec2d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -66,6 +66,7 @@ fn main() { routes::blogs::new, routes::blogs::new_auth, routes::blogs::create, + routes::blogs::delete, routes::blogs::atom_feed, routes::comments::create, diff --git a/src/routes/blogs.rs b/src/routes/blogs.rs index e18ebbb8..a5212d45 100644 --- a/src/routes/blogs.rs +++ b/src/routes/blogs.rs @@ -129,6 +129,19 @@ fn create(conn: DbConn, data: LenientForm, user: User) -> Result/delete")] +fn delete(conn: DbConn, name: String, user: Option) -> Result>{ + let blog = Blog::find_local(&*conn, name).ok_or(None)?; + if user.map(|u| u.is_author_in(&*conn, blog.clone())).unwrap_or(false) { + blog.delete(&conn); + Ok(Redirect::to(uri!(super::instance::index))) + } else { + Err(Some(Template::render("errors/403", json!({// TODO actually return 403 error code + "error_message": "You are not allowed to delete this blog." + })))) + } +} + #[get("/~//outbox")] fn outbox(name: String, conn: DbConn) -> Option> { let blog = Blog::find_local(&*conn, name)?; diff --git a/templates/blogs/details.html.tera b/templates/blogs/details.html.tera index 63d7cdd4..93b70d6e 100644 --- a/templates/blogs/details.html.tera +++ b/templates/blogs/details.html.tera @@ -40,4 +40,11 @@ {{ macros::paginate(page=page, total=n_pages) }} + {% if is_author %} +

{{ "Danger zone" | _ }}

+

{{ "Be very careful, any action taken here can't be cancelled." | _ }} +

+ +
+ {% endif %} {% endblock content %}