feat: Export dbs
This commit is contained in:
parent
2959a86f8f
commit
57088426f8
13 changed files with 59 additions and 13 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -28,6 +28,9 @@ postland-*.tar
|
|||
# Ignore assets that are produced by build tools.
|
||||
/priv/static/assets/
|
||||
|
||||
# Ignore temporary files
|
||||
/priv/tmp/
|
||||
|
||||
# Ignore digested assets cache.
|
||||
/priv/static/cache_manifest.json
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
- Posting
|
||||
- Deleting posts
|
||||
- Approving / declining follows and authorized instance list
|
||||
- Following
|
||||
- Unfollowing
|
||||
- Liking
|
||||
|
|
|
|||
4
fly.toml
4
fly.toml
|
|
@ -21,9 +21,9 @@ kill_signal = 'SIGTERM'
|
|||
[http_service]
|
||||
internal_port = 8080
|
||||
force_https = true
|
||||
auto_stop_machines = 'stop'
|
||||
auto_stop_machines = false
|
||||
auto_start_machines = true
|
||||
min_machines_running = 0
|
||||
min_machines_running = 1
|
||||
processes = ['app']
|
||||
|
||||
[http_service.concurrency]
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ defmodule ActivityPub.Headers do
|
|||
|
||||
defp find_value(headers, key) do
|
||||
Enum.find_value(headers, fn {key_candidate, value} ->
|
||||
String.downcase(key_candidate) == key && value
|
||||
String.downcase(key_candidate) == String.downcase(key) && value
|
||||
end)
|
||||
end
|
||||
|
||||
|
|
@ -94,7 +94,7 @@ defmodule ActivityPub.Headers do
|
|||
key_map = result.body["publicKey"]
|
||||
|
||||
if key_map["id"] == key_id do
|
||||
[public_key | _] =
|
||||
public_key =
|
||||
:public_key.pem_decode(key_map["publicKeyPem"])
|
||||
|> hd()
|
||||
|> :public_key.pem_entry_decode()
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ defmodule PostlandWeb.ActorController do
|
|||
use PostlandWeb, :controller
|
||||
|
||||
def get(conn, _params) do
|
||||
render(conn, :actor, %{})
|
||||
conn
|
||||
|> put_resp_content_type("application/activity+json")
|
||||
|> render(:actor, %{})
|
||||
end
|
||||
end
|
||||
|
|
|
|||
16
lib/postland_web/controllers/export_controller.ex
Normal file
16
lib/postland_web/controllers/export_controller.ex
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
defmodule PostlandWeb.ExportController do
|
||||
use PostlandWeb, :controller
|
||||
|
||||
def export(conn, _params) do
|
||||
db_path = Postland.Repo.config() |> Keyword.get(:database)
|
||||
dirname = Path.dirname(db_path)
|
||||
filename = Path.basename(db_path)
|
||||
|
||||
files = [filename, "#{filename}-shm", "#{filename}-wal"] |> Enum.map(&String.to_charlist/1)
|
||||
zip_path = Path.join([File.cwd!(), "priv", "tmp", "db-export.zip"])
|
||||
|
||||
:zip.create(zip_path, files, cwd: dirname)
|
||||
|
||||
send_download(conn, {:file, zip_path}, filename: "db-export.zip")
|
||||
end
|
||||
end
|
||||
|
|
@ -10,13 +10,16 @@ defmodule PostlandWeb.InboxController do
|
|||
if Headers.verify(conn.method, conn.request_path, conn.req_headers) do
|
||||
case Activities.record_activity(params) do
|
||||
{:ok, _activity} ->
|
||||
render(conn, :ok)
|
||||
send_resp(conn, 200, "ok")
|
||||
|
||||
error ->
|
||||
Logger.error(error)
|
||||
render(conn, :unprocessable_entity)
|
||||
send_resp(conn, 422, "unprocessable_entity")
|
||||
end
|
||||
else
|
||||
render(conn, :forbidden)
|
||||
Logger.info("Failed to verify type=#{Map.get(params, "type")}")
|
||||
|
||||
send_resp(conn, 403, "forbidden")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
defmodule PostlandWeb.OutboxController do
|
||||
use PostlandWeb, :controller
|
||||
use PostlandWeb, :controller
|
||||
|
||||
alias ActivityPub.Headers
|
||||
require Logger
|
||||
|
||||
alias ActivityPub.Headers
|
||||
|
||||
def get(conn, _params) do
|
||||
json = %{
|
||||
|
|
@ -15,7 +17,7 @@ defmodule PostlandWeb.OutboxController do
|
|||
if Headers.verify(conn.method, conn.request_path, conn.req_headers) do
|
||||
render(conn, json)
|
||||
else
|
||||
render(conn, :forbidden)
|
||||
send_resp(conn, 403, "forbidden")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ defmodule PostlandWeb.WebfingerController do
|
|||
use PostlandWeb, :controller
|
||||
|
||||
def get(conn, _params) do
|
||||
render(conn, :webfinger, %{})
|
||||
conn
|
||||
|> put_resp_content_type("application/activity+json")
|
||||
|> render(:webfinger, %{})
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -14,6 +14,11 @@ defmodule PostlandWeb.WebfingerJSON do
|
|||
"rel" => "self",
|
||||
"type" => "application/activity+json",
|
||||
"href" => url(~p"/actor")
|
||||
},
|
||||
%{
|
||||
"rel" => "http://webfinger.net/rel/profile-page",
|
||||
"type" =>"text/html",
|
||||
"href" => url(~p"/about")
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
9
lib/postland_web/live/profile_live.ex
Normal file
9
lib/postland_web/live/profile_live.ex
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
defmodule PostlandWeb.ProfileLive do
|
||||
use PostlandWeb, :live_view
|
||||
|
||||
def render(assigns) do
|
||||
~H"""
|
||||
<div>Nothing here yet.</div>
|
||||
"""
|
||||
end
|
||||
end
|
||||
|
|
@ -27,7 +27,7 @@ defmodule PostlandWeb.Router do
|
|||
get "/.well-known/webfinger", WebfingerController, :get
|
||||
|
||||
get "/actor", ActorController, :get
|
||||
get "/inbox", InboxController, :post
|
||||
post "/inbox", InboxController, :post
|
||||
get "/outbox", OutboxController, :get
|
||||
end
|
||||
|
||||
|
|
@ -35,6 +35,7 @@ defmodule PostlandWeb.Router do
|
|||
pipe_through [:browser, :redirect_if_not_set_up]
|
||||
|
||||
get "/", PageController, :home
|
||||
live "/about", ProfileLive, :show
|
||||
end
|
||||
|
||||
# Other scopes may use custom stacks.
|
||||
|
|
@ -74,6 +75,8 @@ defmodule PostlandWeb.Router do
|
|||
scope "/", PostlandWeb do
|
||||
pipe_through [:browser, :require_authenticated_user]
|
||||
|
||||
get "/system/export", ExportController, :export
|
||||
|
||||
live_session :require_authenticated_user,
|
||||
on_mount: [{PostlandWeb.UserAuth, :ensure_authenticated}] do
|
||||
live "/users/settings", UserSettingsLive, :edit
|
||||
|
|
|
|||
0
priv/tmp/.keep
Normal file
0
priv/tmp/.keep
Normal file
Loading…
Reference in a new issue