def saml_metadata(request): if "social_core.backends.saml.SAMLAuth" not in settings.AUTHENTICATION_BACKENDS: raise Http404 # Generate metadata complete_url = reverse("social:complete", args=("saml", )) saml_backend = social_django.utils.load_backend(load_strategy(request), "saml", complete_url) metadata, errors = saml_backend.generate_metadata_xml() # Handle errors if errors: add_breadcrumb(category="auth", message="SAML errors", errors=errors) report_error(level="error", cause="SAML metadata") return HttpResponseServerError(content=", ".join(errors)) return HttpResponse(content=metadata, content_type="text/xml")
def borg(cmd, env=None): """Wrapper to execute borgbackup.""" with backup_lock(): SSH_WRAPPER.create() try: return subprocess.check_output( ["borg", "--rsh", SSH_WRAPPER.filename] + cmd, stderr=subprocess.STDOUT, env=get_clean_env(env), universal_newlines=True, ) except OSError as error: report_error() raise BackupError(f"Could not execute borg program: {error}") except subprocess.CalledProcessError as error: add_breadcrumb(category="backup", message="borg output", stdout=error.stdout) report_error() raise BackupError(error.stdout)
def add_breadcrumb(cls, message, **data): add_breadcrumb(category="vcs", message=message, **data)
def add_breadcrumb(cls, message, **data): add_breadcrumb(category="storage", message=message, **data)
def database_backup(): if settings.DATABASE_BACKUP == "none": return with backup_lock(): database = settings.DATABASES["default"] env = get_clean_env() compress = settings.DATABASE_BACKUP == "compressed" out_compressed = data_dir("backups", "database.sql.gz") out_plain = data_dir("backups", "database.sql") if using_postgresql(): cmd = ["pg_dump", "--dbname", database["NAME"]] if database["HOST"]: cmd.extend(["--host", database["HOST"]]) if database["PORT"]: cmd.extend(["--port", database["PORT"]]) if database["USER"]: cmd.extend(["--username", database["USER"]]) if settings.DATABASE_BACKUP == "compressed": cmd.extend(["--file", out_compressed]) cmd.extend(["--compress", "6"]) compress = False else: cmd.extend(["--file", out_plain]) env["PGPASSWORD"] = database["PASSWORD"] else: cmd = [ "mysqldump", "--result-file", out_plain, "--single-transaction", "--skip-lock-tables", ] if database["HOST"]: cmd.extend(["--host", database["HOST"]]) if database["PORT"]: cmd.extend(["--port", database["PORT"]]) if database["USER"]: cmd.extend(["--user", database["USER"]]) cmd.extend(["--databases", database["NAME"]]) env["MYSQL_PWD"] = database["PASSWORD"] try: subprocess.run( cmd, env=env, capture_output=True, stdin=subprocess.DEVNULL, check=True, text=True, ) except subprocess.CalledProcessError as error: add_breadcrumb( category="backup", message="database dump output", stdout=error.stdout, stderr=error.stderr, ) report_error() raise if compress: with open(out_plain, "rb") as f_in: with gzip.open(out_compressed, "wb") as f_out: shutil.copyfileobj(f_in, f_out) os.unlink(out_plain)