Merge branch 'bugfix/notice-external-redirect' into 'develop'
Redirect non-local activities when /notice/:id is used See merge request pleroma/pleroma!3300
This commit is contained in:
		
						commit
						ea5469961a
					
				
					 3 changed files with 14 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -18,6 +18,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 | 
			
		|||
- Deprecated `Pleroma.Uploaders.S3, :public_endpoint`. Now `Pleroma.Upload, :base_url` is the standard configuration key for all uploaders.
 | 
			
		||||
- Improved Apache webserver support: updated sample configuration, MediaProxy cache invalidation verified with the included sample script
 | 
			
		||||
- Improve OAuth 2.0 provider support. A missing `fqn` field was added to the response, but does not expose the user's email address.
 | 
			
		||||
- Provide redirect of external posts from `/notice/:id` to their original URL
 | 
			
		||||
 | 
			
		||||
<details>
 | 
			
		||||
  <summary>API Changes</summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,12 +73,8 @@ def notice(%{assigns: %{format: format}} = conn, %{"id" => id}) do
 | 
			
		|||
         %User{} = user <- User.get_cached_by_ap_id(activity.data["actor"]) do
 | 
			
		||||
      cond do
 | 
			
		||||
        format in ["json", "activity+json"] ->
 | 
			
		||||
          if activity.local do
 | 
			
		||||
            %{data: %{"id" => redirect_url}} = Object.normalize(activity, fetch: false)
 | 
			
		||||
            redirect(conn, external: redirect_url)
 | 
			
		||||
          else
 | 
			
		||||
            {:error, :not_found}
 | 
			
		||||
          end
 | 
			
		||||
          %{data: %{"id" => redirect_url}} = Object.normalize(activity, fetch: false)
 | 
			
		||||
          redirect(conn, external: redirect_url)
 | 
			
		||||
 | 
			
		||||
        activity.data["type"] == "Create" ->
 | 
			
		||||
          %Object{} = object = Object.normalize(activity, fetch: false)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -144,13 +144,19 @@ test "redirects to a proper object URL when json requested and the object is loc
 | 
			
		|||
      assert redirect_url == expected_redirect_url
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test "returns a 404 on remote notice when json requested", %{conn: conn} do
 | 
			
		||||
    test "redirects to a proper object URL when json requested and the object is remote", %{
 | 
			
		||||
      conn: conn
 | 
			
		||||
    } do
 | 
			
		||||
      note_activity = insert(:note_activity, local: false)
 | 
			
		||||
      expected_redirect_url = Object.normalize(note_activity, fetch: false).data["id"]
 | 
			
		||||
 | 
			
		||||
      conn
 | 
			
		||||
      |> put_req_header("accept", "application/activity+json")
 | 
			
		||||
      |> get("/notice/#{note_activity.id}")
 | 
			
		||||
      |> response(404)
 | 
			
		||||
      redirect_url =
 | 
			
		||||
        conn
 | 
			
		||||
        |> put_req_header("accept", "application/activity+json")
 | 
			
		||||
        |> get("/notice/#{note_activity.id}")
 | 
			
		||||
        |> redirected_to()
 | 
			
		||||
 | 
			
		||||
      assert redirect_url == expected_redirect_url
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test "500s when actor not found", %{conn: conn} do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue