mirror of
https://github.com/matrix-construct/construct
synced 2024-12-28 00:14:07 +01:00
ircd::resource: Add MIME type requirement option for methods.
This commit is contained in:
parent
cb2c95ceb6
commit
6feaa95d4b
2 changed files with 19 additions and 0 deletions
|
@ -194,6 +194,9 @@ struct ircd::resource::method
|
||||||
/// larger will be summarily rejected with a 413.
|
/// larger will be summarily rejected with a 413.
|
||||||
size_t payload_max {128_KiB};
|
size_t payload_max {128_KiB};
|
||||||
|
|
||||||
|
/// MIME type; first part is the Registry (i.e application) and second
|
||||||
|
/// part is the format (i.e json). Empty value means nothing rejected.
|
||||||
|
std::pair<string_view, string_view> mime;
|
||||||
};
|
};
|
||||||
|
|
||||||
string_view name;
|
string_view name;
|
||||||
|
|
|
@ -278,6 +278,22 @@ ircd::resource::operator()(client &client,
|
||||||
http::PAYLOAD_TOO_LARGE
|
http::PAYLOAD_TOO_LARGE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Check if the resource method wants a specific MIME type. If no option
|
||||||
|
// is given by the resource then any Content-Type by the client will pass.
|
||||||
|
if(method.opts.mime.first)
|
||||||
|
{
|
||||||
|
const auto &ct(split(head.content_type, ';'));
|
||||||
|
const auto &supplied(split(ct.first, '/'));
|
||||||
|
const auto &charset(ct.second);
|
||||||
|
const auto &required(method.opts.mime);
|
||||||
|
if(required.first != supplied.first ||
|
||||||
|
(required.second && required.second != supplied.second))
|
||||||
|
throw http::error
|
||||||
|
{
|
||||||
|
http::UNSUPPORTED_MEDIA_TYPE
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
// This timer will keep the request from hanging forever for whatever
|
// This timer will keep the request from hanging forever for whatever
|
||||||
// reason. The resource method may want to do its own timing and can
|
// reason. The resource method may want to do its own timing and can
|
||||||
// disable this in its options structure.
|
// disable this in its options structure.
|
||||||
|
|
Loading…
Reference in a new issue