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
89e5b204
Commit
89e5b204
authored
Jun 25, 2020
by
lain
Browse files
ObjectValidator: Basic `Block` support.
parent
d137f934
Pipeline
#27665
passed with stages
in 19 minutes and 3 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/web/activity_pub/builder.ex
View file @
89e5b204
...
...
@@ -138,6 +138,18 @@ def update(actor, object) do
},
[]}
end
@spec
block
(
User
.
t
(),
User
.
t
())
::
{
:ok
,
map
(),
keyword
()}
def
block
(
blocker
,
blocked
)
do
{
:ok
,
%{
"id"
=>
Utils
.
generate_activity_id
(),
"type"
=>
"Block"
,
"actor"
=>
blocker
.
ap_id
,
"object"
=>
blocked
.
ap_id
,
"to"
=>
[
blocked
.
ap_id
]
},
[]}
end
@spec
announce
(
User
.
t
(),
Object
.
t
(),
keyword
())
::
{
:ok
,
map
(),
keyword
()}
def
announce
(
actor
,
object
,
options
\\
[])
do
public?
=
Keyword
.
get
(
options
,
:public
,
false
)
...
...
lib/pleroma/web/activity_pub/object_validator.ex
View file @
89e5b204
...
...
@@ -13,6 +13,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do
alias
Pleroma
.
Object
alias
Pleroma
.
User
alias
Pleroma
.
Web
.
ActivityPub
.
ObjectValidators
.
AnnounceValidator
alias
Pleroma
.
Web
.
ActivityPub
.
ObjectValidators
.
BlockValidator
alias
Pleroma
.
Web
.
ActivityPub
.
ObjectValidators
.
ChatMessageValidator
alias
Pleroma
.
Web
.
ActivityPub
.
ObjectValidators
.
CreateChatMessageValidator
alias
Pleroma
.
Web
.
ActivityPub
.
ObjectValidators
.
DeleteValidator
...
...
@@ -24,6 +25,16 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do
@spec
validate
(
map
(),
keyword
())
::
{
:ok
,
map
(),
keyword
()}
|
{
:error
,
any
()}
def
validate
(
object
,
meta
)
def
validate
(%{
"type"
=>
"Block"
}
=
block_activity
,
meta
)
do
with
{
:ok
,
block_activity
}
<-
block_activity
|>
BlockValidator
.
cast_and_validate
()
|>
Ecto
.
Changeset
.
apply_action
(
:insert
)
do
block_activity
=
stringify_keys
(
block_activity
)
{
:ok
,
block_activity
,
meta
}
end
end
def
validate
(%{
"type"
=>
"Update"
}
=
update_activity
,
meta
)
do
with
{
:ok
,
update_activity
}
<-
update_activity
...
...
lib/pleroma/web/activity_pub/object_validators/block_validator.ex
0 → 100644
View file @
89e5b204
# Pleroma: A lightweight social networking server
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule
Pleroma
.
Web
.
ActivityPub
.
ObjectValidators
.
BlockValidator
do
use
Ecto
.
Schema
alias
Pleroma
.
EctoType
.
ActivityPub
.
ObjectValidators
import
Ecto
.
Changeset
import
Pleroma
.
Web
.
ActivityPub
.
ObjectValidators
.
CommonValidations
@primary_key
false
embedded_schema
do
field
(
:id
,
ObjectValidators
.
ObjectID
,
primary_key:
true
)
field
(
:type
,
:string
)
field
(
:actor
,
ObjectValidators
.
ObjectID
)
field
(
:to
,
ObjectValidators
.
Recipients
,
default:
[])
field
(
:cc
,
ObjectValidators
.
Recipients
,
default:
[])
field
(
:object
,
ObjectValidators
.
ObjectID
)
end
def
cast_data
(
data
)
do
%
__MODULE__
{}
|>
cast
(
data
,
__schema__
(
:fields
))
end
def
validate_data
(
cng
)
do
cng
|>
validate_required
([
:id
,
:type
,
:actor
,
:to
,
:cc
,
:object
])
|>
validate_inclusion
(
:type
,
[
"Block"
])
|>
validate_actor_presence
()
|>
validate_actor_presence
(
field_name:
:object
)
end
def
cast_and_validate
(
data
)
do
data
|>
cast_data
|>
validate_data
end
end
test/web/activity_pub/object_validator_test.exs
View file @
89e5b204
...
...
@@ -654,4 +654,31 @@ test "returns an error if the object can't be updated by the actor", %{
assert
{
:error
,
_cng
}
=
ObjectValidator
.
validate
(
update
,
[])
end
end
describe
"blocks"
do
setup
do
user
=
insert
(
:user
)
blocked
=
insert
(
:user
)
{
:ok
,
valid_block
,
[]}
=
Builder
.
block
(
user
,
blocked
)
%{
user:
user
,
valid_block:
valid_block
}
end
test
"validates a basic object"
,
%{
valid_block:
valid_block
}
do
assert
{
:ok
,
_block
,
[]}
=
ObjectValidator
.
validate
(
valid_block
,
[])
end
test
"returns an error if we don't know the blocked user"
,
%{
valid_block:
valid_block
}
do
block
=
valid_block
|>
Map
.
put
(
"object"
,
"https://gensokyo.2hu/users/raymoo"
)
assert
{
:error
,
_cng
}
=
ObjectValidator
.
validate
(
block
,
[])
end
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