query webfinger before mastodon sync
This commit is contained in:
parent
2a99ddd564
commit
b4b2f199fb
3 changed files with 49 additions and 2 deletions
|
@ -183,6 +183,20 @@ def create_app(domain_name):
|
|||
return response
|
||||
|
||||
|
||||
def webfinger(site, username) -> dict | None:
|
||||
url = f"https://{site}/.well-known/webfinger?resource=acct:{username}@{site}"
|
||||
try:
|
||||
response = get(url, headers={"User-Agent": USER_AGENT})
|
||||
if response.status_code != 200:
|
||||
logger.error(f"Error webfinger {username}@{site} {response.status_code}")
|
||||
return None
|
||||
j = response.json()
|
||||
return j
|
||||
except Exception:
|
||||
logger.error(f"Error webfinger {username}@{site}")
|
||||
return None
|
||||
|
||||
|
||||
# utils below
|
||||
def random_string_generator(n):
|
||||
s = string.ascii_letters + string.punctuation + string.digits
|
||||
|
|
19
users/migrations/0015_user_mastodon_last_reachable.py
Normal file
19
users/migrations/0015_user_mastodon_last_reachable.py
Normal file
|
@ -0,0 +1,19 @@
|
|||
# Generated by Django 4.2.7 on 2023-11-11 05:34
|
||||
|
||||
import django.utils.timezone
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("users", "0014_preference_mastodon_skip_relationship_and_more"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="user",
|
||||
name="mastodon_last_reachable",
|
||||
field=models.DateTimeField(default=django.utils.timezone.now),
|
||||
),
|
||||
]
|
|
@ -128,6 +128,7 @@ class User(AbstractUser):
|
|||
mastodon_domain_blocks = models.JSONField(default=list)
|
||||
mastodon_account = models.JSONField(default=dict)
|
||||
mastodon_last_refresh = models.DateTimeField(default=timezone.now)
|
||||
mastodon_last_reachable = models.DateTimeField(default=timezone.now)
|
||||
# store the latest read announcement id,
|
||||
# every time user read the announcement update this field
|
||||
read_announcement_index = models.PositiveIntegerField(default=0)
|
||||
|
@ -267,9 +268,14 @@ class User(AbstractUser):
|
|||
identity.save()
|
||||
|
||||
def refresh_mastodon_data(self):
|
||||
"""Try refresh account data from mastodon server, return true if refreshed successfully, note it will not save to db"""
|
||||
"""Try refresh account data from mastodon server, return True if refreshed successfully"""
|
||||
logger.debug(f"Refreshing Mastodon data for {self}")
|
||||
self.mastodon_last_refresh = timezone.now()
|
||||
if not webfinger(self.mastodon_site, self.mastodon_username):
|
||||
logger.error(f"Unable to fetch web finger for {self}")
|
||||
self.save(update_fields=["mastodon_last_refresh"])
|
||||
return False
|
||||
self.mastodon_last_reachable = timezone.now()
|
||||
code, mastodon_account = verify_account(self.mastodon_site, self.mastodon_token)
|
||||
if code == 401 and self.mastodon_refresh_token:
|
||||
self.mastodon_token = refresh_access_token(
|
||||
|
@ -317,7 +323,15 @@ class User(AbstractUser):
|
|||
elif code == 401:
|
||||
logger.error(f"Refresh mastodon data error 401 for {self}")
|
||||
self.mastodon_token = ""
|
||||
self.save(update_fields=["mastodon_token"])
|
||||
else:
|
||||
logger.error(f"Refresh mastodon data error 401 for {self}")
|
||||
self.save(
|
||||
update_fields=[
|
||||
"mastodon_token",
|
||||
"mastodon_last_refresh",
|
||||
"mastodon_last_reachable",
|
||||
]
|
||||
)
|
||||
return False
|
||||
|
||||
@property
|
||||
|
|
Loading…
Add table
Reference in a new issue