summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nordberg <linus@nordberg.se>2014-09-15 14:23:09 +0200
committerLinus Nordberg <linus@nordberg.se>2014-09-15 14:23:09 +0200
commitedba600ece2e0192e70a9cbe4861e9bcf10f3865 (patch)
treec01032b2db86f548531ec7c6ae91c7255cc2873a
parenta94eff953af5e91a5bc1c3af5da6bfbea01873ca (diff)
Implement get-proof-by-hash.
-rw-r--r--src/v1.erl35
1 files changed, 28 insertions, 7 deletions
diff --git a/src/v1.erl b/src/v1.erl
index c60df1d..2ca7726 100644
--- a/src/v1.erl
+++ b/src/v1.erl
@@ -50,15 +50,15 @@
deliver(SessionID, binary_to_list(jiffy:encode({R}))).
'get-sth-consistency'(SessionID, _Env, Input) ->
- %% TODO: move argument parsing to a generic function
R = case lists:sort(httpd:parse_query(Input)) of
[{"first", FirstInput}, {"second", SecondInput}] ->
{First, _} = string:to_integer(FirstInput),
{Second, _} = string:to_integer(SecondInput),
case lists:member(error, [First, Second]) of
true ->
- html("get-sth-consistency: bad input:", [First, Second]);
- _ ->
+ html("get-sth-consistency: bad input:",
+ [FirstInput, SecondInput]);
+ false ->
binary_to_list(
jiffy:encode(
[base64:encode(X) ||
@@ -67,21 +67,42 @@
_ -> html("get-sth-consistency: bad input:", Input)
end,
deliver(SessionID, R).
-'get-proof-by-hash'(SessionID, _Env, _Input) ->
- niy(SessionID).
+
+'get-proof-by-hash'(SessionID, _Env, Input) ->
+ R = case lists:sort(httpd:parse_query(Input)) of
+ [{"hash", HashInput}, {"tree_size", TreeSizeInput}] ->
+ Hash = case (catch base64:decode(HashInput)) of
+ {'EXIT', _} -> error;
+ H -> H
+ end,
+ {TreeSize, _} = string:to_integer(TreeSizeInput),
+ case lists:member(error, [Hash, TreeSize]) of
+ true ->
+ html("get-proof-by-hash: bad input:",
+ [HashInput, TreeSizeInput]);
+ false ->
+ binary_to_list(
+ jiffy:encode(
+ [base64:encode(X) ||
+ X <- plop:inclusion(Hash, TreeSize)]))
+ end;
+ _ -> html("get-sth-proof-by-hash: bad input:", Input)
+ end,
+ deliver(SessionID, R).
+
'get-entries'(SessionID, _Env, Input) ->
- %% TODO: move argument parsing to a generic function
R = case lists:sort(httpd:parse_query(Input)) of
[{"end", EndInput}, {"start", StartInput}] ->
{Start, _} = string:to_integer(StartInput),
{End, _} = string:to_integer(EndInput),
case lists:member(error, [Start, End]) of
true -> html("get-entries: bad input:", [Start, End]);
- _ -> encode_entries(plop:get(Start, End))
+ false -> encode_entries(plop:get(Start, End))
end;
_ -> html("get-entries: bad input:", Input)
end,
deliver(SessionID, R).
+
'get-entry-and-proof'(SessionID, _Env, _Input) ->
niy(SessionID).