Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pleroma
pleroma
Commits
be04f725
Commit
be04f725
authored
Sep 09, 2017
by
lain
Browse files
Add more Mastodon API methods.
parent
59dd240c
Changes
3
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
View file @
be04f725
defmodule
Pleroma
.
Web
.
MastodonAPI
.
MastodonAPIController
do
use
Pleroma
.
Web
,
:controller
alias
Pleroma
.
{
Repo
}
alias
Pleroma
.
{
Repo
,
Activity
}
alias
Pleroma
.
Web
.
OAuth
.
App
alias
Pleroma
.
Web
alias
Pleroma
.
Web
.
MastodonAPI
.
AccountView
alias
Pleroma
.
Web
.
MastodonAPI
.
{
StatusView
,
AccountView
}
alias
Pleroma
.
Web
.
ActivityPub
.
ActivityPub
alias
Pleroma
.
Web
.
TwitterAPI
.
TwitterAPI
def
create_app
(
conn
,
params
)
do
with
cs
<-
App
.
register_changeset
(%
App
{},
params
)
|>
IO
.
inspect
,
...
...
@@ -33,4 +35,37 @@ def masto_instance(conn, _params) do
json
(
conn
,
response
)
end
def
home_timeline
(%{
assigns:
%{
user:
user
}}
=
conn
,
params
)
do
activities
=
ActivityPub
.
fetch_activities
([
user
.
ap_id
|
user
.
following
],
Map
.
put
(
params
,
"type"
,
"Create"
))
render
conn
,
StatusView
,
"index.json"
,
%{
activities:
activities
,
for:
user
,
as:
:activity
}
end
def
public_timeline
(%{
assigns:
%{
user:
user
}}
=
conn
,
params
)
do
params
=
params
|>
Map
.
put
(
"type"
,
"Create"
)
|>
Map
.
put
(
"local_only"
,
!!params
[
"local"
])
activities
=
ActivityPub
.
fetch_public_activities
(
params
)
render
conn
,
StatusView
,
"index.json"
,
%{
activities:
activities
,
for:
user
,
as:
:activity
}
end
def
get_status
(%{
assigns:
%{
user:
user
}}
=
conn
,
%{
"id"
=>
id
})
do
with
%
Activity
{}
=
activity
<-
Repo
.
get
(
Activity
,
id
)
do
render
conn
,
StatusView
,
"status.json"
,
%{
activity:
activity
,
for:
user
}
end
end
def
post_status
(%{
assigns:
%{
user:
user
}}
=
conn
,
%{
"status"
=>
status
}
=
params
)
do
l
=
status
|>
String
.
trim
|>
String
.
length
params
=
params
|>
Map
.
put
(
"in_reply_to_status_id"
,
params
[
"in_reply_to_id"
])
if
l
>
0
&&
l
<
5000
do
{
:ok
,
activity
}
=
TwitterAPI
.
create_status
(
user
,
params
)
render
conn
,
StatusView
,
"status.json"
,
%{
activity:
activity
,
for:
user
,
as:
:activity
}
end
end
end
lib/pleroma/web/router.ex
View file @
be04f725
...
...
@@ -10,6 +10,7 @@ def user_fetcher(username) do
pipeline
:api
do
plug
:accepts
,
[
"json"
]
plug
:fetch_session
plug
Pleroma
.
Plugs
.
OAuthPlug
plug
Pleroma
.
Plugs
.
AuthenticationPlug
,
%{
fetcher:
&
Router
.
user_fetcher
/
1
,
optional:
true
}
end
...
...
@@ -40,14 +41,21 @@ def user_fetcher(username) do
scope
"/api/v1"
,
Pleroma
.
Web
.
MastodonAPI
do
pipe_through
:api
get
"/instance"
,
MastodonAP
O
.
Controller
,
:masto_instance
get
"/instance"
,
MastodonAP
I
Controller
,
:masto_instance
post
"/apps"
,
MastodonAPIController
,
:create_app
get
"/timelines/public"
,
MastodonAPIController
,
:public_timeline
get
"/statuses/:id"
,
MastodonAPIController
,
:get_status
end
scope
"/api/v1"
,
Pleroma
.
Web
.
MastodonAPI
do
pipe_through
:authenticated_api
get
"/accounts/verify_credentials"
,
MastodonAPIController
,
:verify_credentials
get
"/timelines/home"
,
MastodonAPIController
,
:home_timeline
post
"/statuses"
,
MastodonAPIController
,
:post_status
end
scope
"/api"
,
Pleroma
.
Web
do
...
...
test/web/mastodon_api/mastodon_api_controller_test.exs
0 → 100644
View file @
be04f725
defmodule
Pleroma
.
Web
.
MastodonAPI
.
MastodonAPIControllerTest
do
use
Pleroma
.
Web
.
ConnCase
alias
Pleroma
.
Web
.
TwitterAPI
.
TwitterAPI
alias
Pleroma
.
{
Repo
,
User
,
Activity
}
alias
Pleroma
.
Web
.
OStatus
import
Pleroma
.
Factory
test
"the home timeline"
,
%{
conn:
conn
}
do
user
=
insert
(
:user
)
following
=
insert
(
:user
)
{
:ok
,
_activity
}
=
TwitterAPI
.
create_status
(
following
,
%{
"status"
=>
"test"
})
conn
=
conn
|>
assign
(
:user
,
user
)
|>
get
(
"/api/v1/timelines/home"
)
assert
length
(
json_response
(
conn
,
200
))
==
0
{
:ok
,
user
}
=
User
.
follow
(
user
,
following
)
conn
=
build_conn
()
|>
assign
(
:user
,
user
)
|>
get
(
"/api/v1/timelines/home"
)
assert
[%{
"content"
=>
"test"
}]
=
json_response
(
conn
,
200
)
end
test
"the public timeline"
,
%{
conn:
conn
}
do
following
=
insert
(
:user
)
{
:ok
,
_activity
}
=
TwitterAPI
.
create_status
(
following
,
%{
"status"
=>
"test"
})
{
:ok
,
[
_activity
]}
=
OStatus
.
fetch_activity_from_url
(
"https://shitposter.club/notice/2827873"
)
conn
=
conn
|>
get
(
"/api/v1/timelines/public"
)
assert
length
(
json_response
(
conn
,
200
))
==
2
conn
=
build_conn
()
|>
get
(
"/api/v1/timelines/public"
,
%{
"local"
=>
"True"
})
assert
[%{
"content"
=>
"test"
}]
=
json_response
(
conn
,
200
)
end
test
"posting a status"
,
%{
conn:
conn
}
do
user
=
insert
(
:user
)
conn
=
conn
|>
assign
(
:user
,
user
)
|>
post
(
"/api/v1/statuses"
,
%{
"status"
=>
"cofe"
})
assert
%{
"content"
=>
"cofe"
,
"id"
=>
id
}
=
json_response
(
conn
,
200
)
assert
Repo
.
get
(
Activity
,
id
)
end
test
"replying to a status"
,
%{
conn:
conn
}
do
user
=
insert
(
:user
)
{
:ok
,
replied_to
}
=
TwitterAPI
.
create_status
(
user
,
%{
"status"
=>
"cofe"
})
conn
=
conn
|>
assign
(
:user
,
user
)
|>
post
(
"/api/v1/statuses"
,
%{
"status"
=>
"xD"
,
"in_reply_to_id"
=>
replied_to
.
id
})
assert
%{
"content"
=>
"xD"
,
"id"
=>
id
}
=
json_response
(
conn
,
200
)
activity
=
Repo
.
get
(
Activity
,
id
)
assert
activity
.
data
[
"context"
]
==
replied_to
.
data
[
"context"
]
assert
activity
.
data
[
"object"
][
"inReplyToStatusId"
]
==
replied_to
.
id
end
test
"verify_credentials"
,
%{
conn:
conn
}
do
user
=
insert
(
:user
)
conn
=
conn
|>
assign
(
:user
,
user
)
|>
get
(
"/api/v1/accounts/verify_credentials"
)
assert
%{
"id"
=>
id
}
=
json_response
(
conn
,
200
)
assert
id
==
user
.
id
end
test
"get a status"
,
%{
conn:
conn
}
do
activity
=
insert
(
:note_activity
)
conn
=
conn
|>
get
(
"/api/v1/statuses/
#{
activity
.
id
}
"
)
assert
%{
"id"
=>
id
}
=
json_response
(
conn
,
200
)
assert
id
==
activity
.
id
end
end
Write
Preview
Supports
Markdown
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