Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • hansegucker/AlekSIS-Core
  • pinguin/AlekSIS-Core
  • AlekSIS/official/AlekSIS-Core
  • sunweaver/AlekSIS-Core
  • sggua/AlekSIS-Core
  • edward/AlekSIS-Core
  • magicfelix/AlekSIS-Core
7 results
Show changes
Commits on Source (6)
...@@ -1506,8 +1506,8 @@ msgstr "" ...@@ -1506,8 +1506,8 @@ msgstr ""
msgid "" msgid ""
"\n" "\n"
" To start using a token generator, please use your\n" " To start using a token generator, please use your\n"
" smartphone to scan the QR code below. For example, use Google\n" " favourite two factor authentication (TOTP) app to scan the QR code below.\n"
" Authenticator. Then, enter the token generated by the app.\n" " Then, enter the token generated by the app.\n"
" " " "
msgstr "" msgstr ""
......
...@@ -1655,14 +1655,14 @@ msgstr "" ...@@ -1655,14 +1655,14 @@ msgstr ""
msgid "" msgid ""
"\n" "\n"
" To start using a token generator, please use your\n" " To start using a token generator, please use your\n"
" smartphone to scan the QR code below. For example, use Google\n" " favourite two factor authentication (TOTP) app to scan the QR code below.\n"
" Authenticator. Then, enter the token generated by the app.\n" " Then, enter the token generated by the app.\n"
" " " "
msgstr "" msgstr ""
"\n" "\n"
" Um mit dem Codegenerator zu starten, benutzen Sie bitte Ihr Smartphone,\n" " Um mit dem Codegenerator zu starten, benutzen Sie bitte Ihre\n"
"um diesen QR-Code zu scannen (z. B. den Google Authenticator). Dann geben Sie \n" "App für Zwei-Faktor-Authentifizierung (TOTP), um diesen QR-Code zu scannen.\n"
"den in der App angezeigten Code an:\n" "Dann geben Sie den in der App angezeigten Code an:\n"
" " " "
#: templates/two_factor/core/setup.html:34 #: templates/two_factor/core/setup.html:34
......
...@@ -1558,8 +1558,8 @@ msgstr "" ...@@ -1558,8 +1558,8 @@ msgstr ""
msgid "" msgid ""
"\n" "\n"
" To start using a token generator, please use your\n" " To start using a token generator, please use your\n"
" smartphone to scan the QR code below. For example, use Google\n" " favourite two factor authentication (TOTP) app to scan the QR code below.\n"
" Authenticator. Then, enter the token generated by the app.\n" " Then, enter the token generated by the app.\n"
" " " "
msgstr "" msgstr ""
......
...@@ -1631,8 +1631,8 @@ msgstr "" ...@@ -1631,8 +1631,8 @@ msgstr ""
msgid "" msgid ""
"\n" "\n"
" To start using a token generator, please use your\n" " To start using a token generator, please use your\n"
" smartphone to scan the QR code below. For example, use Google\n" " favourite two factor authentication (TOTP) app to scan the QR code below.\n"
" Authenticator. Then, enter the token generated by the app.\n" " Then, enter the token generated by the app.\n"
" " " "
msgstr "" msgstr ""
......
...@@ -1505,8 +1505,8 @@ msgstr "" ...@@ -1505,8 +1505,8 @@ msgstr ""
msgid "" msgid ""
"\n" "\n"
" To start using a token generator, please use your\n" " To start using a token generator, please use your\n"
" smartphone to scan the QR code below. For example, use Google\n" " favourite two factor authentication (TOTP) app to scan the QR code below.\n"
" Authenticator. Then, enter the token generated by the app.\n" " Then, enter the token generated by the app.\n"
" " " "
msgstr "" msgstr ""
......
...@@ -1505,8 +1505,8 @@ msgstr "" ...@@ -1505,8 +1505,8 @@ msgstr ""
msgid "" msgid ""
"\n" "\n"
" To start using a token generator, please use your\n" " To start using a token generator, please use your\n"
" smartphone to scan the QR code below. For example, use Google\n" " favourite two factor authentication (TOTP) app to scan the QR code below.\n"
" Authenticator. Then, enter the token generated by the app.\n" " Then, enter the token generated by the app.\n"
" " " "
msgstr "" msgstr ""
......
// This is the AlekSIS service worker
const CACHE = "aleksis-cache";
const precacheFiles = [ // This is the AlekSIS service worker
'',
];
const offlineFallbackPage = '/offline'; const CACHE = 'aleksis-cache';
const avoidCachingPaths = [ const offlineFallbackPage = 'offline/';
'/admin',
'/settings',
'/accounts/login'
]; // TODO: More paths are needed
function pathComparer(requestUrl, pathRegEx) { function pathComparer(requestUrl, pathRegEx) {
return requestUrl.match(new RegExp(pathRegEx)); return requestUrl.match(new RegExp(pathRegEx));
...@@ -40,10 +31,7 @@ self.addEventListener("install", function (event) { ...@@ -40,10 +31,7 @@ self.addEventListener("install", function (event) {
event.waitUntil( event.waitUntil(
caches.open(CACHE).then(function (cache) { caches.open(CACHE).then(function (cache) {
console.log("[AlekSIS PWA] Caching pages during install."); console.log("[AlekSIS PWA] Caching pages during install.");
return cache.add(offlineFallbackPage);
return cache.addAll(precacheFiles).then(function () {
return cache.add(offlineFallbackPage);
});
}) })
); );
}); });
...@@ -95,11 +83,11 @@ function fromCache(event) { ...@@ -95,11 +83,11 @@ function fromCache(event) {
} }
function updateCache(request, response) { function updateCache(request, response) {
if (!comparePaths(request.url, avoidCachingPaths)) { if (response.headers.get('cache-control') && response.headers.get('cache-control').includes('no-cache')) {
return Promise.resolve();
} else {
return caches.open(CACHE).then(function (cache) { return caches.open(CACHE).then(function (cache) {
return cache.put(request, response); return cache.put(request, response);
}); });
} }
return Promise.resolve();
} }
...@@ -22,8 +22,8 @@ ...@@ -22,8 +22,8 @@
<p> <p>
{% blocktrans %} {% blocktrans %}
To start using a token generator, please use your To start using a token generator, please use your
smartphone to scan the QR code below. For example, use Google favourite two factor authentication (TOTP) app to scan the QR code below.
Authenticator. Then, enter the token generated by the app. Then, enter the token generated by the app.
{% endblocktrans %} {% endblocktrans %}
</p> </p>
<p> <p>
......
...@@ -18,6 +18,7 @@ from .util.core_helpers import is_celery_enabled ...@@ -18,6 +18,7 @@ from .util.core_helpers import is_celery_enabled
urlpatterns = [ urlpatterns = [
path("", include("django_prometheus.urls")), path("", include("django_prometheus.urls")),
path("", include("pwa.urls"), name="pwa"), path("", include("pwa.urls"), name="pwa"),
path("offline/", views.offline, name="offline"),
path("about/", views.about, name="about_aleksis"), path("about/", views.about, name="about_aleksis"),
path("admin/", admin.site.urls), path("admin/", admin.site.urls),
path("data_management/", views.data_management, name="data_management"), path("data_management/", views.data_management, name="data_management"),
......
...@@ -7,7 +7,9 @@ from django.core.paginator import Paginator ...@@ -7,7 +7,9 @@ from django.core.paginator import Paginator
from django.http import HttpRequest, HttpResponse, HttpResponseNotFound from django.http import HttpRequest, HttpResponse, HttpResponseNotFound
from django.shortcuts import get_object_or_404, redirect, render from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.utils.decorators import method_decorator
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.views.decorators.cache import never_cache
import reversion import reversion
from django_tables2 import RequestConfig, SingleTableView from django_tables2 import RequestConfig, SingleTableView
...@@ -112,6 +114,7 @@ class SchoolTermListView(SingleTableView, PermissionRequiredMixin): ...@@ -112,6 +114,7 @@ class SchoolTermListView(SingleTableView, PermissionRequiredMixin):
template_name = "core/school_term/list.html" template_name = "core/school_term/list.html"
@method_decorator(never_cache, name="dispatch")
class SchoolTermCreateView(AdvancedCreateView, PermissionRequiredMixin): class SchoolTermCreateView(AdvancedCreateView, PermissionRequiredMixin):
"""Create view for school terms.""" """Create view for school terms."""
...@@ -123,6 +126,7 @@ class SchoolTermCreateView(AdvancedCreateView, PermissionRequiredMixin): ...@@ -123,6 +126,7 @@ class SchoolTermCreateView(AdvancedCreateView, PermissionRequiredMixin):
success_message = _("The school term has been created.") success_message = _("The school term has been created.")
@method_decorator(never_cache, name="dispatch")
class SchoolTermEditView(AdvancedEditView, PermissionRequiredMixin): class SchoolTermEditView(AdvancedEditView, PermissionRequiredMixin):
"""Edit view for school terms.""" """Edit view for school terms."""
...@@ -230,6 +234,7 @@ def groups(request: HttpRequest) -> HttpResponse: ...@@ -230,6 +234,7 @@ def groups(request: HttpRequest) -> HttpResponse:
return render(request, "core/group/list.html", context) return render(request, "core/group/list.html", context)
@never_cache
@permission_required("core.link_persons_accounts") @permission_required("core.link_persons_accounts")
def persons_accounts(request: HttpRequest) -> HttpResponse: def persons_accounts(request: HttpRequest) -> HttpResponse:
"""View allowing to batch-process linking of users to persons.""" """View allowing to batch-process linking of users to persons."""
...@@ -250,6 +255,7 @@ def persons_accounts(request: HttpRequest) -> HttpResponse: ...@@ -250,6 +255,7 @@ def persons_accounts(request: HttpRequest) -> HttpResponse:
return render(request, "core/person/accounts.html", context) return render(request, "core/person/accounts.html", context)
@never_cache
@permission_required("core.assign_child_groups_to_groups") @permission_required("core.assign_child_groups_to_groups")
def groups_child_groups(request: HttpRequest) -> HttpResponse: def groups_child_groups(request: HttpRequest) -> HttpResponse:
"""View for batch-processing assignment from child groups to groups.""" """View for batch-processing assignment from child groups to groups."""
...@@ -287,6 +293,7 @@ def groups_child_groups(request: HttpRequest) -> HttpResponse: ...@@ -287,6 +293,7 @@ def groups_child_groups(request: HttpRequest) -> HttpResponse:
return render(request, "core/group/child_groups.html", context) return render(request, "core/group/child_groups.html", context)
@never_cache
@permission_required("core.edit_person", fn=objectgetter_optional(Person)) @permission_required("core.edit_person", fn=objectgetter_optional(Person))
def edit_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: def edit_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse:
"""Edit view for a single person, defaulting to logged-in person.""" """Edit view for a single person, defaulting to logged-in person."""
...@@ -325,6 +332,7 @@ def get_group_by_id(request: HttpRequest, id_: Optional[int] = None): ...@@ -325,6 +332,7 @@ def get_group_by_id(request: HttpRequest, id_: Optional[int] = None):
return None return None
@never_cache
@permission_required("core.edit_group", fn=objectgetter_optional(Group, None, False)) @permission_required("core.edit_group", fn=objectgetter_optional(Group, None, False))
def edit_group(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: def edit_group(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse:
"""View to edit or create a group.""" """View to edit or create a group."""
...@@ -418,6 +426,7 @@ def announcements(request: HttpRequest) -> HttpResponse: ...@@ -418,6 +426,7 @@ def announcements(request: HttpRequest) -> HttpResponse:
return render(request, "core/announcement/list.html", context) return render(request, "core/announcement/list.html", context)
@never_cache
@permission_required( @permission_required(
"core.create_or_edit_announcement", fn=objectgetter_optional(Announcement, None, False) "core.create_or_edit_announcement", fn=objectgetter_optional(Announcement, None, False)
) )
...@@ -485,6 +494,7 @@ class PermissionSearchView(PermissionRequiredMixin, SearchView): ...@@ -485,6 +494,7 @@ class PermissionSearchView(PermissionRequiredMixin, SearchView):
return render(self.request, self.template, context) return render(self.request, self.template, context)
@never_cache
def preferences( def preferences(
request: HttpRequest, request: HttpRequest,
registry_name: str = "person", registry_name: str = "person",
...@@ -570,6 +580,7 @@ def delete_group(request: HttpRequest, id_: int) -> HttpResponse: ...@@ -570,6 +580,7 @@ def delete_group(request: HttpRequest, id_: int) -> HttpResponse:
return redirect("groups") return redirect("groups")
@never_cache
@permission_required( @permission_required(
"core.change_additionalfield", fn=objectgetter_optional(AdditionalField, None, False) "core.change_additionalfield", fn=objectgetter_optional(AdditionalField, None, False)
) )
...@@ -635,6 +646,7 @@ def delete_additional_field(request: HttpRequest, id_: int) -> HttpResponse: ...@@ -635,6 +646,7 @@ def delete_additional_field(request: HttpRequest, id_: int) -> HttpResponse:
return redirect("additional_fields") return redirect("additional_fields")
@never_cache
@permission_required("core.change_grouptype", fn=objectgetter_optional(GroupType, None, False)) @permission_required("core.change_grouptype", fn=objectgetter_optional(GroupType, None, False))
def edit_group_type(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: def edit_group_type(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse:
"""View to edit or create a group_type.""" """View to edit or create a group_type."""
......