mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-12-15 12:46:38 +00:00
Deactivate connectors related to blocked federated servers
This commit is contained in:
parent
e7c5b77b4c
commit
19f788b9aa
5 changed files with 47 additions and 13 deletions
|
@ -1,4 +1,4 @@
|
||||||
# Generated by Django 3.2 on 2021-05-11 16:51
|
# Generated by Django 3.2 on 2021-05-11 18:29
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
@ -31,4 +31,18 @@ class Migration(migrations.Migration):
|
||||||
name="active",
|
name="active",
|
||||||
field=models.BooleanField(default=True),
|
field=models.BooleanField(default=True),
|
||||||
),
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="connector",
|
||||||
|
name="deactivation_reason",
|
||||||
|
field=models.CharField(
|
||||||
|
blank=True,
|
||||||
|
choices=[
|
||||||
|
("self_deletion", "Self Deletion"),
|
||||||
|
("moderator_deletion", "Moderator Deletion"),
|
||||||
|
("domain_block", "Domain Block"),
|
||||||
|
],
|
||||||
|
max_length=255,
|
||||||
|
null=True,
|
||||||
|
),
|
||||||
|
),
|
||||||
]
|
]
|
|
@ -6,6 +6,16 @@ from bookwyrm.settings import DOMAIN
|
||||||
from .fields import RemoteIdField
|
from .fields import RemoteIdField
|
||||||
|
|
||||||
|
|
||||||
|
DeactivationReason = models.TextChoices(
|
||||||
|
"DeactivationReason",
|
||||||
|
[
|
||||||
|
"self_deletion",
|
||||||
|
"moderator_deletion",
|
||||||
|
"domain_block",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class BookWyrmModel(models.Model):
|
class BookWyrmModel(models.Model):
|
||||||
"""shared fields"""
|
"""shared fields"""
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from bookwyrm.connectors.settings import CONNECTORS
|
from bookwyrm.connectors.settings import CONNECTORS
|
||||||
|
|
||||||
from .base_model import BookWyrmModel
|
from .base_model import BookWyrmModel, DeactivationReason
|
||||||
|
|
||||||
|
|
||||||
ConnectorFiles = models.TextChoices("ConnectorFiles", CONNECTORS)
|
ConnectorFiles = models.TextChoices("ConnectorFiles", CONNECTORS)
|
||||||
|
@ -18,6 +18,9 @@ class Connector(BookWyrmModel):
|
||||||
connector_file = models.CharField(max_length=255, choices=ConnectorFiles.choices)
|
connector_file = models.CharField(max_length=255, choices=ConnectorFiles.choices)
|
||||||
api_key = models.CharField(max_length=255, null=True, blank=True)
|
api_key = models.CharField(max_length=255, null=True, blank=True)
|
||||||
active = models.BooleanField(default=True)
|
active = models.BooleanField(default=True)
|
||||||
|
deactivation_reason = models.CharField(
|
||||||
|
max_length=255, choices=DeactivationReason.choices, null=True, blank=True
|
||||||
|
)
|
||||||
|
|
||||||
base_url = models.CharField(max_length=255)
|
base_url = models.CharField(max_length=255)
|
||||||
books_url = models.CharField(max_length=255)
|
books_url = models.CharField(max_length=255)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
""" connections to external ActivityPub servers """
|
""" connections to external ActivityPub servers """
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
from django.apps import apps
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from .base_model import BookWyrmModel
|
from .base_model import BookWyrmModel
|
||||||
|
|
||||||
|
@ -34,6 +35,13 @@ class FederatedServer(BookWyrmModel):
|
||||||
is_active=False, deactivation_reason="domain_block"
|
is_active=False, deactivation_reason="domain_block"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# check for related connectors
|
||||||
|
if self.application_type == "bookwyrm":
|
||||||
|
connector_model = apps.get_model("bookwyrm.Connector", require_read=True)
|
||||||
|
connector_model.objects.filter(
|
||||||
|
identifier=self.server_name, active=True
|
||||||
|
).update(active=False, deactivation_reason="domain_block")
|
||||||
|
|
||||||
def unblock(self):
|
def unblock(self):
|
||||||
"""unblock a server"""
|
"""unblock a server"""
|
||||||
self.status = "federated"
|
self.status = "federated"
|
||||||
|
@ -43,6 +51,15 @@ class FederatedServer(BookWyrmModel):
|
||||||
is_active=True, deactivation_reason=None
|
is_active=True, deactivation_reason=None
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# check for related connectors
|
||||||
|
if self.application_type == "bookwyrm":
|
||||||
|
connector_model = apps.get_model("bookwyrm.Connector", require_read=True)
|
||||||
|
connector_model.objects.filter(
|
||||||
|
identifier=self.server_name,
|
||||||
|
active=False,
|
||||||
|
deactivation_reason="domain_block",
|
||||||
|
).update(active=True, deactivation_reason=None)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def is_blocked(cls, url):
|
def is_blocked(cls, url):
|
||||||
"""look up if a domain is blocked"""
|
"""look up if a domain is blocked"""
|
||||||
|
|
|
@ -19,21 +19,11 @@ from bookwyrm.signatures import create_key_pair
|
||||||
from bookwyrm.tasks import app
|
from bookwyrm.tasks import app
|
||||||
from bookwyrm.utils import regex
|
from bookwyrm.utils import regex
|
||||||
from .activitypub_mixin import OrderedCollectionPageMixin, ActivitypubMixin
|
from .activitypub_mixin import OrderedCollectionPageMixin, ActivitypubMixin
|
||||||
from .base_model import BookWyrmModel
|
from .base_model import BookWyrmModel, DeactivationReason
|
||||||
from .federated_server import FederatedServer
|
from .federated_server import FederatedServer
|
||||||
from . import fields, Review
|
from . import fields, Review
|
||||||
|
|
||||||
|
|
||||||
DeactivationReason = models.TextChoices(
|
|
||||||
"DeactivationReason",
|
|
||||||
[
|
|
||||||
"self_deletion",
|
|
||||||
"moderator_deletion",
|
|
||||||
"domain_block",
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class User(OrderedCollectionPageMixin, AbstractUser):
|
class User(OrderedCollectionPageMixin, AbstractUser):
|
||||||
"""a user who wants to read books"""
|
"""a user who wants to read books"""
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue