devel #228
3 changed files with 45 additions and 3 deletions
|
@ -11,8 +11,8 @@ defmodule ChiyaWeb.Indie.Micropub do
|
|||
with {:ok, note_attrs} <- get_attrs(type, properties, channel_id),
|
||||
{:ok, note} <- Chiya.Notes.create_note(note_attrs) do
|
||||
create_photos(note, properties)
|
||||
Logger.info("Note created!")
|
||||
|
||||
Logger.info("Note created!")
|
||||
{:ok, :created, Chiya.Notes.Note.note_url(note)}
|
||||
else
|
||||
error ->
|
||||
|
@ -23,6 +23,33 @@ defmodule ChiyaWeb.Indie.Micropub do
|
|||
end
|
||||
end
|
||||
|
||||
def find_note(note_url) do
|
||||
slug = Chiya.Notes.Note.note_slug(note_url)
|
||||
Chiya.Notes.get_note_preloaded_by_slug(slug)
|
||||
end
|
||||
|
||||
def update_note(note, replace, add, _delete) do
|
||||
settings = Chiya.Site.get_settings()
|
||||
channel_id = settings.micropub_channel_id
|
||||
|
||||
properties =
|
||||
%{}
|
||||
|> Enum.into(replace)
|
||||
|> Enum.into(add)
|
||||
|
||||
with {:ok, note_attrs} <- get_attrs("entry", properties, channel_id),
|
||||
{:ok, note} <- Chiya.Notes.update_note(note, note_attrs) do
|
||||
Logger.info("Note updated!")
|
||||
{:ok, note}
|
||||
else
|
||||
error ->
|
||||
Logger.error("Error occurred while creating note from micropub:")
|
||||
Logger.error(inspect(error))
|
||||
|
||||
{:error, :invalid_request}
|
||||
end
|
||||
end
|
||||
|
||||
defp create_photos(note, properties) do
|
||||
properties
|
||||
|> Props.get_photos()
|
||||
|
|
|
@ -41,8 +41,14 @@ defmodule ChiyaWeb.Indie.MicropubHandler do
|
|||
end
|
||||
|
||||
@impl true
|
||||
def handle_update(_, _, _, _, _) do
|
||||
{:error, :insufficient_scope}
|
||||
def handle_update(url, replace, add, delete, access_token) do
|
||||
with :ok <- Micropub.verify_token(access_token),
|
||||
{:ok, note} <- Micropub.find_note(url),
|
||||
{:ok, note} <- Micropub.update_note(note, replace, add, delete) do
|
||||
:ok
|
||||
else
|
||||
error -> error
|
||||
end
|
||||
end
|
||||
|
||||
@impl true
|
||||
|
|
|
@ -4,6 +4,7 @@ defmodule ChiyaWeb.MicropubTest do
|
|||
alias ChiyaWeb.Indie.Micropub
|
||||
alias Chiya.Notes.Note
|
||||
alias Chiya.Channels.Channel
|
||||
import Chiya.NoteFixtures
|
||||
|
||||
@valid_props %{
|
||||
"content" => ["this is a test"]
|
||||
|
@ -22,6 +23,14 @@ defmodule ChiyaWeb.MicropubTest do
|
|||
end
|
||||
end
|
||||
|
||||
describe "update_note" do
|
||||
test "updates a note" do
|
||||
note = note_fixture()
|
||||
|
||||
assert :ok = Micropub.update_note(note, %{"content" => ["replaced content"]})
|
||||
end
|
||||
end
|
||||
|
||||
setup do
|
||||
{:ok, channel} =
|
||||
Chiya.Channels.create_channel(%{
|
||||
|
|
Loading…
Reference in a new issue