diff --git a/boofilsic/settings.py b/boofilsic/settings.py index be6210c2..6755bf87 100644 --- a/boofilsic/settings.py +++ b/boofilsic/settings.py @@ -541,7 +541,7 @@ CORS_ALLOW_METHODS = ( DEACTIVATE_AFTER_UNREACHABLE_DAYS = 120 -DEFAULT_RELAY_SERVER = "https://relay.neodb.net/actor" +DEFAULT_RELAY_SERVER = "https://relay.neodb.net/inbox" SENTRY_DSN = env("NEODB_SENTRY_DSN") if SENTRY_DSN: diff --git a/common/setup.py b/common/setup.py index 9dd380d9..545e0e50 100644 --- a/common/setup.py +++ b/common/setup.py @@ -9,6 +9,7 @@ from takahe.models import Config as TakaheConfig from takahe.models import Domain as TakaheDomain from takahe.models import Follow as TakaheFollow from takahe.models import Identity as TakaheIdentity +from takahe.models import Relay as TakaheRelay from takahe.models import User as TakaheUser from takahe.utils import Takahe from users.models import User @@ -99,45 +100,24 @@ class Setup: logger.info(f"Updated user {user.username} as admin") def sync_relay(self): - relay_follow = TakaheFollow.objects.filter( - source__username="__relay__", - source__local=True, - target__actor_uri=settings.DEFAULT_RELAY_SERVER, + relay = TakaheRelay.objects.filter( + state__in=["new", "subscribing", "subscribed"], + inbox_uri=settings.DEFAULT_RELAY_SERVER, ).first() if settings.DISABLE_DEFAULT_RELAY: - if relay_follow: + if relay: logger.info("Default relay is disabled, unsubscribing...") - Takahe.create_internal_message( - { - "type": "UnfollowRelay", - "actor_uri": settings.DEFAULT_RELAY_SERVER, - } - ) + Takahe.update_state(relay, "unsubscribing") else: logger.info(f"Default relay is disabled.") else: - if relay_follow: - logger.debug( - f"Default relay is enabled and subscribed, state: {relay_follow.state}" - ) + if relay: + logger.debug(f"Default relay is enabled, state: {relay.state}") else: logger.info("Default relay is enabled, subscribing...") - relay_actor = TakaheIdentity.objects.filter( - username="__relay__", - local=True, - ).first() - if not relay_actor: - logger.warning( - f"Default relay is enabled but relay actor does not exist." - ) - return - Takahe.create_internal_message( - { - "type": "AddFollow", - "source": relay_actor.pk, - "target_actor": settings.DEFAULT_RELAY_SERVER, - "boosts": False, - } + TakaheRelay.objects.update_or_create( + inbox_uri=settings.DEFAULT_RELAY_SERVER, + defaults={"state": "new"}, ) def run(self): diff --git a/takahe/migrations/0001_initial.py b/takahe/migrations/0001_initial.py index 4206f592..1c68d0e5 100644 --- a/takahe/migrations/0001_initial.py +++ b/takahe/migrations/0001_initial.py @@ -886,4 +886,31 @@ class Migration(migrations.Migration): "db_table": "activities_postattachment", }, ), + migrations.CreateModel( + name="Relay", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("inbox_uri", models.CharField(max_length=500, unique=True)), + ("state", models.CharField(default="new", max_length=100)), + ("state_changed", models.DateTimeField(auto_now_add=True)), + ("state_next_attempt", models.DateTimeField(blank=True, null=True)), + ( + "state_locked_until", + models.DateTimeField(blank=True, db_index=True, null=True), + ), + ("created", models.DateTimeField(auto_now_add=True)), + ("updated", models.DateTimeField(auto_now=True)), + ], + options={ + "db_table": "users_relay", + }, + ), ] diff --git a/takahe/models.py b/takahe/models.py index a9e4b967..b528482b 100644 --- a/takahe/models.py +++ b/takahe/models.py @@ -1885,3 +1885,20 @@ class Config(models.Model): unique_together = [ ("key", "user", "identity", "domain"), ] + + +class Relay(models.Model): + inbox_uri = models.CharField(max_length=500, unique=True) + + # state = StateField(RelayStates) + state = models.CharField(max_length=100, default="new") + state_changed = models.DateTimeField(auto_now_add=True) + state_next_attempt = models.DateTimeField(blank=True, null=True) + state_locked_until = models.DateTimeField(null=True, blank=True, db_index=True) + + created = models.DateTimeField(auto_now_add=True) + updated = models.DateTimeField(auto_now=True) + + class Meta: + # managed = False + db_table = "users_relay"