mirror of
https://git.sr.ht/~tsileo/microblog.pub
synced 2024-12-22 13:14:28 +00:00
Add remote interaction button
This commit is contained in:
parent
96eae971b8
commit
6216b316e8
3 changed files with 79 additions and 0 deletions
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>
|
||||||
|
|
Loading…
Reference in a new issue