diff --git a/apps/api/plane/license/management/commands/configure_instance.py b/apps/api/plane/license/management/commands/configure_instance.py index 81c8fc89ed..b3e84dd82d 100644 --- a/apps/api/plane/license/management/commands/configure_instance.py +++ b/apps/api/plane/license/management/commands/configure_instance.py @@ -6,6 +6,7 @@ from django.core.management.base import BaseCommand, CommandError # Module imports from plane.license.models import InstanceConfiguration +from plane.utils.instance_config_variables import instance_config_variables class Command(BaseCommand): @@ -21,199 +22,7 @@ class Command(BaseCommand): if not os.environ.get(item): raise CommandError(f"{item} env variable is required.") - config_keys = [ - # Authentication Settings - { - "key": "ENABLE_SIGNUP", - "value": os.environ.get("ENABLE_SIGNUP", "1"), - "category": "AUTHENTICATION", - "is_encrypted": False, - }, - { - "key": "DISABLE_WORKSPACE_CREATION", - "value": os.environ.get("DISABLE_WORKSPACE_CREATION", "0"), - "category": "WORKSPACE_MANAGEMENT", - "is_encrypted": False, - }, - { - "key": "ENABLE_EMAIL_PASSWORD", - "value": os.environ.get("ENABLE_EMAIL_PASSWORD", "1"), - "category": "AUTHENTICATION", - "is_encrypted": False, - }, - { - "key": "ENABLE_MAGIC_LINK_LOGIN", - "value": os.environ.get("ENABLE_MAGIC_LINK_LOGIN", "0"), - "category": "AUTHENTICATION", - "is_encrypted": False, - }, - { - "key": "GOOGLE_CLIENT_ID", - "value": os.environ.get("GOOGLE_CLIENT_ID"), - "category": "GOOGLE", - "is_encrypted": False, - }, - { - "key": "GOOGLE_CLIENT_SECRET", - "value": os.environ.get("GOOGLE_CLIENT_SECRET"), - "category": "GOOGLE", - "is_encrypted": True, - }, - { - "key": "GITHUB_CLIENT_ID", - "value": os.environ.get("GITHUB_CLIENT_ID"), - "category": "GITHUB", - "is_encrypted": False, - }, - { - "key": "GITHUB_CLIENT_SECRET", - "value": os.environ.get("GITHUB_CLIENT_SECRET"), - "category": "GITHUB", - "is_encrypted": True, - }, - { - "key": "GITHUB_ORGANIZATION_ID", - "value": os.environ.get("GITHUB_ORGANIZATION_ID"), - "category": "GITHUB", - "is_encrypted": False, - }, - { - "key": "GITLAB_HOST", - "value": os.environ.get("GITLAB_HOST"), - "category": "GITLAB", - "is_encrypted": False, - }, - { - "key": "GITLAB_CLIENT_ID", - "value": os.environ.get("GITLAB_CLIENT_ID"), - "category": "GITLAB", - "is_encrypted": False, - }, - { - "key": "ENABLE_SMTP", - "value": os.environ.get("ENABLE_SMTP", "0"), - "category": "SMTP", - "is_encrypted": False, - }, - { - "key": "GITLAB_CLIENT_SECRET", - "value": os.environ.get("GITLAB_CLIENT_SECRET"), - "category": "GITLAB", - "is_encrypted": True, - }, - { - "key": "EMAIL_HOST", - "value": os.environ.get("EMAIL_HOST", ""), - "category": "SMTP", - "is_encrypted": False, - }, - { - "key": "EMAIL_HOST_USER", - "value": os.environ.get("EMAIL_HOST_USER", ""), - "category": "SMTP", - "is_encrypted": False, - }, - { - "key": "EMAIL_HOST_PASSWORD", - "value": os.environ.get("EMAIL_HOST_PASSWORD", ""), - "category": "SMTP", - "is_encrypted": True, - }, - { - "key": "EMAIL_PORT", - "value": os.environ.get("EMAIL_PORT", "587"), - "category": "SMTP", - "is_encrypted": False, - }, - { - "key": "EMAIL_FROM", - "value": os.environ.get("EMAIL_FROM", ""), - "category": "SMTP", - "is_encrypted": False, - }, - { - "key": "EMAIL_USE_TLS", - "value": os.environ.get("EMAIL_USE_TLS", "1"), - "category": "SMTP", - "is_encrypted": False, - }, - { - "key": "EMAIL_USE_SSL", - "value": os.environ.get("EMAIL_USE_SSL", "0"), - "category": "SMTP", - "is_encrypted": False, - }, - { - "key": "LLM_API_KEY", - "value": os.environ.get("LLM_API_KEY"), - "category": "AI", - "is_encrypted": True, - }, - { - "key": "LLM_PROVIDER", - "value": os.environ.get("LLM_PROVIDER", "openai"), - "category": "AI", - "is_encrypted": False, - }, - { - "key": "LLM_MODEL", - "value": os.environ.get("LLM_MODEL", "gpt-4o-mini"), - "category": "AI", - "is_encrypted": False, - }, - # Deprecated, use LLM_MODEL - { - "key": "GPT_ENGINE", - "value": os.environ.get("GPT_ENGINE", "gpt-3.5-turbo"), - "category": "SMTP", - "is_encrypted": False, - }, - { - "key": "UNSPLASH_ACCESS_KEY", - "value": os.environ.get("UNSPLASH_ACCESS_KEY", ""), - "category": "UNSPLASH", - "is_encrypted": True, - }, - # intercom settings - { - "key": "IS_INTERCOM_ENABLED", - "value": os.environ.get("IS_INTERCOM_ENABLED", "1"), - "category": "INTERCOM", - "is_encrypted": False, - }, - { - "key": "INTERCOM_APP_ID", - "value": os.environ.get("INTERCOM_APP_ID", ""), - "category": "INTERCOM", - "is_encrypted": False, - }, - { - "key": "IS_GITEA_ENABLED", - "value": os.environ.get("IS_GITEA_ENABLED", "0"), - "category": "GITEA", - "is_encrypted": False, - }, - { - "key": "GITEA_HOST", - "value": os.environ.get("GITEA_HOST"), - "category": "GITEA", - "is_encrypted": False, - }, - { - "key": "GITEA_CLIENT_ID", - "value": os.environ.get("GITEA_CLIENT_ID"), - "category": "GITEA", - "is_encrypted": False, - }, - { - "key": "GITEA_CLIENT_SECRET", - "value": os.environ.get("GITEA_CLIENT_SECRET"), - "category": "GITEA", - "is_encrypted": True, - }, - ] - - for item in config_keys: + for item in instance_config_variables: obj, created = InstanceConfiguration.objects.get_or_create(key=item.get("key")) if created: obj.category = item.get("category") @@ -307,33 +116,23 @@ class Command(BaseCommand): ) self.stdout.write(self.style.SUCCESS(f"{key} loaded with value from environment variable.")) if key == "IS_GITEA_ENABLED": - GITEA_HOST, GITEA_CLIENT_ID, GITEA_CLIENT_SECRET = ( - get_configuration_value( - [ - { - "key": "GITEA_HOST", - "default": os.environ.get( - "GITEA_HOST", "" - ), - }, - { - "key": "GITEA_CLIENT_ID", - "default": os.environ.get("GITEA_CLIENT_ID", ""), - }, - { - "key": "GITEA_CLIENT_SECRET", - "default": os.environ.get( - "GITEA_CLIENT_SECRET", "" - ), - }, - ] - ) + GITEA_HOST, GITEA_CLIENT_ID, GITEA_CLIENT_SECRET = get_configuration_value( + [ + { + "key": "GITEA_HOST", + "default": os.environ.get("GITEA_HOST", ""), + }, + { + "key": "GITEA_CLIENT_ID", + "default": os.environ.get("GITEA_CLIENT_ID", ""), + }, + { + "key": "GITEA_CLIENT_SECRET", + "default": os.environ.get("GITEA_CLIENT_SECRET", ""), + }, + ] ) - if ( - bool(GITEA_HOST) - and bool(GITEA_CLIENT_ID) - and bool(GITEA_CLIENT_SECRET) - ): + if bool(GITEA_HOST) and bool(GITEA_CLIENT_ID) and bool(GITEA_CLIENT_SECRET): value = "1" else: value = "0" @@ -343,11 +142,7 @@ class Command(BaseCommand): category="AUTHENTICATION", is_encrypted=False, ) - self.stdout.write( - self.style.SUCCESS( - f"{key} loaded with value from environment variable." - ) - ) + self.stdout.write(self.style.SUCCESS(f"{key} loaded with value from environment variable.")) else: for key in keys: self.stdout.write(self.style.WARNING(f"{key} configuration already exists")) diff --git a/apps/api/plane/utils/instance_config_variables/__init__.py b/apps/api/plane/utils/instance_config_variables/__init__.py new file mode 100644 index 0000000000..6818ca9bf7 --- /dev/null +++ b/apps/api/plane/utils/instance_config_variables/__init__.py @@ -0,0 +1,4 @@ +from .core import core_config_variables +from .extended import extended_config_variables + +instance_config_variables = [*core_config_variables, *extended_config_variables] diff --git a/apps/api/plane/utils/instance_config_variables/core.py b/apps/api/plane/utils/instance_config_variables/core.py new file mode 100644 index 0000000000..cf8d8d41fb --- /dev/null +++ b/apps/api/plane/utils/instance_config_variables/core.py @@ -0,0 +1,233 @@ +# Python imports +import os + +authentication_config_variables = [ + { + "key": "ENABLE_SIGNUP", + "value": os.environ.get("ENABLE_SIGNUP", "1"), + "category": "AUTHENTICATION", + "is_encrypted": False, + }, + { + "key": "ENABLE_EMAIL_PASSWORD", + "value": os.environ.get("ENABLE_EMAIL_PASSWORD", "1"), + "category": "AUTHENTICATION", + "is_encrypted": False, + }, + { + "key": "ENABLE_MAGIC_LINK_LOGIN", + "value": os.environ.get("ENABLE_MAGIC_LINK_LOGIN", "0"), + "category": "AUTHENTICATION", + "is_encrypted": False, + }, +] + +workspace_management_config_variables = [ + { + "key": "DISABLE_WORKSPACE_CREATION", + "value": os.environ.get("DISABLE_WORKSPACE_CREATION", "0"), + "category": "WORKSPACE_MANAGEMENT", + "is_encrypted": False, + }, +] + +google_config_variables = [ + { + "key": "GOOGLE_CLIENT_ID", + "value": os.environ.get("GOOGLE_CLIENT_ID"), + "category": "GOOGLE", + "is_encrypted": False, + }, + { + "key": "GOOGLE_CLIENT_SECRET", + "value": os.environ.get("GOOGLE_CLIENT_SECRET"), + "category": "GOOGLE", + "is_encrypted": True, + }, +] + +github_config_variables = [ + { + "key": "GITHUB_CLIENT_ID", + "value": os.environ.get("GITHUB_CLIENT_ID"), + "category": "GITHUB", + "is_encrypted": False, + }, + { + "key": "GITHUB_CLIENT_SECRET", + "value": os.environ.get("GITHUB_CLIENT_SECRET"), + "category": "GITHUB", + "is_encrypted": True, + }, + { + "key": "GITHUB_ORGANIZATION_ID", + "value": os.environ.get("GITHUB_ORGANIZATION_ID"), + "category": "GITHUB", + "is_encrypted": False, + }, +] + + +gitlab_config_variables = [ + { + "key": "GITLAB_HOST", + "value": os.environ.get("GITLAB_HOST"), + "category": "GITLAB", + "is_encrypted": False, + }, + { + "key": "GITLAB_CLIENT_ID", + "value": os.environ.get("GITLAB_CLIENT_ID"), + "category": "GITLAB", + "is_encrypted": False, + }, + { + "key": "GITLAB_CLIENT_SECRET", + "value": os.environ.get("GITLAB_CLIENT_SECRET"), + "category": "GITLAB", + "is_encrypted": True, + }, +] + +gitea_config_variables = [ + { + "key": "IS_GITEA_ENABLED", + "value": os.environ.get("IS_GITEA_ENABLED", "0"), + "category": "GITEA", + "is_encrypted": False, + }, + { + "key": "GITEA_HOST", + "value": os.environ.get("GITEA_HOST"), + "category": "GITEA", + "is_encrypted": False, + }, + { + "key": "GITEA_CLIENT_ID", + "value": os.environ.get("GITEA_CLIENT_ID"), + "category": "GITEA", + "is_encrypted": False, + }, + { + "key": "GITEA_CLIENT_SECRET", + "value": os.environ.get("GITEA_CLIENT_SECRET"), + "category": "GITEA", + "is_encrypted": True, + }, +] + +smtp_config_variables = [ + { + "key": "ENABLE_SMTP", + "value": os.environ.get("ENABLE_SMTP", "0"), + "category": "SMTP", + "is_encrypted": False, + }, + { + "key": "EMAIL_HOST", + "value": os.environ.get("EMAIL_HOST", ""), + "category": "SMTP", + "is_encrypted": False, + }, + { + "key": "EMAIL_HOST_USER", + "value": os.environ.get("EMAIL_HOST_USER", ""), + "category": "SMTP", + "is_encrypted": False, + }, + { + "key": "EMAIL_HOST_PASSWORD", + "value": os.environ.get("EMAIL_HOST_PASSWORD", ""), + "category": "SMTP", + "is_encrypted": True, + }, + { + "key": "EMAIL_PORT", + "value": os.environ.get("EMAIL_PORT", "587"), + "category": "SMTP", + "is_encrypted": False, + }, + { + "key": "EMAIL_FROM", + "value": os.environ.get("EMAIL_FROM", ""), + "category": "SMTP", + "is_encrypted": False, + }, + { + "key": "EMAIL_USE_TLS", + "value": os.environ.get("EMAIL_USE_TLS", "1"), + "category": "SMTP", + "is_encrypted": False, + }, + { + "key": "EMAIL_USE_SSL", + "value": os.environ.get("EMAIL_USE_SSL", "0"), + "category": "SMTP", + "is_encrypted": False, + }, +] + +llm_config_variables = [ + { + "key": "LLM_API_KEY", + "value": os.environ.get("LLM_API_KEY"), + "category": "AI", + "is_encrypted": True, + }, + { + "key": "LLM_PROVIDER", + "value": os.environ.get("LLM_PROVIDER", "openai"), + "category": "AI", + "is_encrypted": False, + }, + { + "key": "LLM_MODEL", + "value": os.environ.get("LLM_MODEL", "gpt-4o-mini"), + "category": "AI", + "is_encrypted": False, + }, + # Deprecated, use LLM_MODEL + { + "key": "GPT_ENGINE", + "value": os.environ.get("GPT_ENGINE", "gpt-3.5-turbo"), + "category": "AI", + "is_encrypted": False, + }, +] + +unsplash_config_variables = [ + { + "key": "UNSPLASH_ACCESS_KEY", + "value": os.environ.get("UNSPLASH_ACCESS_KEY", ""), + "category": "UNSPLASH", + "is_encrypted": True, + }, +] + +intercom_config_variables = [ + { + "key": "IS_INTERCOM_ENABLED", + "value": os.environ.get("IS_INTERCOM_ENABLED", "1"), + "category": "INTERCOM", + "is_encrypted": False, + }, + { + "key": "INTERCOM_APP_ID", + "value": os.environ.get("INTERCOM_APP_ID", ""), + "category": "INTERCOM", + "is_encrypted": False, + }, +] + +core_config_variables = [ + *authentication_config_variables, + *workspace_management_config_variables, + *google_config_variables, + *github_config_variables, + *gitlab_config_variables, + *gitea_config_variables, + *smtp_config_variables, + *llm_config_variables, + *unsplash_config_variables, + *intercom_config_variables, +] diff --git a/apps/api/plane/utils/instance_config_variables/extended.py b/apps/api/plane/utils/instance_config_variables/extended.py new file mode 100644 index 0000000000..24c6fefda4 --- /dev/null +++ b/apps/api/plane/utils/instance_config_variables/extended.py @@ -0,0 +1 @@ +extended_config_variables = []