wiki/lib/mix/tasks/wiki/upload.ex

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