"""
Django settings for django_airavata_gateway project.

Generated by 'django-admin startproject' using Django 1.10.5.

For more information on this file, see
https://docs.djangoproject.com/en/1.10/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.10/ref/settings/
"""

import os
import sys

from airavata_django_portal_commons import dynamic_apps

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'bots0)m91u_i4gpw+103o%2jn#j57wjh7s@9$x*27_4^*jyku4'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
INTERNAL_IPS = ["127.0.0.1"]

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = [
    'django_airavata.apps.admin.apps.AdminConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_airavata.apps.auth.apps.AuthConfig',
    'django_airavata.apps.workspace.apps.WorkspaceConfig',
    'rest_framework',
    'django_airavata.apps.api.apps.ApiConfig',
    'django_airavata.apps.groups.apps.GroupsConfig',
    'django_airavata.apps.dataparsers.apps.DataParsersConfig',
    'django.contrib.humanize',

    # wagtail related apps
    'wagtail.contrib.forms',
    'wagtail.contrib.redirects',
    'wagtail.embeds',
    'wagtail.sites',
    'wagtail.users',
    'wagtail.snippets',
    'wagtail.documents',
    'wagtail.images',
    'wagtail.search',
    'wagtail.admin',
    'wagtail.core',
    'wagtail.contrib.styleguide',

    # wagtail third party dependencies
    'modelcluster',
    'taggit',
    'wagtailfontawesome',
    'wagtail_draftail_anchors',
    'wagtailcodeblock',

    # wagtail custom apps
    'django_airavata.wagtailapps.base.apps.BaseConfig',

    # django-webpack-loader
    'webpack_loader',

    # Airavata Django Portal SDK
    'airavata_django_portal_sdk',
]

# List of app labels for Airavata apps that should be hidden from menus
# For example: HIDDEN_AIRAVATA_APPS = ['django_airavata_dataparsers']
HIDDEN_AIRAVATA_APPS = []

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django_airavata.apps.auth.middleware.authz_token_middleware',
    'django_airavata.middleware.AiravataClientMiddleware',
    'django_airavata.middleware.profile_service_client',
    # Needs to come after authz_token_middleware, airavata_client and
    # profile_service_client
    'django_airavata.apps.auth.middleware.gateway_groups_middleware',
    # Wagtail related middleware
    'wagtail.contrib.redirects.middleware.RedirectMiddleware',
    'django_airavata.apps.auth.middleware.user_profile_completeness_check',
]

ROOT_URLCONF = 'django_airavata.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "django_airavata", "templates")],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django_airavata.context_processors.airavata_app_registry',
                'airavata_django_portal_commons.dynamic_apps.context_processors.custom_app_registry',
                'django_airavata.context_processors.get_notifications',
                'django_airavata.context_processors.user_session_data',
                'django_airavata.context_processors.google_analytics_tracking_id',
            ],
        },
    },
]

WSGI_APPLICATION = 'django_airavata.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'


# Password validation
# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/1.10/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, "django_airavata", "static")]

# Media Files (PDF, Documents, Custom Images)
MEDIA_ROOT = os.path.join(BASE_DIR, "django_airavata", "media")
MEDIA_URL = '/media/'

# Data storage
FILE_UPLOAD_DIRECTORY_PERMISSIONS = 0o777
FILE_UPLOAD_PERMISSIONS = 0o644
FILE_UPLOAD_MAX_FILE_SIZE = 64 * 1024 * 1024  # 64 MB
FILE_UPLOAD_HANDLERS = [
    'django.core.files.uploadhandler.MemoryFileUploadHandler',
    'django_airavata.uploadhandler.MaxFileSizeTemporaryFileUploadHandler',
]

# Tus upload
# Override and set to a valid tus endpoint, for example
# "http://localhost:1080/files/"
TUS_ENDPOINT = None
# Override and set to the directory where tus uploads will be stored
TUS_DATA_DIR = None

# Max age in days after which archive_user_data will archive user data
GATEWAY_USER_DATA_ARCHIVE_MAX_AGE_DAYS = None
# Directory in which to copy archive text listing file and tarball
GATEWAY_USER_DATA_ARCHIVE_DIRECTORY = "/tmp"
# Minimum size of archive file. If archive is smaller than this, the archive is aborted.
GATEWAY_USER_DATA_ARCHIVE_MINIMUM_ARCHIVE_SIZE_GB = 1

# Legacy (PGA) Portal link - provide a link to the legacy portal
PGA_URL = None

# Django REST Framework configuration
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'django_airavata.apps.api.authentication.OAuthAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'EXCEPTION_HANDLER':
        'django_airavata.apps.api.exceptions.custom_exception_handler',
    'TEST_REQUEST_DEFAULT_FORMAT': 'json',
    # Force inclusion of fractional seconds (default formatting with
    # datetime.isoformat only includes fractional seconds if non-zero)
    'DATETIME_FORMAT': "%Y-%m-%dT%H:%M:%S.%fZ",
}

AUTHENTICATION_BACKENDS = [
    'django_airavata.apps.auth.backends.KeycloakBackend'
]

# Default email backend (for local development)
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

# Wagtail related stuff
WAGTAIL_SITE_NAME = 'Django Airavata Portal'

WAGTAILIMAGES_JPEG_QUALITY = 100

# For some long wagtail pages, the number of POST parameters exceeds 1000,
# which is the default for DATA_UPLOAD_MAX_NUMBER_FIELDS
DATA_UPLOAD_MAX_NUMBER_FIELDS = 10000

LOGIN_URL = 'django_airavata_auth:login'
LOGIN_REDIRECT_URL = 'django_airavata_workspace:dashboard'
LOGOUT_REDIRECT_URL = '/'

AUTHENTICATION_OPTIONS = {
    # Control whether username/password authentication is allowed
    'password': {
        'name': 'your account',
        # Static path to image
        # 'logo': '/static/path/to/image'
    },
    # Can have multiple external logins
    # 'external': [
    #     {
    #         'idp_alias': 'cilogon',
    #         'name': 'CILogon',
    #         # Static path to image
    #         'logo': 'path/to/image'
    #     }
    # ]
}

# Configure the URIs that can be redirected to with /auth/access-token-redirect?redirect_uri=...
# Takes a list of dicts, where the key 'URI' specifies the allowed redirect URI
# and the optional key 'PARAM_NAME' allows specifying the query parameter name
# for the access token parameter (defaults to 'access_token').
ACCESS_TOKEN_REDIRECT_ALLOWED_URIS = []

# Seconds each connection in the pool is able to stay alive. If open connection
# has lived longer than this period, it will be closed.
# (https://github.com/Thriftpy/thrift_connector)
THRIFT_CLIENT_POOL_KEEPALIVE = 5

