okami.mom/albedo

git clone https://git.nkp.pet/okami.mom/albedo

Aly Raffauffix(antigravity): decode verification links before error truncatione6935de

main
1.7 KiB35 linesraw
1%% One raw Cloud Code Assist error through the production discovery HTTP path.
2-module(albedo_antigravity_error_support).
3-export([discover/1]).
4
5discover(Body) ->
6    {ok, Listen} = gen_tcp:listen(0, [binary, {active, false}, {packet, http_bin},
7                                    {ip, {127, 0, 0, 1}}]),
8    {ok, {_, Port}} = inet:sockname(Listen),
9    {Server, Monitor} = spawn_monitor(fun() ->
10        {ok, Socket} = gen_tcp:accept(Listen, 5000),
11        {ok, {http_request, _, _, _}} = gen_tcp:recv(Socket, 0, 5000),
12        Length = headers(Socket, 0),
13        ok = inet:setopts(Socket, [{packet, raw}]),
14        case Length of 0 -> ok; _ -> {ok, _} = gen_tcp:recv(Socket, Length, 5000) end,
15        ok = gen_tcp:send(Socket, ["HTTP/1.1 403 Forbidden\r\nContent-Type: application/json\r\n",
16            "Connection: close\r\nContent-Length: ", integer_to_list(byte_size(Body)), "\r\n\r\n", Body]),
17        gen_tcp:close(Socket)
18    end),
19    Base = iolist_to_binary(["http://127.0.0.1:", integer_to_list(Port)]),
20    try albedo_antigravity:discover(<<"test-token">>, {endpoints, <<>>, <<>>, Base}, fun(_) -> nil end)
21    after
22        gen_tcp:close(Listen),
23        receive
24            {'DOWN', Monitor, process, Server, normal} -> ok;
25            {'DOWN', Monitor, process, Server, Reason} -> error({error_server_failed, Reason})
26        after 6000 -> exit(Server, kill), error(error_server_stalled)
27        end
28    end.
29
30headers(Socket, Length) ->
31    case gen_tcp:recv(Socket, 0, 5000) of
32        {ok, http_eoh} -> Length;
33        {ok, {http_header, _, 'Content-Length', _, Value}} -> headers(Socket, binary_to_integer(Value));
34        {ok, {http_header, _, _, _, _}} -> headers(Socket, Length)
35    end.