From 6cf1d97d5ac732df8c3bb8862f4748d890ca689a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Thu, 2 Mar 2023 15:22:39 +0100 Subject: [PATCH] FEAT: add db export admin route for pg and sqlite, add to adminui --- .gitignore | 2 ++ lnbits/core/templates/admin/index.html | 18 ++-------- lnbits/core/views/admin_api.py | 48 +++++++++++++++++++++++++- 3 files changed, 52 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index d686ae120..e33b1579d 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,8 @@ docker # fly.io fly.toml +lnbits-backup.zip + # Ignore extensions (post installable extension PR) extensions/ upgrades/ diff --git a/lnbits/core/templates/admin/index.html b/lnbits/core/templates/admin/index.html index 96e04fe61..4ddca6c0e 100644 --- a/lnbits/core/templates/admin/index.html +++ b/lnbits/core/templates/admin/index.html @@ -47,11 +47,11 @@ Add funds to a wallet. - + > FileResponse: + last_filename = "lnbits-backup" + filename = f"lnbits-backup-{int(time.time())}.zip" + db_url = settings.lnbits_database_url + pg_backup_filename = f"{settings.lnbits_data_folder}/lnbits-database.dmp" + is_pg = db_url and db_url.startswith("postgres://") + + if is_pg: + p = urlparse(db_url) + command = ( + f"pg_dump --host={p.hostname} " + f'--dbname={p.path.replace("/", "")} ' + f"--username={p.username} " + f"--no-password " + f"--format=c " + f"--file={pg_backup_filename}" + ) + proc = Popen( + command, shell=True, env={**os.environ, "PGPASSWORD": p.password or ""} + ) + proc.wait() + + make_archive(last_filename, "zip", settings.lnbits_data_folder) + + # cleanup pg_dump file + if is_pg: + proc = Popen(f"rm {pg_backup_filename}", shell=True) + proc.wait() + + return FileResponse( + path=f"{last_filename}.zip", filename=filename, media_type="application/zip" + )