mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-09-28 14:22:01 +00:00
d640e4ac96
- new setting to enable user exports defaults to False - add setting to enable and disable user exports - do not allow user exports when using s3 storage - do not serve non-image files from /images/ (requires update to nginx settings) - increase default file upload limit to 100MB to enable user exports to be imported (can be changed in .env)
151 lines
5.5 KiB
Python
151 lines
5.5 KiB
Python
""" manage imports """
|
|
from django.contrib.auth.decorators import login_required, permission_required
|
|
from django.core.paginator import Paginator
|
|
from django.shortcuts import get_object_or_404, redirect
|
|
from django.template.response import TemplateResponse
|
|
from django.utils.decorators import method_decorator
|
|
from django.views import View
|
|
from django.views.decorators.http import require_POST
|
|
|
|
from bookwyrm import models
|
|
from bookwyrm.views.helpers import redirect_to_referer
|
|
from bookwyrm.settings import PAGE_LENGTH, USE_S3
|
|
|
|
|
|
# pylint: disable=no-self-use
|
|
@method_decorator(login_required, name="dispatch")
|
|
@method_decorator(
|
|
permission_required("bookwyrm.moderate_user", raise_exception=True),
|
|
name="dispatch",
|
|
)
|
|
class ImportList(View):
|
|
"""admin view of imports on this server"""
|
|
|
|
def get(self, request, status="active"):
|
|
"""list of imports"""
|
|
complete = status == "complete"
|
|
|
|
sort = request.GET.get("sort", "created_date")
|
|
sort_fields = [
|
|
"created_date",
|
|
"user",
|
|
]
|
|
imports = models.ImportJob.objects.filter(complete=complete).order_by(
|
|
"created_date"
|
|
)
|
|
# pylint: disable=consider-using-f-string
|
|
if sort in sort_fields + ["-{:s}".format(f) for f in sort_fields]:
|
|
imports = imports.order_by(sort)
|
|
|
|
paginated = Paginator(imports, PAGE_LENGTH)
|
|
page = paginated.get_page(request.GET.get("page"))
|
|
|
|
user_imports = models.BookwyrmImportJob.objects.filter(
|
|
complete=complete
|
|
).order_by("created_date")
|
|
|
|
user_paginated = Paginator(user_imports, PAGE_LENGTH)
|
|
user_page = user_paginated.get_page(request.GET.get("page"))
|
|
|
|
site_settings = models.SiteSettings.objects.get()
|
|
data = {
|
|
"imports": page,
|
|
"user_imports": user_page,
|
|
"page_range": paginated.get_elided_page_range(
|
|
page.number, on_each_side=2, on_ends=1
|
|
),
|
|
"status": status,
|
|
"sort": sort,
|
|
"import_size_limit": site_settings.import_size_limit,
|
|
"import_limit_reset": site_settings.import_limit_reset,
|
|
"user_import_time_limit": site_settings.user_import_time_limit,
|
|
"use_s3": USE_S3,
|
|
}
|
|
return TemplateResponse(request, "settings/imports/imports.html", data)
|
|
|
|
# pylint: disable=unused-argument
|
|
def post(self, request, import_id):
|
|
"""Mark an import as complete"""
|
|
import_job = get_object_or_404(models.ImportJob, id=import_id)
|
|
import_job.stop_job()
|
|
return redirect_to_referer(request, "settings-imports")
|
|
|
|
|
|
@require_POST
|
|
@permission_required("bookwyrm.edit_instance_settings", raise_exception=True)
|
|
# pylint: disable=unused-argument
|
|
def disable_imports(request):
|
|
"""When you just need people to please stop starting imports"""
|
|
site = models.SiteSettings.objects.get()
|
|
site.imports_enabled = False
|
|
site.save(update_fields=["imports_enabled"])
|
|
return redirect("settings-imports")
|
|
|
|
|
|
@require_POST
|
|
@permission_required("bookwyrm.edit_instance_settings", raise_exception=True)
|
|
# pylint: disable=unused-argument
|
|
def enable_imports(request):
|
|
"""When you just need people to please stop starting imports"""
|
|
site = models.SiteSettings.objects.get()
|
|
site.imports_enabled = True
|
|
site.save(update_fields=["imports_enabled"])
|
|
return redirect("settings-imports")
|
|
|
|
|
|
@require_POST
|
|
@permission_required("bookwyrm.edit_instance_settings", raise_exception=True)
|
|
# pylint: disable=unused-argument
|
|
def set_import_size_limit(request):
|
|
"""Limit the amount of books users can import at once"""
|
|
site = models.SiteSettings.objects.get()
|
|
import_size_limit = int(request.POST.get("limit"))
|
|
import_limit_reset = int(request.POST.get("reset"))
|
|
site.import_size_limit = import_size_limit
|
|
site.import_limit_reset = import_limit_reset
|
|
site.save(update_fields=["import_size_limit", "import_limit_reset"])
|
|
return redirect("settings-imports")
|
|
|
|
|
|
@require_POST
|
|
@login_required
|
|
@permission_required("bookwyrm.moderate_user", raise_exception=True)
|
|
# pylint: disable=unused-argument
|
|
def set_user_import_completed(request, import_id):
|
|
"""Mark a user import as complete"""
|
|
import_job = get_object_or_404(models.BookwyrmImportJob, id=import_id)
|
|
import_job.stop_job()
|
|
return redirect("settings-imports")
|
|
|
|
|
|
@require_POST
|
|
@permission_required("bookwyrm.edit_instance_settings", raise_exception=True)
|
|
# pylint: disable=unused-argument
|
|
def set_user_import_limit(request):
|
|
"""Limit how ofter users can import and export their account"""
|
|
site = models.SiteSettings.objects.get()
|
|
site.user_import_time_limit = int(request.POST.get("limit"))
|
|
site.save(update_fields=["user_import_time_limit"])
|
|
return redirect("settings-imports")
|
|
|
|
|
|
@require_POST
|
|
@permission_required("bookwyrm.edit_instance_settings", raise_exception=True)
|
|
# pylint: disable=unused-argument
|
|
def enable_user_exports(request):
|
|
"""Allow users to export account data"""
|
|
site = models.SiteSettings.objects.get()
|
|
site.user_exports_enabled = True
|
|
site.save(update_fields=["user_exports_enabled"])
|
|
return redirect("settings-imports")
|
|
|
|
|
|
@require_POST
|
|
@permission_required("bookwyrm.edit_instance_settings", raise_exception=True)
|
|
# pylint: disable=unused-argument
|
|
def disable_user_exports(request):
|
|
"""Don't allow users to export account data"""
|
|
site = models.SiteSettings.objects.get()
|
|
site.user_exports_enabled = False
|
|
site.save(update_fields=["user_exports_enabled"])
|
|
return redirect("settings-imports")
|