mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-11-12 08:53:56 +01:00
83 lines
3.0 KiB
Python
83 lines
3.0 KiB
Python
"""Limits serializers for API v2."""
|
|
|
|
import os
|
|
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from rest_framework import serializers, status
|
|
from rest_framework.exceptions import PermissionDenied, APIException
|
|
|
|
from modoboa.core.models import User
|
|
from modoboa.parameters import tools as param_tools
|
|
|
|
from ...lib import decrypt_file, get_creds_filename
|
|
from ...constants import CONNECTION_SECURITY_MODES
|
|
|
|
|
|
class PDFCredentialsSettingsSerializer(serializers.Serializer):
|
|
"""A serializer for global parameters."""
|
|
|
|
# General
|
|
enabled_pdfcredentials = serializers.BooleanField(default=True)
|
|
|
|
# Document storage
|
|
storage_dir = serializers.CharField(default="/var/lib/modoboa/pdf_credentials")
|
|
|
|
# Security options
|
|
delete_first_dl = serializers.BooleanField(default=True)
|
|
generate_at_creation = serializers.BooleanField(default=True)
|
|
|
|
# Customization options
|
|
title = serializers.CharField(default=_("Personal account information"))
|
|
webpanel_url = serializers.URLField()
|
|
custom_message = serializers.CharField(
|
|
required=False, allow_blank=True, allow_null=True)
|
|
include_connection_settings = serializers.BooleanField(default=False)
|
|
smtp_server_address = serializers.CharField()
|
|
smtp_server_port = serializers.IntegerField(default=587)
|
|
smtp_connection_security = serializers.ChoiceField(
|
|
choices=CONNECTION_SECURITY_MODES, default="starttls")
|
|
imap_server_address = serializers.CharField()
|
|
imap_server_port = serializers.IntegerField(default=143)
|
|
imap_connection_security = serializers.ChoiceField(
|
|
choices=CONNECTION_SECURITY_MODES, default="starttls")
|
|
|
|
def validate_storage_dir(self, value):
|
|
"""Check that directory exists."""
|
|
if value:
|
|
if not os.path.isdir(value):
|
|
raise serializers.ValidationError(
|
|
_("Directory not found.")
|
|
)
|
|
if not os.access(value, os.W_OK):
|
|
raise serializers.ValidationError(
|
|
_("Directory is not writable")
|
|
)
|
|
return value
|
|
|
|
|
|
class GetAccountCredentialsSerializer(serializers.Serializer):
|
|
"""A serializer for get account credential view."""
|
|
|
|
account_id = serializers.IntegerField()
|
|
|
|
def validate(self, data):
|
|
request = self.context["request"]
|
|
account = User.objects.get(pk=data["account_id"])
|
|
if not request.user.can_access(account):
|
|
raise PermissionDenied()
|
|
self.context["account"] = account
|
|
return data
|
|
|
|
def save(self):
|
|
fname = get_creds_filename(self.context["account"])
|
|
if not os.path.exists(fname):
|
|
raise APIException(
|
|
_("No document available for this user"),
|
|
status.HTTP_400_BAD_REQUEST
|
|
)
|
|
self.context["content"] = decrypt_file(fname)
|
|
if param_tools.get_global_parameter("delete_first_dl"):
|
|
os.remove(fname)
|
|
self.context["fname"] = os.path.basename(fname)
|