|
| 1 | +-module(openapi_handler_legacy). |
| 2 | + |
| 3 | +-export([init/3, handle/2, terminate/3]). |
| 4 | + |
| 5 | +-export([method/1, peer/1, qs/1, parse_qs/1, bindings/1]). |
| 6 | +-export([read_body/1, reply/4, headers/1, header/2, header/3, parse_header/2]). |
| 7 | +-export([read_multipart_files/1]). |
| 8 | + |
| 9 | +init(_, Req, {Name, CowboyPath}) -> |
| 10 | + openapi_handler:do_init(Req, Name, CowboyPath, ?MODULE, #{ok => shutdown, no_handle => true}). |
| 11 | + |
| 12 | +handle(Req, #{} = Request) -> |
| 13 | + openapi_handler:do_handle(Req, Request, ?MODULE). |
| 14 | + |
| 15 | +terminate(_,_,_) -> |
| 16 | + ok. |
| 17 | + |
| 18 | + |
| 19 | +%% Cowboy compat wrapper. Provides Cowboy 2.9 API for Cowboy 1.0 |
| 20 | +method(Req) -> |
| 21 | + {Method, _Req1} = cowboy_req:method(Req), |
| 22 | + Method. |
| 23 | + |
| 24 | +peer(Req) -> |
| 25 | + {Peer, _Req1} = cowboy_req:peer(Req), |
| 26 | + Peer. |
| 27 | + |
| 28 | +qs(Req) -> |
| 29 | + {QS, _Req1} = cowboy_req:qs(Req), |
| 30 | + QS. |
| 31 | + |
| 32 | +parse_qs(Req) -> |
| 33 | + try |
| 34 | + cow_qs:parse_qs(qs(Req)) |
| 35 | + catch _:_:Stacktrace -> |
| 36 | + erlang:raise(exit, {request_error, qs, |
| 37 | + 'Malformed query string; application/x-www-form-urlencoded expected.' |
| 38 | + }, Stacktrace) |
| 39 | + end. |
| 40 | + |
| 41 | +bindings(Req) -> |
| 42 | + {Bindings, _Req1} = cowboy_req:bindings(Req), |
| 43 | + maps:from_list(Bindings). |
| 44 | + |
| 45 | +read_body(Req) -> |
| 46 | + cowboy_req:body(Req). |
| 47 | + |
| 48 | +reply(Code, Headers, Body, Req) -> |
| 49 | + {ok, Req1} = cowboy_req:reply(Code, maps:to_list(Headers), Body, Req), |
| 50 | + Req1. |
| 51 | + |
| 52 | +headers(Req) -> |
| 53 | + {Headers, _Req1} = cowboy_req:headers(Req), |
| 54 | + maps:from_list(Headers). |
| 55 | + |
| 56 | +header(Name, Req) -> |
| 57 | + {Value, _Req1} = cowboy_req:header(Name, Req), |
| 58 | + Value. |
| 59 | + |
| 60 | +header(Name, Req, Default) -> |
| 61 | + {Value, _Req1} = cowboy_req:header(Name, Req, Default), |
| 62 | + Value. |
| 63 | + |
| 64 | +parse_header(Name, Req) -> |
| 65 | + {ok, Value, _Req1} = cowboy_req:parse_header(Name, Req), |
| 66 | + Value. |
| 67 | + |
| 68 | + |
| 69 | + |
| 70 | +read_multipart_files(Req) -> |
| 71 | + % This is a copy of openapi_handler:read_multipart_files/1 with |
| 72 | + % cowboy_req:part/1, cowboy_req:part_body/1 and different number of cow_multipart:form_data/1 |
| 73 | + % results. |
| 74 | + % Despite other methods are cowboy_req methods in this module, it is much simpler to keep such |
| 75 | + % method instead of multiple call mocks to read_part/1 and read_part_body/1 in tests |
| 76 | + do_read_multipart_files(Req, []). |
| 77 | + |
| 78 | +do_read_multipart_files(Req0, Files) -> |
| 79 | + case cowboy_req:part(Req0) of |
| 80 | + {ok, Headers, Req1} -> |
| 81 | + {file, _FieldName, Filename, _CType, _TE} = cow_multipart:form_data(Headers), |
| 82 | + {Bin, Req2} = read_multipart_file(Req1, <<>>), |
| 83 | + do_read_multipart_files(Req2, [{Filename, Bin}| Files]); |
| 84 | + {done, Req1} -> |
| 85 | + {ok, Files, Req1} |
| 86 | +end. |
| 87 | + |
| 88 | +read_multipart_file(Req0, Bin) -> |
| 89 | + case cowboy_req:part_body(Req0) of |
| 90 | + {ok, LastBodyChunk, Req} -> {<<Bin/binary, LastBodyChunk/binary>>, Req}; |
| 91 | + {more, BodyChunk, Req} -> read_multipart_file(Req, <<Bin/binary, BodyChunk/binary>>) |
| 92 | + end. |
0 commit comments