Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
pleroma
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
379
Issues
379
List
Boards
Labels
Service Desk
Milestones
Merge Requests
56
Merge Requests
56
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Pleroma
pleroma
Commits
4b10804f
Commit
4b10804f
authored
Nov 25, 2019
by
rinpatch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
OStatus controller: don't serve json at /notice/, redirect instead
parent
02f73838
Pipeline
#20461
passed with stages
in 10 minutes and 6 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
28 additions
and
97 deletions
+28
-97
lib/pleroma/web/ostatus/ostatus_controller.ex
lib/pleroma/web/ostatus/ostatus_controller.ex
+14
-32
test/web/ostatus/ostatus_controller_test.exs
test/web/ostatus/ostatus_controller_test.exs
+14
-65
No files found.
lib/pleroma/web/ostatus/ostatus_controller.ex
View file @
4b10804f
...
...
@@ -11,7 +11,6 @@ defmodule Pleroma.Web.OStatus.OStatusController do
alias
Pleroma
.
Plugs
.
RateLimiter
alias
Pleroma
.
User
alias
Pleroma
.
Web
.
ActivityPub
.
ActivityPubController
alias
Pleroma
.
Web
.
ActivityPub
.
ObjectView
alias
Pleroma
.
Web
.
ActivityPub
.
Visibility
alias
Pleroma
.
Web
.
Endpoint
alias
Pleroma
.
Web
.
Metadata
.
PlayerView
...
...
@@ -38,11 +37,9 @@ def object(%{assigns: %{format: format}} = conn, %{"uuid" => uuid}) do
with
id
<-
o_status_url
(
conn
,
:object
,
uuid
),
{
_
,
%
Activity
{}
=
activity
}
<-
{
:activity
,
Activity
.
get_create_by_object_ap_id_with_object
(
id
)},
{
_
,
true
}
<-
{
:public?
,
Visibility
.
is_public?
(
activity
)},
%
User
{}
=
user
<-
User
.
get_cached_by_ap_id
(
activity
.
data
[
"actor"
])
do
{
_
,
true
}
<-
{
:public?
,
Visibility
.
is_public?
(
activity
)}
do
case
format
do
"html"
->
redirect
(
conn
,
to:
"/notice/
#{
activity
.
id
}
"
)
_
->
represent_activity
(
conn
,
nil
,
activity
,
user
)
_
->
redirect
(
conn
,
to:
"/notice/
#{
activity
.
id
}
"
)
end
else
reason
when
reason
in
[{
:public?
,
false
},
{
:activity
,
nil
}]
->
...
...
@@ -61,11 +58,9 @@ def activity(%{assigns: %{format: format}} = conn, %{"uuid" => _uuid})
def
activity
(%{
assigns:
%{
format:
format
}}
=
conn
,
%{
"uuid"
=>
uuid
})
do
with
id
<-
o_status_url
(
conn
,
:activity
,
uuid
),
{
_
,
%
Activity
{}
=
activity
}
<-
{
:activity
,
Activity
.
normalize
(
id
)},
{
_
,
true
}
<-
{
:public?
,
Visibility
.
is_public?
(
activity
)},
%
User
{}
=
user
<-
User
.
get_cached_by_ap_id
(
activity
.
data
[
"actor"
])
do
{
_
,
true
}
<-
{
:public?
,
Visibility
.
is_public?
(
activity
)}
do
case
format
do
"html"
->
redirect
(
conn
,
to:
"/notice/
#{
activity
.
id
}
"
)
_
->
represent_activity
(
conn
,
format
,
activity
,
user
)
_
->
redirect
(
conn
,
to:
"/notice/
#{
activity
.
id
}
"
)
end
else
reason
when
reason
in
[{
:public?
,
false
},
{
:activity
,
nil
}]
->
...
...
@@ -81,7 +76,15 @@ def notice(%{assigns: %{format: format}} = conn, %{"id" => id}) do
{
_
,
true
}
<-
{
:public?
,
Visibility
.
is_public?
(
activity
)},
%
User
{}
=
user
<-
User
.
get_cached_by_ap_id
(
activity
.
data
[
"actor"
])
do
cond
do
format
==
"html"
&&
activity
.
data
[
"type"
]
==
"Create"
->
format
in
[
"json"
,
"activity+json"
]
->
if
activity
.
local
do
%{
data:
%{
"id"
=>
redirect_url
}}
=
Object
.
normalize
(
activity
)
redirect
(
conn
,
external:
redirect_url
)
else
{
:error
,
:not_found
}
end
activity
.
data
[
"type"
]
==
"Create"
->
%
Object
{}
=
object
=
Object
.
normalize
(
activity
)
RedirectController
.
redirector_with_meta
(
...
...
@@ -94,11 +97,8 @@ def notice(%{assigns: %{format: format}} = conn, %{"id" => id}) do
}
)
format
==
"html"
->
RedirectController
.
redirector
(
conn
,
nil
)
true
->
represent_activity
(
conn
,
format
,
activity
,
user
)
RedirectController
.
redirector
(
conn
,
nil
)
end
else
reason
when
reason
in
[{
:public?
,
false
},
{
:activity
,
nil
}]
->
...
...
@@ -135,24 +135,6 @@ def notice_player(conn, %{"id" => id}) do
end
end
defp
represent_activity
(
conn
,
"activity+json"
,
%
Activity
{
data:
%{
"type"
=>
"Create"
}}
=
activity
,
_user
)
do
object
=
Object
.
normalize
(
activity
)
conn
|>
put_resp_header
(
"content-type"
,
"application/activity+json"
)
|>
put_view
(
ObjectView
)
|>
render
(
"object.json"
,
%{
object:
object
})
end
defp
represent_activity
(
_conn
,
_
,
_
,
_
)
do
{
:error
,
:not_found
}
end
def
errors
(
conn
,
{
:error
,
:not_found
})
do
render_error
(
conn
,
:not_found
,
"Not found"
)
end
...
...
test/web/ostatus/ostatus_controller_test.exs
View file @
4b10804f
...
...
@@ -35,23 +35,6 @@ test "redirects to /notice/id for html format", %{conn: conn} do
assert
redirected_to
(
conn
)
==
"/notice/
#{
note_activity
.
id
}
"
end
test
"500s when user not found"
,
%{
conn:
conn
}
do
note_activity
=
insert
(
:note_activity
)
object
=
Object
.
normalize
(
note_activity
)
user
=
User
.
get_cached_by_ap_id
(
note_activity
.
data
[
"actor"
])
User
.
invalidate_cache
(
user
)
Pleroma
.
Repo
.
delete
(
user
)
[
_
,
uuid
]
=
hd
(
Regex
.
scan
(
~r/.+\/
([\
w
-
]
+
)
$
/
,
object
.
data
[
"id"
]))
url
=
"/objects/
#{
uuid
}
"
conn
=
conn
|>
put_req_header
(
"accept"
,
"application/xml"
)
|>
get
(
url
)
assert
response
(
conn
,
500
)
==
~S({"error":"Something went wrong"})
end
test
"404s on private objects"
,
%{
conn:
conn
}
do
note_activity
=
insert
(
:direct_note_activity
)
object
=
Object
.
normalize
(
note_activity
)
...
...
@@ -82,21 +65,6 @@ test "redirects to /notice/id for html format", %{conn: conn} do
assert
redirected_to
(
conn
)
==
"/notice/
#{
note_activity
.
id
}
"
end
test
"505s when user not found"
,
%{
conn:
conn
}
do
note_activity
=
insert
(
:note_activity
)
[
_
,
uuid
]
=
hd
(
Regex
.
scan
(
~r/.+\/
([\
w
-
]
+
)
$
/
,
note_activity
.
data
[
"id"
]))
user
=
User
.
get_cached_by_ap_id
(
note_activity
.
data
[
"actor"
])
User
.
invalidate_cache
(
user
)
Pleroma
.
Repo
.
delete
(
user
)
conn
=
conn
|>
put_req_header
(
"accept"
,
"text/html"
)
|>
get
(
"/activities/
#{
uuid
}
"
)
assert
response
(
conn
,
500
)
==
~S({"error":"Something went wrong"})
end
test
"404s on private activities"
,
%{
conn:
conn
}
do
note_activity
=
insert
(
:direct_note_activity
)
[
_
,
uuid
]
=
hd
(
Regex
.
scan
(
~r/.+\/
([\
w
-
]
+
)
$
/
,
note_activity
.
data
[
"id"
]))
...
...
@@ -127,21 +95,28 @@ test "gets an activity in AS2 format", %{conn: conn} do
end
describe
"GET notice/2"
do
test
"gets a notice in xml format"
,
%{
conn:
conn
}
do
test
"redirects to a proper object URL when json requested and the object is local"
,
%{
conn:
conn
}
do
note_activity
=
insert
(
:note_activity
)
expected_redirect_url
=
Object
.
normalize
(
note_activity
)
.
data
[
"id"
]
conn
|>
get
(
"/notice/
#{
note_activity
.
id
}
"
)
|>
response
(
200
)
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
"
gets a notice in AS2 format
"
,
%{
conn:
conn
}
do
note_activity
=
insert
(
:note_activity
)
test
"
returns a 404 on remote notice when json requested
"
,
%{
conn:
conn
}
do
note_activity
=
insert
(
:note_activity
,
local:
false
)
conn
|>
put_req_header
(
"accept"
,
"application/activity+json"
)
|>
get
(
"/notice/
#{
note_activity
.
id
}
"
)
|>
json_response
(
200
)
|>
response
(
404
)
end
test
"500s when actor not found"
,
%{
conn:
conn
}
do
...
...
@@ -157,32 +132,6 @@ test "500s when actor not found", %{conn: conn} do
assert
response
(
conn
,
500
)
==
~S({"error":"Something went wrong"})
end
test
"only gets a notice in AS2 format for Create messages"
,
%{
conn:
conn
}
do
note_activity
=
insert
(
:note_activity
)
url
=
"/notice/
#{
note_activity
.
id
}
"
conn
=
conn
|>
put_req_header
(
"accept"
,
"application/activity+json"
)
|>
get
(
url
)
assert
json_response
(
conn
,
200
)
user
=
insert
(
:user
)
{
:ok
,
like_activity
,
_
}
=
CommonAPI
.
favorite
(
note_activity
.
id
,
user
)
url
=
"/notice/
#{
like_activity
.
id
}
"
assert
like_activity
.
data
[
"type"
]
==
"Like"
conn
=
build_conn
()
|>
put_req_header
(
"accept"
,
"application/activity+json"
)
|>
get
(
url
)
assert
response
(
conn
,
404
)
end
test
"render html for redirect for html format"
,
%{
conn:
conn
}
do
note_activity
=
insert
(
:note_activity
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment