Add backup upload

This commit is contained in:
Egor Kislitsyn 2020-08-31 20:31:21 +04:00
parent c82f912959
commit be42ab70dc
No known key found for this signature in database
GPG key ID: 1B49CB15B71E7805
2 changed files with 35 additions and 2 deletions

View file

@ -22,7 +22,25 @@ def run(user) do
:ok <- bookmarks(path, user), :ok <- bookmarks(path, user),
{:ok, zip_path} <- :zip.create('#{path}.zip', @files, cwd: path), {:ok, zip_path} <- :zip.create('#{path}.zip', @files, cwd: path),
{:ok, _} <- File.rm_rf(path) do {:ok, _} <- File.rm_rf(path) do
{:ok, zip_path} {:ok, :binary.list_to_bin(zip_path)}
end
end
def upload(zip_path) do
uploader = Pleroma.Config.get([Pleroma.Upload, :uploader])
file_name = zip_path |> String.split("/") |> List.last()
id = Ecto.UUID.generate()
upload = %Pleroma.Upload{
id: id,
name: file_name,
tempfile: zip_path,
content_type: "application/zip",
path: id <> "/" <> file_name
}
with :ok <- uploader.put_file(upload), :ok <- File.rm(zip_path) do
{:ok, upload}
end end
end end

View file

@ -28,7 +28,7 @@ test "it exports user data" do
Bookmark.create(user.id, status3.id) Bookmark.create(user.id, status3.id)
assert {:ok, path} = Pleroma.Export.run(user) assert {:ok, path} = Pleroma.Export.run(user)
assert {:ok, zipfile} = :zip.zip_open(path, [:memory]) assert {:ok, zipfile} = :zip.zip_open(String.to_charlist(path), [:memory])
assert {:ok, {'actor.json', json}} = :zip.zip_get('actor.json', zipfile) assert {:ok, {'actor.json', json}} = :zip.zip_get('actor.json', zipfile)
assert %{ assert %{
@ -108,4 +108,19 @@ test "it exports user data" do
:zip.zip_close(zipfile) :zip.zip_close(zipfile)
File.rm!(path) File.rm!(path)
end end
test "it uploads an exported backup archive" do
user = insert(:user, %{nickname: "cofe", name: "Cofe", ap_id: "http://cofe.io/users/cofe"})
{:ok, status1} = CommonAPI.post(user, %{status: "status1"})
{:ok, status2} = CommonAPI.post(user, %{status: "status2"})
{:ok, status3} = CommonAPI.post(user, %{status: "status3"})
CommonAPI.favorite(user, status1.id)
CommonAPI.favorite(user, status2.id)
Bookmark.create(user.id, status2.id)
Bookmark.create(user.id, status3.id)
assert {:ok, path} = Pleroma.Export.run(user)
assert {:ok, %Pleroma.Upload{}} = Pleroma.Export.upload(path)
end
end end