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
0a14d155
Commit
0a14d155
authored
Apr 02, 2018
by
lain
Browse files
Fail faster.
parent
1b57522b
Changes
2
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/plugs/http_signature.ex
View file @
0a14d155
...
...
@@ -14,19 +14,26 @@ def call(%{assigns: %{valid_signature: true}} = conn, opts) do
def
call
(
conn
,
opts
)
do
user
=
conn
.
params
[
"actor"
]
Logger
.
debug
(
"Checking sig for
#{
user
}
"
)
[
signature
|
_
]
=
get_req_header
(
conn
,
"signature"
)
if
get_req_header
(
conn
,
"signature"
)
do
conn
=
conn
|>
put_req_header
(
"(request-target)"
,
String
.
downcase
(
"
#{
conn
.
method
}
"
)
<>
"
#{
conn
.
request_path
}
"
)
cond
do
signature
&&
String
.
contains?
(
signature
,
user
)
->
conn
=
conn
|>
put_req_header
(
"(request-target)"
,
String
.
downcase
(
"
#{
conn
.
method
}
"
)
<>
"
#{
conn
.
request_path
}
"
)
assign
(
conn
,
:valid_signature
,
HTTPSignatures
.
validate_conn
(
conn
))
assign
(
conn
,
:valid_signature
,
HTTPSignatures
.
validate_conn
(
conn
))
else
Logger
.
debug
(
"No signature header!"
)
conn
signature
->
Logger
.
debug
(
"Signature not from actor"
)
assign
(
conn
,
:valid_signature
,
false
)
true
->
Logger
.
debug
(
"No signature header!"
)
conn
end
end
end
test/plugs/http_signature_plug_test.exs
0 → 100644
View file @
0a14d155
defmodule
Pleroma
.
Web
.
Plugs
.
HTTPSignaturePlugTest
do
use
Pleroma
.
Web
.
ConnCase
alias
Pleroma
.
Web
.
HTTPSignatures
alias
Pleroma
.
Web
.
Plugs
.
HTTPSignaturePlug
import
Plug
.
Conn
import
Mock
test
"it call HTTPSignatures to check validity if the actor sighed it"
do
params
=
%{
"actor"
=>
"http://mastodon.example.org/users/admin"
}
conn
=
build_conn
(
:get
,
"/doesntmattter"
,
params
)
with_mock
HTTPSignatures
,
validate_conn:
fn
_
->
true
end
do
conn
=
conn
|>
put_req_header
(
"signature"
,
"keyId=
\"
http://mastodon.example.org/users/admin#main-key"
)
|>
HTTPSignaturePlug
.
call
(%{})
assert
conn
.
assigns
.
valid_signature
==
true
assert
called
(
HTTPSignatures
.
validate_conn
(
:_
))
end
end
test
"bails out early if the signature isn't by the activity actor"
do
params
=
%{
"actor"
=>
"https://mst3k.interlinked.me/users/luciferMysticus"
}
conn
=
build_conn
(
:get
,
"/doesntmattter"
,
params
)
with_mock
HTTPSignatures
,
validate_conn:
fn
_
->
false
end
do
conn
=
conn
|>
put_req_header
(
"signature"
,
"keyId=
\"
http://mastodon.example.org/users/admin#main-key"
)
|>
HTTPSignaturePlug
.
call
(%{})
assert
conn
.
assigns
.
valid_signature
==
false
refute
called
(
HTTPSignatures
.
validate_conn
(
:_
))
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