Merge branch 'feature/funkwhale-audio' into 'develop'
Add support for funkwhale Audio activity Closes #764 and #1624 See merge request pleroma/pleroma!2287
This commit is contained in:
		
							parent
							
								
									01a3f145d5
								
							
						
					
					
						commit
						b0a9a02af3
					
				
					 7 changed files with 124 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -229,7 +229,8 @@ def fix_url(%{"url" => url} = object) when is_map(url) do
 | 
			
		|||
    Map.put(object, "url", url["href"])
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def fix_url(%{"type" => "Video", "url" => url} = object) when is_list(url) do
 | 
			
		||||
  def fix_url(%{"type" => object_type, "url" => url} = object)
 | 
			
		||||
      when object_type in ["Video", "Audio"] and is_list(url) do
 | 
			
		||||
    first_element = Enum.at(url, 0)
 | 
			
		||||
 | 
			
		||||
    link_element = Enum.find(url, fn x -> is_map(x) and x["mimeType"] == "text/html" end)
 | 
			
		||||
| 
						 | 
				
			
			@ -398,7 +399,7 @@ def handle_incoming(
 | 
			
		|||
        %{"type" => "Create", "object" => %{"type" => objtype} = object} = data,
 | 
			
		||||
        options
 | 
			
		||||
      )
 | 
			
		||||
      when objtype in ["Article", "Event", "Note", "Video", "Page", "Question", "Answer"] do
 | 
			
		||||
      when objtype in ["Article", "Event", "Note", "Video", "Page", "Question", "Answer", "Audio"] do
 | 
			
		||||
    actor = Containment.get_actor(data)
 | 
			
		||||
 | 
			
		||||
    data =
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -421,7 +421,7 @@ def get_reply_to(%{data: %{"object" => _object}} = activity, _) do
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def render_content(%{data: %{"type" => object_type}} = object)
 | 
			
		||||
      when object_type in ["Video", "Event"] do
 | 
			
		||||
      when object_type in ["Video", "Event", "Audio"] do
 | 
			
		||||
    with name when not is_nil(name) and name != "" <- object.data["name"] do
 | 
			
		||||
      "<p><a href=\"#{object.data["id"]}\">#{name}</a></p>#{object.data["content"]}"
 | 
			
		||||
    else
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										44
									
								
								test/fixtures/tesla_mock/funkwhale_audio.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								test/fixtures/tesla_mock/funkwhale_audio.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
{
 | 
			
		||||
  "id": "https://channels.tests.funkwhale.audio/federation/music/uploads/42342395-0208-4fee-a38d-259a6dae0871",
 | 
			
		||||
  "type": "Audio",
 | 
			
		||||
  "name": "Compositions - Test Audio for Pleroma",
 | 
			
		||||
  "attributedTo": "https://channels.tests.funkwhale.audio/federation/actors/compositions",
 | 
			
		||||
  "published": "2020-03-11T10:01:52.714918+00:00",
 | 
			
		||||
  "to": "https://www.w3.org/ns/activitystreams#Public",
 | 
			
		||||
  "url": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "Link",
 | 
			
		||||
      "mimeType": "audio/ogg",
 | 
			
		||||
      "href": "https://channels.tests.funkwhale.audio/api/v1/listen/3901e5d8-0445-49d5-9711-e096cf32e515/?upload=42342395-0208-4fee-a38d-259a6dae0871&download=false"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "Link",
 | 
			
		||||
      "mimeType": "text/html",
 | 
			
		||||
      "href": "https://channels.tests.funkwhale.audio/library/tracks/74"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "content": "<p>This is a test Audio for Pleroma.</p>",
 | 
			
		||||
  "mediaType": "text/html",
 | 
			
		||||
  "tag": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "Hashtag",
 | 
			
		||||
      "name": "#funkwhale"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "Hashtag",
 | 
			
		||||
      "name": "#test"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "Hashtag",
 | 
			
		||||
      "name": "#tests"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "summary": "#funkwhale #test #tests",
 | 
			
		||||
  "@context": [
 | 
			
		||||
    "https://www.w3.org/ns/activitystreams",
 | 
			
		||||
    "https://w3id.org/security/v1",
 | 
			
		||||
    {
 | 
			
		||||
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										44
									
								
								test/fixtures/tesla_mock/funkwhale_channel.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								test/fixtures/tesla_mock/funkwhale_channel.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
{
 | 
			
		||||
  "id": "https://channels.tests.funkwhale.audio/federation/actors/compositions",
 | 
			
		||||
  "outbox": "https://channels.tests.funkwhale.audio/federation/actors/compositions/outbox",
 | 
			
		||||
  "inbox": "https://channels.tests.funkwhale.audio/federation/actors/compositions/inbox",
 | 
			
		||||
  "preferredUsername": "compositions",
 | 
			
		||||
  "type": "Person",
 | 
			
		||||
  "name": "Compositions",
 | 
			
		||||
  "followers": "https://channels.tests.funkwhale.audio/federation/actors/compositions/followers",
 | 
			
		||||
  "following": "https://channels.tests.funkwhale.audio/federation/actors/compositions/following",
 | 
			
		||||
  "manuallyApprovesFollowers": false,
 | 
			
		||||
  "url": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "Link",
 | 
			
		||||
      "href": "https://channels.tests.funkwhale.audio/channels/compositions",
 | 
			
		||||
      "mediaType": "text/html"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "Link",
 | 
			
		||||
      "href": "https://channels.tests.funkwhale.audio/api/v1/channels/compositions/rss",
 | 
			
		||||
      "mediaType": "application/rss+xml"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "icon": {
 | 
			
		||||
    "type": "Image",
 | 
			
		||||
    "url": "https://channels.tests.funkwhale.audio/media/attachments/75/b4/f1/nosmile.jpeg",
 | 
			
		||||
    "mediaType": "image/jpeg"
 | 
			
		||||
  },
 | 
			
		||||
  "summary": "<p>I'm testing federation with the fediverse :)</p>",
 | 
			
		||||
  "@context": [
 | 
			
		||||
    "https://www.w3.org/ns/activitystreams",
 | 
			
		||||
    "https://w3id.org/security/v1",
 | 
			
		||||
    {
 | 
			
		||||
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "publicKey": {
 | 
			
		||||
    "owner": "https://channels.tests.funkwhale.audio/federation/actors/compositions",
 | 
			
		||||
    "publicKeyPem": "-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEAv25u57oZfVLV3KltS+HcsdSx9Op4MmzIes1J8Wu8s0KbdXf2zEwS\nsVqyHgs/XCbnzsR3FqyJTo46D2BVnvZcuU5srNcR2I2HMaqQ0oVdnATE4K6KdcgV\nN+98pMWo56B8LTgE1VpvqbsrXLi9jCTzjrkebVMOP+ZVu+64v1qdgddseblYMnBZ\nct0s7ONbHnqrWlTGf5wES1uIZTVdn5r4MduZG+Uenfi1opBS0lUUxfWdW9r0oF2b\nyneZUyaUCbEroeKbqsweXCWVgnMarUOsgqC42KM4cf95lySSwTSaUtZYIbTw7s9W\n2jveU/rVg8BYZu5JK5obgBoxtlUeUoSswwIDAQAB\n-----END RSA PUBLIC KEY-----\n",
 | 
			
		||||
    "id": "https://channels.tests.funkwhale.audio/federation/actors/compositions#main-key"
 | 
			
		||||
  },
 | 
			
		||||
  "endpoints": {
 | 
			
		||||
    "sharedInbox": "https://channels.tests.funkwhale.audio/federation/shared/inbox"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1273,6 +1273,21 @@ def get("https://patch.cx/users/rin", _, _, _) do
 | 
			
		|||
    {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/rin.json")}}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def get(
 | 
			
		||||
        "https://channels.tests.funkwhale.audio/federation/music/uploads/42342395-0208-4fee-a38d-259a6dae0871",
 | 
			
		||||
        _,
 | 
			
		||||
        _,
 | 
			
		||||
        _
 | 
			
		||||
      ) do
 | 
			
		||||
    {:ok,
 | 
			
		||||
     %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/funkwhale_audio.json")}}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def get("https://channels.tests.funkwhale.audio/federation/actors/compositions", _, _, _) do
 | 
			
		||||
    {:ok,
 | 
			
		||||
     %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/funkwhale_channel.json")}}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def get("http://example.com/rel_me/error", _, _, _) do
 | 
			
		||||
    {:ok, %Tesla.Env{status: 404, body: ""}}
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -420,6 +420,22 @@ test "a peertube video" do
 | 
			
		|||
    assert length(represented[:media_attachments]) == 1
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  test "funkwhale audio" do
 | 
			
		||||
    user = insert(:user)
 | 
			
		||||
 | 
			
		||||
    {:ok, object} =
 | 
			
		||||
      Pleroma.Object.Fetcher.fetch_object_from_id(
 | 
			
		||||
        "https://channels.tests.funkwhale.audio/federation/music/uploads/42342395-0208-4fee-a38d-259a6dae0871"
 | 
			
		||||
      )
 | 
			
		||||
 | 
			
		||||
    %Activity{} = activity = Activity.get_create_by_object_ap_id(object.data["id"])
 | 
			
		||||
 | 
			
		||||
    represented = StatusView.render("show.json", %{for: user, activity: activity})
 | 
			
		||||
 | 
			
		||||
    assert represented[:id] == to_string(activity.id)
 | 
			
		||||
    assert length(represented[:media_attachments]) == 1
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  test "a Mobilizon event" do
 | 
			
		||||
    user = insert(:user)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -581,7 +581,7 @@ test "redirects with oauth authorization, " <>
 | 
			
		|||
      # In case scope param is missing, expecting _all_ app-supported scopes to be granted
 | 
			
		||||
      for user <- [non_admin, admin],
 | 
			
		||||
          {requested_scopes, expected_scopes} <-
 | 
			
		||||
            %{scopes_subset => scopes_subset, nil => app_scopes} do
 | 
			
		||||
            %{scopes_subset => scopes_subset, nil: app_scopes} do
 | 
			
		||||
        conn =
 | 
			
		||||
          post(
 | 
			
		||||
            build_conn(),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue