Implement Blog::into_activity
This commit is contained in:
		
							parent
							
								
									a0f680a9b6
								
							
						
					
					
						commit
						dccab062e3
					
				| @ -16,8 +16,9 @@ use openssl::{ | ||||
| }; | ||||
| use webfinger::*; | ||||
| 
 | ||||
| use BASE_URL; | ||||
| use activity_pub::{ | ||||
|     ApSignature, ActivityStream, Id, IntoId, | ||||
|     ApSignature, ActivityStream, Id, IntoId, PublicKey, | ||||
|     inbox::WithInbox, | ||||
|     sign | ||||
| }; | ||||
| @ -60,6 +61,8 @@ const BLOG_PREFIX: &'static str = "~"; | ||||
| impl Blog { | ||||
|     insert!(blogs, NewBlog); | ||||
|     get!(blogs); | ||||
|     find_by!(blogs, find_by_ap_url, ap_url as String); | ||||
|     find_by!(blogs, find_by_name, actor_id as String, instance_id as i32); | ||||
| 
 | ||||
|     pub fn get_instance(&self, conn: &PgConnection) -> Instance { | ||||
|         Instance::get(conn, self.instance_id).expect("Couldn't find instance") | ||||
| @ -73,8 +76,6 @@ impl Blog { | ||||
|             .expect("Couldn't load blogs ") | ||||
|     } | ||||
| 
 | ||||
|     find_by!(blogs, find_by_name, actor_id as String, instance_id as i32); | ||||
| 
 | ||||
|     pub fn find_local(conn: &PgConnection, name: String) -> Option<Blog> { | ||||
|         Blog::find_by_name(conn, name, Instance::local_id(conn)) | ||||
|     } | ||||
| @ -144,8 +145,23 @@ impl Blog { | ||||
|         }) | ||||
|     } | ||||
| 
 | ||||
|     pub fn into_activity(&self, _conn: &PgConnection) -> Group { | ||||
|         Group::default() // TODO
 | ||||
|     pub fn into_activity(&self, _conn: &PgConnection) -> CustomGroup { | ||||
|         let mut blog = Group::default(); | ||||
|         blog.ap_actor_props.set_preferred_username_string(self.actor_id.clone()).expect("Blog::into_activity: preferredUsername error"); | ||||
|         blog.object_props.set_name_string(self.title.clone()).expect("Blog::into_activity: name error"); | ||||
|         blog.ap_actor_props.set_outbox_string(self.outbox_url.clone()).expect("Blog::into_activity: outbox error"); | ||||
|         blog.ap_actor_props.set_inbox_string(self.inbox_url.clone()).expect("Blog::into_activity: inbox error"); | ||||
|         blog.object_props.set_summary_string(self.summary.clone()).expect("Blog::into_activity: summary error"); | ||||
|         blog.object_props.set_id_string(self.ap_url.clone()).expect("Blog::into_activity: id error"); | ||||
| 
 | ||||
|         let mut public_key = PublicKey::default(); | ||||
|         public_key.set_id_string(format!("{}#main-key", self.ap_url)).expect("Blog::into_activity: publicKey.id error"); | ||||
|         public_key.set_owner_string(self.ap_url.clone()).expect("Blog::into_activity: publicKey.owner error"); | ||||
|         public_key.set_public_key_pem_string(self.public_key.clone()).expect("Blog::into_activity: publicKey.publicKeyPem error"); | ||||
|         let mut ap_signature = ApSignature::default(); | ||||
|         ap_signature.set_public_key_publickey(public_key).expect("Blog::into_activity: publicKey error"); | ||||
| 
 | ||||
|         CustomGroup::new(blog, ap_signature) | ||||
|     } | ||||
| 
 | ||||
|     pub fn update_boxes(&self, conn: &PgConnection) { | ||||
| @ -208,13 +224,16 @@ impl Blog { | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // FIXME: see User::from_url for correct behavior
 | ||||
|     pub fn from_url(conn: &PgConnection, url: String) -> Option<Blog> { | ||||
|         blogs::table.filter(blogs::ap_url.eq(url)) | ||||
|             .limit(1) | ||||
|             .load::<Blog>(conn) | ||||
|             .expect("Error loading blog from url") | ||||
|             .into_iter().nth(0) | ||||
|         Blog::find_by_ap_url(conn, url.clone()).or_else(|| { | ||||
|             // The requested user was not in the DB
 | ||||
|             // We try to fetch it if it is remote
 | ||||
|             if Url::parse(url.as_ref()).unwrap().host_str().unwrap() != BASE_URL.as_str() { | ||||
|                 Some(Blog::fetch_from_url(conn, url).unwrap()) | ||||
|             } else { | ||||
|                 None | ||||
|             } | ||||
|         }) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| use activitypub::{actor::Group, collection::OrderedCollection}; | ||||
| use activitypub::collection::OrderedCollection; | ||||
| use rocket::{ | ||||
|     request::Form, | ||||
|     response::{Redirect, Flash} | ||||
| @ -32,7 +32,7 @@ fn details(name: String, conn: DbConn, user: Option<User>) -> Template { | ||||
| } | ||||
| 
 | ||||
| #[get("/~/<name>", format = "application/activity+json", rank = 1)] | ||||
| fn activity_details(name: String, conn: DbConn) -> ActivityStream<Group> { | ||||
| fn activity_details(name: String, conn: DbConn) -> ActivityStream<CustomGroup> { | ||||
|     let blog = Blog::find_local(&*conn, name).unwrap(); | ||||
|     ActivityStream::new(blog.into_activity(&*conn)) | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user