diff --git a/apps/django/ugok/django-configmap.yaml b/apps/django/ugok/django-configmap.yaml index 0606838..b5f7c9b 100644 --- a/apps/django/ugok/django-configmap.yaml +++ b/apps/django/ugok/django-configmap.yaml @@ -7,4 +7,282 @@ metadata: name: django-configmap namespace: django data: - production.py: "\nimport os\nfrom .base import *\nfrom logging.handlers import SysLogHandler\nfrom datetime import timedelta\n\nALLOWED_HOSTS = [\"*\"]\nFILE_UPLOAD_PERMISSIONS = 0o644\nDEBUG = False\nCSRF_COOKIE_SECURE = False\nCSRF_TRUSTED_ORIGINS = [\"https://sarex.ugok.lan\",\"http://sarex.ugok.la\", \"*\"]\nSESSION_COOKIE_SECURE = False\nSECURE_SSL_REDIRECT = False\n\nSECRET_KEY = 't2=9+($2f%7ptsdy4!rby$)mcfl1l%o2e@vs^d(g&(wwi&%k1v'\n\nCORS_ORIGIN_ALLOW_ALL = True\nSERVERSETTINGS.cache_enabled = True\nINSTALLED_APPS = list(INSTALLED_APPS) + ['corsheaders']\n\nCORS_ALLOW_METHODS = (\n 'DELETE',\n 'GET',\n 'OPTIONS',\n 'PATCH',\n 'POST',\n 'PUT',\n)\nBASIC_USER_ID = 2\n\nCORS_ALLOW_HEADERS = (\n 'accept',\n 'accept-encoding',\n 'authorization',\n 'content-type',\n 'user-agent',\n 'x-csrftoken',\n 'x-requested-with',\n 'x-token',\n 'Bearer',\n)\n\nHOST = \"https://sarex.ugok.lan\"\n\nPOSTGRES_DATABASE = os.environ.get('DJANGO_POSTGRES_DATABASE')\nPOSTGRES_USER = os.environ.get('DJANGO_POSTGRES_USER')\nPOSTGRES_PASSWORD = os.environ.get('DJANGO_POSTGRES_PASSWORD')\nPOSTGRES_HOST = os.environ.get('DJANGO_POSTGRES_HOST')\nPOSTGRES_PORTS = os.environ.get('DJANGO_POSTGRES_PORTS', \"5432\")\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django_prometheus.db.backends.postgresql',\n 'NAME': POSTGRES_DATABASE,\n 'USER': POSTGRES_USER,\n 'PASSWORD': POSTGRES_PASSWORD,\n 'HOST': POSTGRES_HOST,\n 'PORT': POSTGRES_PORTS,\n }\n}\n\nLOGGING = {\n 'version': 1,\n 'disable_existing_loggers': False,\n 'filters': {\n 'require_debug_false': {\n '()': 'django.utils.log.RequireDebugFalse',\n }\n },\n 'formatters': {\n 'verbose': {\n 'format': '[contactor] %(levelname)s %(asctime)s %(message)s',\n },\n },\n 'handlers': {\n 'console': {\n 'level': 'DEBUG',\n 'class': 'logging.StreamHandler',\n },\n 'sentry': {\n 'level': 'ERROR',\n 'filters': ['require_debug_false'],\n 'class': 'logging.StreamHandler',\n },\n },\n 'loggers': {\n '': {\n 'handlers': ['console', 'sentry'],\n 'level': 'INFO',\n 'propagate': False,\n },\n }\n}\n\nCOMPARATOR_JWT = os.environ.get(\"COMPARATOR_JWT\", \"default_jwt\")\nCOMPARATOR_URL = os.environ.get(\"COMPARATOR_URL\", \"https://wb.sarex.io/comparator\")\nCOMPARATOR_SECTION = os.environ.get(\"COMPARATOR_SECTION\", \"sarex-production-storage\")\n\nSIMPLE_JWT = {\n 'ACCESS_TOKEN_LIFETIME': timedelta(hours=1),\n 'REFRESH_TOKEN_LIFETIME': timedelta(days=1),\n 'ROTATE_REFRESH_TOKENS': False,\n 'BLACKLIST_AFTER_ROTATION': True,\n 'UPDATE_LAST_LOGIN': False,\n 'ALGORITHM': 'RS512',\n 'SIGNING_KEY': os.environ.get(\"JWT_PRIVATE_KEY\").replace(\"\\\\n\", \"\\n\"),\n 'VERIFYING_KEY': os.environ.get(\"JWT_PUBLIC_KEY\").replace(\"\\\\n\", \"\\n\"),\n 'AUDIENCE': None,\n 'ISSUER': os.environ.get('SIMPLE_JWT_ISSUER', 'default_issuer'),\n 'AUTH_HEADER_TYPES': ('Bearer',),\n 'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',\n 'USER_ID_FIELD': 'id',\n 'USER_ID_CLAIM': 'user_id',\n 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),\n 'TOKEN_TYPE_CLAIM': 'token_type',\n 'JTI_CLAIM': 'jti',\n 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',\n 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),\n 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),\n}\n\nos.environ[\"DJANGO_ALLOW_ASYNC_UNSAFE\"] = \"true\"\nDEFAULT_FILE_STORAGE = 'sarex.core.storages.CustomS3Boto3Storage'\nDATA_UPLOAD_MAX_MEMORY_SIZE = 268435456\n\nif not os.environ.get('ISOLATED', False):\n import sentry_sdk\n from sentry_sdk.integrations.django import DjangoIntegration\n\n sentry_sdk.init(\n dsn=\"https://3df2f4b8d3d14595a06c92e9d7c562cb@sentry.io/1501541\",\n integrations=[DjangoIntegration()],\n environment=os.environ.get('SENTRY_ENVIRONMENT', 'production'),\n send_default_pii=True,\n )\n\nCOMPARISON_API_URL = f\"{os.environ.get('WORKFLOWSSETTINGS_HOST')}/comparisons\"\nDOCUMENTATION_API_URL = f\"{os.environ.get('WORKFLOWSSETTINGS_HOST')}/documentations\"\nPDM_FILES_API_URL = f\"{os.environ.get('WORKFLOWSSETTINGS_HOST')}/files\"\n\nWORKFLOWS_TASKS = {\n \"update_orthomosaic_data\": {\n \"image\": f\"{os.environ.get('WORKFLOWSSETTINGS_REGISTRY')}/update-orthomosaic-data:dev\",\n \"service_requests\": [\"django-auth\"],\n \"backoff_limit\": 3,\n },\n}\n\nREST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': (\n 'rest_framework.pagination.LimitOffsetPagination' ),\n 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',\n 'PAGE_SIZE': 1000, 'DEFAULT_FILTER_BACKENDS': [\n 'django_filters.rest_framework.DjangoFilterBackend' ],\n 'DEFAULT_AUTHENTICATION_CLASSES': [\n 'sarex.authentication.backends.ZitadelJWTAuthentication',\n 'rest_framework.authentication.RemoteUserAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n 'rest_framework.authentication.BasicAuthentication',\n 'rest_framework.authentication.SessionAuthentication',\n 'sarex.authentication.backends.JWTAuthentication' ],\n 'DEFAULT_PERMISSION_CLASSES': [\n 'rest_framework.permissions.IsAuthenticated', ] }\n\nAUTHENTICATION_BACKENDS = [\n 'sarex.authentication.backends.CustomRemoteUserBackend',\n 'django.contrib.auth.backends.ModelBackend',\n 'guardian.backends.ObjectPermissionBackend',\n]\n\nMIDDLEWARE = [\n 'django_prometheus.middleware.PrometheusBeforeMiddleware',\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n #'django.middleware.csrf.CsrfViewMiddleware',\n #'django_keycloak.middlewares.AuthorizationHeaderMiddleware',\n #'django_keycloak.middlewares.KeycloakSessionMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n #'django.contrib.auth.middleware.RemoteUserMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'django_user_agents.middleware.UserAgentMiddleware',\n 'simple_history.middleware.HistoryRequestMiddleware',\n 'django_prometheus.middleware.PrometheusAfterMiddleware', ]\n\n\nclass KeyCloakSettings(BaseSettings):\n client_id: str = \"client_id\"\n client_secret: str = \"client_secret\"\n discovery_url: str = \"https://login.wb.sarex.io/realms/sarex/.well-known/openid-configuration\"\n staff: Optional[str] = \"Sarex staff\"\n superuser: Optional[str] = \"Sarex superusers\"\n sync_with_django: bool = True\n sync_admin: bool = False\n group_prefix: str = 'Sarex-Role'\n company_prefix: str = 'Sarex-Company'\n department_prefix: str = 'Sarex-Department'\n position_prefix: str = 'Sarex-Position'\n separator: str = '__'\n sync_user_groups: bool = False\n sync_user_positions: bool = False\n sync_user_departments: bool = False\n sync_user_companies: bool = False\n use_redirect_logout: bool = False\n logout_redirect_uri: str = \"/\"\n default_group_name: Optional[str] = 'Тест'\n default_company_name: Optional[str] = 'Брусника'\n trusted_uri: List[str] = ['/api/core/orthophotos/', '/api/token', '/api/token/me']\n trusted_uri: List[str] = []\n\n class Config:\n env_prefix = \"KC_\"\n\n\nKEYCLOAKSETTINGS = KeyCloakSettings()\n\nREMOTE_USER_DEFAULT_COMPANY_ID = 1\nSAREX_MODULES = [\n {\n \"name\": \"Замечания\",\n \"uri\": \"/remarks\"\n },\n {\n \"name\": \"Управление проектами\",\n \"uri\": \"/management/projects\",\n },\n {\n \"name\": \"Замечания V2\",\n \"uri\": \"/issues\"\n },\n {\n \"name\": \"Документация\",\n \"uri\": \"/documentations\",\n },\n {\n \"name\": \"Согласование документов\",\n \"uri\": \"/reviews\"\n },\n {\n \"name\": \"Рабочие процессы\",\n \"uri\": \"/processes\"\n },\n {\n \"name\": \"Запросы\",\n \"uri\": \"/rfi\"\n },\n {\n \"name\": \"Обзор\",\n \"uri\": \"/projects\"\n },\n {\n \"name\": \"Передача документации\", \n \"uri\": \"/transmittal\"\n },\n]\nAUTH_SETTINGS = {\n \"refresh_token\": False,\n \"refresh_token_uri\": \"/api/token/me\",\n \"refresh_oauth_token\": True,\n \"refresh_oauth_token_uri\": \"/oauth/token\",\n \"refresh_time\": 240,\n}\n\n\nDEBUG=False\nWEB_APP_AUTH_MODE='jwt-session-based'\n\n\nSAREX_MODULES_SETTINGS = {\n \"aero\": {\n \"enable_new_media\": True\n },\n \"sso_logout_redirect\": True\n}\n" + production.py: |2 + + import os + from .base import * + from logging.handlers import SysLogHandler + from datetime import timedelta + + ALLOWED_HOSTS = ["*"] + FILE_UPLOAD_PERMISSIONS = 0o644 + DEBUG = False + CSRF_COOKIE_SECURE = False + CSRF_TRUSTED_ORIGINS = ["https://sarex.ugok.lan","http://sarex.ugok.la", "*"] + SESSION_COOKIE_SECURE = False + SECURE_SSL_REDIRECT = False + + SECRET_KEY = 't2=9+($2f%7ptsdy4!rby$)mcfl1l%o2e@vs^d(g&(wwi&%k1v' + + CORS_ORIGIN_ALLOW_ALL = True + SERVERSETTINGS.cache_enabled = True + INSTALLED_APPS = list(INSTALLED_APPS) + ['corsheaders'] + + CORS_ALLOW_METHODS = ( + 'DELETE', + 'GET', + 'OPTIONS', + 'PATCH', + 'POST', + 'PUT', + ) + BASIC_USER_ID = 2 + + CORS_ALLOW_HEADERS = ( + 'accept', + 'accept-encoding', + 'authorization', + 'content-type', + 'user-agent', + 'x-csrftoken', + 'x-requested-with', + 'x-token', + 'Bearer', + ) + + HOST = "https://sarex.ugok.lan" + + POSTGRES_DATABASE = os.environ.get('DJANGO_POSTGRES_DATABASE') + POSTGRES_USER = os.environ.get('DJANGO_POSTGRES_USER') + POSTGRES_PASSWORD = os.environ.get('DJANGO_POSTGRES_PASSWORD') + POSTGRES_HOST = os.environ.get('DJANGO_POSTGRES_HOST') + POSTGRES_PORTS = os.environ.get('DJANGO_POSTGRES_PORTS', "5432") + + DATABASES = { + 'default': { + 'ENGINE': 'django_prometheus.db.backends.postgresql', + 'NAME': POSTGRES_DATABASE, + 'USER': POSTGRES_USER, + 'PASSWORD': POSTGRES_PASSWORD, + 'HOST': POSTGRES_HOST, + 'PORT': POSTGRES_PORTS, + } + } + + LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, + 'filters': { + 'require_debug_false': { + '()': 'django.utils.log.RequireDebugFalse', + } + }, + 'formatters': { + 'verbose': { + 'format': '[contactor] %(levelname)s %(asctime)s %(message)s', + }, + }, + 'handlers': { + 'console': { + 'level': 'DEBUG', + 'class': 'logging.StreamHandler', + }, + 'sentry': { + 'level': 'ERROR', + 'filters': ['require_debug_false'], + 'class': 'logging.StreamHandler', + }, + }, + 'loggers': { + '': { + 'handlers': ['console', 'sentry'], + 'level': 'INFO', + 'propagate': False, + }, + } + } + + COMPARATOR_JWT = os.environ.get("COMPARATOR_JWT", "default_jwt") + COMPARATOR_URL = os.environ.get("COMPARATOR_URL", "https://wb.sarex.io/comparator") + COMPARATOR_SECTION = os.environ.get("COMPARATOR_SECTION", "sarex-production-storage") + + SIMPLE_JWT = { + 'ACCESS_TOKEN_LIFETIME': timedelta(hours=1), + 'REFRESH_TOKEN_LIFETIME': timedelta(days=1), + 'ROTATE_REFRESH_TOKENS': False, + 'BLACKLIST_AFTER_ROTATION': True, + 'UPDATE_LAST_LOGIN': False, + 'ALGORITHM': 'RS512', + 'SIGNING_KEY': os.environ.get("JWT_PRIVATE_KEY").replace("\\n", "\n"), + 'VERIFYING_KEY': os.environ.get("JWT_PUBLIC_KEY").replace("\\n", "\n"), + 'AUDIENCE': None, + 'ISSUER': os.environ.get('SIMPLE_JWT_ISSUER', 'default_issuer'), + 'AUTH_HEADER_TYPES': ('Bearer',), + 'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION', + 'USER_ID_FIELD': 'id', + 'USER_ID_CLAIM': 'user_id', + 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',), + 'TOKEN_TYPE_CLAIM': 'token_type', + 'JTI_CLAIM': 'jti', + 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp', + 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5), + 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1), + } + + os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true" + DEFAULT_FILE_STORAGE = 'sarex.core.storages.CustomS3Boto3Storage' + DATA_UPLOAD_MAX_MEMORY_SIZE = 268435456 + + if not os.environ.get('ISOLATED', False): + import sentry_sdk + from sentry_sdk.integrations.django import DjangoIntegration + + sentry_sdk.init( + dsn="https://3df2f4b8d3d14595a06c92e9d7c562cb@sentry.io/1501541", + integrations=[DjangoIntegration()], + environment=os.environ.get('SENTRY_ENVIRONMENT', 'production'), + send_default_pii=True, + ) + + COMPARISON_API_URL = f"{os.environ.get('WORKFLOWSSETTINGS_HOST')}/comparisons" + DOCUMENTATION_API_URL = f"{os.environ.get('WORKFLOWSSETTINGS_HOST')}/documentations" + PDM_FILES_API_URL = f"{os.environ.get('WORKFLOWSSETTINGS_HOST')}/files" + + WORKFLOWS_TASKS = { + "update_orthomosaic_data": { + "image": f"{os.environ.get('WORKFLOWSSETTINGS_REGISTRY')}/update-orthomosaic-data:dev", + "service_requests": ["django-auth"], + "backoff_limit": 3, + }, + } + + REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': ( + 'rest_framework.pagination.LimitOffsetPagination' ), + 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema', + 'PAGE_SIZE': 1000, 'DEFAULT_FILTER_BACKENDS': [ + 'django_filters.rest_framework.DjangoFilterBackend' ], + 'DEFAULT_AUTHENTICATION_CLASSES': [ + 'sarex.authentication.backends.ZitadelJWTAuthentication', + 'rest_framework.authentication.RemoteUserAuthentication', + 'rest_framework_simplejwt.authentication.JWTAuthentication', + 'rest_framework.authentication.BasicAuthentication', + 'rest_framework.authentication.SessionAuthentication', + 'sarex.authentication.backends.JWTAuthentication' ], + 'DEFAULT_PERMISSION_CLASSES': [ + 'rest_framework.permissions.IsAuthenticated', ] } + + AUTHENTICATION_BACKENDS = [ + 'sarex.authentication.backends.CustomRemoteUserBackend', + 'django.contrib.auth.backends.ModelBackend', + 'guardian.backends.ObjectPermissionBackend', + ] + + MIDDLEWARE = [ + 'django_prometheus.middleware.PrometheusBeforeMiddleware', + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + #'django.middleware.csrf.CsrfViewMiddleware', + #'django_keycloak.middlewares.AuthorizationHeaderMiddleware', + #'django_keycloak.middlewares.KeycloakSessionMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + #'django.contrib.auth.middleware.RemoteUserMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'django_user_agents.middleware.UserAgentMiddleware', + 'simple_history.middleware.HistoryRequestMiddleware', + 'django_prometheus.middleware.PrometheusAfterMiddleware', ] + + + class KeyCloakSettings(BaseSettings): + client_id: str = "client_id" + client_secret: str = "client_secret" + discovery_url: str = "https://login.wb.sarex.io/realms/sarex/.well-known/openid-configuration" + staff: Optional[str] = "Sarex staff" + superuser: Optional[str] = "Sarex superusers" + sync_with_django: bool = True + sync_admin: bool = False + group_prefix: str = 'Sarex-Role' + company_prefix: str = 'Sarex-Company' + department_prefix: str = 'Sarex-Department' + position_prefix: str = 'Sarex-Position' + separator: str = '__' + sync_user_groups: bool = False + sync_user_positions: bool = False + sync_user_departments: bool = False + sync_user_companies: bool = False + use_redirect_logout: bool = False + logout_redirect_uri: str = "/" + default_group_name: Optional[str] = 'Тест' + default_company_name: Optional[str] = 'Брусника' + trusted_uri: List[str] = ['/api/core/orthophotos/', '/api/token', '/api/token/me'] + trusted_uri: List[str] = [] + + class Config: + env_prefix = "KC_" + + + KEYCLOAKSETTINGS = KeyCloakSettings() + + REMOTE_USER_DEFAULT_COMPANY_ID = 1 + SAREX_MODULES = [ + { + "name": "Замечания", + "uri": "/remarks" + }, + { + "name": "Управление проектами", + "uri": "/management/projects", + }, + { + "name": "Замечания V2", + "uri": "/issues" + }, + { + "name": "Документация", + "uri": "/documentations", + }, + { + "name": "Согласование документов", + "uri": "/reviews" + }, + { + "name": "Рабочие процессы", + "uri": "/processes" + }, + { + "name": "Запросы", + "uri": "/rfi" + }, + { + "name": "Справочники", + "uri": "/assets" + }, + { + "name": "Обзор", + "uri": "/projects" + }, + { + "name": "Передача документации", + "uri": "/transmittal" + }, + ] + AUTH_SETTINGS = { + "refresh_token": False, + "refresh_token_uri": "/api/token/me", + "refresh_oauth_token": True, + "refresh_oauth_token_uri": "/oauth/token", + "refresh_time": 240, + } + + + DEBUG=False + WEB_APP_AUTH_MODE='jwt-session-based' + + + SAREX_MODULES_SETTINGS = { + "aero": { + "enable_new_media": True + }, + "sso_logout_redirect": True + }