mirror of
https://codeberg.org/rimu/pyfedi
synced 2025-01-23 19:36:56 -08:00
change date format header for compatibility with mastodon
This commit is contained in:
parent
0b159edf0a
commit
39ddb0af3e
2 changed files with 51 additions and 38 deletions
|
@ -43,7 +43,7 @@ from flask import Request, current_app
|
|||
from datetime import datetime
|
||||
from dateutil import parser
|
||||
from pyld import jsonld
|
||||
|
||||
from email.utils import formatdate
|
||||
from app import db
|
||||
from app.activitypub.util import default_context
|
||||
from app.constants import DATETIME_MS_FORMAT
|
||||
|
@ -53,8 +53,9 @@ from app.models import utcnow, ActivityPubLog
|
|||
def http_date(epoch_seconds=None):
|
||||
if epoch_seconds is None:
|
||||
epoch_seconds = arrow.utcnow().timestamp()
|
||||
formatted_date = arrow.get(epoch_seconds).format('ddd, DD MMM YYYY HH:mm:ss ZZ', 'en_US')
|
||||
return formatted_date
|
||||
return formatdate(epoch_seconds, usegmt=True) # takahe uses formatdate so let's try that
|
||||
# formatted_date = arrow.get(epoch_seconds).format('ddd, DD MMM YYYY HH:mm:ss ZZ', 'en_US') # mastodon does not like this
|
||||
# return formatted_date
|
||||
|
||||
|
||||
def format_ld_date(value: datetime) -> str:
|
||||
|
|
|
@ -212,7 +212,7 @@ def find_actor_or_create(actor: str) -> Union[User, Community, None]:
|
|||
# indicate that user is currently being refreshed.
|
||||
refresh_in_progress = cache.get(f'refreshing_{user.id}')
|
||||
if not refresh_in_progress:
|
||||
cache.set(f'refreshing_{user.id}', True, timeout=30)
|
||||
cache.set(f'refreshing_{user.id}', True, timeout=300)
|
||||
refresh_user_profile(user.id)
|
||||
return user
|
||||
else: # User does not exist in the DB, it's going to need to be created from it's remote home instance
|
||||
|
@ -396,6 +396,7 @@ def post_json_to_model(post_json, user, community) -> Post:
|
|||
type=constants.POST_TYPE_ARTICLE,
|
||||
posted_at=post_json['published'],
|
||||
last_active=post_json['published'],
|
||||
instance_id=user.instance_id
|
||||
)
|
||||
if 'source' in post_json and \
|
||||
post_json['source']['mediaType'] == 'text/markdown':
|
||||
|
@ -588,42 +589,52 @@ def find_instance_id(server):
|
|||
if instance:
|
||||
return instance.id
|
||||
else:
|
||||
# Our instance does not know about {server} yet. Initially, create a sparse row in the 'instance' table and spawn a background
|
||||
# task to update the row with more details later
|
||||
new_instance = Instance(domain=server, software='unknown', created_at=utcnow())
|
||||
db.session.add(new_instance)
|
||||
db.session.commit()
|
||||
|
||||
# Spawn background task
|
||||
refresh_instance_profile(new_instance.id)
|
||||
|
||||
return new_instance.id
|
||||
|
||||
|
||||
def refresh_instance_profile(instance_id: int):
|
||||
if current_app.debug:
|
||||
refresh_instance_profile_task(instance_id)
|
||||
else:
|
||||
refresh_instance_profile_task.apply_async(args=(instance_id), countdown=randint(1, 10))
|
||||
|
||||
|
||||
@celery.task
|
||||
def refresh_instance_profile_task(instance_id: int):
|
||||
instance = Instance.query.get(instance_id)
|
||||
try:
|
||||
instance_data = get_request(f"https://{instance.domain}", headers={'Accept': 'application/activity+json'})
|
||||
except:
|
||||
return
|
||||
if instance_data.status_code == 200:
|
||||
try:
|
||||
instance_data = get_request(f"https://{server}", headers={'Accept': 'application/activity+json'})
|
||||
except:
|
||||
new_instance = Instance(domain=server, software='unknown', created_at=utcnow())
|
||||
db.session.add(new_instance)
|
||||
db.session.commit()
|
||||
return new_instance.id
|
||||
if instance_data.status_code == 200:
|
||||
try:
|
||||
instance_json = instance_data.json()
|
||||
instance_data.close()
|
||||
except requests.exceptions.JSONDecodeError as ex:
|
||||
instance_json = {}
|
||||
if 'type' in instance_json and instance_json['type'] == 'Application':
|
||||
if instance_json['name'].lower() == 'kbin':
|
||||
software = 'Kbin'
|
||||
elif instance_json['name'].lower() == 'mbin':
|
||||
software = 'Mbin'
|
||||
else:
|
||||
software = 'Lemmy'
|
||||
new_instance = Instance(domain=server,
|
||||
inbox=instance_json['inbox'],
|
||||
outbox=instance_json['outbox'],
|
||||
software=software,
|
||||
created_at=instance_json['published'] if 'published' in instance_json else utcnow()
|
||||
)
|
||||
instance_json = instance_data.json()
|
||||
instance_data.close()
|
||||
except requests.exceptions.JSONDecodeError as ex:
|
||||
instance_json = {}
|
||||
if 'type' in instance_json and instance_json['type'] == 'Application':
|
||||
if instance_json['name'].lower() == 'kbin':
|
||||
software = 'Kbin'
|
||||
elif instance_json['name'].lower() == 'mbin':
|
||||
software = 'Mbin'
|
||||
else:
|
||||
new_instance = Instance(domain=server, software='unknown', created_at=utcnow())
|
||||
db.session.add(new_instance)
|
||||
db.session.commit()
|
||||
return new_instance.id
|
||||
else:
|
||||
new_instance = Instance(domain=server, software='unknown', created_at=utcnow())
|
||||
db.session.add(new_instance)
|
||||
db.session.commit()
|
||||
return new_instance.id
|
||||
software = 'Lemmy'
|
||||
instance.inbox = instance_json['inbox']
|
||||
instance.outbox = instance_json['outbox']
|
||||
instance.software = software
|
||||
else: # it's pretty much always /inbox so just assume that it is for whatever this instance is running (mostly likely Mastodon)
|
||||
instance.inbox = f"https://{instance.domain}/inbox"
|
||||
instance.updated_at = utcnow()
|
||||
db.session.commit()
|
||||
|
||||
|
||||
# alter the effect of upvotes based on their instance. Default to 1.0
|
||||
|
@ -800,6 +811,7 @@ def delete_post_or_comment_task(user_ap_id, community_ap_id, to_be_deleted_ap_id
|
|||
db.session.delete(to_delete)
|
||||
db.session.commit()
|
||||
elif isinstance(to_delete, PostReply):
|
||||
to_delete.post.flush_cache()
|
||||
if to_delete.has_replies():
|
||||
to_delete.body = 'Deleted by author' if to_delete.author.id == deletor.id else 'Deleted by moderator'
|
||||
to_delete.body_html = markdown_to_html(to_delete.body)
|
||||
|
|
Loading…
Reference in a new issue