mirror of
https://gitea.mueller.network/extern/django-helpdesk.git
synced 2024-11-25 01:13:31 +01:00
dd4c04945a
Default setting is false. This is not backward compatible. The rationale is: attachments contain most likely sensitive information. By default they are served without access control. Currently there is no simple feature to configure access control. To avoid unintentional disclosure attachments should be an opt in: you have been warned.
400 lines
16 KiB
Python
400 lines
16 KiB
Python
"""
|
|
Default settings for django-helpdesk.
|
|
|
|
"""
|
|
|
|
from django import forms
|
|
from django.conf import settings
|
|
from django.core.exceptions import ImproperlyConfigured
|
|
from django.utils.translation import gettext_lazy as _
|
|
import os
|
|
import re
|
|
import warnings
|
|
import sys
|
|
|
|
|
|
DEFAULT_USER_SETTINGS = {
|
|
'login_view_ticketlist': True,
|
|
'email_on_ticket_change': True,
|
|
'email_on_ticket_assign': True,
|
|
'tickets_per_page': 25,
|
|
'use_email_as_submitter': True,
|
|
}
|
|
|
|
try:
|
|
DEFAULT_USER_SETTINGS.update(settings.HELPDESK_DEFAULT_SETTINGS)
|
|
except AttributeError:
|
|
pass
|
|
|
|
|
|
HAS_TAG_SUPPORT = False
|
|
|
|
# Use international timezones
|
|
USE_TZ: bool = True
|
|
|
|
# check for secure cookie support
|
|
if os.environ.get('SECURE_PROXY_SSL_HEADER'):
|
|
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
|
|
|
|
SESSION_COOKIE_SECURE = True
|
|
CSRF_COOKIE_SECURE = True
|
|
|
|
##########################################
|
|
# generic options - visible on all pages #
|
|
##########################################
|
|
|
|
# redirect to login page instead of the default homepage when users visits "/"?
|
|
HELPDESK_REDIRECT_TO_LOGIN_BY_DEFAULT = getattr(settings,
|
|
'HELPDESK_REDIRECT_TO_LOGIN_BY_DEFAULT',
|
|
False)
|
|
|
|
HELPDESK_PUBLIC_VIEW_PROTECTOR = getattr(settings,
|
|
'HELPDESK_PUBLIC_VIEW_PROTECTOR',
|
|
lambda _: None)
|
|
|
|
HELPDESK_STAFF_VIEW_PROTECTOR = getattr(settings,
|
|
'HELPDESK_STAFF_VIEW_PROTECTOR',
|
|
lambda _: None)
|
|
|
|
# Enable ticket and Email attachments
|
|
HELPDESK_ENABLE_ATTACHMENTS = getattr(settings,
|
|
'HELPDESK_ENABLE_ATTACHMENTS',
|
|
False)
|
|
|
|
# Enable the Dependencies field on ticket view
|
|
HELPDESK_ENABLE_DEPENDENCIES_ON_TICKET = getattr(settings,
|
|
'HELPDESK_ENABLE_DEPENDENCIES_ON_TICKET',
|
|
True)
|
|
|
|
# Enable the Time spent on field on ticket view
|
|
HELPDESK_ENABLE_TIME_SPENT_ON_TICKET = getattr(settings,
|
|
'HELPDESK_ENABLE_TIME_SPENT_ON_TICKET',
|
|
True)
|
|
|
|
# raises a 404 to anon users. It's like it was invisible
|
|
HELPDESK_ANON_ACCESS_RAISES_404 = getattr(settings,
|
|
'HELPDESK_ANON_ACCESS_RAISES_404',
|
|
False)
|
|
|
|
# Disable Timeline on ticket list
|
|
HELPDESK_TICKETS_TIMELINE_ENABLED = getattr(
|
|
settings, 'HELPDESK_TICKETS_TIMELINE_ENABLED', True)
|
|
|
|
# show extended navigation by default, to all users, irrespective of staff
|
|
# status?
|
|
HELPDESK_NAVIGATION_ENABLED = getattr(
|
|
settings, 'HELPDESK_NAVIGATION_ENABLED', False)
|
|
|
|
# use public CDNs to serve jquery and other javascript by default?
|
|
# otherwise, use built-in static copy
|
|
HELPDESK_USE_CDN = getattr(settings, 'HELPDESK_USE_CDN', False)
|
|
|
|
# show dropdown list of languages that ticket comments can be translated into?
|
|
HELPDESK_TRANSLATE_TICKET_COMMENTS = getattr(settings,
|
|
'HELPDESK_TRANSLATE_TICKET_COMMENTS',
|
|
False)
|
|
|
|
# list of languages to offer. if set to false,
|
|
# all default google translate languages will be shown.
|
|
HELPDESK_TRANSLATE_TICKET_COMMENTS_LANG = getattr(settings,
|
|
'HELPDESK_TRANSLATE_TICKET_COMMENTS_LANG',
|
|
["en", "de", "es", "fr", "it", "ru"])
|
|
|
|
# show link to 'change password' on 'User Settings' page?
|
|
HELPDESK_SHOW_CHANGE_PASSWORD = getattr(
|
|
settings, 'HELPDESK_SHOW_CHANGE_PASSWORD', False)
|
|
|
|
# allow user to override default layout for 'followups' - work in progress.
|
|
HELPDESK_FOLLOWUP_MOD = getattr(settings, 'HELPDESK_FOLLOWUP_MOD', False)
|
|
|
|
# auto-subscribe user to ticket if (s)he responds to a ticket?
|
|
HELPDESK_AUTO_SUBSCRIBE_ON_TICKET_RESPONSE = getattr(settings,
|
|
'HELPDESK_AUTO_SUBSCRIBE_ON_TICKET_RESPONSE',
|
|
False)
|
|
|
|
# URL schemes that are allowed within links
|
|
ALLOWED_URL_SCHEMES = getattr(settings, 'ALLOWED_URL_SCHEMES', (
|
|
'file', 'ftp', 'ftps', 'http', 'https', 'irc', 'mailto', 'sftp', 'ssh', 'tel', 'telnet', 'tftp', 'vnc', 'xmpp',
|
|
))
|
|
|
|
# Ticket status choices
|
|
OPEN_STATUS = getattr(settings, 'HELPDESK_TICKET_OPEN_STATUS', 1)
|
|
REOPENED_STATUS = getattr(settings, 'HELPDESK_TICKET_REOPENED_STATUS', 2)
|
|
RESOLVED_STATUS = getattr(settings, 'HELPDESK_TICKET_RESOLVED_STATUS', 3)
|
|
CLOSED_STATUS = getattr(settings, 'HELPDESK_TICKET_CLOSED_STATUS', 4)
|
|
DUPLICATE_STATUS = getattr(settings, 'HELPDESK_TICKET_DUPLICATE_STATUS', 5)
|
|
|
|
DEFAULT_TICKET_STATUS_CHOICES = (
|
|
(OPEN_STATUS, _('Open')),
|
|
(REOPENED_STATUS, _('Reopened')),
|
|
(RESOLVED_STATUS, _('Resolved')),
|
|
(CLOSED_STATUS, _('Closed')),
|
|
(DUPLICATE_STATUS, _('Duplicate')),
|
|
)
|
|
TICKET_STATUS_CHOICES = getattr(settings,
|
|
'HELPDESK_TICKET_STATUS_CHOICES',
|
|
DEFAULT_TICKET_STATUS_CHOICES)
|
|
|
|
# List of status choices considered as "open"
|
|
DEFAULT_TICKET_OPEN_STATUSES = (OPEN_STATUS, REOPENED_STATUS)
|
|
TICKET_OPEN_STATUSES = getattr(settings,
|
|
'HELPDESK_TICKET_OPEN_STATUSES',
|
|
DEFAULT_TICKET_OPEN_STATUSES)
|
|
|
|
# New status list choices depending on current ticket status
|
|
DEFAULT_TICKET_STATUS_CHOICES_FLOW = {
|
|
OPEN_STATUS: (OPEN_STATUS, RESOLVED_STATUS, CLOSED_STATUS, DUPLICATE_STATUS,),
|
|
REOPENED_STATUS: (REOPENED_STATUS, RESOLVED_STATUS, CLOSED_STATUS, DUPLICATE_STATUS,),
|
|
RESOLVED_STATUS: (REOPENED_STATUS, RESOLVED_STATUS, CLOSED_STATUS,),
|
|
CLOSED_STATUS: (REOPENED_STATUS, CLOSED_STATUS,),
|
|
DUPLICATE_STATUS: (REOPENED_STATUS, DUPLICATE_STATUS,),
|
|
}
|
|
TICKET_STATUS_CHOICES_FLOW = getattr(settings,
|
|
'HELPDESK_TICKET_STATUS_CHOICES_FLOW',
|
|
DEFAULT_TICKET_STATUS_CHOICES_FLOW)
|
|
|
|
# Ticket priority choices
|
|
DEFAULT_TICKET_PRIORITY_CHOICES = (
|
|
(1, _('1. Critical')),
|
|
(2, _('2. High')),
|
|
(3, _('3. Normal')),
|
|
(4, _('4. Low')),
|
|
(5, _('5. Very Low')),
|
|
)
|
|
TICKET_PRIORITY_CHOICES = getattr(settings,
|
|
'HELPDESK_TICKET_PRIORITY_CHOICES',
|
|
DEFAULT_TICKET_PRIORITY_CHOICES)
|
|
|
|
|
|
#########################
|
|
# time tracking options #
|
|
#########################
|
|
|
|
# Follow-ups automatic time_spent calculation
|
|
FOLLOWUP_TIME_SPENT_AUTO = getattr(settings,
|
|
'HELPDESK_FOLLOWUP_TIME_SPENT_AUTO',
|
|
False)
|
|
|
|
# Calculate time_spent according to open hours
|
|
FOLLOWUP_TIME_SPENT_OPENING_HOURS = getattr(settings,
|
|
'HELPDESK_FOLLOWUP_TIME_SPENT_OPENING_HOURS',
|
|
{})
|
|
|
|
# Holidays don't count for time_spent calculation
|
|
FOLLOWUP_TIME_SPENT_EXCLUDE_HOLIDAYS = getattr(settings,
|
|
'HELPDESK_FOLLOWUP_TIME_SPENT_EXCLUDE_HOLIDAYS',
|
|
())
|
|
|
|
# Time doesn't count for listed ticket statuses
|
|
FOLLOWUP_TIME_SPENT_EXCLUDE_STATUSES = getattr(settings,
|
|
'HELPDESK_FOLLOWUP_TIME_SPENT_EXCLUDE_STATUSES',
|
|
())
|
|
|
|
# Time doesn't count for listed queues slugs
|
|
FOLLOWUP_TIME_SPENT_EXCLUDE_QUEUES = getattr(settings,
|
|
'HELPDESK_FOLLOWUP_TIME_SPENT_EXCLUDE_QUEUES',
|
|
())
|
|
|
|
############################
|
|
# options for public pages #
|
|
############################
|
|
|
|
# show 'view a ticket' section on public page?
|
|
HELPDESK_VIEW_A_TICKET_PUBLIC = getattr(
|
|
settings, 'HELPDESK_VIEW_A_TICKET_PUBLIC', True)
|
|
|
|
# show 'submit a ticket' section on public page?
|
|
HELPDESK_SUBMIT_A_TICKET_PUBLIC = getattr(
|
|
settings, 'HELPDESK_SUBMIT_A_TICKET_PUBLIC', True)
|
|
|
|
# change that to custom class to have extra fields or validation (like captcha)
|
|
HELPDESK_PUBLIC_TICKET_FORM_CLASS = getattr(
|
|
settings,
|
|
"HELPDESK_PUBLIC_TICKET_FORM_CLASS",
|
|
"helpdesk.forms.PublicTicketForm"
|
|
)
|
|
|
|
# Custom fields constants
|
|
CUSTOMFIELD_TO_FIELD_DICT = {
|
|
'boolean': forms.BooleanField,
|
|
'date': forms.DateField,
|
|
'time': forms.TimeField,
|
|
'datetime': forms.DateTimeField,
|
|
'email': forms.EmailField,
|
|
'url': forms.URLField,
|
|
'ipaddress': forms.GenericIPAddressField,
|
|
'slug': forms.SlugField,
|
|
}
|
|
CUSTOMFIELD_DATE_FORMAT = "%Y-%m-%d"
|
|
CUSTOMFIELD_TIME_FORMAT = "%H:%M:%S"
|
|
CUSTOMFIELD_DATETIME_FORMAT = f"{CUSTOMFIELD_DATE_FORMAT}T%H:%M"
|
|
|
|
|
|
###################################
|
|
# options for update_ticket views #
|
|
###################################
|
|
|
|
''' options for update_ticket views '''
|
|
# allow non-staff users to interact with tickets?
|
|
# can be True/False or a callable accepting the active user and returning
|
|
# True if they must be considered helpdesk staff
|
|
HELPDESK_ALLOW_NON_STAFF_TICKET_UPDATE = getattr(
|
|
settings, 'HELPDESK_ALLOW_NON_STAFF_TICKET_UPDATE', False)
|
|
if not (HELPDESK_ALLOW_NON_STAFF_TICKET_UPDATE in (True, False) or callable(HELPDESK_ALLOW_NON_STAFF_TICKET_UPDATE)):
|
|
warnings.warn(
|
|
"HELPDESK_ALLOW_NON_STAFF_TICKET_UPDATE should be set to either True/False or a callable.",
|
|
RuntimeWarning
|
|
)
|
|
|
|
# show edit buttons in ticket follow ups.
|
|
HELPDESK_SHOW_EDIT_BUTTON_FOLLOW_UP = getattr(settings,
|
|
'HELPDESK_SHOW_EDIT_BUTTON_FOLLOW_UP',
|
|
True)
|
|
|
|
# show delete buttons in ticket follow ups if user is 'superuser'
|
|
HELPDESK_SHOW_DELETE_BUTTON_SUPERUSER_FOLLOW_UP = getattr(
|
|
settings, 'HELPDESK_SHOW_DELETE_BUTTON_SUPERUSER_FOLLOW_UP', False)
|
|
|
|
# make all updates public by default? this will hide the 'is this update
|
|
# public' checkbox
|
|
HELPDESK_UPDATE_PUBLIC_DEFAULT = getattr(
|
|
settings, 'HELPDESK_UPDATE_PUBLIC_DEFAULT', False)
|
|
|
|
# only show staff users in ticket owner drop-downs
|
|
HELPDESK_STAFF_ONLY_TICKET_OWNERS = getattr(
|
|
settings, 'HELPDESK_STAFF_ONLY_TICKET_OWNERS', False)
|
|
|
|
# only show staff users in ticket cc drop-down
|
|
HELPDESK_STAFF_ONLY_TICKET_CC = getattr(
|
|
settings, 'HELPDESK_STAFF_ONLY_TICKET_CC', False)
|
|
|
|
# allow the subject to have a configurable template.
|
|
HELPDESK_EMAIL_SUBJECT_TEMPLATE = getattr(
|
|
settings, 'HELPDESK_EMAIL_SUBJECT_TEMPLATE',
|
|
"{{ ticket.ticket }} {{ ticket.title|safe }} %(subject)s")
|
|
# since django-helpdesk may not work correctly without the ticket ID
|
|
# in the subject, let's do a check for it quick:
|
|
if HELPDESK_EMAIL_SUBJECT_TEMPLATE.find("ticket.ticket") < 0:
|
|
raise ImproperlyConfigured
|
|
|
|
# default fallback locale when queue locale not found
|
|
HELPDESK_EMAIL_FALLBACK_LOCALE = getattr(
|
|
settings, 'HELPDESK_EMAIL_FALLBACK_LOCALE', 'en')
|
|
|
|
# default maximum email attachment size, in bytes
|
|
# only attachments smaller than this size will be sent via email
|
|
HELPDESK_MAX_EMAIL_ATTACHMENT_SIZE = getattr(
|
|
settings, 'HELPDESK_MAX_EMAIL_ATTACHMENT_SIZE', 512000)
|
|
|
|
|
|
########################################
|
|
# options for staff.create_ticket view #
|
|
########################################
|
|
|
|
# hide the 'assigned to' / 'Case owner' field from the 'create_ticket' view?
|
|
HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO = getattr(
|
|
settings, 'HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO', False)
|
|
|
|
|
|
#################
|
|
# email options #
|
|
#################
|
|
|
|
# default Queue email submission settings
|
|
QUEUE_EMAIL_BOX_TYPE = getattr(settings, 'QUEUE_EMAIL_BOX_TYPE', None)
|
|
QUEUE_EMAIL_BOX_SSL = getattr(settings, 'QUEUE_EMAIL_BOX_SSL', None)
|
|
QUEUE_EMAIL_BOX_HOST = getattr(settings, 'QUEUE_EMAIL_BOX_HOST', None)
|
|
QUEUE_EMAIL_BOX_USER = getattr(settings, 'QUEUE_EMAIL_BOX_USER', None)
|
|
QUEUE_EMAIL_BOX_PASSWORD = getattr(settings, 'QUEUE_EMAIL_BOX_PASSWORD', None)
|
|
|
|
# only process emails with a valid tracking ID? (throws away all other mail)
|
|
QUEUE_EMAIL_BOX_UPDATE_ONLY = getattr(
|
|
settings, 'QUEUE_EMAIL_BOX_UPDATE_ONLY', False)
|
|
|
|
# only allow users to access queues that they are members of?
|
|
HELPDESK_ENABLE_PER_QUEUE_STAFF_PERMISSION = getattr(
|
|
settings, 'HELPDESK_ENABLE_PER_QUEUE_STAFF_PERMISSION', False)
|
|
|
|
# use https in the email links
|
|
HELPDESK_USE_HTTPS_IN_EMAIL_LINK = getattr(
|
|
settings, 'HELPDESK_USE_HTTPS_IN_EMAIL_LINK', settings.SECURE_SSL_REDIRECT)
|
|
|
|
# Default to True for backwards compatibility
|
|
HELPDESK_TEAMS_MODE_ENABLED = getattr(settings, 'HELPDESK_TEAMS_MODE_ENABLED', True)
|
|
if HELPDESK_TEAMS_MODE_ENABLED:
|
|
HELPDESK_TEAMS_MODEL = getattr(
|
|
settings, 'HELPDESK_TEAMS_MODEL', 'pinax_teams.Team')
|
|
HELPDESK_TEAMS_MIGRATION_DEPENDENCIES = getattr(settings, 'HELPDESK_TEAMS_MIGRATION_DEPENDENCIES', [
|
|
('pinax_teams', '0004_auto_20170511_0856')])
|
|
HELPDESK_KBITEM_TEAM_GETTER = getattr(
|
|
settings, 'HELPDESK_KBITEM_TEAM_GETTER', lambda kbitem: kbitem.team)
|
|
else:
|
|
HELPDESK_TEAMS_MODEL = settings.AUTH_USER_MODEL
|
|
HELPDESK_TEAMS_MIGRATION_DEPENDENCIES = []
|
|
HELPDESK_KBITEM_TEAM_GETTER = lambda _: None
|
|
|
|
# show knowledgebase links?
|
|
# If Teams mode is enabled then it has to be on
|
|
HELPDESK_KB_ENABLED = True if HELPDESK_TEAMS_MODE_ENABLED else getattr(settings, 'HELPDESK_KB_ENABLED', True)
|
|
|
|
# Include all signatures and forwards in the first ticket message if set
|
|
# Useful if you get forwards dropped from them while they are useful part
|
|
# of request
|
|
HELPDESK_FULL_FIRST_MESSAGE_FROM_EMAIL = getattr(
|
|
settings, 'HELPDESK_FULL_FIRST_MESSAGE_FROM_EMAIL', False)
|
|
|
|
# If set then we always save incoming emails as .eml attachments
|
|
# which is quite noisy but very helpful for complicated markup, forwards and so on
|
|
# (which gets stripped/corrupted otherwise)
|
|
HELPDESK_ALWAYS_SAVE_INCOMING_EMAIL_MESSAGE = getattr(
|
|
settings, "HELPDESK_ALWAYS_SAVE_INCOMING_EMAIL_MESSAGE", False)
|
|
|
|
#######################
|
|
# email OAUTH #
|
|
#######################
|
|
|
|
HELPDESK_OAUTH = getattr(
|
|
settings, 'HELPDESK_OAUTH', {
|
|
"token_url": "",
|
|
"client_id": "",
|
|
"secret": "",
|
|
"scope": [""]
|
|
}
|
|
)
|
|
|
|
# Set Debug Logging Level for IMAP Services. Default to '0' for No Debugging
|
|
HELPDESK_IMAP_DEBUG_LEVEL = getattr(settings, 'HELPDESK_IMAP_DEBUG_LEVEL', 0)
|
|
|
|
#############################################
|
|
# file permissions - Attachment directories #
|
|
#############################################
|
|
|
|
# Attachment directories should be created with permission 755 (rwxr-xr-x)
|
|
# Override it in your own Django settings.py
|
|
HELPDESK_ATTACHMENT_DIR_PERMS = int(getattr(settings, 'HELPDESK_ATTACHMENT_DIR_PERMS', "755"), 8)
|
|
|
|
HELPDESK_VALID_EXTENSIONS = getattr(settings, 'VALID_EXTENSIONS', None)
|
|
if HELPDESK_VALID_EXTENSIONS:
|
|
# Print to stderr
|
|
print("VALID_EXTENSIONS is deprecated, use HELPDESK_VALID_EXTENSIONS instead", file=sys.stderr)
|
|
else:
|
|
HELPDESK_VALID_EXTENSIONS = getattr(settings, 'HELPDESK_VALID_EXTENSIONS', ['.txt', '.asc', '.htm', '.html', '.pdf', '.doc', '.docx', '.odt', '.jpg', '.png', '.eml'])
|
|
|
|
HELPDESK_VALIDATE_ATTACHMENT_TYPES = getattr(settings, 'HELPDESK_VALIDATE_ATTACHMENT_TYPES', True)
|
|
|
|
def get_followup_webhook_urls():
|
|
urls = os.environ.get('HELPDESK_FOLLOWUP_WEBHOOK_URLS', None)
|
|
if urls:
|
|
return re.split(r'[\s],[\s]', urls)
|
|
|
|
HELPDESK_GET_FOLLOWUP_WEBHOOK_URLS = getattr(settings, 'HELPDESK_GET_FOLLOWUP_WEBHOOK_URLS', get_followup_webhook_urls)
|
|
|
|
def get_new_ticket_webhook_urls():
|
|
urls = os.environ.get('HELPDESK_NEW_TICKET_WEBHOOK_URLS', None)
|
|
if urls:
|
|
return urls.split(',')
|
|
|
|
HELPDESK_GET_NEW_TICKET_WEBHOOK_URLS = getattr(settings, 'HELPDESK_GET_NEW_TICKET_WEBHOOK_URLS', get_new_ticket_webhook_urls)
|
|
|
|
HELPDESK_WEBHOOK_TIMEOUT = getattr(settings, 'HELPDESK_WEBHOOK_TIMEOUT', 3)
|