# Copyright 2015 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Django settings for cq_stats project

TODO(pprabhu): These settings should be instead stored in the app local DB that
AE provides.
It's probably safer that way (no settings in source), and it's easier to manage
the instance from the AE admin interface than having to update source and
relaunch.
"""

from __future__ import print_function

import os


def _IsOnAppEngine():
  return os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine')


def _AssertFileExists(path):
  assert os.path.isfile(path), '%s must exist on %s' % (
      path,
      'deployed app' if _IsOnAppEngine() else 'local dev_appserver')


if _IsOnAppEngine():
  # Import into our namespace. This only contains auto-generated constants.
  # It only exists on the deployed app.
  # pylint: disable=no-name-in-module
  # pylint: disable=import-error
  # pylint: disable=wildcard-import
  from cq_stats.deploy_settings import *
else:
  # All the settings that would be defined by deploy_settings.
  DEBUG = True
  TEMPLATE_DEBUG = True
  SECRET_KEY = 'PLACEHOLDER_NON_KEY'
  CIDB_PROJECT_NAME = 'cosmic-strategy-646'
  CIDB_INSTANCE_NAME = 'debug-cidb'

# ##############################################################################
# DEPLOY OVERRIDES
# Some settings are autogenerated by the deploy script.
# If you want to override any of them, just define them here after the generated
# module has been imported.
#
# The most common case. When something goes wrong only after deploy.
# DEBUG = True
# TEMPLATE_DEBUG = True
# ##############################################################################

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
PROJECT_NAME = os.path.basename(os.path.dirname(__file__))
PROJECT_DIR = os.path.join(BASE_DIR, PROJECT_NAME)
# dev_appserver.py doesn't pass in any environment variables, so you *must*
# create this symlink yourself. :(
# These credentials must be for the 'annotator' cidb user for the debug
# instance of cidb. See go/cros-cidb-admin
CIDB_CREDS_DIR = os.path.join(BASE_DIR, 'annotator_cidb_creds')

ANNOTATOR_PASSWORD_PATH = os.path.join(CIDB_CREDS_DIR, 'password.txt')
_AssertFileExists(ANNOTATOR_PASSWORD_PATH)
with open(ANNOTATOR_PASSWORD_PATH, 'r') as f:
  annotator_password = f.read().strip()

if not _IsOnAppEngine():
  CIDB_HOST_PATH = os.path.join(CIDB_CREDS_DIR, 'host.txt')
  CIDB_SERVER_CA_PATH = os.path.join(CIDB_CREDS_DIR, 'server-ca.pem')
  CIDB_CLIENT_CERT_PATH = os.path.join(CIDB_CREDS_DIR, 'client-cert.pem')
  CIDB_CLIENT_KEY_PATH = os.path.join(CIDB_CREDS_DIR, 'client-key.pem')
  _AssertFileExists(CIDB_HOST_PATH)
  _AssertFileExists(CIDB_SERVER_CA_PATH)
  _AssertFileExists(CIDB_CLIENT_CERT_PATH)
  _AssertFileExists(CIDB_CLIENT_KEY_PATH)
  with open(CIDB_HOST_PATH, 'r') as f:
    cidb_host = f.read().strip()

# Setup database map.
if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine'):
  # Running on production AppEngine. Use CloudSQL via unix socket.
  default_database = {
      'ENGINE': 'django.db.backends.mysql',
      'HOST': '/cloudsql/%s:%s' % (CIDB_PROJECT_NAME,
                                   CIDB_INSTANCE_NAME),
      'NAME': 'cidb',
      'USER': 'annotator',
      'PASSWORD': annotator_password}
else:
  default_database = {
      'ENGINE': 'django.db.backends.mysql',
      'HOST': cidb_host,
      'PORT': '3306',
      'NAME': 'cidb',
      'USER': 'annotator',
      'PASSWORD': annotator_password,
      'OPTIONS': {
          'ssl': {'ca': CIDB_SERVER_CA_PATH,
                  'cert': CIDB_CLIENT_CERT_PATH,
                  'key': CIDB_CLIENT_KEY_PATH}}}

DATABASES = {'default': default_database}

# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
ALLOWED_HOSTS = ['chromiumos-build-annotator.googleplex.com',
                 'chromiumos-build-annotator-dbg.googleplex.com']

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'America/Los_Angeles'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: '/var/www/example.com/media/'
MEDIA_ROOT = ''

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: 'http://example.com/media/', 'http://media.example.com/'
MEDIA_URL = ''

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' 'static/' subdirectories and in STATICFILES_DIRS.
# Example: '/var/www/example.com/static/'
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')

# URL prefix for static files.
# Example: 'http://example.com/static/', 'http://static.example.com/'
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like '/home/html/static' or 'C:/www/django/static'.
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    # 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# Make this unique, and don't share it with anybody.
# TODO(pprabhu): Add secret key to valentine, must be updated before pushing to
# prod.
SECRET_KEY = 'NotSoSecretKeyThatSomeOneDreamtUp'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
    # 'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = [
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    # 'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
if DEBUG:
  MIDDLEWARE_CLASSES.append('cq_stats.middleware.SqlPrintingMiddleware')
MIDDLEWARE_CLASSES = tuple(MIDDLEWARE_CLASSES)

ROOT_URLCONF = 'cq_stats.urls'

# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'cq_stats.wsgi.application'

TEMPLATE_DIRS = (
    # Put strings here, like '/home/html/django_templates' or
    # 'C:/www/django/templates'.
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

INSTALLED_APPS = (
    # 'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',

    # Apps in this project
    'build_annotations'
)

SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'

# (pprabhu): Cookie based sessions are temporary. They have various drawbacks,
# including a load time penalty if the size grows. OTOH, they are the easiest to
# bringup on AppEngine. Let's use these to get started.
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'

# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}
