Skip to content

Commit 0549e73

Browse files
Upgrade the erlang-server dependency from cowboy1.x to cowboy2.x
1 parent 36991a4 commit 0549e73

File tree

6 files changed

+50
-57
lines changed

6 files changed

+50
-57
lines changed

modules/openapi-generator/src/main/resources/erlang-server/api.mustache

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ validate(Rule = {pattern, Pattern}, Name, Value, _ValidatorState) ->
261261
end;
262262

263263
validate(Rule = schema, Name, Value, ValidatorState) ->
264-
Definition = list_to_binary("#/definitions/" ++ {{packageName}}_utils:to_list(Name)),
264+
Definition = list_to_binary("#/components/schemas/" ++ {{packageName}}_utils:to_list(Name)),
265265
try
266266
_ = validate_with_schema(Value, Definition, ValidatorState),
267267
ok
@@ -300,27 +300,26 @@ validation_error(ViolatedRule, Name, Info) ->
300300
{Value :: any(), Req :: cowboy_req:req()} |
301301
{error, Reason :: any(), Req :: cowboy_req:req()}.
302302
get_value(body, _Name, Req0) ->
303-
{ok, Body, Req} = cowboy_req:body(Req0),
303+
{ok, Body, Req} = cowboy_req:read_body(Req0),
304304
case prepare_body(Body) of
305305
{error, Reason} ->
306306
{error, Reason, Req};
307307
Value ->
308308
{Value, Req}
309309
end;
310310

311-
get_value(qs_val, Name, Req0) ->
312-
{QS, Req} = cowboy_req:qs_vals(Req0),
311+
get_value(qs_val, Name, Req) ->
312+
QS = cowboy_req:parse_qs(Req),
313313
Value = {{packageName}}_utils:get_opt({{packageName}}_utils:to_qs(Name), QS),
314314
{Value, Req};
315315

316-
get_value(header, Name, Req0) ->
317-
{Headers, Req} = cowboy_req:headers(Req0),
318-
Value = {{packageName}}_utils:get_opt({{packageName}}_utils:to_header(Name), Headers),
316+
get_value(header, Name, Req) ->
317+
Headers = cowboy_req:headers(Req),
318+
Value = maps:get({{packageName}}_utils:to_header(Name), Headers, undefined),
319319
{Value, Req};
320320

321-
get_value(binding, Name, Req0) ->
322-
{Bindings, Req} = cowboy_req:bindings(Req0),
323-
Value = {{packageName}}_utils:get_opt({{packageName}}_utils:to_binding(Name), Bindings),
321+
get_value(binding, Name, Req) ->
322+
Value = cowboy_req:binding({{packageName}}_utils:to_binding(Name), Req),
324323
{Value, Req}.
325324

326325
prepare_body(Body) ->

modules/openapi-generator/src/main/resources/erlang-server/auth.mustache

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,19 @@ authorize_api_key(LogicHandler, OperationID, From, KeyParam, Req0) ->
3636
end
3737
end.
3838

