class Config(object):
    """This is the basic configuration class for bepasty."""

    #: name of this site (put YOUR bepasty fqdn here)
    SITENAME = 'bepasty.example.org'

    #: Whether files are automatically locked after upload.
    #:
    #: If you want to require admin approval and manual unlocking for each
    #: uploaded file, set this to True.
    UPLOAD_LOCKED = False

    #: The site admin can set some maximum allowed file size he wants to
    #: accept here. This is the maximum size an uploaded file may have.
    MAX_ALLOWED_FILE_SIZE = 5 * 1000 * 1000 * 1000

    #: The maximum http request body size.
    #: This is an information given to rest api clients so they can adjust
    #: their chunk size accordingly.
    #:
    #: This needs to be in sync with (or at least not beyond) the web server
    #: settings:
    #: apache:  LimitRequestBody 1048576 # apache default is 0 (unlimited)
    #: nginx:  client_max_body_size 1m; # nginx default (== 1048576)
    MAX_BODY_SIZE = 1 * 1024 * 1024

    #: Setup maximum file sizes for specific content-types. If an item is
    #: beyond the limit set for its type, it will not be rendered, but just
    #: offered for download. Lookup within MAX_RENDER_SIZE is done by
    #: first-match and it is automatically sorted for longer content-type-
    #: prefixes first.
    #:
    #: Format of entries: content-type-prefix: max_size
    MAX_RENDER_SIZE = {
        # each list entry has 38 bytes, do not render > 1000 items
        'text/x-bepasty-list': 1000 * 38,
        # stuff rendered with syntax highlighting (expensive for server and
        # client) and also used for other text/* types as we use same code to
        # get a (non-highlighted) display with line numbers:
        'HIGHLIGHT_TYPES': 100 * 1000,
        # the in-browser pdf reader is sometimes rather slow and should
        # rather not be used for big PDFs:
        'application/pdf': 10 * 1000 * 1000,
        'application/x-pdf': 10 * 1000 * 1000,
        # images / audio / video can be rather big, we do not process them:
        'image/': 10 * 1000 * 1000,
        'audio/': 1 * 1000 * 1000 * 1000,
        'video/': 5 * 1000 * 1000 * 1000,
        # DEFAULT - matches everything not matched otherwise.
        # As we have catched everything we are able to render already,
        # this maybe should be a medium size, just for the case we forget
        # something:
        '': 1 * 1000 * 1000,
    }

    #: Define storage backend, choose from:
    #:
    #: - 'filesystem'
    #:
    STORAGE = 'filesystem'

    #: Filesystem storage path
    STORAGE_FILESYSTEM_DIRECTORY = '/tmp/'

    #: server secret key needed for safe session cookies.
    #: you must set a very long, very random, very secret string here,
    #: otherwise bepasty will not work (and crash when trying to log in)!
    SECRET_KEY = ''

    #: transmit cookie only over https (if you use http, set this to False)
    SESSION_COOKIE_SECURE = True
    #: use a permanent session (True, cookie will expire after the given
    #: time, see below) or not (False, cookie will get removed when browser
    #: is closed)
    PERMANENT_SESSION = False
    #: lifetime of the permanent session (in seconds)
    PERMANENT_SESSION_LIFETIME = 31 * 24 * 3600

    #: not-logged-in users get these permissions -
    #: usually they are either no permissions ('') or read-only ('read').
    DEFAULT_PERMISSIONS = ''

    #: logged-in users may get more permissions.
    #: a user may have a login secret to log in and, depending on that secret,
    #: he/she will get the permissions configured here.
    #:
    #: you can use same secret / same permissions for all privileged users or
    #: set up different secrets / different permissions for each user.
    #:
    #: PERMISSIONS is a dict that maps secrets to permissions, use it like:
    #:
    #: ::
    #:
    #:     PERMISSIONS = {
    #:         'myadminsecret': 'admin,list,create,read,delete',
    #:         'uploadersecret': 'create,read',
    #:     }
    PERMISSIONS = {
        # 'foo': 'admin,list,create,read,delete',
    }
