3 schema::{federation_allowlist, federation_blocklist, instance},
4 source::instance::{Instance, InstanceForm},
7 use diesel::{dsl::*, result::Error, *};
8 use lemmy_utils::utils::generate_domain_url;
12 fn create_from_form(conn: &mut PgConnection, form: &InstanceForm) -> Result<Self, Error> {
13 // Do upsert on domain name conflict
14 insert_into(instance::table)
16 .on_conflict(instance::domain)
19 .get_result::<Self>(conn)
21 pub fn create(conn: &mut PgConnection, domain: &str) -> Result<Self, Error> {
22 let form = InstanceForm {
23 domain: domain.to_string(),
24 updated: Some(naive_now()),
26 Self::create_from_form(conn, &form)
28 pub fn create_from_actor_id(conn: &mut PgConnection, actor_id: &Url) -> Result<Self, Error> {
29 let domain = &generate_domain_url(actor_id).expect("actor id missing a domain");
30 Self::create(conn, domain)
32 pub fn delete(conn: &mut PgConnection, instance_id: InstanceId) -> Result<usize, Error> {
33 diesel::delete(instance::table.find(instance_id)).execute(conn)
35 pub fn delete_all(conn: &mut PgConnection) -> Result<usize, Error> {
36 diesel::delete(instance::table).execute(conn)
38 pub fn allowlist(conn: &mut PgConnection) -> Result<Vec<String>, Error> {
40 .inner_join(federation_allowlist::table)
41 .select(instance::domain)
45 pub fn blocklist(conn: &mut PgConnection) -> Result<Vec<String>, Error> {
47 .inner_join(federation_blocklist::table)
48 .select(instance::domain)
52 pub fn linked(conn: &mut PgConnection) -> Result<Vec<String>, Error> {
54 .left_join(federation_blocklist::table)
55 .filter(federation_blocklist::id.is_null())
56 .select(instance::domain)