diff --git a/conf/nginx.conf b/conf/nginx.conf index 12c4e0b..d595418 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,31 +1,26 @@ #sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; # https://github.com/WeblateOrg/weblate/blob/master/weblate/examples/weblate.nginx.conf location = __PATH__/favicon.ico { - # DATA_DIR/static/favicon.ico alias __INSTALL_DIR__/data/static/favicon.ico; expires 30d; } location = __PATH__/robots.txt { - # DATA_DIR/static/robots.txt alias __INSTALL_DIR__/data/static/robots.txt; expires 30d; } location __PATH__/static/ { - # DATA_DIR/static/ alias __INSTALL_DIR__/data/static/; expires 30d; } location __PATH__/media/ { - # DATA_DIR/media/ alias __INSTALL_DIR__/data/media/; expires 30d; } location __PATH__/ { - # Path to source alias __INSTALL_DIR__/ ; include uwsgi_params; diff --git a/conf/settings.4.1.1.py b/conf/settings.4.1.1.py deleted file mode 100644 index c234938..0000000 --- a/conf/settings.4.1.1.py +++ /dev/null @@ -1,877 +0,0 @@ -# -# Copyright © 2012 - 2020 Michal Čihař -# -# This file is part of Weblate -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - - -import os -import platform -from logging.handlers import SysLogHandler - -# -# Django settings for Weblate project. -# - -DEBUG = False - -ADMINS = ( - ('__ADMIN__', '__ADMINMAIL__'), -) - -MANAGERS = ADMINS - -DATABASES = { - "default": { - # Use "postgresql" or "mysql". - "ENGINE": "django.db.backends.postgresql", - # Database name. - "NAME": "__NAME__", - # Database user. - "USER": "__NAME__", - # Database password. - "PASSWORD": "__DB_PWD__", - # Set to empty string for localhost. - "HOST": "127.0.0.1", - # Set to empty string for default. - "PORT": "", - # Customizations for databases. - "OPTIONS": { - # In case of using an older MySQL server, - # which has MyISAM as a default storage - # "init_command": "SET storage_engine=INNODB", - # Uncomment for MySQL older than 5.7: - # "init_command": "SET sql_mode='STRICT_TRANS_TABLES'", - # Set emoji capable charset for MySQL: - # "charset": "utf8mb4", - # Change connection timeout in case you get MySQL gone away error: - # "connect_timeout": 28800, - }, - } -} - -BASE_DIR = "__INSTALL_DIR__" - -# Data directory -DATA_DIR = os.path.join(BASE_DIR, "data") - -# Local time zone for this installation. Choices can be found here: -# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name -# although not all choices may be available on all operating systems. -# In a Windows environment this must be set to your system time zone. -TIME_ZONE = "UTC" - -# Language code for this installation. All choices can be found here: -# http://www.i18nguy.com/unicode/language-identifiers.html -LANGUAGE_CODE = "en-us" - -LANGUAGES = ( - ("ar", "العربية"), - ("az", "Azərbaycan"), - ("be", "Беларуская"), - ("be@latin", "Biełaruskaja"), - ("bg", "Български"), - ("br", "Brezhoneg"), - ("ca", "Català"), - ("cs", "Čeština"), - ("da", "Dansk"), - ("de", "Deutsch"), - ("en", "English"), - ("el", "Ελληνικά"), - ("en-gb", "English (United Kingdom)"), - ("es", "Español"), - ("fi", "Suomi"), - ("fr", "Français"), - ("gl", "Galego"), - ("he", "עברית"), - ("hu", "Magyar"), - ("hr", "Hrvatski"), - ("id", "Indonesia"), - ("it", "Italiano"), - ("ja", "日本語"), - ("kab", "Taqbaylit"), - ("kk", "Қазақ тілі"), - ("ko", "한국어"), - ("nb", "Norsk bokmål"), - ("nl", "Nederlands"), - ("pl", "Polski"), - ("pt", "Português"), - ("pt-br", "Português brasileiro"), - ("ru", "Русский"), - ("sk", "Slovenčina"), - ("sl", "Slovenščina"), - ("sq", "Shqip"), - ("sr", "Српски"), - ("sv", "Svenska"), - ("tr", "Türkçe"), - ("uk", "Українська"), - ("zh-hans", "简体字"), - ("zh-hant", "正體字"), -) - -SITE_ID = 1 - -# If you set this to False, Django will make some optimizations so as not -# to load the internationalization machinery. -USE_I18N = True - -# If you set this to False, Django will not format dates, numbers and -# calendars according to the current locale. -USE_L10N = True - -# If you set this to False, Django will not use timezone-aware datetimes. -USE_TZ = True - -# URL prefix to use, please see documentation for more details -URL_PREFIX = "__PATH__" - -# Absolute filesystem path to the directory that will hold user-uploaded files. -MEDIA_ROOT = os.path.join(DATA_DIR, "media") - -# URL that handles the media served from MEDIA_ROOT. Make sure to use a -# trailing slash. -MEDIA_URL = f"{URL_PREFIX}/media/" - -# Absolute path to the directory static files should be collected to. -# Don't put anything in this directory yourself; store your static files -# in apps' "static/" subdirectories and in STATICFILES_DIRS. -STATIC_ROOT = os.path.join(DATA_DIR, "static") - -# URL prefix for static files. -STATIC_URL = f"{URL_PREFIX}/static/" - -# Additional locations of static files -STATICFILES_DIRS = ( - # Put strings here, like "/home/html/static" or "C:/www/django/static". - # Always use forward slashes, even on Windows. - # Don't forget to use absolute paths, not relative paths. -) - -# List of finder classes that know how to find static files in -# various locations. -STATICFILES_FINDERS = ( - "django.contrib.staticfiles.finders.FileSystemFinder", - "django.contrib.staticfiles.finders.AppDirectoriesFinder", - "compressor.finders.CompressorFinder", -) - -# Make this unique, and don't share it with anybody. -# You can generate it using weblate/examples/generate-secret-key -SECRET_KEY = "__KEY__" # noqa - -_TEMPLATE_LOADERS = [ - "django.template.loaders.filesystem.Loader", - "django.template.loaders.app_directories.Loader", -] -if not DEBUG: - _TEMPLATE_LOADERS = [("django.template.loaders.cached.Loader", _TEMPLATE_LOADERS)] -TEMPLATES = [ - { - "BACKEND": "django.template.backends.django.DjangoTemplates", - "OPTIONS": { - "context_processors": [ - "django.contrib.auth.context_processors.auth", - "django.template.context_processors.debug", - "django.template.context_processors.i18n", - "django.template.context_processors.request", - "django.template.context_processors.csrf", - "django.contrib.messages.context_processors.messages", - "weblate.trans.context_processors.weblate_context", - ], - "loaders": _TEMPLATE_LOADERS, - }, - } -] - - -# GitHub username for sending pull requests. -# Please see the documentation for more details. -GITHUB_USERNAME = None - -# GitLab username for sending merge requests. -# Please see the documentation for more details. -GITLAB_USERNAME = None - -# Authentication configuration -AUTHENTICATION_BACKENDS = ( - "social_core.backends.email.EmailAuth", - # "social_core.backends.google.GoogleOAuth2", - # "social_core.backends.github.GithubOAuth2", - # "social_core.backends.bitbucket.BitbucketOAuth", - # "social_core.backends.suse.OpenSUSEOpenId", - # "social_core.backends.ubuntu.UbuntuOpenId", - # "social_core.backends.fedora.FedoraOpenId", - # "social_core.backends.facebook.FacebookOAuth2", - "weblate.accounts.auth.WeblateUserBackend", -) - -# Custom user model -AUTH_USER_MODEL = "weblate_auth.User" - -# Social auth backends setup -SOCIAL_AUTH_GITHUB_KEY = "" -SOCIAL_AUTH_GITHUB_SECRET = "" -SOCIAL_AUTH_GITHUB_SCOPE = ["user:email"] - -SOCIAL_AUTH_BITBUCKET_KEY = "" -SOCIAL_AUTH_BITBUCKET_SECRET = "" -SOCIAL_AUTH_BITBUCKET_VERIFIED_EMAILS_ONLY = True - -SOCIAL_AUTH_FACEBOOK_KEY = "" -SOCIAL_AUTH_FACEBOOK_SECRET = "" -SOCIAL_AUTH_FACEBOOK_SCOPE = ["email", "public_profile"] -SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {"fields": "id,name,email"} -SOCIAL_AUTH_FACEBOOK_API_VERSION = "3.1" - -SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = "" -SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = "" - -# Social auth settings -SOCIAL_AUTH_PIPELINE = ( - "social_core.pipeline.social_auth.social_details", - "social_core.pipeline.social_auth.social_uid", - "social_core.pipeline.social_auth.auth_allowed", - "social_core.pipeline.social_auth.social_user", - "weblate.accounts.pipeline.store_params", - "weblate.accounts.pipeline.verify_open", - "social_core.pipeline.user.get_username", - "weblate.accounts.pipeline.require_email", - "social_core.pipeline.mail.mail_validation", - "weblate.accounts.pipeline.revoke_mail_code", - "weblate.accounts.pipeline.ensure_valid", - "weblate.accounts.pipeline.remove_account", - "social_core.pipeline.social_auth.associate_by_email", - "weblate.accounts.pipeline.reauthenticate", - "weblate.accounts.pipeline.verify_username", - "social_core.pipeline.user.create_user", - "social_core.pipeline.social_auth.associate_user", - "social_core.pipeline.social_auth.load_extra_data", - "weblate.accounts.pipeline.cleanup_next", - "weblate.accounts.pipeline.user_full_name", - "weblate.accounts.pipeline.store_email", - "weblate.accounts.pipeline.notify_connect", - "weblate.accounts.pipeline.password_reset", -) -SOCIAL_AUTH_DISCONNECT_PIPELINE = ( - "social_core.pipeline.disconnect.allowed_to_disconnect", - "social_core.pipeline.disconnect.get_entries", - "social_core.pipeline.disconnect.revoke_tokens", - "weblate.accounts.pipeline.cycle_session", - "weblate.accounts.pipeline.adjust_primary_mail", - "weblate.accounts.pipeline.notify_disconnect", - "social_core.pipeline.disconnect.disconnect", - "weblate.accounts.pipeline.cleanup_next", -) - -# Custom authentication strategy -SOCIAL_AUTH_STRATEGY = "weblate.accounts.strategy.WeblateStrategy" - -# Raise exceptions so that we can handle them later -SOCIAL_AUTH_RAISE_EXCEPTIONS = True - -SOCIAL_AUTH_EMAIL_VALIDATION_FUNCTION = "weblate.accounts.pipeline.send_validation" -SOCIAL_AUTH_EMAIL_VALIDATION_URL = "{0}/accounts/email-sent/".format(URL_PREFIX) -SOCIAL_AUTH_LOGIN_ERROR_URL = "{0}/accounts/login/".format(URL_PREFIX) -SOCIAL_AUTH_EMAIL_FORM_URL = "{0}/accounts/email/".format(URL_PREFIX) -SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = "{0}/accounts/profile/#account".format( - URL_PREFIX -) -SOCIAL_AUTH_PROTECTED_USER_FIELDS = ("email",) -SOCIAL_AUTH_SLUGIFY_USERNAMES = True -SOCIAL_AUTH_SLUGIFY_FUNCTION = "weblate.accounts.pipeline.slugify_username" - -# Password validation configuration -AUTH_PASSWORD_VALIDATORS = [ - { - "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator" # noqa: E501, pylint: disable=line-too-long - }, - { - "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", - "OPTIONS": {"min_length": 10}, - }, - {"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"}, - {"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"}, - {"NAME": "weblate.accounts.password_validation.CharsPasswordValidator"}, - {"NAME": "weblate.accounts.password_validation.PastPasswordsValidator"}, - # Optional password strength validation by django-zxcvbn-password - # { - # "NAME": "zxcvbn_password.ZXCVBNValidator", - # "OPTIONS": { - # "min_score": 3, - # "user_attributes": ("username", "email", "full_name") - # } - # }, -] - -# Allow new user registrations -REGISTRATION_OPEN = True - -# Shortcut for login required setting -REQUIRE_LOGIN = False - -# Middleware -MIDDLEWARE = [ - "weblate.middleware.ProxyMiddleware", - "django.middleware.security.SecurityMiddleware", - "django.contrib.sessions.middleware.SessionMiddleware", - "django.middleware.common.CommonMiddleware", - "django.middleware.csrf.CsrfViewMiddleware", - "weblate.accounts.middleware.AuthenticationMiddleware", - "django.contrib.messages.middleware.MessageMiddleware", - "django.middleware.clickjacking.XFrameOptionsMiddleware", - "social_django.middleware.SocialAuthExceptionMiddleware", - "weblate.accounts.middleware.RequireLoginMiddleware", - "weblate.api.middleware.ThrottlingMiddleware", - "weblate.middleware.SecurityMiddleware", -] - -ROOT_URLCONF = "weblate.urls" - -# Django and Weblate apps -INSTALLED_APPS = [ - # Weblate apps on top to override Django locales and templates - "weblate.addons", - "weblate.auth", - "weblate.checks", - "weblate.formats", - "weblate.glossary", - "weblate.machinery", - "weblate.trans", - "weblate.lang", - "weblate.langdata", - "weblate.memory", - "weblate.screenshots", - "weblate.fonts", - "weblate.accounts", - "weblate.utils", - "weblate.vcs", - "weblate.wladmin", - "weblate", - # Optional: Git exporter - "weblate.gitexport", - # Standard Django modules - "django.contrib.auth", - "django.contrib.contenttypes", - "django.contrib.sessions", - "django.contrib.sites", - "django.contrib.messages", - "django.contrib.staticfiles", - "django.contrib.admin.apps.SimpleAdminConfig", - "django.contrib.admindocs", - "django.contrib.sitemaps", - "django.contrib.humanize", - # Third party Django modules - "social_django", - "crispy_forms", - "compressor", - "rest_framework", - "rest_framework.authtoken", - "django_filters", -] - -# Custom exception reporter to include some details -DEFAULT_EXCEPTION_REPORTER_FILTER = "weblate.trans.debug.WeblateExceptionReporterFilter" - -# Default logging of Weblate messages -# - to syslog in production (if available) -# - otherwise to console -# - you can also choose "logfile" to log into separate file -# after configuring it below - -# Detect if we can connect to syslog -HAVE_SYSLOG = False -if platform.system() != "Windows": - try: - handler = SysLogHandler(address="/dev/log", facility=SysLogHandler.LOG_LOCAL2) - handler.close() - HAVE_SYSLOG = True - except IOError: - HAVE_SYSLOG = False - -if DEBUG or not HAVE_SYSLOG: - DEFAULT_LOG = "console" -else: - DEFAULT_LOG = "syslog" - -# A sample logging configuration. The only tangible logging -# performed by this configuration is to send an email to -# the site admins on every HTTP 500 error when DEBUG=False. -# See http://docs.djangoproject.com/en/stable/topics/logging for -# more details on how to customize your logging configuration. -LOGGING = { - "version": 1, - "disable_existing_loggers": True, - "filters": {"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}}, - "formatters": { - "syslog": {"format": "weblate[%(process)d]: %(levelname)s %(message)s"}, - "simple": {"format": "%(levelname)s %(message)s"}, - "logfile": {"format": "%(asctime)s %(levelname)s %(message)s"}, - "django.server": { - "()": "django.utils.log.ServerFormatter", - "format": "[%(server_time)s] %(message)s", - }, - }, - "handlers": { - "mail_admins": { - "level": "ERROR", - "filters": ["require_debug_false"], - "class": "django.utils.log.AdminEmailHandler", - "include_html": True, - }, - "console": { - "level": "DEBUG", - "class": "logging.StreamHandler", - "formatter": "simple", - }, - "django.server": { - "level": "INFO", - "class": "logging.StreamHandler", - "formatter": "django.server", - }, - "syslog": { - "level": "DEBUG", - "class": "logging.handlers.SysLogHandler", - "formatter": "syslog", - "address": "/dev/log", - "facility": SysLogHandler.LOG_LOCAL2, - }, - # Logging to a file - # "logfile": { - # "level":"DEBUG", - # "class":"logging.handlers.RotatingFileHandler", - # "filename": "/var/log/weblate/weblate.log", - # "maxBytes": 100000, - # "backupCount": 3, - # "formatter": "logfile", - # }, - }, - "loggers": { - "django.request": { - "handlers": ["mail_admins", DEFAULT_LOG], - "level": "ERROR", - "propagate": True, - }, - "django.server": { - "handlers": ["django.server"], - "level": "INFO", - "propagate": False, - }, - # Logging database queries - # "django.db.backends": { - # "handlers": [DEFAULT_LOG], - # "level": "DEBUG", - # }, - "weblate": {"handlers": [DEFAULT_LOG], "level": "DEBUG"}, - # Logging search operations - "weblate.search": {"handlers": [DEFAULT_LOG], "level": "INFO"}, - # Logging VCS operations - "weblate.vcs": {"handlers": [DEFAULT_LOG], "level": "WARNING"}, - # Python Social Auth - "social": {"handlers": [DEFAULT_LOG], "level": "DEBUG" if DEBUG else "WARNING"}, - # Django Authentication Using LDAP - "django_auth_ldap": { - "level": "DEBUG" if DEBUG else "WARNING", - "handlers": [DEFAULT_LOG], - }, - }, -} - -# Remove syslog setup if it's not present -if not HAVE_SYSLOG: - del LOGGING["handlers"]["syslog"] - -# List of machine translations -# MT_SERVICES = ( -# "weblate.machinery.apertium.ApertiumAPYTranslation", -# "weblate.machinery.baidu.BaiduTranslation", -# "weblate.machinery.deepl.DeepLTranslation", -# "weblate.machinery.glosbe.GlosbeTranslation", -# "weblate.machinery.google.GoogleTranslation", -# "weblate.machinery.googlev3.GoogleV3Translation", -# "weblate.machinery.microsoft.MicrosoftCognitiveTranslation", -# "weblate.machinery.microsoftterminology.MicrosoftTerminologyService", -# "weblate.machinery.mymemory.MyMemoryTranslation", -# "weblate.machinery.netease.NeteaseSightTranslation", -# "weblate.machinery.tmserver.AmagamaTranslation", -# "weblate.machinery.tmserver.TMServerTranslation", -# "weblate.machinery.yandex.YandexTranslation", -# "weblate.machinery.saptranslationhub.SAPTranslationHub", -# "weblate.machinery.youdao.YoudaoTranslation", -# "weblate.machinery.weblatetm.WeblateTranslation", -# "weblate.memory.machine.WeblateMemory", -# ) - -# Machine translation API keys - -# URL of the Apertium APy server -MT_APERTIUM_APY = None - -# DeepL API key -MT_DEEPL_KEY = None - -# Microsoft Cognitive Services Translator API, register at -# https://portal.azure.com/ -MT_MICROSOFT_COGNITIVE_KEY = None -MT_MICROSOFT_REGION = None - -# MyMemory identification email, see -# https://mymemory.translated.net/doc/spec.php -MT_MYMEMORY_EMAIL = None - -# Optional MyMemory credentials to access private translation memory -MT_MYMEMORY_USER = None -MT_MYMEMORY_KEY = None - -# Google API key for Google Translate API v2 -MT_GOOGLE_KEY = None - -# Google Translate API3 credentials and project id -MT_GOOGLE_CREDENTIALS = None -MT_GOOGLE_PROJECT = None - -# Baidu app key and secret -MT_BAIDU_ID = None -MT_BAIDU_SECRET = None - -# Youdao Zhiyun app key and secret -MT_YOUDAO_ID = None -MT_YOUDAO_SECRET = None - -# Netease Sight (Jianwai) app key and secret -MT_NETEASE_KEY = None -MT_NETEASE_SECRET = None - -# API key for Yandex Translate API -MT_YANDEX_KEY = None - -# tmserver URL -MT_TMSERVER = None - -# SAP Translation Hub -MT_SAP_BASE_URL = None -MT_SAP_SANDBOX_APIKEY = None -MT_SAP_USERNAME = None -MT_SAP_PASSWORD = None -MT_SAP_USE_MT = True - -# Title of site to use -SITE_TITLE = "Weblate" - -# Whether site uses https -ENABLE_HTTPS = False - -# Use HTTPS when creating redirect URLs for social authentication, see -# documentation for more details: -# https://python-social-auth-docs.readthedocs.io/en/latest/configuration/settings.html#processing-redirects-and-urlopen -SOCIAL_AUTH_REDIRECT_IS_HTTPS = ENABLE_HTTPS - -# Make CSRF cookie HttpOnly, see documentation for more details: -# https://docs.djangoproject.com/en/1.11/ref/settings/#csrf-cookie-httponly -CSRF_COOKIE_HTTPONLY = True -CSRF_COOKIE_SECURE = ENABLE_HTTPS -# Store CSRF token in session -CSRF_USE_SESSIONS = True -# Customize CSRF failure view -CSRF_FAILURE_VIEW = "weblate.trans.views.error.csrf_failure" -SESSION_COOKIE_SECURE = ENABLE_HTTPS -SESSION_COOKIE_HTTPONLY = True -# SSL redirect -SECURE_SSL_REDIRECT = ENABLE_HTTPS -# Sent referrrer only for same origin links -SECURE_REFERRER_POLICY = "same-origin" -# SSL redirect URL exemption list -SECURE_REDIRECT_EXEMPT = (r"healthz/$",) # Allowing HTTP access to health check -# Session cookie age (in seconds) -SESSION_COOKIE_AGE = 1209600 -# Increase allowed upload size -DATA_UPLOAD_MAX_MEMORY_SIZE = 50000000 - -# Apply session coookie settings to language cookie as ewll -LANGUAGE_COOKIE_SECURE = SESSION_COOKIE_SECURE -LANGUAGE_COOKIE_HTTPONLY = SESSION_COOKIE_HTTPONLY -LANGUAGE_COOKIE_AGE = SESSION_COOKIE_AGE * 10 - -# Some security headers -SECURE_BROWSER_XSS_FILTER = True -X_FRAME_OPTIONS = "DENY" -SECURE_CONTENT_TYPE_NOSNIFF = True - -# Optionally enable HSTS -SECURE_HSTS_SECONDS = 31536000 if ENABLE_HTTPS else 0 -SECURE_HSTS_PRELOAD = ENABLE_HTTPS -SECURE_HSTS_INCLUDE_SUBDOMAINS = False - -# URL of login -LOGIN_URL = "{0}/accounts/login/".format(URL_PREFIX) - -# URL of logout -LOGOUT_URL = "{0}/accounts/logout/".format(URL_PREFIX) - -# Default location for login -LOGIN_REDIRECT_URL = "{0}/".format(URL_PREFIX) - -# Anonymous user name -ANONYMOUS_USER_NAME = "anonymous" - -# Reverse proxy settings -IP_PROXY_HEADER = "HTTP_X_FORWARDED_FOR" -IP_BEHIND_REVERSE_PROXY = False -IP_PROXY_OFFSET = 0 - -# Sending HTML in mails -EMAIL_SEND_HTML = True - -# Subject of emails includes site title -EMAIL_SUBJECT_PREFIX = "[{0}] ".format(SITE_TITLE) - -# Enable remote hooks -ENABLE_HOOKS = True - -# Number of nearby messages to show in each direction -NEARBY_MESSAGES = 5 - -# By default the length of a given translation is limited to the length of -# the source string * 10 characters. Set this option to False to allow longer -# translations (up to 10.000 characters) -LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH = True - -# Use simple language codes for default language/country combinations -SIMPLIFY_LANGUAGES = True - -# Render forms using bootstrap -CRISPY_TEMPLATE_PACK = "bootstrap3" - -# List of quality checks -# CHECK_LIST = ( -# "weblate.checks.same.SameCheck", -# "weblate.checks.chars.BeginNewlineCheck", -# "weblate.checks.chars.EndNewlineCheck", -# "weblate.checks.chars.BeginSpaceCheck", -# "weblate.checks.chars.EndSpaceCheck", -# "weblate.checks.chars.DoubleSpaceCheck", -# "weblate.checks.chars.EndStopCheck", -# "weblate.checks.chars.EndColonCheck", -# "weblate.checks.chars.EndQuestionCheck", -# "weblate.checks.chars.EndExclamationCheck", -# "weblate.checks.chars.EndEllipsisCheck", -# "weblate.checks.chars.EndSemicolonCheck", -# "weblate.checks.chars.MaxLengthCheck", -# "weblate.checks.chars.KashidaCheck", -# "weblate.checks.chars.PuctuationSpacingCheck", -# "weblate.checks.format.PythonFormatCheck", -# "weblate.checks.format.PythonBraceFormatCheck", -# "weblate.checks.format.PHPFormatCheck", -# "weblate.checks.format.CFormatCheck", -# "weblate.checks.format.PerlFormatCheck", -# "weblate.checks.format.JavaScriptFormatCheck", -# "weblate.checks.format.CSharpFormatCheck", -# "weblate.checks.format.JavaFormatCheck", -# "weblate.checks.format.JavaMessageFormatCheck", -# "weblate.checks.format.PercentPlaceholdersCheck", -# "weblate.checks.format.I18NextInterpolationCheck", -# "weblate.checks.angularjs.AngularJSInterpolationCheck", -# "weblate.checks.qt.QtFormatCheck", -# "weblate.checks.qt.QtPluralCheck", -# "weblate.checks.ruby.RubyFormatCheck", -# "weblate.checks.consistency.PluralsCheck", -# "weblate.checks.consistency.SamePluralsCheck", -# "weblate.checks.consistency.ConsistencyCheck", -# "weblate.checks.consistency.TranslatedCheck", -# "weblate.checks.chars.EscapedNewlineCountingCheck", -# "weblate.checks.chars.NewLineCountCheck", -# "weblate.checks.markup.BBCodeCheck", -# "weblate.checks.chars.ZeroWidthSpaceCheck", -# "weblate.checks.render.MaxSizeCheck", -# "weblate.checks.markup.XMLValidityCheck", -# "weblate.checks.markup.XMLTagsCheck", -# "weblate.checks.markup.MarkdownRefLinkCheck", -# "weblate.checks.markup.MarkdownLinkCheck", -# "weblate.checks.markup.MarkdownSyntaxCheck", -# "weblate.checks.markup.URLCheck", -# "weblate.checks.markup.SafeHTMLCheck", -# "weblate.checks.placeholders.PlaceholderCheck", -# "weblate.checks.placeholders.RegexCheck", -# "weblate.checks.duplicate.DuplicateCheck", -# "weblate.checks.source.OptionalPluralCheck", -# "weblate.checks.source.EllipsisCheck", -# "weblate.checks.source.MultipleFailingCheck", -# "weblate.checks.source.LongUntranslatedCheck", -# "weblate.checks.format.MultipleUnnamedFormatsCheck", -# ) - -# List of automatic fixups -# AUTOFIX_LIST = ( -# "weblate.trans.autofixes.whitespace.SameBookendingWhitespace", -# "weblate.trans.autofixes.chars.ReplaceTrailingDotsWithEllipsis", -# "weblate.trans.autofixes.chars.RemoveZeroSpace", -# "weblate.trans.autofixes.chars.RemoveControlChars", -# ) - -# List of enabled addons -# WEBLATE_ADDONS = ( -# "weblate.addons.gettext.GenerateMoAddon", -# "weblate.addons.gettext.UpdateLinguasAddon", -# "weblate.addons.gettext.UpdateConfigureAddon", -# "weblate.addons.gettext.MsgmergeAddon", -# "weblate.addons.gettext.GettextCustomizeAddon", -# "weblate.addons.gettext.GettextAuthorComments", -# "weblate.addons.cleanup.CleanupAddon", -# "weblate.addons.consistency.LangaugeConsistencyAddon", -# "weblate.addons.discovery.DiscoveryAddon", -# "weblate.addons.flags.SourceEditAddon", -# "weblate.addons.flags.TargetEditAddon", -# "weblate.addons.flags.SameEditAddon", -# "weblate.addons.flags.BulkEditAddon", -# "weblate.addons.generate.GenerateFileAddon", -# "weblate.addons.json.JSONCustomizeAddon", -# "weblate.addons.properties.PropertiesSortAddon", -# "weblate.addons.git.GitSquashAddon", -# "weblate.addons.removal.RemoveComments", -# "weblate.addons.removal.RemoveSuggestions", -# "weblate.addons.resx.ResxUpdateAddon", -# "weblate.addons.yaml.YAMLCustomizeAddon", -# "weblate.addons.autotranslate.AutoTranslateAddon", -# ) - -# E-mail address that error messages come from. -SERVER_EMAIL = "noreply@__DOMAIN__" - -# Default email address to use for various automated correspondence from -# the site managers. Used for registration emails. -DEFAULT_FROM_EMAIL = "noreply@__ADMINMAIL__" - -# List of URLs your site is supposed to serve -ALLOWED_HOSTS = ["__DOMAIN__"] - -# Configuration for caching -CACHES = { - "default": { - "BACKEND": "django_redis.cache.RedisCache", - "LOCATION": "redis://127.0.0.1:6379/__REDIS_DB__", - # If redis is running on same host as Weblate, you might - # want to use unix sockets instead: - # "LOCATION": "unix:///var/run/redis/redis.sock?db=1", - "OPTIONS": { - "CLIENT_CLASS": "django_redis.client.DefaultClient", - "PARSER_CLASS": "redis.connection.HiredisParser", - "PASSWORD": None, - "CONNECTION_POOL_KWARGS": {}, - }, - "KEY_PREFIX": "weblate", - }, - "avatar": { - "BACKEND": "django.core.cache.backends.filebased.FileBasedCache", - "LOCATION": os.path.join(DATA_DIR, "avatar-cache"), - "TIMEOUT": 86400, - "OPTIONS": {"MAX_ENTRIES": 1000}, - }, -} - -# Store sessions in cache -SESSION_ENGINE = "django.contrib.sessions.backends.cache" -# Store messages in session -MESSAGE_STORAGE = "django.contrib.messages.storage.session.SessionStorage" - -# REST framework settings for API -REST_FRAMEWORK = { - # Use Django's standard `django.contrib.auth` permissions, - # or allow read-only access for unauthenticated users. - "DEFAULT_PERMISSION_CLASSES": [ - # Require authentication for login required sites - "rest_framework.permissions.IsAuthenticated" - if REQUIRE_LOGIN - else "rest_framework.permissions.IsAuthenticatedOrReadOnly" - ], - "DEFAULT_AUTHENTICATION_CLASSES": ( - "rest_framework.authentication.TokenAuthentication", - "weblate.api.authentication.BearerAuthentication", - "rest_framework.authentication.SessionAuthentication", - ), - "DEFAULT_THROTTLE_CLASSES": ( - "weblate.api.throttling.UserRateThrottle", - "weblate.api.throttling.AnonRateThrottle", - ), - "DEFAULT_THROTTLE_RATES": {"anon": "100/day", "user": "5000/hour"}, - "DEFAULT_PAGINATION_CLASS": ("rest_framework.pagination.PageNumberPagination"), - "PAGE_SIZE": 20, - "VIEW_DESCRIPTION_FUNCTION": "weblate.api.views.get_view_description", - "UNAUTHENTICATED_USER": "weblate.auth.models.get_anonymous", -} - -# Require login for all URLs -if REQUIRE_LOGIN: - LOGIN_REQUIRED_URLS = (r"/(.*)$",) - -# In such case you will want to include some of the exceptions -# LOGIN_REQUIRED_URLS_EXCEPTIONS = ( -# rf"{URL_PREFIX}/accounts/(.*)$", # Required for login -# rf"{URL_PREFIX}/admin/login/(.*)$", # Required for admin login -# rf"{URL_PREFIX}/static/(.*)$", # Required for development mode -# rf"{URL_PREFIX}/widgets/(.*)$", # Allowing public access to widgets -# rf"{URL_PREFIX}/data/(.*)$", # Allowing public access to data exports -# rf"{URL_PREFIX}/hooks/(.*)$", # Allowing public access to notification hooks -# rf"{URL_PREFIX}/healthz/$", # Allowing public access to health check -# rf"{URL_PREFIX}/api/(.*)$", # Allowing access to API -# rf"{URL_PREFIX}/js/i18n/$", # JavaScript localization -# rf"{URL_PREFIX}/contact/$", # Optional for contact form -# rf"{URL_PREFIX}/legal/(.*)$", # Optional for legal app -# ) - -# Silence some of the Django system checks -SILENCED_SYSTEM_CHECKS = [ - # We have modified django.contrib.auth.middleware.AuthenticationMiddleware - # as weblate.accounts.middleware.AuthenticationMiddleware - "admin.E408" -] - -# Celery worker configuration for testing -# CELERY_TASK_ALWAYS_EAGER = True -# CELERY_BROKER_URL = "memory://" -# CELERY_TASK_EAGER_PROPAGATES = True -# Celery worker configuration for production -CELERY_TASK_ALWAYS_EAGER = False -CELERY_BROKER_URL = "redis://127.0.0.1:6379" -CELERY_RESULT_BACKEND = CELERY_BROKER_URL - -# Celery settings, it is not recommended to change these -CELERY_WORKER_MAX_MEMORY_PER_CHILD = 200000 -CELERY_BEAT_SCHEDULE_FILENAME = os.path.join(DATA_DIR, "celery", "beat-schedule") -CELERY_TASK_ROUTES = { - "weblate.trans.tasks.auto_translate": {"queue": "translate"}, - "weblate.memory.tasks.*": {"queue": "memory"}, - "weblate.accounts.tasks.notify_*": {"queue": "notify"}, - "weblate.accounts.tasks.send_mails": {"queue": "notify"}, - "weblate.utils.tasks.settings_backup": {"queue": "backup"}, - "weblate.utils.tasks.database_backup": {"queue": "backup"}, - "weblate.wladmin.tasks.backup": {"queue": "backup"}, - "weblate.wladmin.tasks.backup_service": {"queue": "backup"}, -} - -# Enable plain database backups -DATABASE_BACKUP = "plain" - -# Enable auto updating -AUTO_UPDATE = False - -# PGP commits signing -WEBLATE_GPG_IDENTITY = None - -# Third party services integration -MATOMO_SITE_ID = None -MATOMO_URL = None -GOOGLE_ANALYTICS_ID = None -SENTRY_DSN = None -AKISMET_API_KEY = None \ No newline at end of file diff --git a/ADMIN.md b/doc/ADMIN.md similarity index 91% rename from ADMIN.md rename to doc/ADMIN.md index fa73e74..b45a318 100644 --- a/ADMIN.md +++ b/doc/ADMIN.md @@ -8,7 +8,7 @@ This user will only be used to open the pull-request, each translation keep his ## Settings and upgrades Almost everything related to Weblate's configuration is handled in a `settings.py` file. -You can edit the file `$final_path/local_settings.py` to enable or disable features. +You can edit the file `__INSTALL_DIR__/local_settings.py` to enable or disable features. # Miscellaneous diff --git a/ADMIN_fr.md b/doc/ADMIN_fr.md similarity index 90% rename from ADMIN_fr.md rename to doc/ADMIN_fr.md index 3890ac4..15cd506 100644 --- a/ADMIN_fr.md +++ b/doc/ADMIN_fr.md @@ -8,7 +8,7 @@ Cet utilisateur ne sera utilisé que pour ouvrir la pull-request, chaque traduct ## Paramètres et mises à niveau Presque tout ce qui concerne la configuration de Weblate est géré dans un fichier `settings.py`. -Vous pouvez éditer le fichier `$final_path/local_settings.py` pour activer ou désactiver des fonctionnalités. +Vous pouvez éditer le fichier `__INSTALL_DIR__/local_settings.py` pour activer ou désactiver des fonctionnalités. # Divers diff --git a/scripts/_common.sh b/scripts/_common.sh index 9b485c5..bfc9a94 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -14,6 +14,8 @@ elif [ "$debian_maj_version" -eq 10 ] ; then weblate_pypath="python3.7" elif [ "$debian_maj_version" -eq 11 ] ; then weblate_pypath="python3.9" +elif [ "$debian_maj_version" -eq 12 ] ; then + weblate_pypath="python3.11" fi #================================================= diff --git a/scripts/backup b/scripts/backup index 4472f3d..dbbe2a8 100755 --- a/scripts/backup +++ b/scripts/backup @@ -10,27 +10,6 @@ source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -#REMOVEME? ynh_clean_setup () { - true -} -# Exit if an error occurs during the execution of the script -#REMOVEME? ynh_abort_if_errors - -#================================================= -# LOAD SETTINGS -#================================================= -#REMOVEME? ynh_print_info --message="Loading installation settings..." - -#REMOVEME? app=$YNH_APP_INSTANCE_NAME - -#REMOVEME? #REMOVEME? install_dir=$(ynh_app_setting_get --app=$app --key=install_dir) -#REMOVEME? domain=$(ynh_app_setting_get --app=$app --key=domain) -#REMOVEME? db_name=$(ynh_app_setting_get --app=$app --key=db_name) - #================================================= # DECLARE DATA AND CONF FILES TO BACKUP #================================================= diff --git a/scripts/change_url b/scripts/change_url index afe336e..5a4d779 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -9,61 +9,6 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# RETRIEVE ARGUMENTS -#================================================= - -#REMOVEME? old_domain=$YNH_APP_OLD_DOMAIN -#REMOVEME? old_path=$YNH_APP_OLD_PATH - -#REMOVEME? new_domain=$YNH_APP_NEW_DOMAIN -#REMOVEME? new_path=$YNH_APP_NEW_PATH - -#REMOVEME? app=$YNH_APP_INSTANCE_NAME - -#================================================= -# LOAD SETTINGS -#================================================= -#REMOVEME? ynh_script_progression --message="Loading installation settings..." --weight=1 - -#REMOVEME? # Needed for helper "ynh_add_nginx_config" -#REMOVEME? #REMOVEME? install_dir=$(ynh_app_setting_get --app=$app --key=install_dir) - - -#================================================= -# BACKUP BEFORE CHANGE URL THEN ACTIVE TRAP -#================================================= -#REMOVEME? ynh_script_progression --message="Backing up the app before changing its URL (may take a while)..." - -# Backup the current version of the app -#REMOVEME? ynh_backup_before_upgrade -#REMOVEME? ynh_clean_setup () { - #REMOVEME? ynh_clean_check_starting - # Remove the new domain config file, the remove script won't do it as it doesn't know yet its location. -#REMOVEME? ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" - - # Restore it if the upgrade fails -#REMOVEME? ynh_restore_upgradebackup -} -# Exit if an error occurs during the execution of the script -#REMOVEME? ynh_abort_if_errors - -#================================================= -# CHECK WHICH PARTS SHOULD BE CHANGED -#================================================= - -#REMOVEME? change_domain=0 -#REMOVEME? if [ "$old_domain" != "$new_domain" ] -then - #REMOVEME? change_domain=1 -fi - -#REMOVEME? change_path=0 -#REMOVEME? if [ "$old_path" != "$new_path" ] -then - #REMOVEME? change_path=1 -fi - #================================================= # STANDARD MODIFICATIONS #================================================= @@ -72,7 +17,7 @@ fi ynh_script_progression --message="Stopping systemd services..." --weight=1 ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/weblate.log" --line_match="goodbye to uWSGI" -ynh_systemd_action --service_name="$app-celery" --action="stop" --log_path="systemd" --line_match="Stopped" +ynh_systemd_action --service_name="$app-celery" --action="stop" --log_path="systemd" #================================================= # MODIFY URL IN NGINX CONF @@ -81,30 +26,6 @@ ynh_script_progression --message="Updating NGINX web server configuration..." -- ynh_change_url_nginx_config -#REMOVEME? nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf - -# Change the path in the NGINX config file -if [ $change_path -eq 1 ] -then - # Make a backup of the original NGINX config file if modified -#REMOVEME? ynh_backup_if_checksum_is_different --file="$nginx_conf_path" - # Set global variables for NGINX helper -#REMOVEME? domain="$old_domain" -#REMOVEME? path="$new_path" - # Create a dedicated NGINX config -#REMOVEME? ynh_add_nginx_config -fi - -# Change the domain for NGINX -if [ $change_domain -eq 1 ] -then - # Delete file checksum for the old conf file location -#REMOVEME? ynh_delete_file_checksum --file="$nginx_conf_path" -#REMOVEME? mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf - # Store file checksum for the new config file location -#REMOVEME? ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" -fi - #================================================= # SPECIFIC MODIFICATIONS #================================================= @@ -115,13 +36,13 @@ ynh_script_progression --message="Modify weblate's config file..." --weight=1 settings="$install_dir/venv/lib/$weblate_pypath/site-packages/weblate/settings.py" ynh_backup_if_checksum_is_different --file="$settings" -#REMOVEME? # Change the path in the nginx config file +# Change the path in the nginx config file if [ $change_path -eq 1 ] then ynh_replace_string --match_string="URL_PREFIX = \"${old_path%/}\"" --replace_string="URL_PREFIX = \"${new_path%/}\"" --target_file="$settings" fi -#REMOVEME? # Change the domain for nginx +# Change the domain for nginx if [ $change_domain -eq 1 ] then # replace SERVER_EMAIL @@ -141,7 +62,7 @@ ynh_store_file_checksum --file="$settings" finaluwsgiini="/etc/uwsgi/apps-available/$app.ini" ynh_backup_if_checksum_is_different --file="$finaluwsgiini" -#REMOVEME? # Change the path in the nginx config file +# Change the path in the nginx config file if [ $change_path -eq 1 ] then ynh_replace_string --match_string="mount = $old_path=" --replace_string="mount = $new_path=" --target_file="$finaluwsgiini" @@ -159,13 +80,6 @@ ynh_script_progression --message="Starting a systemd service..." --weight=5 ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/weblate.log" --line_match="spawned uWSGI" ynh_systemd_action --service_name="$app-celery" --action="start" --log_path="/var/log/$app/weblate-celery-celery.log" --line_match="mingle: all alone" -#================================================= -# RELOAD NGINX -#================================================= -#REMOVEME? ynh_script_progression --message="Reloading NGINX web server..." --weight=1 - -#REMOVEME? #REMOVEME? ynh_systemd_action --service_name=nginx --action=reload - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/restore b/scripts/restore index f23e067..28759ce 100755 --- a/scripts/restore +++ b/scripts/restore @@ -10,47 +10,6 @@ source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -#REMOVEME? ynh_clean_setup () { - ynh_clean_check_starting -} -# Exit if an error occurs during the execution of the script -#REMOVEME? ynh_abort_if_errors - -#================================================= -# LOAD SETTINGS -#================================================= -#REMOVEME? ynh_script_progression --message="Loading installation settings..." --weight=1 - -#REMOVEME? app=$YNH_APP_INSTANCE_NAME - -#REMOVEME? domain=$(ynh_app_setting_get --app=$app --key=domain) -#REMOVEME? path=$(ynh_app_setting_get --app=$app --key=path) -#REMOVEME? #REMOVEME? install_dir=$(ynh_app_setting_get --app=$app --key=install_dir) -#REMOVEME? db_name=$(ynh_app_setting_get --app=$app --key=db_name) -#REMOVEME? db_user=$db_name - -#================================================= -# CHECK IF THE APP CAN BE RESTORED -#================================================= -#REMOVEME? ynh_script_progression --message="Validating restoration parameters..." --weight=1 - -#REMOVEME? test ! -d $install_dir \ - || ynh_die --message="There is already a directory: $install_dir " - -#================================================= -# STANDARD RESTORATION STEPS -#================================================= -# RECREATE THE DEDICATED USER -#================================================= -#REMOVEME? ynh_script_progression --message="Recreating the dedicated system user..." --weight=1 - -# Create the dedicated user (if not existing) -#REMOVEME? ynh_system_user_create --username=$app --home_dir="$install_dir" --use_shell - #================================================= # RESTORE THE APP MAIN DIR #================================================= @@ -67,16 +26,6 @@ chown -R $app: "$install_dir" chown $app:www-data "$install_dir" chown -R $app:www-data "$install_dir/data" -#================================================= -# SPECIFIC RESTORATION -#================================================= -# REINSTALL DEPENDENCIES -#================================================= -#REMOVEME? ynh_script_progression --message="Reinstalling dependencies..." --weight=40 - -# Define and install dependencies -#REMOVEME? ynh_exec_warn_less ynh_install_app_dependencies "$pkg_dependencies" - #================================================= # RESTORE THE NGINX CONFIGURATION #================================================= @@ -87,11 +36,8 @@ ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # RESTORE THE POSTGRESQL DATABASE #================================================= -#REMOVEME? ynh_script_progression --message="Restoring the PostgreSQL database..." --weight=5 +REMOVEME? ynh_script_progression --message="Restoring the PostgreSQL database..." --weight=5 -#REMOVEME? db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd) -#REMOVEME? ynh_psql_test_if_first_run -#REMOVEME? ynh_psql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd ynh_psql_execute_as_root --sql="CREATE EXTENSION IF NOT EXISTS pg_trgm;" --database=$db_name ynh_psql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./db.sql diff --git a/scripts/upgrade b/scripts/upgrade index 3457486..5115190 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -12,21 +12,7 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= -#REMOVEME? ynh_script_progression --message="Loading installation settings..." --weight=1 - -#REMOVEME? app=$YNH_APP_INSTANCE_NAME - -#REMOVEME? domain=$(ynh_app_setting_get --app=$app --key=domain) -#REMOVEME? path=$(ynh_app_setting_get --app=$app --key=path) -#REMOVEME? admin=$(ynh_app_setting_get --app=$app --key=admin) -#REMOVEME? #REMOVEME? install_dir=$(ynh_app_setting_get --app=$app --key=install_dir) -#REMOVEME? db_name=$(ynh_app_setting_get --app=$app --key=db_name) -#REMOVEME? db_user=$db_name -#REMOVEME? db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd) -#REMOVEME? used_forge=$(ynh_app_setting_get --app=$app --key=used_forge) -#REMOVEME? forge_username=$(ynh_app_setting_get --app=$app --key=forge_username) -#REMOVEME? forge_token=$(ynh_app_setting_get --app=$app --key=forge_token) -#REMOVEME? redis_db=$(ynh_app_setting_get --app=$app --key=redis_db) +REMOVEME? ynh_script_progression --message="Loading installation settings..." --weight=1 admin_mail=$(ynh_user_get_info --username="$admin" --key=mail) key=$(ynh_string_random --length=50) @@ -37,21 +23,6 @@ key=$(ynh_string_random --length=50) upgrade_type=$(ynh_check_app_version_changed) -#================================================= -# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP -#================================================= -#REMOVEME? ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=40 - -# Backup the current version of the app -#REMOVEME? ynh_backup_before_upgrade -#REMOVEME? ynh_clean_setup () { - ynh_clean_check_starting - # Restore it if the upgrade fails -#REMOVEME? ynh_restore_upgradebackup -} -# Exit if an error occurs during the execution of the script -#REMOVEME? ynh_abort_if_errors - #================================================= # STANDARD UPGRADE STEPS #================================================= @@ -60,59 +31,23 @@ upgrade_type=$(ynh_check_app_version_changed) ynh_script_progression --message="Stopping systemd services..." --weight=5 ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/weblate.log" --line_match="goodbye to uWSGI" -ynh_systemd_action --service_name="$app-celery" --action="stop" --log_path="systemd" --line_match="Stopped" +ynh_systemd_action --service_name="$app-celery" --action="stop" --log_path="systemd" #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 -#REMOVEME? if ynh_legacy_permissions_exists -then -#REMOVEME? ynh_legacy_permissions_delete_all - - ynh_app_setting_delete --app=$app --key=is_public -fi - -if [[ -d "$install_dir/bin/" ]] -then -#REMOVEME? ynh_secure_remove --file="$install_dir/bin/" -fi - -# (<3.8) log cleanups -if [[ -e "/var/log/uwsgi/app/$app" ]] -then - ynh_systemd_action --service_name=$app --action="stop" - ynh_systemd_action --service_name="$app-celery" --action="stop" - ynh_secure_remove --file="/var/log/uwsgi/app/$app" - ynh_secure_remove --file="/var/log/$app-celery" -fi - # If used_forge, forge_username, forge_token don't exist, create them if [ -z "$used_forge" ]; then used_forge="GitHub" -#REMOVEME? forge_username=$(ynh_app_setting_get --app=$app --key=github_account) -#REMOVEME? forge_token=$(ynh_app_setting_get --app=$app --key=github_token) + forge_username=$(ynh_app_setting_get --app=$app --key=github_account) + forge_token=$(ynh_app_setting_get --app=$app --key=github_token) ynh_app_setting_set --app=$app --key=used_forge --value=$used_forge ynh_app_setting_set --app=$app --key=forge_username --value=$forge_username ynh_app_setting_set --app=$app --key=forge_token --value=$forge_token fi -#================================================= -# CREATE DEDICATED USER -#================================================= -#REMOVEME? ynh_script_progression --message="Making sure dedicated system user exists..." --weight=1 - -# Create a dedicated user (if not existing) -#REMOVEME? ynh_system_user_create --username=$app --home_dir="$install_dir" --use_shell - -#================================================= -# UPGRADE DEPENDENCIES -#================================================= -#REMOVEME? ynh_script_progression --message="Upgrading dependencies..." --weight=5 - -#REMOVEME? ynh_exec_warn_less ynh_install_app_dependencies "$pkg_dependencies" - #================================================= # NGINX CONFIGURATION #================================================= @@ -268,11 +203,6 @@ fi ynh_psql_execute_as_root --sql="CREATE EXTENSION IF NOT EXISTS pg_trgm;" --database=$db_name -if [ "$current_version" -lt "4" ] -then - upgrade "4.1.1" "../conf/settings.4.1.1.py" -fi - upgrade $(ynh_app_upstream_version) "../conf/settings.py" # Set right permissions for curl installation