Newer
Older
from typing import Any, List, Optional, Tuple
from django.conf import settings
from django.db import ProgrammingError
from django.http import HttpRequest
from django.utils.module_loading import autodiscover_modules

Nik | Klampfradler
committed
from dynamic_preferences.registries import preference_models
from .registries import (
group_preferences_registry,
person_preferences_registry,
site_preferences_registry,
)
from .util.apps import AppConfig
from .util.core_helpers import get_site_preferences, has_person
from .util.sass_helpers import clean_scss
name = "aleksis.core"
verbose_name = "AlekSIS — The Free School Information System"
urls = {
"Repository": "https://edugit.org/AlekSIS/official/AlekSIS/",
}
licence = "EUPL-1.2+"
([2017, 2018, 2019, 2020], "Jonathan Weth", "wethjo@katharineum.de"),
([2017, 2018, 2019], "Frank Poetzsch-Heffter", "p-h@katharineum.de"),
([2018, 2019, 2020], "Julian Leucker", "leuckeju@katharineum.de"),
([2018, 2019, 2020], "Hangzhi Yu", "yuha@katharineum.de"),
([2019, 2020], "Dominik George", "dominik.george@teckids.org"),
([2019, 2020], "Tom Teichler", "tom.teichler@teckids.org"),
([2019], "mirabilos", "thorsten.glaser@teckids.org"),

Nik | Klampfradler
committed
def ready(self):
# Autodiscover various modules defined by AlekSIS
autodiscover_modules("form_extensions", "model_extensions", "checks")
sitepreferencemodel = self.get_model("SitePreferenceModel")
personpreferencemodel = self.get_model("PersonPreferenceModel")
grouppreferencemodel = self.get_model("GroupPreferenceModel")

Nik | Klampfradler
committed
preference_models.register(sitepreferencemodel, site_preferences_registry)
preference_models.register(personpreferencemodel, person_preferences_registry)
preference_models.register(grouppreferencemodel, group_preferences_registry)

Nik | Klampfradler
committed
self._refresh_authentication_backends()
@classmethod
def _refresh_authentication_backends(cls):
"""Refresh config list of enabled authentication backends."""
from .preferences import AuthenticationBackends # noqa
idx = settings.AUTHENTICATION_BACKENDS.index("django.contrib.auth.backends.ModelBackend")
try:
# Don't set array directly in order to keep object reference
settings._wrapped.AUTHENTICATION_BACKENDS.clear()
settings._wrapped.AUTHENTICATION_BACKENDS += settings.ORIGINAL_AUTHENTICATION_BACKENDS
for backend in get_site_preferences()["auth__backends"]:
settings._wrapped.AUTHENTICATION_BACKENDS.insert(idx, backend)
idx += 1
except ProgrammingError:
pass
def preference_updated(
self,
sender: Any,
section: Optional[str] = None,
name: Optional[str] = None,
old_value: Optional[Any] = None,
new_value: Optional[Any] = None,
**kwargs,
) -> None:
if section == "auth" and name == "backends":
self._refresh_authentication_backends()
if section == "theme":
clean_scss()
elif name in ("favicon", "pwa_icon"):
from favicon.models import Favicon # noqa
is_favicon = name == "favicon"
if new_value:
Favicon.on_site.update_or_create(
title=name,
defaults={"isFavicon": name == "favicon", "faviconImage": new_value,},
)
else:
Favicon.on_site.filter(title=name, isFavicon=is_favicon).delete()
def post_migrate(
self,
app_config: django.apps.AppConfig,
verbosity: int,
interactive: bool,
using: str,
plan: List[Tuple],
) -> None:
super().post_migrate(app_config, verbosity, interactive, using, plan, apps)
# Ensure presence of an OTP YubiKey default config
apps.get_model("otp_yubikey", "ValidationService").objects.using(using).update_or_create(
name="default", defaults={"use_ssl": True, "param_sl": "", "param_timeout": ""}
def user_logged_in(
self, sender: type, request: Optional[HttpRequest], user: "User", **kwargs
) -> None:
if has_person(user):
# Save the associated person to pick up defaults
user.person.save()