mirror of
https://github.com/matrix-construct/construct
synced 2024-11-26 00:32:35 +01:00
ircd: Split out allow methods list generator.
This commit is contained in:
parent
a2be4d3ee5
commit
ba6832b420
2 changed files with 22 additions and 12 deletions
|
@ -35,6 +35,8 @@ struct ircd::resource
|
||||||
std::map<string_view, method *> methods;
|
std::map<string_view, method *> methods;
|
||||||
unique_const_iterator<decltype(resources)> resources_it;
|
unique_const_iterator<decltype(resources)> resources_it;
|
||||||
|
|
||||||
|
string_view allow_methods_list(const mutable_buffer &buf);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual void handle_request(client &, method &, resource::request &);
|
virtual void handle_request(client &, method &, resource::request &);
|
||||||
|
|
||||||
|
|
|
@ -312,10 +312,7 @@ ircd::resource::handle_request(client &client,
|
||||||
resource::request &request)
|
resource::request &request)
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
const auto response
|
method(client, request);
|
||||||
{
|
|
||||||
method(client, request)
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
catch(const json::not_found &e)
|
catch(const json::not_found &e)
|
||||||
{
|
{
|
||||||
|
@ -360,9 +357,26 @@ try
|
||||||
return *methods.at(name);
|
return *methods.at(name);
|
||||||
}
|
}
|
||||||
catch(const std::out_of_range &e)
|
catch(const std::out_of_range &e)
|
||||||
|
{
|
||||||
|
char buf[128];
|
||||||
|
const http::header headers[]
|
||||||
|
{
|
||||||
|
{ "Allow", allow_methods_list(buf) }
|
||||||
|
};
|
||||||
|
|
||||||
|
throw http::error
|
||||||
|
{
|
||||||
|
http::METHOD_NOT_ALLOWED, {}, headers
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
ircd::string_view
|
||||||
|
ircd::resource::allow_methods_list(const mutable_buffer &buf)
|
||||||
{
|
{
|
||||||
size_t len(0);
|
size_t len(0);
|
||||||
char buf[128]; buf[0] = '\0';
|
if(likely(size(buf)))
|
||||||
|
buf[len] = '\0';
|
||||||
|
|
||||||
auto it(begin(methods));
|
auto it(begin(methods));
|
||||||
if(it != end(methods))
|
if(it != end(methods))
|
||||||
{
|
{
|
||||||
|
@ -374,13 +388,7 @@ catch(const std::out_of_range &e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
throw http::error
|
return { data(buf), len };
|
||||||
{
|
|
||||||
http::METHOD_NOT_ALLOWED, {},
|
|
||||||
{
|
|
||||||
{ "Allow", string_view{buf, len} }
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ircd::resource::method::method(struct resource &resource,
|
ircd::resource::method::method(struct resource &resource,
|
||||||
|
|
Loading…
Reference in a new issue