Actually implement blocks
This commit is contained in:
parent
0a70ff2594
commit
f66ddf6ef2
|
@ -75,6 +75,19 @@ impl Instance {
|
||||||
.expect("Couldn't block/unblock instance");
|
.expect("Couldn't block/unblock instance");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// id: AP object id
|
||||||
|
pub fn is_blocked(conn: &PgConnection, id: String) -> bool {
|
||||||
|
for block in instances::table.filter(instances::blocked.eq(true))
|
||||||
|
.get_results::<Instance>(conn)
|
||||||
|
.expect("Error listing blocked instances") {
|
||||||
|
if id.starts_with(format!("https://{}", block.public_domain).as_str()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
pub fn has_admin(&self, conn: &PgConnection) -> bool {
|
pub fn has_admin(&self, conn: &PgConnection) -> bool {
|
||||||
users::table.filter(users::instance_id.eq(self.id))
|
users::table.filter(users::instance_id.eq(self.id))
|
||||||
.filter(users::is_admin.eq(true))
|
.filter(users::is_admin.eq(true))
|
||||||
|
|
|
@ -155,7 +155,7 @@ fn admin_instances_paginated(admin: Admin, conn: DbConn, page: Page) -> Template
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/admin/instances/<id>/block")]
|
#[get("/admin/instances/<id>/block")]
|
||||||
fn toggle_block(admin: Admin, conn: DbConn, id: i32) -> Redirect {
|
fn toggle_block(_admin: Admin, conn: DbConn, id: i32) -> Redirect {
|
||||||
if let Some(inst) = Instance::get(&*conn, id) {
|
if let Some(inst) = Instance::get(&*conn, id) {
|
||||||
inst.toggle_block(&*conn);
|
inst.toggle_block(&*conn);
|
||||||
}
|
}
|
||||||
|
@ -166,6 +166,13 @@ fn toggle_block(admin: Admin, conn: DbConn, id: i32) -> Redirect {
|
||||||
#[post("/inbox", data = "<data>")]
|
#[post("/inbox", data = "<data>")]
|
||||||
fn shared_inbox(conn: DbConn, data: String) -> String {
|
fn shared_inbox(conn: DbConn, data: String) -> String {
|
||||||
let act: serde_json::Value = serde_json::from_str(&data[..]).unwrap();
|
let act: serde_json::Value = serde_json::from_str(&data[..]).unwrap();
|
||||||
|
|
||||||
|
let activity = act.clone();
|
||||||
|
let actor_id = activity["actor"].as_str()
|
||||||
|
.unwrap_or_else(|| activity["actor"]["id"].as_str().expect("No actor ID for incoming activity, blocks by panicking"));
|
||||||
|
if Instance::is_blocked(&*conn, actor_id.to_string()) {
|
||||||
|
return String::new();
|
||||||
|
}
|
||||||
let instance = Instance::get_local(&*conn).unwrap();
|
let instance = Instance::get_local(&*conn).unwrap();
|
||||||
match instance.received(&*conn, act) {
|
match instance.received(&*conn, act) {
|
||||||
Ok(_) => String::new(),
|
Ok(_) => String::new(),
|
||||||
|
|
|
@ -282,6 +282,13 @@ fn outbox(name: String, conn: DbConn) -> ActivityStream<OrderedCollection> {
|
||||||
fn inbox(name: String, conn: DbConn, data: String) -> String {
|
fn inbox(name: String, conn: DbConn, data: String) -> String {
|
||||||
let user = User::find_local(&*conn, name).unwrap();
|
let user = User::find_local(&*conn, name).unwrap();
|
||||||
let act: serde_json::Value = serde_json::from_str(&data[..]).unwrap();
|
let act: serde_json::Value = serde_json::from_str(&data[..]).unwrap();
|
||||||
|
|
||||||
|
let activity = act.clone();
|
||||||
|
let actor_id = activity["actor"].as_str()
|
||||||
|
.unwrap_or_else(|| activity["actor"]["id"].as_str().expect("User: No actor ID for incoming activity, blocks by panicking"));
|
||||||
|
if Instance::is_blocked(&*conn, actor_id.to_string()) {
|
||||||
|
return String::new();
|
||||||
|
}
|
||||||
match user.received(&*conn, act) {
|
match user.received(&*conn, act) {
|
||||||
Ok(_) => String::new(),
|
Ok(_) => String::new(),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
|
Loading…
Reference in New Issue