PEP8 cleanups.
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -5,7 +5,6 @@ from django.contrib.contenttypes.models import ContentType
|
|||||||
from document_states.tests.test_actions import ActionTestCase
|
from document_states.tests.test_actions import ActionTestCase
|
||||||
from documents.permissions import permission_document_view
|
from documents.permissions import permission_document_view
|
||||||
|
|
||||||
from ..models import AccessControlList
|
|
||||||
from ..workflow_actions import GrantAccessAction, RevokeAccessAction
|
from ..workflow_actions import GrantAccessAction, RevokeAccessAction
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from django.contrib.auth.models import Group
|
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
|
|
||||||
@@ -12,9 +10,6 @@ from documents.tests import (
|
|||||||
TEST_SMALL_DOCUMENT_PATH, TEST_DOCUMENT_TYPE_LABEL,
|
TEST_SMALL_DOCUMENT_PATH, TEST_DOCUMENT_TYPE_LABEL,
|
||||||
TEST_DOCUMENT_TYPE_2_LABEL
|
TEST_DOCUMENT_TYPE_2_LABEL
|
||||||
)
|
)
|
||||||
from permissions.models import Role
|
|
||||||
from permissions.tests.literals import TEST_ROLE_LABEL
|
|
||||||
from user_management.tests.literals import TEST_USER_USERNAME, TEST_GROUP_NAME
|
|
||||||
|
|
||||||
from ..models import AccessControlList
|
from ..models import AccessControlList
|
||||||
|
|
||||||
@@ -46,15 +41,6 @@ class PermissionTestCase(BaseTestCase):
|
|||||||
file_object=file_object
|
file_object=file_object
|
||||||
)
|
)
|
||||||
|
|
||||||
self.user = get_user_model().objects.create(
|
|
||||||
username=TEST_USER_USERNAME
|
|
||||||
)
|
|
||||||
self.group = Group.objects.create(name=TEST_GROUP_NAME)
|
|
||||||
self.role = Role.objects.create(label=TEST_ROLE_LABEL)
|
|
||||||
|
|
||||||
self.group.user_set.add(self.user)
|
|
||||||
self.role.groups.add(self.group)
|
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
for document_type in DocumentType.objects.all():
|
for document_type in DocumentType.objects.all():
|
||||||
document_type.delete()
|
document_type.delete()
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from collections import OrderedDict
|
|
||||||
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from django.core import mail
|
from django.core import mail
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
@@ -25,11 +24,6 @@ class UserLoginTestCase(BaseTestCase):
|
|||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(UserLoginTestCase, self).setUp()
|
super(UserLoginTestCase, self).setUp()
|
||||||
|
|
||||||
self.admin_user = get_user_model().objects.create_superuser(
|
|
||||||
username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL,
|
|
||||||
password=TEST_ADMIN_PASSWORD
|
|
||||||
)
|
|
||||||
Namespace.invalidate_cache_all()
|
Namespace.invalidate_cache_all()
|
||||||
|
|
||||||
@override_settings(AUTHENTICATION_LOGIN_METHOD='username')
|
@override_settings(AUTHENTICATION_LOGIN_METHOD='username')
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from documents.permissions import permission_document_view
|
|
||||||
from documents.tests.test_views import GenericDocumentViewTestCase
|
from documents.tests.test_views import GenericDocumentViewTestCase
|
||||||
|
|
||||||
from ..models import Cabinet
|
from ..models import Cabinet
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import datetime
|
|||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
|
||||||
@@ -13,9 +12,6 @@ from documents.models import DocumentType
|
|||||||
from documents.tests.literals import (
|
from documents.tests.literals import (
|
||||||
TEST_DOCUMENT_TYPE_LABEL, TEST_SMALL_DOCUMENT_PATH
|
TEST_DOCUMENT_TYPE_LABEL, TEST_SMALL_DOCUMENT_PATH
|
||||||
)
|
)
|
||||||
from user_management.tests.literals import (
|
|
||||||
TEST_ADMIN_USERNAME, TEST_ADMIN_EMAIL, TEST_ADMIN_PASSWORD
|
|
||||||
)
|
|
||||||
|
|
||||||
from ..exceptions import (
|
from ..exceptions import (
|
||||||
DocumentAlreadyCheckedOut, DocumentNotCheckedOut,
|
DocumentAlreadyCheckedOut, DocumentNotCheckedOut,
|
||||||
@@ -28,11 +24,6 @@ from ..models import DocumentCheckout, NewVersionBlock
|
|||||||
class DocumentCheckoutTestCase(BaseTestCase):
|
class DocumentCheckoutTestCase(BaseTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(DocumentCheckoutTestCase, self).setUp()
|
super(DocumentCheckoutTestCase, self).setUp()
|
||||||
self.admin_user = get_user_model().objects.create_superuser(
|
|
||||||
username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL,
|
|
||||||
password=TEST_ADMIN_PASSWORD
|
|
||||||
)
|
|
||||||
|
|
||||||
self.document_type = DocumentType.objects.create(
|
self.document_type = DocumentType.objects.create(
|
||||||
label=TEST_DOCUMENT_TYPE_LABEL
|
label=TEST_DOCUMENT_TYPE_LABEL
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.contrib.contenttypes.fields import GenericRelation
|
from django.contrib.contenttypes.fields import GenericRelation
|
||||||
from django.conf import settings
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,4 +9,3 @@ namespace = PermissionNamespace('common', _('Common'))
|
|||||||
permission_error_log_view = namespace.add_permission(
|
permission_error_log_view = namespace.add_permission(
|
||||||
name='error_log_view', label=_('View errorr log')
|
name='error_log_view', label=_('View errorr log')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -2,18 +2,14 @@ from __future__ import absolute_import, unicode_literals
|
|||||||
|
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.auth.models import Group
|
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.template import Context, Template
|
from django.template import Context, Template
|
||||||
from django.test.utils import ContextList
|
from django.test.utils import ContextList
|
||||||
from django.urls import clear_url_caches, reverse
|
from django.urls import clear_url_caches, reverse
|
||||||
|
|
||||||
from acls.models import AccessControlList
|
|
||||||
from permissions.models import Role
|
|
||||||
from permissions.tests.literals import TEST_ROLE_LABEL
|
|
||||||
from user_management.tests import (
|
from user_management.tests import (
|
||||||
TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME, TEST_ADMIN_EMAIL,
|
TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME, TEST_USER_USERNAME,
|
||||||
TEST_GROUP_NAME, TEST_USER_EMAIL, TEST_USER_USERNAME, TEST_USER_PASSWORD
|
TEST_USER_PASSWORD
|
||||||
)
|
)
|
||||||
|
|
||||||
from .base import BaseTestCase
|
from .base import BaseTestCase
|
||||||
|
|||||||
@@ -76,10 +76,6 @@ class WorkflowStateActionDynamicForm(DynamicModelForm):
|
|||||||
action_data[field_name] = action_data[field_name].pk
|
action_data[field_name] = action_data[field_name].pk
|
||||||
|
|
||||||
data['action_data'] = action_data
|
data['action_data'] = action_data
|
||||||
#data = self.instance.get_class().clean(
|
|
||||||
# form_data=data, request=self.request
|
|
||||||
#)
|
|
||||||
|
|
||||||
data = import_string(self.action_path).clean(
|
data = import_string(self.action_path).clean(
|
||||||
form_data=data, request=self.request
|
form_data=data, request=self.request
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ from documents.tests.test_models import GenericDocumentTestCase
|
|||||||
class ActionTestCase(GenericDocumentTestCase):
|
class ActionTestCase(GenericDocumentTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(ActionTestCase, self).setUp()
|
super(ActionTestCase, self).setUp()
|
||||||
|
|
||||||
class MockWorkflowInstance(object):
|
class MockWorkflowInstance(object):
|
||||||
document = self.document
|
document = self.document
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +1,17 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
|
|
||||||
from common.tests import BaseTestCase
|
from common.tests import BaseTestCase
|
||||||
from documents.models import DocumentType
|
from documents.models import DocumentType
|
||||||
from documents.search import document_search
|
from documents.search import document_search
|
||||||
from documents.tests import TEST_DOCUMENT_TYPE_LABEL, TEST_SMALL_DOCUMENT_PATH
|
from documents.tests import TEST_DOCUMENT_TYPE_LABEL, TEST_SMALL_DOCUMENT_PATH
|
||||||
from user_management.tests import (
|
|
||||||
TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME, TEST_ADMIN_EMAIL
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@override_settings(OCR_AUTO_OCR=False)
|
@override_settings(OCR_AUTO_OCR=False)
|
||||||
class DocumentSearchTestCase(BaseTestCase):
|
class DocumentSearchTestCase(BaseTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(DocumentSearchTestCase, self).setUp()
|
super(DocumentSearchTestCase, self).setUp()
|
||||||
self.admin_user = get_user_model().objects.create_superuser(
|
|
||||||
username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL,
|
|
||||||
password=TEST_ADMIN_PASSWORD
|
|
||||||
)
|
|
||||||
self.document_type = DocumentType.objects.create(
|
self.document_type = DocumentType.objects.create(
|
||||||
label=TEST_DOCUMENT_TYPE_LABEL
|
label=TEST_DOCUMENT_TYPE_LABEL
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from collections import OrderedDict
|
|
||||||
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from .classes import MailerBackend
|
from .classes import MailerBackend
|
||||||
|
|||||||
@@ -59,8 +59,8 @@ class StoredPermission(models.Model):
|
|||||||
if self in role.permissions.all():
|
if self in role.permissions.all():
|
||||||
logger.debug(
|
logger.debug(
|
||||||
'Permission "%s" granted to user "%s" through role "%s"',
|
'Permission "%s" granted to user "%s" through role "%s"',
|
||||||
self, user, role
|
self, user, role
|
||||||
)
|
)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
logger.debug(
|
logger.debug(
|
||||||
|
|||||||
@@ -1,27 +1,16 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from django.contrib.auth.models import Group
|
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
|
|
||||||
from common.tests import BaseTestCase
|
from common.tests import BaseTestCase
|
||||||
from user_management.tests import TEST_GROUP_NAME, TEST_USER_USERNAME
|
|
||||||
|
|
||||||
from ..classes import Permission
|
from ..classes import Permission
|
||||||
from ..models import Role
|
|
||||||
from ..permissions import permission_role_view
|
from ..permissions import permission_role_view
|
||||||
|
|
||||||
from .literals import TEST_ROLE_LABEL
|
|
||||||
|
|
||||||
|
|
||||||
class PermissionTestCase(BaseTestCase):
|
class PermissionTestCase(BaseTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(PermissionTestCase, self).setUp()
|
super(PermissionTestCase, self).setUp()
|
||||||
self.user = get_user_model().objects.create(
|
|
||||||
username=TEST_USER_USERNAME
|
|
||||||
)
|
|
||||||
self.group = Group.objects.create(name=TEST_GROUP_NAME)
|
|
||||||
self.role = Role.objects.create(label=TEST_ROLE_LABEL)
|
|
||||||
|
|
||||||
def test_no_permissions(self):
|
def test_no_permissions(self):
|
||||||
with self.assertRaises(PermissionDenied):
|
with self.assertRaises(PermissionDenied):
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from django.test.client import Client
|
from django.test.client import Client
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
from common.tests import BaseTestCase
|
from common.tests import BaseTestCase
|
||||||
from user_management.tests import (
|
from user_management.tests import TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME
|
||||||
TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME, TEST_ADMIN_EMAIL
|
|
||||||
)
|
|
||||||
|
|
||||||
from ..models import Role
|
from ..models import Role
|
||||||
|
|
||||||
@@ -17,10 +14,6 @@ from .literals import TEST_ROLE_LABEL, TEST_ROLE_LABEL_EDITED
|
|||||||
class PermissionsViewsTestCase(BaseTestCase):
|
class PermissionsViewsTestCase(BaseTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(PermissionsViewsTestCase, self).setUp()
|
super(PermissionsViewsTestCase, self).setUp()
|
||||||
self.admin_user = get_user_model().objects.create_superuser(
|
|
||||||
username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL,
|
|
||||||
password=TEST_ADMIN_PASSWORD
|
|
||||||
)
|
|
||||||
self.client = Client()
|
self.client = Client()
|
||||||
# Login the admin user
|
# Login the admin user
|
||||||
logged_in = self.client.login(
|
logged_in = self.client.login(
|
||||||
@@ -30,6 +23,8 @@ class PermissionsViewsTestCase(BaseTestCase):
|
|||||||
self.assertTrue(self.admin_user.is_authenticated)
|
self.assertTrue(self.admin_user.is_authenticated)
|
||||||
|
|
||||||
def test_role_creation_view(self):
|
def test_role_creation_view(self):
|
||||||
|
self.role.delete()
|
||||||
|
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
reverse(
|
reverse(
|
||||||
'permissions:role_create',
|
'permissions:role_create',
|
||||||
@@ -44,11 +39,9 @@ class PermissionsViewsTestCase(BaseTestCase):
|
|||||||
self.assertEqual(Role.objects.first().label, TEST_ROLE_LABEL)
|
self.assertEqual(Role.objects.first().label, TEST_ROLE_LABEL)
|
||||||
|
|
||||||
def test_role_delete_view(self):
|
def test_role_delete_view(self):
|
||||||
role = Role.objects.create(label=TEST_ROLE_LABEL)
|
|
||||||
|
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
reverse(
|
reverse(
|
||||||
'permissions:role_delete', args=(role.pk,),
|
'permissions:role_delete', args=(self.role.pk,),
|
||||||
), follow=True
|
), follow=True
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -57,11 +50,9 @@ class PermissionsViewsTestCase(BaseTestCase):
|
|||||||
self.assertEqual(Role.objects.count(), 0)
|
self.assertEqual(Role.objects.count(), 0)
|
||||||
|
|
||||||
def test_role_edit_view(self):
|
def test_role_edit_view(self):
|
||||||
role = Role.objects.create(label=TEST_ROLE_LABEL)
|
|
||||||
|
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
reverse(
|
reverse(
|
||||||
'permissions:role_edit', args=(role.pk,),
|
'permissions:role_edit', args=(self.role.pk,),
|
||||||
), data={
|
), data={
|
||||||
'label': TEST_ROLE_LABEL_EDITED,
|
'label': TEST_ROLE_LABEL_EDITED,
|
||||||
}, follow=True
|
}, follow=True
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
|
|
||||||
from common.utils import mkdtemp
|
from common.utils import mkdtemp
|
||||||
@@ -13,9 +12,6 @@ from documents.tests import (
|
|||||||
TEST_NON_ASCII_DOCUMENT_FILENAME, TEST_NON_ASCII_DOCUMENT_PATH,
|
TEST_NON_ASCII_DOCUMENT_FILENAME, TEST_NON_ASCII_DOCUMENT_PATH,
|
||||||
TEST_NON_ASCII_COMPRESSED_DOCUMENT_PATH
|
TEST_NON_ASCII_COMPRESSED_DOCUMENT_PATH
|
||||||
)
|
)
|
||||||
from user_management.tests import (
|
|
||||||
TEST_ADMIN_EMAIL, TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME
|
|
||||||
)
|
|
||||||
|
|
||||||
from ..literals import SOURCE_UNCOMPRESS_CHOICE_Y
|
from ..literals import SOURCE_UNCOMPRESS_CHOICE_Y
|
||||||
from ..models import WatchFolderSource, WebFormSource
|
from ..models import WatchFolderSource, WebFormSource
|
||||||
@@ -33,14 +29,8 @@ class UploadDocumentTestCase(BaseTestCase):
|
|||||||
label=TEST_DOCUMENT_TYPE_LABEL
|
label=TEST_DOCUMENT_TYPE_LABEL
|
||||||
)
|
)
|
||||||
|
|
||||||
self.admin_user = get_user_model().objects.create_superuser(
|
|
||||||
username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL,
|
|
||||||
password=TEST_ADMIN_PASSWORD
|
|
||||||
)
|
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
self.document_type.delete()
|
self.document_type.delete()
|
||||||
self.admin_user.delete()
|
|
||||||
super(UploadDocumentTestCase, self).tearDown()
|
super(UploadDocumentTestCase, self).tearDown()
|
||||||
|
|
||||||
def test_issue_gh_163(self):
|
def test_issue_gh_163(self):
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
class AttachTagAction(WorkflowAction):
|
class AttachTagAction(WorkflowAction):
|
||||||
fields = {
|
fields = {
|
||||||
'tags': {'label': _('Tags'),
|
'tags': {
|
||||||
|
'label': _('Tags'),
|
||||||
'class': 'django.forms.ModelMultipleChoiceField', 'kwargs': {
|
'class': 'django.forms.ModelMultipleChoiceField', 'kwargs': {
|
||||||
'help_text': _('Tags to attach to the document'),
|
'help_text': _('Tags to attach to the document'),
|
||||||
'queryset': Tag.objects.none(), 'required': False
|
'queryset': Tag.objects.none(), 'required': False
|
||||||
@@ -31,13 +32,14 @@ class AttachTagAction(WorkflowAction):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
permission = permission_tag_attach
|
||||||
|
|
||||||
def get_form_schema(self, request):
|
def get_form_schema(self, request):
|
||||||
user = request.user
|
user = request.user
|
||||||
logger.debug('user: %s', user)
|
logger.debug('user: %s', user)
|
||||||
|
|
||||||
queryset = AccessControlList.objects.filter_by_access(
|
queryset = AccessControlList.objects.filter_by_access(
|
||||||
permission_tag_attach, user, queryset=Tag.objects.all()
|
self.permission, user, queryset=Tag.objects.all()
|
||||||
)
|
)
|
||||||
|
|
||||||
self.fields['tags']['kwargs']['queryset'] = queryset
|
self.fields['tags']['kwargs']['queryset'] = queryset
|
||||||
@@ -69,6 +71,7 @@ class RemoveTagAction(AttachTagAction):
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
label = _('Remove tag')
|
label = _('Remove tag')
|
||||||
|
permission = permission_tag_remove
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
for tag in self.get_tags():
|
for tag in self.get_tags():
|
||||||
|
|||||||
Reference in New Issue
Block a user