39-
get_api_key(header, KeyParam, Req0) ->
40-
{Headers, Req} = cowboy_req:headers(Req0),
39+
get_api_key(header, KeyParam, Req) ->
40+
Headers = cowboy_req:headers(Req),
4141
{
42-
openapi_utils:get_opt(
43-
{{packageName}}_utils:to_header(KeyParam),
44-
Headers
42+
maps:get(
43+
openapi_utils:to_header(KeyParam),
44+
Headers,
45+
undefined
4546
),
4647
Req
4748
};
4849

49-
get_api_key(qs_val, KeyParam, Req0) ->
50-
{QS, Req} = cowboy_req:qs_vals(Req0),
50+
get_api_key(qs_val, KeyParam, Req) ->
51+
QS = cowboy_req:parse_qs(Req),
5152
{ {{packageName}}_utils:get_opt(KeyParam, QS), Req}.
5253

5354

modules/openapi-generator/src/main/resources/erlang-server/default_logic_handler.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ authorize_api_key(_, _) -> {true, #{}}.
2222
Req :: cowboy_req:req(),
2323
Context :: #{}
2424
) ->
25-
{Status :: cowboy:http_status(), Headers :: cowboy:http_headers(), Body :: #{}}.
25+
{Status :: cowboy:http_status(), Headers :: cowboy:http_headers(), Body :: jsx:json_term()}.
2626

2727
handle_request(OperationID, Req, Context) ->
2828
error_logger:error_msg(
2929
"Got not implemented request to process: ~p~n",
3030
[{OperationID, Req, Context}]
3131
),
32-
{501, [], #{}}.
32+
{501, #{}, #{}}.

modules/openapi-generator/src/main/resources/erlang-server/handler.mustache

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33

44
%% Cowboy REST callbacks
55
-export([allowed_methods/2]).
6-
-export([init/3]).
7-
-export([rest_init/2]).
6+
-export([init/2]).
87
-export([allow_missing_post/2]).
98
-export([content_types_accepted/2]).
109
-export([content_types_provided/2]).
@@ -27,17 +26,11 @@
2726

2827
-type state() :: state().
2928

30-
-spec init(TransportName :: atom(), Req :: cowboy_req:req(), Opts :: {{packageName}}_router:init_opts()) ->
31-
{upgrade, protocol, cowboy_rest, Req :: cowboy_req:req(), Opts :: {{packageName}}_router:init_opts()}.
29+
-spec init(Req :: cowboy_req:req(), Opts :: {{packageName}}_router:init_opts()) ->
30+
{cowboy_rest, Req :: cowboy_req:req(), State :: state()}.
3231

33-
init(_Transport, Req, Opts) ->
34-
{upgrade, protocol, cowboy_rest, Req, Opts}.
35-
36-
-spec rest_init(Req :: cowboy_req:req(), Opts :: {{packageName}}_router:init_opts()) ->
37-
{ok, Req :: cowboy_req:req(), State :: state()}.
38-
39-
rest_init(Req0, {Operations, LogicHandler, ValidatorState}) ->
40-
{Method, Req} = cowboy_req:method(Req0),
32+
init(Req, {Operations, LogicHandler, ValidatorState}) ->
33+
Method = cowboy_req:method(Req),
4134
OperationID = maps:get(Method, Operations, undefined),
4235

4336
error_logger:info_msg("Attempt to process operation: ~p", [OperationID]),
@@ -47,7 +40,7 @@ rest_init(Req0, {Operations, LogicHandler, ValidatorState}) ->
4740
logic_handler = LogicHandler,
4841
validator_state = ValidatorState
4942
},
50-
{ok, Req, State}.
43+
{cowboy_rest, Req, State}.
5144

5245
-spec allowed_methods(Req :: cowboy_req:req(), State :: state()) ->
5346
{Value :: [binary()], Req :: cowboy_req:req(), State :: state()}.
@@ -192,49 +185,47 @@ valid_entity_length(Req, State) ->
192185
{true, Req, State}.
193186

194187
%%%%
195-
196188
-type result_ok() :: {
197189
ok,
198190
{Status :: cowboy:http_status(), Headers :: cowboy:http_headers(), Body :: iodata()}
199191
}.
200192

201193
-type result_error() :: {error, Reason :: any()}.
202194

203-
-type processed_response() :: {halt, cowboy_req:req(), state()}.
195+
-type processed_response() :: {stop, cowboy_req:req(), state()}.
204196

205197
-spec process_response(result_ok() | result_error(), cowboy_req:req(), state()) ->
206198
processed_response().
207199

208200
process_response(Response, Req0, State = #state{operation_id = OperationID}) ->
209201
case Response of
210202
{ok, {Code, Headers, Body}} ->
211-
{ok, Req} = cowboy_req:reply(Code, Headers, Body, Req0),
212-
{halt, Req, State};
203+
Req = cowboy_req:reply(Code, Headers, Body, Req0),
204+
{stop, Req, State};
213205
{error, Message} ->
214206
error_logger:error_msg("Unable to process request for ~p: ~p", [OperationID, Message]),
215207

216-
{ok, Req} = cowboy_req:reply(400, Req0),
217-
{halt, Req, State}
208+
Req = cowboy_req:reply(400, Req0),
209+
{stop, Req, State}
218210
end.
219211

220-
-spec handle_request_json(cowboy_req:req(), state()) -> {halt, cowboy_req:req(), state()}.
212+
-spec handle_request_json(cowboy_req:req(), state()) -> {cowboy_req:resp_body(), cowboy_req:req(), state()}.
221213

222214
handle_request_json(
223215
Req0,
224216
State = #state{
225217
operation_id = OperationID,
226218
logic_handler = LogicHandler,
227-
validator_state = ValidatorState,
228-
context = Context
219+
validator_state = ValidatorState
229220
}
230221
) ->
231222
case {{packageName}}_api:populate_request(OperationID, Req0, ValidatorState) of
232223
{ok, Populated, Req1} ->
233224
{Code, Headers, Body} = {{packageName}}_logic_handler:handle_request(
234225
LogicHandler,
235226
OperationID,
236-
Populated,
237-
Context
227+
Req1,
228+
Populated
238229
),
239230
_ = {{packageName}}_api:validate_response(
240231
OperationID,

modules/openapi-generator/src/main/resources/erlang-server/logic_handler.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@
2222
{{/authMethods}}
2323

2424

25-
-callback handle_request(OperationID :: {{packageName}}_api:operation_id(), Request :: any(), Context :: context()) ->
25+
-callback handle_request(OperationID :: {{packageName}}_api:operation_id(), cowboy_req:req(), Context :: context()) ->
2626
handler_response().
2727

2828
-spec handle_request(
2929
Handler :: atom(),
3030
OperationID :: {{packageName}}_api:operation_id(),
31-
Request :: any(),
31+
Request :: cowboy_req:req(),
3232
Context :: context()
3333
) ->
3434
handler_response().

modules/openapi-generator/src/main/resources/erlang-server/server.mustache

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,32 @@
11
-module({{packageName}}_server).
22

33

4-
-define(DEFAULT_ACCEPTORS_POOLSIZE, 100).
54
-define(DEFAULT_LOGIC_HANDLER, {{packageName}}_default_logic_handler).
65

7-
-export([child_spec/2]).
6+
-export([start/2]).
87

9-
-spec child_spec( ID :: any(), #{
8+
-spec start( ID :: any(), #{
109
ip => inet:ip_address(),
1110
port => inet:port_number(),
1211
logic_handler => module(),
1312
net_opts => []
14-
}) -> supervisor:child_spec().
13+
}) -> {ok, pid()} | {error, any()}.
1514

16-
child_spec(ID, #{
15+
start(ID, #{
1716
ip := IP ,
1817
port := Port,
1918
net_opts := NetOpts
2019
} = Params) ->
21-
AcceptorsPool = ?DEFAULT_ACCEPTORS_POOLSIZE,
2220
{Transport, TransportOpts} = get_socket_transport(IP, Port, NetOpts),
2321
LogicHandler = maps:get(logic_handler, Params, ?DEFAULT_LOGIC_HANDLER),
2422
ExtraOpts = maps:get(cowboy_extra_opts, Params, []),
2523
CowboyOpts = get_cowboy_config(LogicHandler, ExtraOpts),
26-
ranch:child_spec({?MODULE, ID}, AcceptorsPool,
27-
Transport, TransportOpts, cowboy_protocol, CowboyOpts).
24+
case Transport of
25+
ssl ->
26+
cowboy:start_tls(ID, TransportOpts, CowboyOpts);
27+
tcp ->
28+
cowboy:start_clear(ID, TransportOpts, CowboyOpts)
29+
end.
2830

2931
get_socket_transport(IP, Port, Options) ->
3032
Opts = [
@@ -33,9 +35,9 @@ get_socket_transport(IP, Port, Options) ->
3335
],
3436
case {{packageName}}_utils:get_opt(ssl, Options) of
3537
SslOpts = [_|_] ->
36-
{ranch_ssl, Opts ++ SslOpts};
38+
{ssl, Opts ++ SslOpts};
3739
undefined ->
38-
{ranch_tcp, Opts}
40+
{tcp, Opts}
3941
end.
4042

4143
get_cowboy_config(LogicHandler, ExtraOpts) ->
@@ -56,10 +58,10 @@ get_cowboy_config(LogicHandler, [{Key, Value}| Rest], Opts) ->
5658

5759
get_default_dispatch(LogicHandler) ->
5860
Paths = {{packageName}}_router:get_paths(LogicHandler),
59-
{dispatch, cowboy_router:compile(Paths)}.
61+
#{dispatch => cowboy_router:compile(Paths)}.
6062

6163
get_default_opts(LogicHandler) ->
62-
[{env, [get_default_dispatch(LogicHandler)]}].
64+
#{env => get_default_dispatch(LogicHandler)}.
6365

6466
store_key(Key, Value, Opts) ->
6567
lists:keystore(Key, 1, Opts, {Key, Value}).

0 commit comments

Comments
 (0)