24 lines
775 B
Elixir
24 lines
775 B
Elixir
defmodule Mix.Tasks.Wiki.Upload do
|
|
use Mix.Task
|
|
alias Wiki.{Repo, Accounts, Accounts.User, Content.Upload}
|
|
|
|
@shortdoc "Decrypts an upload into the given file"
|
|
def run(["decrypt", id, output_file]) do
|
|
email = IO.gets("Email: ") |> String.trim()
|
|
password = IO.gets("Password: ") |> String.trim()
|
|
|
|
Mix.Task.run("app.start")
|
|
|
|
user = Repo.get_by!(User, email: email)
|
|
upload = Repo.get!(Upload, String.to_integer(id)) |> Repo.preload(:page)
|
|
|
|
if upload.page.user_id != user.id do
|
|
raise "upload owner does not match provided user"
|
|
else
|
|
key = Accounts.generate_content_encryption_key(user, %{"password" => password})
|
|
key = Base.decode16!(key, case: :lower)
|
|
Upload.decrypt_to_file(upload, key, output_file)
|
|
end
|
|
end
|
|
end
|