todolist.settings   A
last analyzed

Complexity

Total Complexity 0

Size/Duplication

Total Lines 178
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 0
eloc 99
dl 0
loc 178
rs 10
c 0
b 0
f 0
1
import os
2
from pathlib import Path
3
from envparse import env
4
5
6
# Build paths inside the project like this: BASE_DIR / 'subdir'.
7
BASE_DIR = Path(__file__).resolve().parent.parent
8
ENV_PATH = BASE_DIR.resolve().parent.joinpath('.env')
9
10
if ENV_PATH.exists() and ENV_PATH.is_file():
11
    env.read_envfile(ENV_PATH)
12
13
DEBUG = env.bool('DJANGO_DEBUG', default=True)
14
15
ALLOWED_HOSTS = [] if DEBUG else ['lesnikov-a.ga', '127.0.0.1']
16
17
# CSRF
18
CSRF_TRUSTED_ORIGINS = [
19
    'https://lesnikov-a.ga',
20
]
21
CSRF_COOKIE_SECURE = True
22
SECRET_KEY = env.str('DJANGO_SK', default='django-insecure-=d8jd(tfuzv35t*exjkikyt7*5z^%=hr53443mj3(da&q!yibo')
23
24
# CORS
25
CORS_ALLOWED_ORIGINS = [
26
    'https://lesnikov-a.ga',
27
    'http://localhost',
28
]
29
30
SESSION_COOKIE_SECURE = True
31
32
# Application definition
33
34
INSTALLED_APPS = [
35
    'django.contrib.admin',
36
    'django.contrib.auth',
37
    'django.contrib.contenttypes',
38
    'django.contrib.sessions',
39
    'django.contrib.messages',
40
    'django.contrib.staticfiles',
41
    'rest_framework',
42
    'social_django',
43
    'django_filters',
44
    'corsheaders',
45
46
    # Local
47
    'core.apps.CoreConfig',
48
    'goals.apps.GoalsConfig',
49
    'bot.apps.BotConfig',
50
]
51
52
MIDDLEWARE = [
53
    'django.middleware.security.SecurityMiddleware',
54
    'django.contrib.sessions.middleware.SessionMiddleware',
55
    'corsheaders.middleware.CorsMiddleware',
56
    'django.middleware.common.CommonMiddleware',
57
    'django.middleware.csrf.CsrfViewMiddleware',
58
    'django.contrib.auth.middleware.AuthenticationMiddleware',
59
    'django.contrib.messages.middleware.MessageMiddleware',
60
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
61
]
62
63
ROOT_URLCONF = 'todolist.urls'
64
65
TEMPLATES = [
66
    {
67
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
68
        'DIRS': [],
69
        'APP_DIRS': True,
70
        'OPTIONS': {
71
            'context_processors': [
72
                'django.template.context_processors.debug',
73
                'django.template.context_processors.request',
74
                'django.contrib.auth.context_processors.auth',
75
                'django.contrib.messages.context_processors.messages',
76
            ],
77
        },
78
    },
79
]
80
81
WSGI_APPLICATION = 'todolist.wsgi.application'
82
83
84
# Database
85
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
86
87
DATABASES = {
88
    'default': {
89
        'ENGINE': 'django.db.backends.postgresql',
90
        'NAME': env.str('DB_NAME'),
91
        'USER': env.str('DB_USER'),
92
        'PASSWORD': env.str('DB_PASSWORD'),
93
        'HOST': env.str('DB_HOST'),
94
        'PORT': '5432',
95
    }
96
}
97
98
99
# Password validation
100
# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators
101
102
AUTH_PASSWORD_VALIDATORS = [
103
    {
104
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
105
    },
106
    {
107
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
108
    },
109
    {
110
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
111
    },
112
    {
113
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
114
    },
115
]
116
117
118
# Internationalization
119
# https://docs.djangoproject.com/en/4.1/topics/i18n/
120
121
LANGUAGE_CODE = 'en-us'
122
123
TIME_ZONE = 'UTC'
124
125
USE_I18N = True
126
127
USE_TZ = True
128
129
130
# Static files (CSS, JavaScript, Images)
131
# https://docs.djangoproject.com/en/4.1/howto/static-files/
132
133
STATIC_URL = 'static/'
134
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
135
136
# Default primary key field type
137
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field
138
139
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
140
141
AUTH_USER_MODEL = 'core.User'
142
143
SOCIAL_AUTH_VK_OAUTH2_KEY = env.str('VK_OAUTH2_KEY')
144
SOCIAL_AUTH_VK_OAUTH2_SECRET = env.str('VK_OAUTH2_SECRET')
145
SOCIAL_AUTH_VK_OAUTH2_SCOPE = ['email']
146
SOCIAL_AUTH_VK_EXTRA_DATA = [
147
    ('email', 'email'),
148
]
149
SOCIAL_AUTH_URL_NAMESPACE = 'social'
150
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/'
151
SOCIAL_AUTH_LOGIN_ERROR_URL = '/login-error/'
152
SOCIAL_AUTH_NEW_USER_REDIRECT_URL = '/logged-in/'
153
SOCIAL_AUTH_USER_MODEL = 'core.User'
154
AUTHENTICATION_BACKENDS = (
155
    'social_core.backends.vk.VKOAuth2',
156
    'django.contrib.auth.backends.ModelBackend',
157
)
158
159
REST_FRAMEWORK = {
160
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
161
    'DATETIME_FORMAT': '%Y-%m-%d %H:%M:%S',
162
}
163
164
if DEBUG:
165
    import socket
166
167
    hostname, _, ips = socket.gethostbyname_ex(socket.gethostname())
168
169
    INSTALLED_APPS += [
170
        'debug_toolbar',
171
    ]
172
    MIDDLEWARE += [
173
        'debug_toolbar.middleware.DebugToolbarMiddleware',
174
    ]
175
    INTERNAL_IPS = [ip[: ip.rfind(".")] + ".1" for ip in ips] + ["127.0.0.1", "10.0.2.2"]
176
177
TG_TOKEN = env.str('TG_TOKEN')
178