# Webpack loader
WEBPACK_LOADER = {
    'COMMON': {
        'BUNDLE_DIR_NAME': 'common/dist/',
        'STATS_FILE': os.path.join(
            BASE_DIR,
            'django_airavata',
            'static',
            'common',
            'dist',
            'webpack-stats.json'),
        'TIMEOUT': 60,
    },
    'ADMIN': {
        'BUNDLE_DIR_NAME': 'django_airavata_admin/dist/',
        'STATS_FILE': os.path.join(
            BASE_DIR,
            'django_airavata',
            'apps',
            'admin',
            'static',
            'django_airavata_admin',
            'dist',
            'webpack-stats.json'),
        'TIMEOUT': 60,
    },
    'AUTH': {
        'BUNDLE_DIR_NAME': 'django_airavata_auth/dist/',
        'STATS_FILE': os.path.join(
            BASE_DIR,
            'django_airavata',
            'apps',
            'auth',
            'static',
            'django_airavata_auth',
            'dist',
            'webpack-stats.json'),
    },
    'DATAPARSERS': {
        'BUNDLE_DIR_NAME': 'django_airavata_dataparsers/dist/',
        'STATS_FILE': os.path.join(
            BASE_DIR,
            'django_airavata',
            'apps',
            'dataparsers',
            'static',
            'django_airavata_dataparsers',
            'dist',
            'webpack-stats.json'),
        'TIMEOUT': 60,
    },
    'GROUPS': {
        'BUNDLE_DIR_NAME': 'django_airavata_groups/dist/',
        'STATS_FILE': os.path.join(
            BASE_DIR,
            'django_airavata',
            'apps',
            'groups',
            'static',
            'django_airavata_groups',
            'dist',
            'webpack-stats.json'),
        'TIMEOUT': 60,
    },
    'WORKSPACE': {
        'BUNDLE_DIR_NAME': 'django_airavata_workspace/dist/',
        'STATS_FILE': os.path.join(
            BASE_DIR,
            'django_airavata',
            'apps',
            'workspace',
            'static',
            'django_airavata_workspace',
            'dist',
            'webpack-stats.json'),
        'TIMEOUT': 60,
    },
}

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'formatters': {
        'verbose': {
            'format': '[%(asctime)s %(name)s:%(lineno)d %(levelname)s] %(message)s',
        },
        'verbose-safe': {
            '()': 'anticrlf.LogFormatter',
            'format': '[%(asctime)s %(name)s:%(lineno)d %(levelname)s] %(message)s',
        },
    },
    'handlers': {
        # Log everything to the console when DEBUG=True
        'console_debug': {
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        },
        # Only log INFO and higher levels to console when DEBUG=False
        'console': {
            'filters': ['require_debug_false'],
            'class': 'logging.StreamHandler',
            'formatter': 'verbose-safe',
            'level': 'INFO'
        },
        'mail_admins': {
            'filters': ['require_debug_false'],
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            'include_html': True,
        }
    },
    'loggers': {
        'django_airavata': {
            'handlers': ['console', 'console_debug', 'mail_admins'],
            'level': 'DEBUG'
        },
        'root': {
            'handlers': ['console', 'console_debug'],
            'level': 'WARNING'
        }
    },
}

