wip/75442-upgrade-hooks #27
|
@ -2,27 +2,27 @@
|
||||||
# See https://pre-commit.com/hooks.html for more hooks
|
# See https://pre-commit.com/hooks.html for more hooks
|
||||||
repos:
|
repos:
|
||||||
- repo: https://github.com/asottile/pyupgrade
|
- repo: https://github.com/asottile/pyupgrade
|
||||||
rev: v3.1.0
|
rev: v3.3.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: pyupgrade
|
- id: pyupgrade
|
||||||
args: ['--keep-percent-format', '--py37-plus']
|
args: ['--keep-percent-format', '--py39-plus']
|
||||||
- repo: https://github.com/adamchainz/django-upgrade
|
- repo: https://github.com/adamchainz/django-upgrade
|
||||||
rev: 1.10.0
|
rev: 1.13.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: django-upgrade
|
- id: django-upgrade
|
||||||
args: ['--target-version', '2.2']
|
args: ['--target-version', '3.2']
|
||||||
- repo: https://github.com/psf/black
|
- repo: https://github.com/psf/black
|
||||||
rev: 22.3.0
|
rev: 23.3.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: black
|
- id: black
|
||||||
args: ['--target-version', 'py37', '--skip-string-normalization', '--line-length', '110']
|
args: ['--target-version', 'py39', '--skip-string-normalization', '--line-length', '110']
|
||||||
- repo: https://github.com/PyCQA/isort
|
- repo: https://github.com/PyCQA/isort
|
||||||
rev: 5.12.0
|
rev: 5.12.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: isort
|
- id: isort
|
||||||
args: ['--profile', 'black', '--line-length', '110']
|
args: ['--profile', 'black', '--line-length', '110']
|
||||||
- repo: https://github.com/rtts/djhtml
|
- repo: https://github.com/rtts/djhtml
|
||||||
rev: 'v1.5.2'
|
rev: '3.0.6'
|
||||||
hooks:
|
hooks:
|
||||||
- id: djhtml
|
- id: djhtml
|
||||||
args: ['--tabwidth', '2']
|
args: ['--tabwidth', '2']
|
||||||
|
|
2
README
2
README
|
@ -194,7 +194,7 @@ djhtml is used to automatically indent html files, using those parameters:
|
||||||
|
|
||||||
django-upgrade is used to automatically upgrade Django syntax, using those parameters:
|
django-upgrade is used to automatically upgrade Django syntax, using those parameters:
|
||||||
|
|
||||||
django-upgrade --target-version 2.2
|
django-upgrade --target-version 3.2
|
||||||
|
|
||||||
There is .pre-commit-config.yaml to use pre-commit to automatically run these tools
|
There is .pre-commit-config.yaml to use pre-commit to automatically run these tools
|
||||||
before commits. (execute `pre-commit install` to install the git hook.)
|
before commits. (execute `pre-commit install` to install the git hook.)
|
||||||
|
|
|
@ -14,7 +14,7 @@ Package: python3-hobo
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Depends: python3-apt,
|
Depends: python3-apt,
|
||||||
python3-celery (>= 3.1.13),
|
python3-celery (>= 3.1.13),
|
||||||
python3-django (>= 2:2.2),
|
python3-django (>= 2:3.2),
|
||||||
python3-djangorestframework,
|
python3-djangorestframework,
|
||||||
python3-dnspython,
|
python3-dnspython,
|
||||||
python3-memcache,
|
python3-memcache,
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
default_app_config = 'hobo.agent.authentic2.apps.Authentic2AgentConfig'
|
|
|
@ -15,7 +15,7 @@ from django.contrib.auth import get_user_model
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.core import serializers
|
from django.core import serializers
|
||||||
from django.utils.translation import activate
|
from django.utils.translation import activate
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from tenant_schemas.utils import tenant_context
|
from tenant_schemas.utils import tenant_context
|
||||||
|
|
||||||
from hobo.agent.authentic2.provisionning import Provisionning
|
from hobo.agent.authentic2.provisionning import Provisionning
|
||||||
|
|
|
@ -15,7 +15,7 @@ from django.conf import settings
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.db import connection, transaction
|
from django.db import connection, transaction
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from hobo.agent.common import notify_agents
|
from hobo.agent.common import notify_agents
|
||||||
from hobo.signature import sign_url
|
from hobo.signature import sign_url
|
||||||
|
@ -141,7 +141,7 @@ class Provisionning(threading.local):
|
||||||
tuple(allowed_technical_roles_prefixes)
|
tuple(allowed_technical_roles_prefixes)
|
||||||
)
|
)
|
||||||
|
|
||||||
issuer = force_text(self.get_entity_id())
|
issuer = force_str(self.get_entity_id())
|
||||||
if mode == 'provision':
|
if mode == 'provision':
|
||||||
|
|
||||||
def user_to_json(ou, service, user, user_roles):
|
def user_to_json(ou, service, user, user_roles):
|
||||||
|
@ -245,7 +245,7 @@ class Provisionning(threading.local):
|
||||||
continue
|
continue
|
||||||
logger.info(
|
logger.info(
|
||||||
'provisionning users %s to %s',
|
'provisionning users %s to %s',
|
||||||
', '.join(map(force_text, users)),
|
', '.join(map(force_str, users)),
|
||||||
', '.join(audience),
|
', '.join(audience),
|
||||||
)
|
)
|
||||||
self.notify_agents(
|
self.notify_agents(
|
||||||
|
@ -264,7 +264,7 @@ class Provisionning(threading.local):
|
||||||
elif users:
|
elif users:
|
||||||
audience = [audience for ou in ous.keys() for s, audience in self.get_audience(ou)]
|
audience = [audience for ou in ous.keys() for s, audience in self.get_audience(ou)]
|
||||||
logger.info(
|
logger.info(
|
||||||
'deprovisionning users %s from %s', ', '.join(map(force_text, users)), ', '.join(audience)
|
'deprovisionning users %s from %s', ', '.join(map(force_str, users)), ', '.join(audience)
|
||||||
)
|
)
|
||||||
self.notify_agents(
|
self.notify_agents(
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,7 +9,7 @@ import requests
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.management import call_command, get_commands
|
from django.core.management import call_command, get_commands
|
||||||
from django.core.management.base import BaseCommand, CommandError
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_str
|
||||||
from tenant_schemas.utils import tenant_context
|
from tenant_schemas.utils import tenant_context
|
||||||
|
|
||||||
from hobo.multitenant.middleware import TenantMiddleware, TenantNotFound
|
from hobo.multitenant.middleware import TenantMiddleware, TenantNotFound
|
||||||
|
@ -23,7 +23,7 @@ def replace_file(path, content):
|
||||||
dirname = os.path.dirname(path)
|
dirname = os.path.dirname(path)
|
||||||
fd, temp = tempfile.mkstemp(dir=dirname, prefix='.tmp-' + os.path.basename(path) + '-')
|
fd, temp = tempfile.mkstemp(dir=dirname, prefix='.tmp-' + os.path.basename(path) + '-')
|
||||||
f = os.fdopen(fd, 'w')
|
f = os.fdopen(fd, 'w')
|
||||||
f.write(force_text(content))
|
f.write(force_str(content))
|
||||||
f.flush()
|
f.flush()
|
||||||
os.fsync(f.fileno())
|
os.fsync(f.fileno())
|
||||||
f.close()
|
f.close()
|
||||||
|
@ -32,7 +32,7 @@ def replace_file(path, content):
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
early_secondary_exit = True
|
early_secondary_exit = True
|
||||||
requires_system_checks = False
|
requires_system_checks = []
|
||||||
me = None
|
me = None
|
||||||
|
|
||||||
def add_arguments(self, parser):
|
def add_arguments(self, parser):
|
||||||
|
|
|
@ -29,7 +29,7 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand, NotificationProcessing):
|
class Command(BaseCommand, NotificationProcessing):
|
||||||
requires_system_checks = False
|
requires_system_checks = []
|
||||||
|
|
||||||
def add_arguments(self, parser):
|
def add_arguments(self, parser):
|
||||||
parser.add_argument('notification', metavar='NOTIFICATION', type=str)
|
parser.add_argument('notification', metavar='NOTIFICATION', type=str)
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('auth', '0001_initial'),
|
('auth', '0001_initial'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('common', '0001_initial'),
|
('common', '0001_initial'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -5,7 +5,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('common', '0002_auto_20160105_1702'),
|
('common', '0002_auto_20160105_1702'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -4,7 +4,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('common', '0003_auto_20200707_1656'),
|
('common', '0003_auto_20200707_1656'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -7,7 +7,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
('common', '0004_alter_role_uuid'),
|
('common', '0004_alter_role_uuid'),
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
from django.contrib.postgres.fields import ArrayField, JSONField
|
from django.contrib.postgres.fields import ArrayField
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.db.models import JSONField
|
||||||
|
|
||||||
|
|
||||||
class Role(Group):
|
class Role(Group):
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
default_app_config = 'hobo.agent.hobo.apps.HoboAgentConfig'
|
|
|
@ -15,7 +15,7 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from hobo.applications.models import Application
|
from hobo.applications.models import Application
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
initial = True
|
initial = True
|
||||||
|
|
||||||
dependencies = []
|
dependencies = []
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('applications', '0001_initial'),
|
('applications', '0001_initial'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('applications', '0002_icon'),
|
('applications', '0002_icon'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -13,7 +13,6 @@ def forwards(apps, schema_editor):
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('applications', '0003_version_num_notes'),
|
('applications', '0003_version_num_notes'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('applications', '0004_version_num_notes'),
|
('applications', '0004_version_num_notes'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('applications', '0005_version_num_notes'),
|
('applications', '0005_version_num_notes'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -6,7 +6,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('applications', '0006_documentation_url'),
|
('applications', '0006_documentation_url'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('applications', '0007_asyncjob'),
|
('applications', '0007_asyncjob'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -3,7 +3,6 @@ from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('applications', '0008_element_error'),
|
('applications', '0008_element_error'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('applications', '0009_job_progression'),
|
('applications', '0009_job_progression'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('applications', '0010_relation_error'),
|
('applications', '0010_relation_error'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -23,12 +23,12 @@ import traceback
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.postgres.fields import JSONField
|
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.db import connection, models
|
from django.db import connection, models
|
||||||
|
from django.db.models import JSONField
|
||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from hobo.environment.utils import get_installed_services
|
from hobo.environment.utils import get_installed_services
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ from django.shortcuts import get_object_or_404
|
||||||
from django.urls import reverse, reverse_lazy
|
from django.urls import reverse, reverse_lazy
|
||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import DetailView, FormView, ListView, TemplateView
|
from django.views.generic import DetailView, FormView, ListView, TemplateView
|
||||||
from django.views.generic.edit import CreateView, DeleteView, UpdateView
|
from django.views.generic.edit import CreateView, DeleteView, UpdateView
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.validators import validate_ipv46_address
|
from django.core.validators import validate_ipv46_address
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
def validate_space_separated_ips(value):
|
def validate_space_separated_ips(value):
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
# hobo - portal to configure and deploy applications
|
|
||||||
# Copyright (C) 2015 Entr'ouvert
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify it
|
|
||||||
# under the terms of the GNU Affero General Public License as published
|
|
||||||
# by the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
import django.apps
|
|
||||||
|
|
||||||
|
|
||||||
class AppConfig(django.apps.AppConfig):
|
|
||||||
name = 'hobo.deploy'
|
|
||||||
|
|
||||||
def ready(self):
|
|
||||||
from . import signals
|
|
||||||
|
|
||||||
|
|
||||||
default_app_config = 'hobo.deploy.AppConfig'
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
# hobo - portal to configure and deploy applications
|
||||||
|
# Copyright (C) 2015 Entr'ouvert
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Affero General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import django.apps
|
||||||
|
|
||||||
|
|
||||||
|
class AppConfig(django.apps.AppConfig):
|
||||||
|
name = 'hobo.deploy'
|
||||||
|
|
||||||
|
def ready(self):
|
||||||
|
from . import signals
|
|
@ -15,7 +15,7 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.validators import validate_email
|
from django.core.validators import validate_email
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from hobo.emails.validators import validate_email_address, validate_email_domain, validate_email_spf
|
from hobo.emails.validators import validate_email_address, validate_email_domain, validate_email_spf
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ import dns.resolver
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.utils.encoding import force_bytes
|
from django.utils.encoding import force_bytes
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from hobo.environment.utils import get_operational_services
|
from hobo.environment.utils import get_operational_services
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
||||||
from hobo.environment.forms import VariablesFormMixin
|
from hobo.environment.forms import VariablesFormMixin
|
||||||
|
|
|
@ -19,7 +19,7 @@ from django.conf import settings
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.template.defaultfilters import slugify
|
from django.template.defaultfilters import slugify
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from .models import Authentic, BiJoe, Chrono, Combo, Fargo, Hobo, Lingo, Passerelle, Variable, Wcs, Welco
|
from .models import Authentic, BiJoe, Chrono, Combo, Fargo, Hobo, Lingo, Passerelle, Variable, Wcs, Welco
|
||||||
from .utils import get_variable
|
from .utils import get_variable
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('contenttypes', '0001_initial'),
|
('contenttypes', '0001_initial'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0001_initial'),
|
('environment', '0001_initial'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0002_authentic_use_as_idp_for_self'),
|
('environment', '0002_authentic_use_as_idp_for_self'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0003_auto_20150309_0811'),
|
('environment', '0003_auto_20150309_0811'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0004_fargo'),
|
('environment', '0004_fargo'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0005_variable_label'),
|
('environment', '0005_variable_label'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0006_auto_20150708_0830'),
|
('environment', '0006_auto_20150708_0830'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0007_auto_20151008_1406'),
|
('environment', '0007_auto_20151008_1406'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0008_auto_20151021_1414'),
|
('environment', '0008_auto_20151021_1414'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0009_mandayejs'),
|
('environment', '0009_mandayejs'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0010_variable_auto'),
|
('environment', '0010_variable_auto'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0011_chrono'),
|
('environment', '0011_chrono'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0012_mandayejs_site_app'),
|
('environment', '0012_mandayejs_site_app'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0013_auto_20160226_1633'),
|
('environment', '0013_auto_20160226_1633'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0014_piwik'),
|
('environment', '0014_piwik'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0015_corbo'),
|
('environment', '0015_corbo'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0016_bijoe'),
|
('environment', '0016_bijoe'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0017_hobo'),
|
('environment', '0017_hobo'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -4,7 +4,6 @@ from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0018_auto_20161102_1929'),
|
('environment', '0018_auto_20161102_1929'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -5,7 +5,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0019_delete_piwik'),
|
('environment', '0019_delete_piwik'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -5,7 +5,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0020_delete_corbo_mandaye'),
|
('environment', '0020_delete_corbo_mandaye'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -4,7 +4,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0021_base_url_validators'),
|
('environment', '0021_base_url_validators'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -33,7 +33,6 @@ def clean_local_hobo(apps, schema_editor):
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0022_local_hobo'),
|
('environment', '0022_local_hobo'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -31,7 +31,6 @@ def clean_local_hobo(apps, schema_editor):
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0023_populate_local_hobo'),
|
('environment', '0023_populate_local_hobo'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -5,7 +5,6 @@ from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0024_remove_local_hobo'),
|
('environment', '0024_remove_local_hobo'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -6,7 +6,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0025_legacy_urls'),
|
('environment', '0025_legacy_urls'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -4,7 +4,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0026_lingo'),
|
('environment', '0026_lingo'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -16,7 +16,6 @@ def clean_internal_ips(apps, schema_editor):
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0027_allow_long_slug'),
|
('environment', '0027_allow_long_slug'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -4,7 +4,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('environment', '0028_clean_internal_ips'),
|
('environment', '0028_clean_internal_ips'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -25,15 +25,15 @@ import requests
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
|
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.contrib.postgres.fields import JSONField
|
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.validators import URLValidator
|
from django.core.validators import URLValidator
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.db.models import JSONField
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_str
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from .utils import Zone, get_installed_services, get_local_key
|
from .utils import Zone, get_installed_services, get_local_key
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ class ServiceBase(models.Model):
|
||||||
if self.legacy_urls:
|
if self.legacy_urls:
|
||||||
as_dict['legacy_urls'] = self.legacy_urls
|
as_dict['legacy_urls'] = self.legacy_urls
|
||||||
as_dict['service-id'] = self.Extra.service_id
|
as_dict['service-id'] = self.Extra.service_id
|
||||||
as_dict['service-label'] = force_text(self.Extra.service_label)
|
as_dict['service-label'] = force_str(self.Extra.service_label)
|
||||||
as_dict['variables'] = {v.name: v.json for v in self.variables.all()}
|
as_dict['variables'] = {v.name: v.json for v in self.variables.all()}
|
||||||
as_dict['secondary'] = self.secondary
|
as_dict['secondary'] = self.secondary
|
||||||
if self.get_saml_sp_metadata_url():
|
if self.get_saml_sp_metadata_url():
|
||||||
|
|
|
@ -22,7 +22,7 @@ from django.conf import settings
|
||||||
from django.core.management.base import CommandError
|
from django.core.management.base import CommandError
|
||||||
from django.db import connection, transaction
|
from django.db import connection, transaction
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from hobo.middleware.utils import StoreRequestMiddleware
|
from hobo.middleware.utils import StoreRequestMiddleware
|
||||||
from hobo.multitenant.settings_loaders import KnownServices
|
from hobo.multitenant.settings_loaders import KnownServices
|
||||||
|
@ -48,7 +48,7 @@ def get_operational_services():
|
||||||
|
|
||||||
|
|
||||||
def get_local_key(url):
|
def get_local_key(url):
|
||||||
secret1 = force_text(settings.SECRET_KEY)
|
secret1 = force_str(settings.SECRET_KEY)
|
||||||
secret2 = url
|
secret2 = url
|
||||||
return KnownServices.shared_secret(secret1, secret2)[:40]
|
return KnownServices.shared_secret(secret1, secret2)[:40]
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,8 @@ from django.contrib.contenttypes.models import ContentType
|
||||||
from django.http import Http404, HttpResponse, HttpResponseRedirect, JsonResponse
|
from django.http import Http404, HttpResponse, HttpResponseRedirect, JsonResponse
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_str
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import View
|
from django.views.generic import View
|
||||||
from django.views.generic.base import TemplateView
|
from django.views.generic.base import TemplateView
|
||||||
from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView
|
from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView
|
||||||
|
@ -213,7 +213,7 @@ class ImportView(FormView):
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
try:
|
try:
|
||||||
parameters_json = json.loads(force_text(self.request.FILES['parameters_json'].read()))
|
parameters_json = json.loads(force_str(self.request.FILES['parameters_json'].read()))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
form.add_error('parameters_json', _('File is not in the expected JSON format.'))
|
form.add_error('parameters_json', _('File is not in the expected JSON format.'))
|
||||||
return self.form_invalid(form)
|
return self.form_invalid(form)
|
||||||
|
@ -230,7 +230,6 @@ class ExportView(View):
|
||||||
|
|
||||||
|
|
||||||
def operational_check_view(request, service, slug, **kwargs):
|
def operational_check_view(request, service, slug, **kwargs):
|
||||||
|
|
||||||
for klass in AVAILABLE_SERVICES:
|
for klass in AVAILABLE_SERVICES:
|
||||||
if klass.Extra.service_id == service:
|
if klass.Extra.service_id == service:
|
||||||
break
|
break
|
||||||
|
|
|
@ -8,7 +8,6 @@ else:
|
||||||
|
|
||||||
|
|
||||||
class HoboForm(ModelForm):
|
class HoboForm(ModelForm):
|
||||||
|
|
||||||
required_css_class = 'required'
|
required_css_class = 'required'
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class MaintenanceForm(forms.Form):
|
class MaintenanceForm(forms.Form):
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
import xml.etree.ElementTree as etree
|
import xml.etree.ElementTree as etree
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class SettingsForm(forms.Form):
|
class SettingsForm(forms.Form):
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import django
|
import django
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.middleware.common import CommonMiddleware
|
from django.middleware.common import CommonMiddleware
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class HoboCommonMiddleware(CommonMiddleware):
|
class HoboCommonMiddleware(CommonMiddleware):
|
||||||
|
|
|
@ -14,7 +14,7 @@ class CORSMiddleware(MiddlewareMixin):
|
||||||
view/exception middleware along with the requested view;
|
view/exception middleware along with the requested view;
|
||||||
it will call any response middlewares
|
it will call any response middlewares
|
||||||
"""
|
"""
|
||||||
if request.method == 'OPTIONS' and "HTTP_ACCESS_CONTROL_REQUEST_METHOD" in request.META:
|
if request.method == 'OPTIONS' and "access-control-request-method" in request.headers:
|
||||||
response = HttpResponse()
|
response = HttpResponse()
|
||||||
return response
|
return response
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -18,7 +18,7 @@ from ipaddress import ip_address, ip_network
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.template.response import TemplateResponse
|
from django.template.response import TemplateResponse
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
|
|
||||||
def pass_through(request):
|
def pass_through(request):
|
||||||
|
|
|
@ -10,7 +10,7 @@ class XForwardedForMiddleware(MiddlewareMixin):
|
||||||
|
|
||||||
def process_request(self, request):
|
def process_request(self, request):
|
||||||
if getattr(settings, 'USE_X_FORWARDED_FOR', False):
|
if getattr(settings, 'USE_X_FORWARDED_FOR', False):
|
||||||
if 'HTTP_X_FORWARDED_FOR' in request.META:
|
if 'x-forwarded-for' in request.headers:
|
||||||
ip = request.headers.get('X-Forwarded-For', '').split(",")[0].strip()
|
ip = request.headers.get('X-Forwarded-For', '').split(",")[0].strip()
|
||||||
if ip:
|
if ip:
|
||||||
request.META['REMOTE_ADDR'] = ip
|
request.META['REMOTE_ADDR'] = ip
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
default_app_config = 'hobo.multitenant.apps.MultitenantAppConfig'
|
|
||||||
|
|
||||||
# import the context_processors module so it gets to compute the versions hash
|
# import the context_processors module so it gets to compute the versions hash
|
||||||
# early on.
|
# early on.
|
||||||
from hobo import context_processors
|
from hobo import context_processors
|
||||||
|
|
|
@ -13,7 +13,7 @@ from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.core.management import call_command, get_commands, load_command_class
|
from django.core.management import call_command, get_commands, load_command_class
|
||||||
from django.core.management.base import BaseCommand, CommandError, SystemCheckError, handle_default_options
|
from django.core.management.base import BaseCommand, CommandError, SystemCheckError, handle_default_options
|
||||||
from django.db import connection, connections
|
from django.db import connection, connections
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from hobo.multitenant.management.commands import InteractiveTenantOption
|
from hobo.multitenant.management.commands import InteractiveTenantOption
|
||||||
from hobo.multitenant.middleware import TenantMiddleware
|
from hobo.multitenant.middleware import TenantMiddleware
|
||||||
|
@ -26,12 +26,12 @@ def exception_to_text(e):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return force_text(str(e), errors='ignore')
|
return force_str(str(e), errors='ignore')
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return force_text(repr(e), errors='ignore')
|
return force_str(repr(e), errors='ignore')
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class EditFullNameTemplateForm(forms.Form):
|
class EditFullNameTemplateForm(forms.Form):
|
||||||
|
|
|
@ -3,7 +3,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = []
|
dependencies = []
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
|
|
|
@ -24,7 +24,6 @@ def add_initial_data(apps, schema_editor):
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('profile', '0001_initial'),
|
('profile', '0001_initial'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -4,7 +4,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('profile', '0002_add_data'),
|
('profile', '0002_add_data'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -5,7 +5,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('profile', '0003_attributedefinition_searchable'),
|
('profile', '0003_attributedefinition_searchable'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -4,7 +4,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('profile', '0004_auto_20200518_1810'),
|
('profile', '0004_auto_20200518_1810'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
from django.core.validators import RegexValidator
|
from django.core.validators import RegexValidator
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
validate_attribute_name = RegexValidator(
|
validate_attribute_name = RegexValidator(
|
||||||
r'^[a-z][a-z0-9_]*\Z',
|
r'^[a-z][a-z0-9_]*\Z',
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.urls import reverse, reverse_lazy
|
from django.urls import reverse, reverse_lazy
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import CreateView, ListView, RedirectView, TemplateView, UpdateView
|
from django.views.generic import CreateView, ListView, RedirectView, TemplateView, UpdateView
|
||||||
|
|
||||||
from hobo.deploy.signals import notify_agents
|
from hobo.deploy.signals import notify_agents
|
||||||
|
|
|
@ -23,7 +23,7 @@ from django.conf import settings
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
from django.http import HttpResponseBadRequest, HttpResponseForbidden, JsonResponse
|
from django.http import HttpResponseBadRequest, HttpResponseForbidden, JsonResponse
|
||||||
from django.utils.deprecation import MiddlewareMixin
|
from django.utils.deprecation import MiddlewareMixin
|
||||||
from django.utils.encoding import force_bytes, force_text
|
from django.utils.encoding import force_bytes, force_str
|
||||||
|
|
||||||
from hobo.provisionning.utils import NotificationProcessing
|
from hobo.provisionning.utils import NotificationProcessing
|
||||||
from hobo.rest_authentication import PublikAuthentication, PublikAuthenticationFailed
|
from hobo.rest_authentication import PublikAuthentication, PublikAuthenticationFailed
|
||||||
|
@ -46,7 +46,7 @@ class ProvisionningMiddleware(MiddlewareMixin, NotificationProcessing):
|
||||||
return HttpResponseForbidden()
|
return HttpResponseForbidden()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
notification = json.loads(force_text(request.body))
|
notification = json.loads(force_str(request.body))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return HttpResponseBadRequest()
|
return HttpResponseBadRequest()
|
||||||
if not isinstance(notification, dict) or 'objects' not in notification:
|
if not isinstance(notification, dict) or 'objects' not in notification:
|
||||||
|
|
|
@ -56,7 +56,6 @@ class AnonymousAdminServiceUser(AnonymousUser):
|
||||||
|
|
||||||
|
|
||||||
class APIClientUser:
|
class APIClientUser:
|
||||||
|
|
||||||
is_active = True
|
is_active = True
|
||||||
is_anonymous = False
|
is_anonymous = False
|
||||||
is_authenticated = True
|
is_authenticated = True
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class RobotsTxtForm(forms.Form):
|
class RobotsTxtForm(forms.Form):
|
||||||
|
|
|
@ -10,7 +10,7 @@ and to disable DEBUG mode in production.
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django.conf import global_settings
|
from django.conf import global_settings
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
||||||
|
@ -116,6 +116,8 @@ DATABASES = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
|
||||||
|
|
||||||
# Internationalization
|
# Internationalization
|
||||||
# https://docs.djangoproject.com/en/1.6/topics/i18n/
|
# https://docs.djangoproject.com/en/1.6/topics/i18n/
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.validators import RegexValidator
|
from django.core.validators import RegexValidator
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from hobo.utils import TemplateError, get_templated_url
|
from hobo.utils import TemplateError, get_templated_url
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
||||||
from hobo.environment.forms import VariablesFormMixin
|
from hobo.environment.forms import VariablesFormMixin
|
||||||
|
|
|
@ -20,7 +20,6 @@ def helloworld(request):
|
||||||
|
|
||||||
|
|
||||||
class AuthenticatedTestView(APIView):
|
class AuthenticatedTestView(APIView):
|
||||||
|
|
||||||
permission_classes = [permissions.IsAuthenticated]
|
permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class ThemeOptionsForm(forms.Form):
|
class ThemeOptionsForm(forms.Form):
|
||||||
|
|
|
@ -19,7 +19,7 @@ import random
|
||||||
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import RedirectView, TemplateView
|
from django.views.generic import RedirectView, TemplateView
|
||||||
|
|
||||||
from hobo.environment.forms import VariablesFormMixin
|
from hobo.environment.forms import VariablesFormMixin
|
||||||
|
|
|
@ -56,12 +56,12 @@ urlpatterns += [
|
||||||
path('logout/', logout, name='logout'),
|
path('logout/', logout, name='logout'),
|
||||||
path('login/', login, name='auth_login'),
|
path('login/', login, name='auth_login'),
|
||||||
path('login/local/', login_local), # to be used as backup, in case of idp down
|
path('login/local/', login_local), # to be used as backup, in case of idp down
|
||||||
re_path(r'^accounts/mellon/', include('mellon.urls')),
|
path('accounts/mellon/', include('mellon.urls')),
|
||||||
]
|
]
|
||||||
|
|
||||||
if settings.DEBUG and 'debug_toolbar' in settings.INSTALLED_APPS:
|
if settings.DEBUG and 'debug_toolbar' in settings.INSTALLED_APPS:
|
||||||
import debug_toolbar # pylint: disable=import-error
|
import debug_toolbar # pylint: disable=import-error
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
re_path(r'^__debug__/', include(debug_toolbar.urls)),
|
path('__debug__/', include(debug_toolbar.urls)),
|
||||||
] + urlpatterns
|
] + urlpatterns
|
||||||
|
|
|
@ -9,8 +9,8 @@ from django.core.exceptions import PermissionDenied
|
||||||
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
|
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
|
||||||
from django.shortcuts import resolve_url
|
from django.shortcuts import resolve_url
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_str
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import edit
|
from django.views.generic import edit
|
||||||
from django.views.generic.base import TemplateView
|
from django.views.generic.base import TemplateView
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ def health_json(request):
|
||||||
def menu_json(request):
|
def menu_json(request):
|
||||||
label = _('System')
|
label = _('System')
|
||||||
json_str = json.dumps(
|
json_str = json.dumps(
|
||||||
[{'label': force_text(label), 'slug': 'system', 'url': request.build_absolute_uri(reverse('home'))}]
|
[{'label': force_str(label), 'slug': 'system', 'url': request.build_absolute_uri(reverse('home'))}]
|
||||||
)
|
)
|
||||||
content_type = 'application/json'
|
content_type = 'application/json'
|
||||||
for variable in ('jsonpCallback', 'callback'):
|
for variable in ('jsonpCallback', 'callback'):
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -148,7 +148,7 @@ setup(
|
||||||
'Programming Language :: Python',
|
'Programming Language :: Python',
|
||||||
],
|
],
|
||||||
install_requires=[
|
install_requires=[
|
||||||
'django>=2.2, <3.3',
|
'django>=3.2, <3.3',
|
||||||
'gadjo',
|
'gadjo',
|
||||||
'celery<4' if sys.version_info < (3, 7) else 'celery>=4',
|
'celery<4' if sys.version_info < (3, 7) else 'celery>=4',
|
||||||
'django-mellon',
|
'django-mellon',
|
||||||
|
|
|
@ -9,7 +9,7 @@ from unittest import mock
|
||||||
import dns.resolver
|
import dns.resolver
|
||||||
import pytest
|
import pytest
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_str
|
||||||
from dns import name
|
from dns import name
|
||||||
from dns.rdtypes.ANY import MX, TXT
|
from dns.rdtypes.ANY import MX, TXT
|
||||||
from test_manager import login
|
from test_manager import login
|
||||||
|
@ -129,7 +129,7 @@ def test_invalid_address(client, admin_user):
|
||||||
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
||||||
response = client.post('/emails/', {'default_from_email': 'foobar'})
|
response = client.post('/emails/', {'default_from_email': 'foobar'})
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Enter a valid email address' in force_text(response.content)
|
assert 'Enter a valid email address' in force_str(response.content)
|
||||||
|
|
||||||
|
|
||||||
def test_unkown_address(client, admin_user, dns_resolver, smtp_server, settings):
|
def test_unkown_address(client, admin_user, dns_resolver, smtp_server, settings):
|
||||||
|
@ -137,7 +137,7 @@ def test_unkown_address(client, admin_user, dns_resolver, smtp_server, settings)
|
||||||
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
||||||
response = client.post('/emails/', {'default_from_email': 'john.doe@unknown.com'})
|
response = client.post('/emails/', {'default_from_email': 'john.doe@unknown.com'})
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Email address not found' in force_text(response.content)
|
assert 'Email address not found' in force_str(response.content)
|
||||||
|
|
||||||
|
|
||||||
def test_kown_address_nospf(client, admin_user, dns_resolver, smtp_server, settings):
|
def test_kown_address_nospf(client, admin_user, dns_resolver, smtp_server, settings):
|
||||||
|
@ -145,7 +145,7 @@ def test_kown_address_nospf(client, admin_user, dns_resolver, smtp_server, setti
|
||||||
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
||||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_text(
|
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_str(
|
||||||
response.content
|
response.content
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ def test_spf_allow_all_mail(client, admin_user, dns_resolver, smtp_server, setti
|
||||||
'/emails/', {'default_from_email': 'john.doe@example-spf-allow-all.com'}, follow=True
|
'/emails/', {'default_from_email': 'john.doe@example-spf-allow-all.com'}, follow=True
|
||||||
)
|
)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_text(
|
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_str(
|
||||||
response.content
|
response.content
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ def test_invalid_spf(client, admin_user, dns_resolver, smtp_server, settings):
|
||||||
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
||||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example-invalid-spf.com'})
|
response = client.post('/emails/', {'default_from_email': 'john.doe@example-invalid-spf.com'})
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'No suitable SPF record found' in force_text(response.content)
|
assert 'No suitable SPF record found' in force_str(response.content)
|
||||||
|
|
||||||
|
|
||||||
def test_strict_nospf(client, admin_user, dns_resolver, smtp_server, monkeypatch, settings):
|
def test_strict_nospf(client, admin_user, dns_resolver, smtp_server, monkeypatch, settings):
|
||||||
|
@ -178,7 +178,7 @@ def test_strict_nospf(client, admin_user, dns_resolver, smtp_server, monkeypatch
|
||||||
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
||||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'No suitable SPF record found' in force_text(response.content)
|
assert 'No suitable SPF record found' in force_str(response.content)
|
||||||
|
|
||||||
|
|
||||||
def test_valid_spf(client, admin_user, dns_resolver, smtp_server, settings):
|
def test_valid_spf(client, admin_user, dns_resolver, smtp_server, settings):
|
||||||
|
@ -187,7 +187,7 @@ def test_valid_spf(client, admin_user, dns_resolver, smtp_server, settings):
|
||||||
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
||||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example-spf.com'}, follow=True)
|
response = client.post('/emails/', {'default_from_email': 'john.doe@example-spf.com'}, follow=True)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_text(
|
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_str(
|
||||||
response.content
|
response.content
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -200,7 +200,7 @@ def test_no_spf_validation(client, admin_user, dns_resolver, smtp_server, settin
|
||||||
'/emails/', {'default_from_email': 'john.doe@example-invalid-spf.com'}, follow=True
|
'/emails/', {'default_from_email': 'john.doe@example-invalid-spf.com'}, follow=True
|
||||||
)
|
)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_text(
|
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_str(
|
||||||
response.content
|
response.content
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -211,14 +211,14 @@ def test_sender_allowed_domains(client, admin_user, dns_resolver, smtp_server, s
|
||||||
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
||||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Domain example.com is not allowed' in force_text(response.content)
|
assert 'Domain example.com is not allowed' in force_str(response.content)
|
||||||
assert 'Emails settings have been updated.' not in force_text(response.content)
|
assert 'Emails settings have been updated.' not in force_str(response.content)
|
||||||
|
|
||||||
settings.EMAIL_FROM_ALLOWED_DOMAINS = ['example.com', 'foo.bar']
|
settings.EMAIL_FROM_ALLOWED_DOMAINS = ['example.com', 'foo.bar']
|
||||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Emails settings have been updated.' in force_text(response.content)
|
assert 'Emails settings have been updated.' in force_str(response.content)
|
||||||
assert 'Domain example.com is not allowed' not in force_text(response.content)
|
assert 'Domain example.com is not allowed' not in force_str(response.content)
|
||||||
|
|
||||||
settings.EMAIL_FROM_ALLOWED_DOMAINS = []
|
settings.EMAIL_FROM_ALLOWED_DOMAINS = []
|
||||||
combo = Combo(base_url='https://example.org/test')
|
combo = Combo(base_url='https://example.org/test')
|
||||||
|
@ -227,21 +227,21 @@ def test_sender_allowed_domains(client, admin_user, dns_resolver, smtp_server, s
|
||||||
|
|
||||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example.org'}, follow=True)
|
response = client.post('/emails/', {'default_from_email': 'john.doe@example.org'}, follow=True)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Emails settings have been updated.' in force_text(response.content)
|
assert 'Emails settings have been updated.' in force_str(response.content)
|
||||||
|
|
||||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Domain example.com is not allowed' in force_text(response.content)
|
assert 'Domain example.com is not allowed' in force_str(response.content)
|
||||||
|
|
||||||
response = client.post('/emails/', {'default_from_email': 'john.doe@brother.example.org'}, follow=True)
|
response = client.post('/emails/', {'default_from_email': 'john.doe@brother.example.org'}, follow=True)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Domain brother.example.org is not allowed' in force_text(response.content)
|
assert 'Domain brother.example.org is not allowed' in force_str(response.content)
|
||||||
|
|
||||||
combo.base_url = 'https://www.example.com'
|
combo.base_url = 'https://www.example.com'
|
||||||
combo.save()
|
combo.save()
|
||||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Emails settings have been updated.' in force_text(response.content)
|
assert 'Emails settings have been updated.' in force_str(response.content)
|
||||||
|
|
||||||
|
|
||||||
def test_emails_view(app, admin_user, dns_resolver, smtp_server, settings):
|
def test_emails_view(app, admin_user, dns_resolver, smtp_server, settings):
|
||||||
|
|
|
@ -3,7 +3,7 @@ from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_str
|
||||||
from requests import Response
|
from requests import Response
|
||||||
|
|
||||||
from hobo.environment.models import Combo, Fargo, Hobo, Variable, Wcs
|
from hobo.environment.models import Combo, Fargo, Hobo, Variable, Wcs
|
||||||
|
@ -727,7 +727,7 @@ def test_upgrade_user(mocked_post):
|
||||||
|
|
||||||
def test_compute_cnil_acknowledgment_level():
|
def test_compute_cnil_acknowledgment_level():
|
||||||
"""function use to inspect javascript content"""
|
"""function use to inspect javascript content"""
|
||||||
warning_content = force_text(JAVASCRIPT_TAG)
|
warning_content = force_str(JAVASCRIPT_TAG)
|
||||||
|
|
||||||
# can't find cookie's life time extension prevention
|
# can't find cookie's life time extension prevention
|
||||||
assert compute_cnil_acknowledgment_level(warning_content) == 'good'
|
assert compute_cnil_acknowledgment_level(warning_content) == 'good'
|
||||||
|
|
|
@ -82,7 +82,6 @@ def tenant_factory(transactional_db, tenant_base, settings):
|
||||||
return t
|
return t
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
||||||
yield factory
|
yield factory
|
||||||
finally:
|
finally:
|
||||||
# cleanup all created tenants
|
# cleanup all created tenants
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue