|
13 | 13 | import os
|
14 | 14 | from pathlib import Path
|
15 | 15 |
|
| 16 | +import environ |
| 17 | + |
16 | 18 |
|
17 | 19 | # Build paths inside the project like this: BASE_DIR / 'subdir'.
|
18 | 20 | BASE_DIR = Path(__file__).resolve().parent.parent
|
19 | 21 |
|
| 22 | +env = environ.FileAwareEnv( |
| 23 | + DEBUG=(bool, True), |
| 24 | + ALLOWED_HOSTS=(list, []), |
| 25 | + DATABASE_URL=(str, "sqlite:///db.sqlite3"), |
| 26 | + SECRET_KEY=(str, "django-insecure-vri27@j_q62e2it4$xiy9ca!7@qgjkhhan(*zs&lz0k@yukbb3"), |
| 27 | + OAUTH2_PROVIDER_OIDC_ENABLED=(bool, True), |
| 28 | + OAUTH2_PROVIDER_OIDC_RP_INITIATED_LOGOUT_ENABLED=(bool, True), |
| 29 | + OAUTH2_PROVIDER_OIDC_RSA_PRIVATE_KEY=( |
| 30 | + str, |
| 31 | + """ |
| 32 | +-----BEGIN RSA PRIVATE KEY----- |
| 33 | +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 |
| 82 | +-----END RSA PRIVATE KEY----- |
| 83 | +""", |
| 84 | + ), |
| 85 | + OAUTH2_PROVIDER_SCOPES=(dict, {"openid": "OpenID Connect scope"}), |
| 86 | + OAUTH2_PROVIDER_ALLOWED_SCHEMES=(list, ["https", "http"]), |
| 87 | + OAUTHLIB_INSECURE_TRANSPORT=(bool, "1"), |
| 88 | + STATIC_ROOT=(str, BASE_DIR / "static"), |
| 89 | + STATIC_URL=(str, "static/"), |
| 90 | + TEMPLATES_DIRS=(list, [BASE_DIR / "templates"]), |
| 91 | +) |
20 | 92 |
|
21 | 93 | # Quick-start development settings - unsuitable for production
|
22 | 94 | # See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
|
23 | 95 |
|
24 | 96 | # SECURITY WARNING: keep the secret key used in production secret!
|
25 |
| -SECRET_KEY = "django-insecure-vri27@j_q62e2it4$xiy9ca!7@qgjkhhan(*zs&lz0k@yukbb3" |
| 97 | +SECRET_KEY = env("SECRET_KEY") |
26 | 98 |
|
27 | 99 | # SECURITY WARNING: don't run with debug turned on in production!
|
28 |
| -DEBUG = True |
| 100 | +DEBUG = env("DEBUG") |
29 | 101 |
|
30 |
| -ALLOWED_HOSTS = [] |
| 102 | +ALLOWED_HOSTS = env("ALLOWED_HOSTS") |
31 | 103 |
|
32 | 104 |
|
33 | 105 | # Application definition
|
|
60 | 132 | TEMPLATES = [
|
61 | 133 | {
|
62 | 134 | "BACKEND": "django.template.backends.django.DjangoTemplates",
|
63 |
| - "DIRS": [BASE_DIR / "templates"], |
| 135 | + "DIRS": env("TEMPLATES_DIRS"), |
64 | 136 | "APP_DIRS": True,
|
65 | 137 | "OPTIONS": {
|
66 | 138 | "context_processors": [
|
|
80 | 152 | # https://docs.djangoproject.com/en/4.2/ref/settings/#databases
|
81 | 153 |
|
82 | 154 | DATABASES = {
|
83 |
| - "default": { |
84 |
| - "ENGINE": "django.db.backends.sqlite3", |
85 |
| - "NAME": BASE_DIR / "db.sqlite3", |
86 |
| - } |
| 155 | + "default": env.db(), |
87 | 156 | }
|
88 | 157 |
|
89 | 158 |
|
|
120 | 189 |
|
121 | 190 | # Static files (CSS, JavaScript, Images)
|
122 | 191 | # https://docs.djangoproject.com/en/4.2/howto/static-files/
|
123 |
| - |
124 |
| -STATIC_URL = "static/" |
| 192 | +STATIC_ROOT = env("STATIC_ROOT") |
| 193 | +STATIC_URL = env("STATIC_URL") |
125 | 194 |
|
126 | 195 | # Default primary key field type
|
127 | 196 | # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
|
|
130 | 199 |
|
131 | 200 | OAUTH2_PROVIDER = {
|
132 | 201 | "OAUTH2_VALIDATOR_CLASS": "idp.oauth.CustomOAuth2Validator",
|
133 |
| - "OIDC_ENABLED": True, |
134 |
| - "OIDC_RP_INITIATED_LOGOUT_ENABLED": True, |
| 202 | + "OIDC_ENABLED": env("OAUTH2_PROVIDER_OIDC_ENABLED"), |
| 203 | + "OIDC_RP_INITIATED_LOGOUT_ENABLED": env("OAUTH2_PROVIDER_OIDC_RP_INITIATED_LOGOUT_ENABLED"), |
135 | 204 | # this key is just for out test app, you should never store a key like this in a production environment.
|
136 |
| - "OIDC_RSA_PRIVATE_KEY": """ |
137 |
| ------BEGIN RSA PRIVATE KEY----- |
138 |
| -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 |
187 |
| ------END RSA PRIVATE KEY----- |
188 |
| -""", |
| 205 | + "OIDC_RSA_PRIVATE_KEY": env("OAUTH2_PROVIDER_OIDC_RSA_PRIVATE_KEY"), |
189 | 206 | "SCOPES": {
|
190 | 207 | "openid": "OpenID Connect scope",
|
191 | 208 | },
|
192 |
| - "ALLOWED_SCHEMES": ["https", "http"], |
| 209 | + "ALLOWED_SCHEMES": env("OAUTH2_PROVIDER_ALLOWED_SCHEMES"), |
193 | 210 | }
|
194 | 211 | # needs to be set to allow cors requests from the test app, along with ALLOWED_SCHEMES=["http"]
|
195 |
| -os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1" |
| 212 | +os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = env("OAUTHLIB_INSECURE_TRANSPORT") |
196 | 213 |
|
197 | 214 | LOGGING = {
|
198 | 215 | "version": 1,
|
|
0 commit comments