# wagtailcodeblock theme and languages
WAGTAIL_CODE_BLOCK_THEME = None
WAGTAIL_CODE_BLOCK_LANGUAGES = (
    ('abap', 'ABAP'),
    ('abnf', 'Augmented Backus–Naur form'),
    ('actionscript', 'ActionScript'),
    ('ada', 'Ada'),
    ('antlr4', 'ANTLR4'),
    ('apacheconf', 'Apache Configuration'),
    ('apl', 'APL'),
    ('applescript', 'AppleScript'),
    ('aql', 'AQL'),
    ('arduino', 'Arduino'),
    ('arff', 'ARFF'),
    ('asciidoc', 'AsciiDoc'),
    ('asm6502', '6502 Assembly'),
    ('aspnet', 'ASP.NET (C#)'),
    ('autohotkey', 'AutoHotkey'),
    ('autoit', 'AutoIt'),
    ('bash', 'Bash + Shell'),
    ('basic', 'BASIC'),
    ('batch', 'Batch'),
    ('bison', 'Bison'),
    ('bnf', 'Backus–Naur form + Routing Backus–Naur form'),
    ('brainfuck', 'Brainfuck'),
    ('bro', 'Bro'),
    ('c', 'C'),
    ('clike', 'C-like'),
    ('cmake', 'CMake'),
    ('csharp', 'C#'),
    ('cpp', 'C++'),
    ('cil', 'CIL'),
    ('coffeescript', 'CoffeeScript'),
    ('clojure', 'Clojure'),
    ('crystal', 'Crystal'),
    ('csp', 'Content-Security-Policy'),
    ('css', 'CSS'),
    ('css-extras', 'CSS Extras'),
    ('d', 'D'),
    ('dart', 'Dart'),
    ('diff', 'Diff'),
    ('django', 'Django/Jinja2'),
    ('dns-zone-file', 'DNS Zone File'),
    ('docker', 'Docker'),
    ('ebnf', 'Extended Backus–Naur form'),
    ('eiffel', 'Eiffel'),
    ('ejs', 'EJS'),
    ('elixir', 'Elixir'),
    ('elm', 'Elm'),
    ('erb', 'ERB'),
    ('erlang', 'Erlang'),
    ('etlua', 'Embedded LUA Templating'),
    ('fsharp', 'F#'),
    ('flow', 'Flow'),
    ('fortran', 'Fortran'),
    ('ftl', 'Freemarker Template Language'),
    ('gcode', 'G-code'),
    ('gdscript', 'GDScript'),
    ('gedcom', 'GEDCOM'),
    ('gherkin', 'Gherkin'),
    ('git', 'Git'),
    ('glsl', 'GLSL'),
    ('gml', 'GameMaker Language'),
    ('go', 'Go'),
    ('graphql', 'GraphQL'),
    ('groovy', 'Groovy'),
    ('haml', 'Haml'),
    ('handlebars', 'Handlebars'),
    ('haskell', 'Haskell'),
    ('haxe', 'Haxe'),
    ('hcl', 'HCL'),
    ('http', 'HTTP'),
    ('hpkp', 'HTTP Public-Key-Pins'),
    ('hsts', 'HTTP Strict-Transport-Security'),
    ('ichigojam', 'IchigoJam'),
    ('icon', 'Icon'),
    ('inform7', 'Inform 7'),
    ('ini', 'Ini'),
    ('io', 'Io'),
    ('j', 'J'),
    ('java', 'Java'),
    ('javadoc', 'JavaDoc'),
    ('javadoclike', 'JavaDoc-like'),
    ('javascript', 'JavaScript'),
    ('javastacktrace', 'Java stack trace'),
    ('jolie', 'Jolie'),
    ('jq', 'JQ'),
    ('jsdoc', 'JSDoc'),
    ('js-extras', 'JS Extras'),
    ('js-templates', 'JS Templates'),
    ('json', 'JSON'),
    ('jsonp', 'JSONP'),
    ('json5', 'JSON5'),
    ('julia', 'Julia'),
    ('keyman', 'Keyman'),
    ('kotlin', 'Kotlin'),
    ('latex', 'LaTeX'),
    ('less', 'Less'),
    ('lilypond', 'Lilypond'),
    ('liquid', 'Liquid'),
    ('lisp', 'Lisp'),
    ('livescript', 'LiveScript'),
    ('lolcode', 'LOLCODE'),
    ('lua', 'Lua'),
    ('makefile', 'Makefile'),
    ('markdown', 'Markdown'),
    ('markup', 'Markup + HTML + XML + SVG + MathML'),
    ('markup-templating', 'Markup templating'),
    ('matlab', 'MATLAB'),
    ('mel', 'MEL'),
    ('mizar', 'Mizar'),
    ('monkey', 'Monkey'),
    ('n1ql', 'N1QL'),
    ('n4js', 'N4JS'),
    ('nand2tetris-hdl', 'Nand To Tetris HDL'),
    ('nasm', 'NASM'),
    ('nginx', 'nginx'),
    ('nim', 'Nim'),
    ('nix', 'Nix'),
    ('nsis', 'NSIS'),
    ('objectivec', 'Objective-C'),
    ('ocaml', 'OCaml'),
    ('opencl', 'OpenCL'),
    ('oz', 'Oz'),
    ('parigp', 'PARI/GP'),
    ('parser', 'Parser'),
    ('pascal', 'Pascal + Object Pascal'),
    ('pascaligo', 'Pascaligo'),
    ('pcaxis', 'PC Axis'),
    ('perl', 'Perl'),
    ('php', 'PHP'),
    ('phpdoc', 'PHPDoc'),
    ('php-extras', 'PHP Extras'),
    ('plsql', 'PL/SQL'),
    ('powershell', 'PowerShell'),
    ('processing', 'Processing'),
    ('prolog', 'Prolog'),
    ('properties', '.properties'),
    ('protobuf', 'Protocol Buffers'),
    ('pug', 'Pug'),
    ('puppet', 'Puppet'),
    ('pure', 'Pure'),
    ('python', 'Python'),
    ('q', 'Q (kdb+ database)'),
    ('qore', 'Qore'),
    ('r', 'R'),
    ('jsx', 'React JSX'),
    ('tsx', 'React TSX'),
    ('renpy', 'Ren\'py'),
    ('reason', 'Reason'),
    ('regex', 'Regex'),
    ('rest', 'reST (reStructuredText)'),
    ('rip', 'Rip'),
    ('roboconf', 'Roboconf'),
    ('robot-framework', 'Robot Framework'),
    ('ruby', 'Ruby'),
    ('rust', 'Rust'),
    ('sas', 'SAS'),
    ('sass', 'Sass (Sass)'),
    ('scss', 'Sass (Scss)'),
    ('scala', 'Scala'),
    ('scheme', 'Scheme'),
    ('shell-session', 'Shell Session'),
    ('smalltalk', 'Smalltalk'),
    ('smarty', 'Smarty'),
    ('solidity', 'Solidity (Ethereum)'),
    ('sparql', 'SPARQL'),
    ('splunk-spl', 'Splunk SPL'),
    ('sqf', 'SQF: Status Quo Function (Arma 3)'),
    ('sql', 'SQL'),
    ('soy', 'Soy (Closure Template)'),
    ('stylus', 'Stylus'),
    ('swift', 'Swift'),
    ('tap', 'TAP'),
    ('tcl', 'Tcl'),
    ('textile', 'Textile'),
    ('toml', 'TOML'),
    ('tt2', 'Template Toolkit 2'),
    ('twig', 'Twig'),
    ('typescript', 'TypeScript'),
    ('t4-cs', 'T4 Text Templates (C#)'),
    ('t4-vb', 'T4 Text Templates (VB)'),
    ('t4-templating', 'T4 templating'),
    ('vala', 'Vala'),
    ('vbnet', 'VB.Net'),
    ('velocity', 'Velocity'),
    ('verilog', 'Verilog'),
    ('vhdl', 'VHDL'),
    ('vim', 'vim'),
    ('visual-basic', 'Visual Basic'),
    ('wasm', 'WebAssembly'),
    ('wiki', 'Wiki markup'),
    ('xeora', 'Xeora + XeoraCube'),
    ('xojo', 'Xojo (REALbasic)'),
    ('xquery', 'XQuery'),
    ('yaml', 'YAML'),
    ('zig', 'Zig'),
)


# Allow all settings to be overridden by settings_local.py file
try:
    from django_airavata.settings_local import *  # noqa
except ImportError:
    pass

# NOTE: custom code must be loaded last so that the above settings take effect
# for any views, etc. defined or imported by custom code

# Add any custom apps installed in the virtual environment

# Essentially this looks for the entry_points metadata in all installed Python packages. The format of the metadata in setup.py is the following:
#
#    setuptools.setup(
#        ...
#        entry_points="""
#    [airavata.djangoapp]
#    dynamic_djangoapp = dynamic_djangoapp.apps:DynamicDjangoAppConfig
#    """,
#        ...
#    )
#
dynamic_apps.load(INSTALLED_APPS, "airavata.djangoapp")

# Merge WEBPACK_LOADER settings from custom Django apps
settings_module = sys.modules[__name__]
dynamic_apps.merge_settings(settings_module)
