Compare commits
No commits in common. "1b4034dac6c694f3046eebee5f00ba4ae7fcaeaa" and "0c38e169700e77ef93d47e466229912199d27c8a" have entirely different histories.
1b4034dac6
...
0c38e16970
5 changed files with 43 additions and 172 deletions
|
@ -122,10 +122,10 @@ defmodule Nulla.ActivityPub do
|
||||||
def following(actor, total) do
|
def following(actor, total) do
|
||||||
Jason.OrderedObject.new(
|
Jason.OrderedObject.new(
|
||||||
"@context": "https://www.w3.org/ns/activitystreams",
|
"@context": "https://www.w3.org/ns/activitystreams",
|
||||||
id: "#{actor.ap_id}/following",
|
id: "https://#{actor.domain}/users/#{actor.preferredUsername}/following",
|
||||||
type: "OrderedCollection",
|
type: "OrderedCollection",
|
||||||
totalItems: total,
|
totalItems: total,
|
||||||
first: "#{actor.ap_id}/following?page=1"
|
first: "https://#{actor.domain}/users/#{actor.preferredUsername}/following?page=1"
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -134,12 +134,12 @@ defmodule Nulla.ActivityPub do
|
||||||
def following(actor, total, following_list, page, limit) when is_integer(page) and page > 0 do
|
def following(actor, total, following_list, page, limit) when is_integer(page) and page > 0 do
|
||||||
data = [
|
data = [
|
||||||
"@context": "https://www.w3.org/ns/activitystreams",
|
"@context": "https://www.w3.org/ns/activitystreams",
|
||||||
id: "#{actor.ap_id}/following?page=#{page}",
|
id: "https://#{actor.domain}/@#{actor.preferredUsername}/following?page=#{page}",
|
||||||
type: "OrderedCollectionPage",
|
type: "OrderedCollectionPage",
|
||||||
totalItems: total,
|
totalItems: total,
|
||||||
next: "#{actor.ap_id}/following?page=#{page + 1}",
|
next: "https://#{actor.domain}/users/#{actor.preferredUsername}/following?page=#{page + 1}",
|
||||||
prev: "#{actor.ap_id}/following?page=#{page - 1}",
|
prev: "https://#{actor.domain}/users/#{actor.preferredUsername}/following?page=#{page - 1}",
|
||||||
partOf: "#{actor.ap_id}/following",
|
partOf: "https://#{actor.domain}/users/#{actor.preferredUsername}/following",
|
||||||
orderedItems: following_list
|
orderedItems: following_list
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -166,10 +166,10 @@ defmodule Nulla.ActivityPub do
|
||||||
def followers(actor, total) do
|
def followers(actor, total) do
|
||||||
Jason.OrderedObject.new(
|
Jason.OrderedObject.new(
|
||||||
"@context": "https://www.w3.org/ns/activitystreams",
|
"@context": "https://www.w3.org/ns/activitystreams",
|
||||||
id: "#{actor.ap_id}/followers",
|
id: "https://#{actor.domain}/users/#{actor.preferredUsername}/followers",
|
||||||
type: "OrderedCollection",
|
type: "OrderedCollection",
|
||||||
totalItems: total,
|
totalItems: total,
|
||||||
first: "#{actor.ap_id}/followers?page=1"
|
first: "https://#{actor.domain}/users/#{actor.preferredUsername}/followers?page=1"
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -179,12 +179,12 @@ defmodule Nulla.ActivityPub do
|
||||||
when is_integer(page) and page > 0 do
|
when is_integer(page) and page > 0 do
|
||||||
data = [
|
data = [
|
||||||
"@context": "https://www.w3.org/ns/activitystreams",
|
"@context": "https://www.w3.org/ns/activitystreams",
|
||||||
id: "#{actor.ap_id}/followers?page=#{page}",
|
id: "https://#{actor.domain}/users#{actor.preferredUsername}/followers?page=#{page}",
|
||||||
type: "OrderedCollectionPage",
|
type: "OrderedCollectionPage",
|
||||||
totalItems: total,
|
totalItems: total,
|
||||||
next: "#{actor.ap_id}/followers?page=#{page + 1}",
|
next: "https://#{actor.domain}/users/#{actor.preferredUsername}/followers?page=#{page + 1}",
|
||||||
prev: "#{actor.ap_id}/followers?page=#{page - 1}",
|
prev: "https://#{actor.domain}/users/#{actor.preferredUsername}/followers?page=#{page - 1}",
|
||||||
partOf: "#{actor.ap_id}/followers",
|
partOf: "https://#{actor.domain}/users/#{actor.preferredUsername}/followers",
|
||||||
orderedItems: followers_list
|
orderedItems: followers_list
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ defmodule NullaWeb.FollowController do
|
||||||
def following(conn, %{"username" => username, "page" => page_param}) do
|
def following(conn, %{"username" => username, "page" => page_param}) do
|
||||||
instance_settings = InstanceSettings.get_instance_settings!()
|
instance_settings = InstanceSettings.get_instance_settings!()
|
||||||
domain = instance_settings.domain
|
domain = instance_settings.domain
|
||||||
limit = instance_settings.api_limit
|
limit = instance_settings.limit
|
||||||
actor = Actor.get_actor(username, domain)
|
actor = Actor.get_actor(username, domain)
|
||||||
total = Relation.count_following(actor.id)
|
total = Relation.count_following(actor.id)
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ defmodule NullaWeb.FollowController do
|
||||||
def followers(conn, %{"username" => username, "page" => page_param}) do
|
def followers(conn, %{"username" => username, "page" => page_param}) do
|
||||||
instance_settings = InstanceSettings.get_instance_settings!()
|
instance_settings = InstanceSettings.get_instance_settings!()
|
||||||
domain = instance_settings.domain
|
domain = instance_settings.domain
|
||||||
limit = instance_settings.api_limit
|
limit = instance_settings.limit
|
||||||
actor = Actor.get_actor(username, domain)
|
actor = Actor.get_actor(username, domain)
|
||||||
total = Relation.count_followers(actor.id)
|
total = Relation.count_followers(actor.id)
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ defmodule Nulla.Repo.Migrations.CreateUsers do
|
||||||
add :id, :bigint, primary_key: true
|
add :id, :bigint, primary_key: true
|
||||||
add :email, :string
|
add :email, :string
|
||||||
add :password, :string
|
add :password, :string
|
||||||
add :privateKeyPem, :text
|
add :privateKeyPem, :string
|
||||||
add :last_active_at, :utc_datetime
|
add :last_active_at, :utc_datetime
|
||||||
|
|
||||||
timestamps(type: :utc_datetime)
|
timestamps(type: :utc_datetime)
|
||||||
|
|
|
@ -1,123 +0,0 @@
|
||||||
defmodule NullaWeb.FollowControllerTest do
|
|
||||||
use NullaWeb.ConnCase
|
|
||||||
alias Nulla.KeyGen
|
|
||||||
alias Nulla.Models.User
|
|
||||||
alias Nulla.Models.Actor
|
|
||||||
|
|
||||||
setup do
|
|
||||||
{publicKeyPem, privateKeyPem} = KeyGen.gen()
|
|
||||||
|
|
||||||
{:ok, actor} =
|
|
||||||
Actor.create_actor(%{
|
|
||||||
domain: "localhost",
|
|
||||||
ap_id: "http://localhost/users/test",
|
|
||||||
type: "Person",
|
|
||||||
following: "http://localhost/users/test/following",
|
|
||||||
followers: "http://localhost/users/test/followers",
|
|
||||||
inbox: "http://localhost/users/test/inbox",
|
|
||||||
outbox: "http://localhost/users/test/outbox",
|
|
||||||
featured: "http://localhost/users/test/collections/featured",
|
|
||||||
featuredTags: "http://localhost/users/test/collections/tags",
|
|
||||||
preferredUsername: "test",
|
|
||||||
name: "Test",
|
|
||||||
summary: "Test User",
|
|
||||||
url: "http://localhost/@test",
|
|
||||||
manuallyApprovesFollowers: false,
|
|
||||||
discoverable: true,
|
|
||||||
indexable: true,
|
|
||||||
published: DateTime.utc_now(),
|
|
||||||
memorial: false,
|
|
||||||
publicKey:
|
|
||||||
Jason.OrderedObject.new(
|
|
||||||
id: "http://localhost/users/test#main-key",
|
|
||||||
owner: "http://localhost/users/test",
|
|
||||||
publicKeyPem: publicKeyPem
|
|
||||||
),
|
|
||||||
endpoints: Jason.OrderedObject.new(sharedInbox: "http://localhost/inbox")
|
|
||||||
})
|
|
||||||
|
|
||||||
User.create_user(%{
|
|
||||||
id: actor.id,
|
|
||||||
email: "test@localhost",
|
|
||||||
password: "password",
|
|
||||||
privateKeyPem: privateKeyPem,
|
|
||||||
last_active_at: DateTime.utc_now()
|
|
||||||
})
|
|
||||||
|
|
||||||
:ok
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "GET /users/username/following" do
|
|
||||||
test "returns ActivityPub JSON of following", %{conn: conn} do
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> get(~p"/users/test/following")
|
|
||||||
|
|
||||||
assert response = json_response(conn, 200)
|
|
||||||
|
|
||||||
assert response["id"] == "http://localhost/users/test/following"
|
|
||||||
assert response["type"] == "OrderedCollection"
|
|
||||||
assert response["totalItems"] == 0
|
|
||||||
assert response["first"] == "http://localhost/users/test/following?page=1"
|
|
||||||
end
|
|
||||||
|
|
||||||
test "returns ActivityPub JSON of following with page", %{conn: conn} do
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> get(~p"/users/test/following?page=1")
|
|
||||||
|
|
||||||
assert response = json_response(conn, 200)
|
|
||||||
|
|
||||||
assert response["id"] == "http://localhost/users/test/following?page=1"
|
|
||||||
assert response["type"] == "OrderedCollectionPage"
|
|
||||||
assert response["totalItems"] == 0
|
|
||||||
assert response["partOf"] == "http://localhost/users/test/following"
|
|
||||||
assert is_list(response["orderedItems"])
|
|
||||||
end
|
|
||||||
|
|
||||||
test "returns first page with invalid value", %{conn: conn} do
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> get(~p"/users/test/following?page=abc")
|
|
||||||
|
|
||||||
assert conn.status == 200
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "GET /users/username/followers" do
|
|
||||||
test "returns ActivityPub JSON of followers", %{conn: conn} do
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> get(~p"/users/test/followers")
|
|
||||||
|
|
||||||
assert response = json_response(conn, 200)
|
|
||||||
|
|
||||||
assert response["id"] == "http://localhost/users/test/followers"
|
|
||||||
assert response["type"] == "OrderedCollection"
|
|
||||||
assert response["totalItems"] == 0
|
|
||||||
assert response["first"] == "http://localhost/users/test/followers?page=1"
|
|
||||||
end
|
|
||||||
|
|
||||||
test "returns ActivityPub JSON of followers with page", %{conn: conn} do
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> get(~p"/users/test/followers?page=1")
|
|
||||||
|
|
||||||
assert response = json_response(conn, 200)
|
|
||||||
|
|
||||||
assert response["id"] == "http://localhost/users/test/followers?page=1"
|
|
||||||
assert response["type"] == "OrderedCollectionPage"
|
|
||||||
assert response["totalItems"] == 0
|
|
||||||
assert response["partOf"] == "http://localhost/users/test/followers"
|
|
||||||
assert is_list(response["orderedItems"])
|
|
||||||
end
|
|
||||||
|
|
||||||
test "returns first page with invalid value", %{conn: conn} do
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> get(~p"/users/test/followers?page=abc")
|
|
||||||
|
|
||||||
assert conn.status == 200
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +1,10 @@
|
||||||
defmodule NullaWeb.NodeinfoControllerTest do
|
defmodule NullaWeb.NodeinfoControllerTest do
|
||||||
use NullaWeb.ConnCase
|
use NullaWeb.ConnCase
|
||||||
alias Nulla.KeyGen
|
|
||||||
alias Nulla.Models.User
|
alias Nulla.Models.User
|
||||||
alias Nulla.Models.Actor
|
alias Nulla.Models.Actor
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
{publicKeyPem, privateKeyPem} = KeyGen.gen()
|
{:ok, actor} = Actor.create_actor(%{
|
||||||
|
|
||||||
{:ok, actor} =
|
|
||||||
Actor.create_actor(%{
|
|
||||||
domain: "localhost",
|
domain: "localhost",
|
||||||
ap_id: "http://localhost/users/test",
|
ap_id: "http://localhost/users/test",
|
||||||
type: "Person",
|
type: "Person",
|
||||||
|
@ -31,7 +27,7 @@ defmodule NullaWeb.NodeinfoControllerTest do
|
||||||
Jason.OrderedObject.new(
|
Jason.OrderedObject.new(
|
||||||
id: "http://localhost/users/test#main-key",
|
id: "http://localhost/users/test#main-key",
|
||||||
owner: "http://localhost/users/test",
|
owner: "http://localhost/users/test",
|
||||||
publicKeyPem: publicKeyPem
|
publicKeyPem: "PUBLIC KEY"
|
||||||
),
|
),
|
||||||
endpoints: Jason.OrderedObject.new(sharedInbox: "http://localhost/inbox")
|
endpoints: Jason.OrderedObject.new(sharedInbox: "http://localhost/inbox")
|
||||||
})
|
})
|
||||||
|
@ -40,7 +36,7 @@ defmodule NullaWeb.NodeinfoControllerTest do
|
||||||
id: actor.id,
|
id: actor.id,
|
||||||
email: "test@localhost",
|
email: "test@localhost",
|
||||||
password: "password",
|
password: "password",
|
||||||
privateKeyPem: privateKeyPem,
|
privateKeyPem: "PRIVATE KEY",
|
||||||
last_active_at: DateTime.utc_now()
|
last_active_at: DateTime.utc_now()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -63,9 +59,7 @@ defmodule NullaWeb.NodeinfoControllerTest do
|
||||||
assert is_binary(link["href"])
|
assert is_binary(link["href"])
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
describe "GET /nodeinfo/2.0" do
|
|
||||||
test "returns Nodeinfo JSON show", %{conn: conn} do
|
test "returns Nodeinfo JSON show", %{conn: conn} do
|
||||||
conn =
|
conn =
|
||||||
conn
|
conn
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue