mirror of
				https://git.sr.ht/~tsileo/microblog.pub
				synced 2025-06-05 21:59:23 +02:00 
			
		
		
		
	Add remote interaction button
This commit is contained in:
		
							
								
								
									
										43
									
								
								app/main.py
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								app/main.py
									
									
									
									
									
								
							| @@ -883,6 +883,48 @@ async def post_remote_follow( | |||||||
|     ) |     ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @app.get("/remote_interaction") | ||||||
|  | async def remote_interaction( | ||||||
|  |     request: Request, | ||||||
|  |     ap_id: str, | ||||||
|  |     db_session: AsyncSession = Depends(get_db_session), | ||||||
|  | ) -> templates.TemplateResponse: | ||||||
|  |     outbox_object = await boxes.get_outbox_object_by_ap_id( | ||||||
|  |         db_session, | ||||||
|  |         ap_id, | ||||||
|  |     ) | ||||||
|  |     if not outbox_object: | ||||||
|  |         raise HTTPException(status_code=404) | ||||||
|  |  | ||||||
|  |     return await templates.render_template( | ||||||
|  |         db_session, | ||||||
|  |         request, | ||||||
|  |         "remote_interact.html", | ||||||
|  |         {"outbox_object": outbox_object}, | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @app.post("/remote_interaction") | ||||||
|  | async def post_remote_interaction( | ||||||
|  |     request: Request, | ||||||
|  |     csrf_check: None = Depends(verify_csrf_token), | ||||||
|  |     profile: str = Form(), | ||||||
|  |     ap_id: str = Form(), | ||||||
|  | ) -> RedirectResponse: | ||||||
|  |     if not profile.startswith("@"): | ||||||
|  |         profile = f"@{profile}" | ||||||
|  |  | ||||||
|  |     remote_follow_template = await get_remote_follow_template(profile) | ||||||
|  |     if not remote_follow_template: | ||||||
|  |         # TODO(ts): error message to user | ||||||
|  |         raise HTTPException(status_code=404) | ||||||
|  |  | ||||||
|  |     return RedirectResponse( | ||||||
|  |         remote_follow_template.format(uri=ap_id), | ||||||
|  |         status_code=302, | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |  | ||||||
| @app.get("/.well-known/webfinger") | @app.get("/.well-known/webfinger") | ||||||
| async def wellknown_webfinger(resource: str) -> JSONResponse: | async def wellknown_webfinger(resource: str) -> JSONResponse: | ||||||
|     """Exposes/servers WebFinger data.""" |     """Exposes/servers WebFinger data.""" | ||||||
| @@ -1179,6 +1221,7 @@ async def robots_file(): | |||||||
| Disallow: /followers | Disallow: /followers | ||||||
| Disallow: /following | Disallow: /following | ||||||
| Disallow: /admin | Disallow: /admin | ||||||
|  | Disallow: /remote_interaction | ||||||
| Disallow: /remote_follow""" | Disallow: /remote_follow""" | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										26
									
								
								app/templates/remote_interact.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								app/templates/remote_interact.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | {%- import "utils.html" as utils with context -%} | ||||||
|  | {% extends "layout.html" %} | ||||||
|  |  | ||||||
|  | {% block head %} | ||||||
|  | <title>Interact from your instance</title> | ||||||
|  | {% endblock %} | ||||||
|  |  | ||||||
|  | {% block content %} | ||||||
|  | {% include "header.html" %} | ||||||
|  |  | ||||||
|  | <div class="box"> | ||||||
|  |     <h2>Interact with this object</h2> | ||||||
|  | </div> | ||||||
|  |  | ||||||
|  | {{ utils.display_object(outbox_object) }} | ||||||
|  |  | ||||||
|  | <div class="box"> | ||||||
|  |     <form class="form" action="{{ url_for("post_remote_interaction") }}" method="POST"> | ||||||
|  |         {{ utils.embed_csrf_token() }} | ||||||
|  |         <input type="text" name="profile" placeholder="you@instance.tld" autofocus> | ||||||
|  |         <input type="hidden" name="ap_id" value="{{ outbox_object.ap_id }}"> | ||||||
|  |         <input type="submit" value="interact from your instance"> | ||||||
|  |     </form> | ||||||
|  | </div> | ||||||
|  |  | ||||||
|  | {% endblock %} | ||||||
| @@ -466,6 +466,16 @@ | |||||||
|         <li> |         <li> | ||||||
|             <div><a href="{{ object.url }}"{% if object.is_from_inbox %} rel="nofollow"{% endif %} class="object-permalink u-url u-uid">permalink</a></div> |             <div><a href="{{ object.url }}"{% if object.is_from_inbox %} rel="nofollow"{% endif %} class="object-permalink u-url u-uid">permalink</a></div> | ||||||
|         </li> |         </li> | ||||||
|  |  | ||||||
|  |         {% if object.is_from_outbox and is_object_page and not is_admin and not request.url.path.startswith("/remote_interaction") %} | ||||||
|  |             <li> | ||||||
|  |                 <a class="label-btn" href="{{ request.url_for("remote_interaction") }}?ap_id={{ object.ap_id }}"> | ||||||
|  |                     interact from your instance | ||||||
|  |                 </a> | ||||||
|  |             </li> | ||||||
|  |         {% endif %} | ||||||
|  |  | ||||||
|  |  | ||||||
|         {% if not is_article_mode %} |         {% if not is_article_mode %} | ||||||
|             <li> |             <li> | ||||||
|                 <time class="dt-published" datetime="{{ object.ap_published_at.replace(microsecond=0).isoformat() }}" title="{{ object.ap_published_at.replace(microsecond=0).isoformat() }}">{{ object.ap_published_at | timeago }}</time> |                 <time class="dt-published" datetime="{{ object.ap_published_at.replace(microsecond=0).isoformat() }}" title="{{ object.ap_published_at.replace(microsecond=0).isoformat() }}">{{ object.ap_published_at | timeago }}</time> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user