import os import environ from pathlib import Path CRISPY_TEMPLATE_PACK = 'bootstrap4' # Pull environment variables env = environ.Env() environ.Env.read_env() # NEXTCLOUD CONFIG NEXTCLOUD_USER = env('NEXTCLOUD_USER') NEXTCLOUD_PASS = env('NEXTCLOUD_PASS') NEXTCLOUD_DB = env('NEXTCLOUD_DB') NEXTCLOUDDB_USER = env('NEXTCLOUDDB_USER') NEXTCLOUDDB_PASS = env('NEXTCLOUDDB_PASS') NEXTCLOUDDB_HOST = env('NEXTCLOUDDB_HOST') NEXTCLOUD_HOST = env('NEXTCLOUD_HOST') NEXTCLOUD_URL = env('NEXTCLOUD_URL') NEXTCLOUDDB_PORT = env('NEXTCLOUDDB_PORT') # API TOKEN SECRET_TOKEN = env('SECRET_TOKEN') # KEYCLOAK CONFIG # keycloak Conf KEYCLOAK_CONFIG = { 'server_url': env('KEYCLOAK_URL'), 'realm_name': env('KEYCLOAK_REALM'), 'client_id': env('KEYCLOAK_CLIENT'), 'client_secret': env('KEYCLOAK_SECRET') } # do keycloaka dodatkowe opcje # jeżeli 'local' tylko użytkownik stworzony lokalnie będzie mógł zalogowac się do panelu admina django # jeżeli 'keycloak' użytkownik z keycloaka który ma odpowiednie uprawnienia będzie miał dostęp do panelu admina DJANGO_ADMIN_CONTROL = env('DJANGO_ADMIN_CONTROL') # 'local' lub 'keycloak' # ROLE lub GROUP jeżeli puste to admin nie bedzie działać # Najpierw jest sprawdzana ROLA jeżeli jest TRUE to grupa nie jest sprawdzana, # następnie sprawdzana jest GRUPA DJANGO_ADMIN_BASE_ON = env('DJANGO_ADMIN_BASE_ON') # 'role' lub 'group' DJANGO_ADMIN_AUTH_ROLE = env('DJANGO_ADMIN_AUTH_ROLE') # rola jaką musi mieć użytkownik by być administratorem w Django (role w keycloaku są lokalne dla jednego klienta/aplikacji) DJANGO_ADMIN_AUTH_GROUP = env('DJANGO_ADMIN_AUTH_GROUP') # grupa do jakiej musi przynależeć użytkownik by być administratorem w Django (grupuy w keycloaku są globalne na cały realm/wszystkie aplikacje) BASE_DIR = Path(__file__).resolve().parent.parent SECRET_KEY = 'django-insecure-o**1mv8eu_=)3kyz#f(8lf#0gi6+y5z3q6b48*od8lb57wa=qh' DEBUG = True ALLOWED_HOSTS = ['*'] # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'keycloak_auth.apps.KeycloakAuthConfig', # keycloak 'restapi.apps.RestapiConfig', 'file_assignment.apps.FileAssignmentConfig', 'merge_files.apps.MergeFilesConfig', 'nextcloud.apps.NextcloudConfig', 'crispy_forms', 'crispy_bootstrap4' ] 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', 'keycloak_auth.middleware.KeycloakAuthMiddleware' #keycloak ] AUTHENTICATION_BACKENDS = [ 'django.contrib.auth.backends.ModelBackend', 'keycloak_auth.backends.KeycloakAuthentication', #keycloak ] ROOT_URLCONF = 'PralkaX.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / "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', ], }, }, ] WSGI_APPLICATION = 'PralkaX.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'persistent/db.sqlite3', }, 'nextcloud_db': { 'ENGINE': 'django.db.backends.mysql', 'NAME': NEXTCLOUD_DB, 'USER': NEXTCLOUDDB_USER, 'PASSWORD': NEXTCLOUDDB_PASS, 'HOST': NEXTCLOUDDB_HOST, 'PORT': NEXTCLOUDDB_PORT, }, } DATABASE_ROUTERS = ['PralkaX.routers.NextcloudDatabaseRouter','PralkaX.routers.DefaultDatabaseRouter'] 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', }, ] LANGUAGE_CODE = env('LANGUAGE') TIME_ZONE = env('TIMEZONE') USE_I18N = True USE_TZ = True LOGIN_URL = 'keycloak_auth:login' #keycloak LOGIN_REDIRECT_URL = 'index' LOGOUT_REDIRECT_URL = 'index' STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ] STATIC_ROOT = os.path.join(BASE_DIR, 'static_root') MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') STATICFILES_FINDERS = [ 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', ] DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' LOGGING = { 'version': 1, 'disable_exisiting_loggers': False, 'formatters': { 'verbose': { 'format': '{asctime} {levelname} - {message} ', 'style': '{', 'datefmt': '%Y-%m-%d %H:%M:%S', }, 'simple': { 'format': '{levelname} - {pathname} - {message}', 'style': '{', }, }, 'filters': { 'require_debug_true': { '()': 'django.utils.log.RequireDebugTrue', }, }, 'handlers':{ 'console': { 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'file':{ 'level':'INFO', 'class':'logging.FileHandler', 'filename': BASE_DIR / 'persistent/appevents.log', 'encoding':'utf-8', 'formatter': 'verbose' }, }, 'loggers':{ 'globalEventsLoger':{ 'handlers': ['console', 'file'], 'level': 'DEBUG', 'propagate': True, }, }, }