1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
-module(v1).
-export([add_chain/3]).
-export([hello/3]).
-include("/home/linus/usr/src/ct/plop/include/plop.hrl").
-define(PROTOCOL_VERSION, 1).
%% Public functions.
add_chain(SessionID, _Env, Input) ->
Res = case (catch jiffy:decode(Input)) of
{error, E} -> html("add-chain: bad input; see RFC 6962", E);
{[{<<"chain">>, Chain}]} ->
Entry = #plop_entry{type = x509,
data = list_to_binary(Chain)},
SPT = plop:add(#timestamped_entry{entry = Entry}),
Timestamp = SPT#spt_on_wire.timestamp,
R = [{sct_version, ?PROTOCOL_VERSION},
{id, base64:encode(plop:get_logid())},
{timestamp, Timestamp},
{extensions, []},
{signature, base64:encode(list_to_binary(plop:serialise(SPT)))}],
binary_to_list(jiffy:encode({R}));
_ -> html("add-chain: missing input: chain; see RFC 6962", Input)
end,
mod_esi:deliver(SessionID, Res).
%% For testing. FIXME: Remove.
hello(SessionID, Env, Input) ->
Query = httpd:parse_query(Input),
mod_esi:deliver(SessionID, io_lib:format(
"Content-Type: text/html\r\n\r\n" ++
"<html><body>hello again, erlang world" ++
"<p>SessionID: ~p~n" ++
"<p>Env: ~p~n" ++
"<p>Input, raw: ~p~n" ++
"<p>Input, parsed: ~p~n" ++
"</body></html>", [SessionID, Env, Input, Query])).
%% Private functions.
html(Text, Input) ->
io_lib:format(
"Content-Type: text/html\r\n\r\n" ++
"<html><body><p>~n" ++
"~s~n" ++
"~p~n" ++
"</body></html>~n", [Text, Input]).
|