mirror of
https://github.com/matrix-construct/construct
synced 2024-06-02 10:08:56 +02:00
ircd: Add preliminary RFC3986 grammar; move urlencoding there.
This commit is contained in:
parent
d14d8a0f0f
commit
03dea97bb2
|
@ -374,7 +374,7 @@ try
|
|||
char url[512]; const auto url_len
|
||||
{
|
||||
fmt::sprintf(url, "_matrix/client/r0/rooms/%s/messages",
|
||||
urlencode(room_id, room_id_encoded))
|
||||
url::encode(room_id, room_id_encoded))
|
||||
};
|
||||
|
||||
char query[1024];
|
||||
|
@ -416,7 +416,7 @@ try
|
|||
char url[512]; const auto url_len
|
||||
{
|
||||
fmt::sprintf(url, "_matrix/client/r0/rooms/%s/members",
|
||||
urlencode(room_id, room_id_encoded))
|
||||
url::encode(room_id, room_id_encoded))
|
||||
};
|
||||
|
||||
char query[1024];
|
||||
|
@ -451,8 +451,8 @@ try
|
|||
const params token{args, " ", {"room_id", "event_id"}};
|
||||
|
||||
char room_id_buf[768], event_id_buf[768];
|
||||
const auto room_id{urlencode(token.at(0), room_id_buf)};
|
||||
const auto event_id{urlencode(token.at(1), event_id_buf)};
|
||||
const auto room_id{url::encode(token.at(0), room_id_buf)};
|
||||
const auto event_id{url::encode(token.at(1), event_id_buf)};
|
||||
|
||||
char url[512]; const auto url_len
|
||||
{
|
||||
|
@ -487,14 +487,14 @@ try
|
|||
const params token{args, " ", {"room_id", "event_type", "state_key"}};
|
||||
|
||||
char room_id_buf[512];
|
||||
const auto room_id{urlencode(token.at(0), room_id_buf)};
|
||||
const auto room_id{url::encode(token.at(0), room_id_buf)};
|
||||
|
||||
const auto event_type{token[1]};
|
||||
|
||||
char state_key_buf[512];
|
||||
const auto state_key
|
||||
{
|
||||
urlencode(token[2], state_key_buf)
|
||||
url::encode(token[2], state_key_buf)
|
||||
};
|
||||
|
||||
char url[512]; const auto url_len
|
||||
|
@ -1151,7 +1151,7 @@ try
|
|||
char origin_buf[512];
|
||||
const auto origin
|
||||
{
|
||||
urlencode(origin_token, origin_buf)
|
||||
url::encode(origin_token, origin_buf)
|
||||
};
|
||||
|
||||
const auto event_id_token
|
||||
|
@ -1162,7 +1162,7 @@ try
|
|||
char event_id_buf[512];
|
||||
const auto event_id
|
||||
{
|
||||
urlencode(event_id_token, event_id_buf)
|
||||
url::encode(event_id_token, event_id_buf)
|
||||
};
|
||||
|
||||
static char url[128]; const auto url_len
|
||||
|
@ -1493,7 +1493,7 @@ try
|
|||
char room_alias_buf[512];
|
||||
const auto room_alias
|
||||
{
|
||||
urlencode(room_alias_token, room_alias_buf)
|
||||
url::encode(room_alias_token, room_alias_buf)
|
||||
};
|
||||
|
||||
static char url[128]; const auto url_len
|
||||
|
@ -1547,7 +1547,7 @@ try
|
|||
char user_id_buf[512];
|
||||
const auto user_id
|
||||
{
|
||||
urlencode(user_id_token, user_id_buf)
|
||||
url::encode(user_id_token, user_id_buf)
|
||||
};
|
||||
|
||||
static char url[128]; const auto url_len
|
||||
|
|
|
@ -39,15 +39,6 @@ namespace ircd::http
|
|||
|
||||
string_view status(const enum code &);
|
||||
enum code status(const string_view &);
|
||||
|
||||
string_view urlencode(const string_view &url, const mutable_buffer &);
|
||||
string_view urldecode(const string_view &url, const mutable_buffer &);
|
||||
}
|
||||
|
||||
namespace ircd
|
||||
{
|
||||
using http::urldecode;
|
||||
using http::urlencode;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
44
include/ircd/rfc3986.h
Normal file
44
include/ircd/rfc3986.h
Normal file
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright (C) 2017 Charybdis Development Team
|
||||
* Copyright (C) 2017 Jason Volk <jason@zemos.net>
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice is present in all copies.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#define HAVE_IRCD_RFC3986_H
|
||||
|
||||
/// Universal Resource Indicator (URI) grammars & tools
|
||||
namespace ircd::rfc3986
|
||||
{
|
||||
IRCD_EXCEPTION(ircd::error, error)
|
||||
IRCD_EXCEPTION(error, coding_error)
|
||||
IRCD_EXCEPTION(coding_error, encoding_error)
|
||||
IRCD_EXCEPTION(coding_error, decoding_error)
|
||||
|
||||
struct parser extern const parser;
|
||||
struct encoder extern const encoder;
|
||||
struct decoder extern const decoder;
|
||||
|
||||
string_view encode(const string_view &url, const mutable_buffer &);
|
||||
string_view decode(const string_view &url, const mutable_buffer &);
|
||||
}
|
||||
|
||||
namespace ircd
|
||||
{
|
||||
namespace url = rfc3986;
|
||||
}
|
|
@ -221,6 +221,7 @@ namespace ircd
|
|||
#include "db/db.h"
|
||||
#include "js.h"
|
||||
#include "mods.h"
|
||||
#include "rfc3986.h"
|
||||
#include "net/net.h"
|
||||
#include "server.h"
|
||||
#include "client.h"
|
||||
|
|
|
@ -85,6 +85,7 @@ libircd_la_SOURCES = \
|
|||
parse.cc \
|
||||
resource.cc \
|
||||
rfc1459.cc \
|
||||
rfc3986.cc \
|
||||
server.cc \
|
||||
sodium.cc \
|
||||
###
|
||||
|
|
96
ircd/http.cc
96
ircd/http.cc
|
@ -47,8 +47,6 @@ namespace ircd::http
|
|||
|
||||
template<class it, class top = unused_type> struct grammar;
|
||||
struct parser extern const parser;
|
||||
struct urlencoder extern const urlencoder;
|
||||
struct urldecoder extern const urldecoder;
|
||||
|
||||
size_t printed_size(const vector_view<const line::header> &headers);
|
||||
size_t print(char *const &buf, const size_t &max, const vector_view<const line::header> &headers);
|
||||
|
@ -877,100 +875,6 @@ ircd::http::parser::content_length(const string_view &str)
|
|||
return ret;
|
||||
}
|
||||
|
||||
struct ircd::http::urlencoder
|
||||
:karma::grammar<char *, const string_view &>
|
||||
{
|
||||
void throw_illegal()
|
||||
{
|
||||
throw error(code::BAD_REQUEST, "Generator Protection: urlencode");
|
||||
}
|
||||
|
||||
karma::rule<char *, const string_view &> url_encoding
|
||||
{
|
||||
*(karma::char_("A-Za-z0-9") | (karma::lit('%') << karma::hex))
|
||||
,"url encoding"
|
||||
};
|
||||
|
||||
urlencoder(): urlencoder::base_type{url_encoding} {}
|
||||
}
|
||||
const ircd::http::urlencoder;
|
||||
|
||||
struct ircd::http::urldecoder
|
||||
:qi::grammar<const char *, mutable_buffer>
|
||||
{
|
||||
template<class R = unused_type, class... S> using rule = qi::rule<const char *, R, S...>;
|
||||
|
||||
rule<> url_illegal
|
||||
{
|
||||
char_(0x00, 0x1f)
|
||||
,"url illegal"
|
||||
};
|
||||
|
||||
rule<char()> url_encodable
|
||||
{
|
||||
char_("A-Za-z0-9")
|
||||
,"url encodable character"
|
||||
};
|
||||
|
||||
rule<char()> urlencoded_character
|
||||
{
|
||||
'%' > qi::uint_parser<char, 16, 2, 2>{}
|
||||
,"urlencoded character"
|
||||
};
|
||||
|
||||
rule<mutable_buffer> url_decode
|
||||
{
|
||||
*((char_ - '%') | urlencoded_character)
|
||||
,"urldecode"
|
||||
};
|
||||
|
||||
urldecoder(): urldecoder::base_type { url_decode } {}
|
||||
}
|
||||
const ircd::http::urldecoder;
|
||||
|
||||
ircd::string_view
|
||||
ircd::http::urldecode(const string_view &url,
|
||||
const mutable_buffer &buf)
|
||||
try
|
||||
{
|
||||
const char *start{url.data()}, *const stop
|
||||
{
|
||||
url.data() + std::min(url.size(), size(buf))
|
||||
};
|
||||
|
||||
mutable_buffer mb{data(buf), size_t(0)};
|
||||
qi::parse(start, stop, urldecoder.url_decode, mb);
|
||||
return string_view{data(mb), size(mb)};
|
||||
}
|
||||
catch(const qi::expectation_failure<const char *> &e)
|
||||
{
|
||||
const auto rule
|
||||
{
|
||||
ircd::string(e.what_)
|
||||
};
|
||||
|
||||
throw error
|
||||
{
|
||||
code::BAD_REQUEST, fmt::snstringf
|
||||
{
|
||||
BUFSIZE,
|
||||
"I require a valid urlencoded %s. You sent %zu invalid chars starting with `%s'.",
|
||||
between(rule, "<", ">"),
|
||||
size_t(e.last - e.first),
|
||||
string_view{e.first, e.last}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
ircd::string_view
|
||||
ircd::http::urlencode(const string_view &url,
|
||||
const mutable_buffer &buf)
|
||||
{
|
||||
char *out{data(buf)};
|
||||
karma::generate(out, maxwidth(size(buf))[urlencoder], url);
|
||||
return string_view{data(buf), size_t(std::distance(data(buf), out))};
|
||||
}
|
||||
|
||||
ircd::http::error::error(const enum code &code,
|
||||
std::string content)
|
||||
:ircd::error{generate_skip}
|
||||
|
|
10
ircd/m/io.cc
10
ircd/m/io.cc
|
@ -228,12 +228,12 @@ ircd::m::io::acquire(vector_view<room::state::fetch> tab)
|
|||
static char tmp[768];
|
||||
url[i] = fmt::snstringf
|
||||
{
|
||||
1024, "_matrix/federation/v1/state/%s/", urlencode(tab[i].room_id, tmp)
|
||||
1024, "_matrix/federation/v1/state/%s/", url::encode(tab[i].room_id, tmp)
|
||||
};
|
||||
|
||||
query[i] = fmt::snstringf
|
||||
{
|
||||
1024, "event_id=%s", urlencode(tab[i].event_id, tmp)
|
||||
1024, "event_id=%s", url::encode(tab[i].event_id, tmp)
|
||||
};
|
||||
|
||||
request[i] =
|
||||
|
@ -320,12 +320,12 @@ ircd::m::io::acquire(vector_view<room::fetch> tab)
|
|||
static char tmp[768];
|
||||
url[i] = fmt::snstringf
|
||||
{
|
||||
1024, "_matrix/federation/v1/backfill/%s/", urlencode(tab[i].room_id, tmp)
|
||||
1024, "_matrix/federation/v1/backfill/%s/", url::encode(tab[i].room_id, tmp)
|
||||
};
|
||||
|
||||
query[i] = fmt::snstringf
|
||||
{
|
||||
1024, "limit=%zu&v=%s", tab[i].opts->limit, urlencode(tab[i].event_id, tmp)
|
||||
1024, "limit=%zu&v=%s", tab[i].opts->limit, url::encode(tab[i].event_id, tmp)
|
||||
};
|
||||
|
||||
session[i] =
|
||||
|
@ -411,7 +411,7 @@ ircd::m::io::acquire(vector_view<event::fetch> tab)
|
|||
static char tmp[768];
|
||||
url[i] = fmt::snstringf
|
||||
{
|
||||
1024, "_matrix/federation/v1/event/%s/", urlencode(tab[i].event_id, tmp)
|
||||
1024, "_matrix/federation/v1/event/%s/", url::encode(tab[i].event_id, tmp)
|
||||
};
|
||||
|
||||
session[i] =
|
||||
|
|
|
@ -261,13 +261,13 @@ ircd::m::vm::join(const room::id &room_id,
|
|||
char room_id_urle_buf[768];
|
||||
const auto room_id_urle
|
||||
{
|
||||
urlencode(room_id, room_id_urle_buf),
|
||||
url::encode(room_id, room_id_urle_buf),
|
||||
};
|
||||
|
||||
char user_id_urle_buf[768];
|
||||
const auto user_id_urle
|
||||
{
|
||||
urlencode(user_id, user_id_urle_buf)
|
||||
url::encode(user_id, user_id_urle_buf)
|
||||
};
|
||||
|
||||
const fmt::snstringf url
|
||||
|
@ -415,7 +415,7 @@ ircd::m::vm::join(const room::id &room_id,
|
|||
char event_id_urle_buf[768];
|
||||
const auto event_id_urle
|
||||
{
|
||||
urlencode(event.at("event_id"), event_id_urle_buf)
|
||||
url::encode(event.at("event_id"), event_id_urle_buf)
|
||||
};
|
||||
|
||||
const fmt::bsprintf<1024> send_join_url
|
||||
|
|
219
ircd/rfc3986.cc
Normal file
219
ircd/rfc3986.cc
Normal file
|
@ -0,0 +1,219 @@
|
|||
/*
|
||||
* Copyright (C) 2016 Charybdis Development Team
|
||||
* Copyright (C) 2016 Jason Volk <jason@zemos.net>
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice is present in all copies.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <ircd/spirit.h>
|
||||
|
||||
namespace spirit = boost::spirit;
|
||||
namespace qi = spirit::qi;
|
||||
namespace karma = spirit::karma;
|
||||
namespace ascii = qi::ascii;
|
||||
|
||||
using qi::lit;
|
||||
using qi::string;
|
||||
using qi::char_;
|
||||
using qi::short_;
|
||||
using qi::ushort_;
|
||||
using qi::int_;
|
||||
using qi::long_;
|
||||
using qi::repeat;
|
||||
using qi::omit;
|
||||
using qi::raw;
|
||||
using qi::attr;
|
||||
using qi::eps;
|
||||
using qi::attr_cast;
|
||||
|
||||
using karma::maxwidth;
|
||||
|
||||
namespace ircd::rfc3986
|
||||
{
|
||||
template<class it> struct grammar;
|
||||
}
|
||||
|
||||
template<class it>
|
||||
struct ircd::rfc3986::grammar
|
||||
:qi::grammar<it, spirit::unused_type>
|
||||
{
|
||||
template<class R = spirit::unused_type, class... S> using rule = qi::rule<it, R, S...>;
|
||||
|
||||
rule<> NUL { lit('\0') ,"nul" };
|
||||
rule<> SP { lit('\x20') ,"space" };
|
||||
rule<> HT { lit('\x09') ,"horizontal tab" };
|
||||
rule<> CR { lit('\x0D') ,"carriage return" };
|
||||
rule<> LF { lit('\x0A') ,"line feed" };
|
||||
rule<> CRLF { CR >> LF ,"carriage return, line feed" };
|
||||
rule<> ws { SP | HT ,"whitespace" };
|
||||
|
||||
/*
|
||||
rule<string_view> authority
|
||||
{
|
||||
//TODO: https://tools.ietf.org/html/rfc3986#section-3.2
|
||||
-('/' >> '/') >> raw[*(char_ - '/')] >> '/'
|
||||
};
|
||||
*/
|
||||
const rule<> port
|
||||
{
|
||||
ushort_
|
||||
,"port"
|
||||
};
|
||||
|
||||
const rule<> ip6_address
|
||||
{
|
||||
//TODO: XXX
|
||||
*char_("0-9a-fA-F:")
|
||||
,"ip6 address"
|
||||
};
|
||||
|
||||
const rule<> ip6_literal
|
||||
{
|
||||
'[' >> ip6_address >> ']'
|
||||
,"ip6 literal"
|
||||
};
|
||||
|
||||
const rule<> dns_name
|
||||
{
|
||||
ip6_literal | *(char_ - ':')
|
||||
,"dns name"
|
||||
};
|
||||
|
||||
grammar()
|
||||
:grammar::base_type{rule<>{}}
|
||||
{}
|
||||
};
|
||||
|
||||
struct ircd::rfc3986::parser
|
||||
:grammar<const char *>
|
||||
{
|
||||
string_view operator()(const string_view &url) const;
|
||||
}
|
||||
const ircd::rfc3986::parser;
|
||||
|
||||
ircd::string_view
|
||||
ircd::rfc3986::parser::operator()(const string_view &url)
|
||||
const try
|
||||
{
|
||||
string_view out;
|
||||
const char *start{url.data()};
|
||||
const char *const stop{url.data() + url.size()};
|
||||
//qi::parse(start, stop, , out);
|
||||
return out;
|
||||
}
|
||||
catch(const qi::expectation_failure<const char *> &e)
|
||||
{
|
||||
auto rule
|
||||
{
|
||||
ircd::string(e.what_)
|
||||
};
|
||||
|
||||
throw error
|
||||
{
|
||||
"Not a valid url because of an invalid %s.", between(rule, '<', '>')
|
||||
};
|
||||
}
|
||||
|
||||
struct ircd::rfc3986::encoder
|
||||
:karma::grammar<char *, const string_view &>
|
||||
{
|
||||
void throw_illegal()
|
||||
{
|
||||
throw encoding_error("Generator Protection: urlencode");
|
||||
}
|
||||
|
||||
karma::rule<char *, const string_view &> url_encoding
|
||||
{
|
||||
*(karma::char_("A-Za-z0-9") | (karma::lit('%') << karma::hex))
|
||||
,"url encoding"
|
||||
};
|
||||
|
||||
encoder(): encoder::base_type{url_encoding} {}
|
||||
}
|
||||
const ircd::rfc3986::encoder;
|
||||
|
||||
ircd::string_view
|
||||
ircd::rfc3986::encode(const string_view &url,
|
||||
const mutable_buffer &buf)
|
||||
{
|
||||
char *out{data(buf)};
|
||||
karma::generate(out, maxwidth(size(buf))[encoder], url);
|
||||
return string_view{data(buf), size_t(std::distance(data(buf), out))};
|
||||
}
|
||||
|
||||
struct ircd::rfc3986::decoder
|
||||
:qi::grammar<const char *, mutable_buffer>
|
||||
{
|
||||
template<class R = spirit::unused_type, class... S> using rule = qi::rule<const char *, R, S...>;
|
||||
|
||||
rule<> url_illegal
|
||||
{
|
||||
char_(0x00, 0x1f)
|
||||
,"url illegal"
|
||||
};
|
||||
|
||||
rule<char()> url_encodable
|
||||
{
|
||||
char_("A-Za-z0-9")
|
||||
,"url encodable character"
|
||||
};
|
||||
|
||||
rule<char()> urlencoded_character
|
||||
{
|
||||
'%' > qi::uint_parser<char, 16, 2, 2>{}
|
||||
,"urlencoded character"
|
||||
};
|
||||
|
||||
rule<mutable_buffer> url_decode
|
||||
{
|
||||
*((char_ - '%') | urlencoded_character)
|
||||
,"urldecode"
|
||||
};
|
||||
|
||||
decoder(): decoder::base_type { url_decode } {}
|
||||
}
|
||||
const ircd::rfc3986::decoder;
|
||||
|
||||
ircd::string_view
|
||||
ircd::rfc3986::decode(const string_view &url,
|
||||
const mutable_buffer &buf)
|
||||
try
|
||||
{
|
||||
const char *start{url.data()}, *const stop
|
||||
{
|
||||
start + std::min(size(url), size(buf))
|
||||
};
|
||||
|
||||
mutable_buffer mb{data(buf), size_t(0)};
|
||||
qi::parse(start, stop, eps > decoder, mb);
|
||||
return string_view{data(mb), size(mb)};
|
||||
}
|
||||
catch(const qi::expectation_failure<const char *> &e)
|
||||
{
|
||||
const auto rule
|
||||
{
|
||||
ircd::string(e.what_)
|
||||
};
|
||||
|
||||
throw decoding_error
|
||||
{
|
||||
"I require a valid urlencoded %s. You sent %zu invalid chars starting with `%s'.",
|
||||
between(rule, "<", ">"),
|
||||
size_t(e.last - e.first),
|
||||
string_view{e.first, e.last}
|
||||
};
|
||||
}
|
|
@ -46,7 +46,7 @@ post_join(client &client, const resource::request &request)
|
|||
|
||||
m::room::id::buf room_id
|
||||
{
|
||||
urldecode(request.parv[0], room_id)
|
||||
url::decode(request.parv[0], room_id)
|
||||
};
|
||||
|
||||
m::join(room_id, request.user_id);
|
||||
|
|
|
@ -205,13 +205,13 @@ get_state(client &client,
|
|||
char type_buf[uint(256 * 1.34 + 1)];
|
||||
const string_view &type
|
||||
{
|
||||
urldecode(request.parv[2], type_buf)
|
||||
url::decode(request.parv[2], type_buf)
|
||||
};
|
||||
|
||||
char skey_buf[uint(256 * 1.34 + 1)];
|
||||
const string_view &state_key
|
||||
{
|
||||
urldecode(request.parv[3], skey_buf)
|
||||
url::decode(request.parv[3], skey_buf)
|
||||
};
|
||||
|
||||
// (non-standard) Allow an event_id to be passed in the query string
|
||||
|
@ -219,7 +219,7 @@ get_state(client &client,
|
|||
char evid_buf[uint(256 * 1.34 + 1)];
|
||||
const string_view &event_id
|
||||
{
|
||||
urldecode(request.query["event_id"], evid_buf)
|
||||
url::decode(request.query["event_id"], evid_buf)
|
||||
};
|
||||
|
||||
if(type && state_key)
|
||||
|
@ -244,7 +244,7 @@ get_context(client &client,
|
|||
{
|
||||
m::event::id::buf event_id
|
||||
{
|
||||
urldecode(request.parv[2], event_id)
|
||||
url::decode(request.parv[2], event_id)
|
||||
};
|
||||
|
||||
const m::vm::query<m::vm::where::equal> query
|
||||
|
@ -287,7 +287,7 @@ get_rooms(client &client, const resource::request &request)
|
|||
|
||||
m::room::id::buf room_id
|
||||
{
|
||||
urldecode(request.parv[0], room_id)
|
||||
url::decode(request.parv[0], room_id)
|
||||
};
|
||||
|
||||
const string_view &cmd
|
||||
|
@ -385,7 +385,7 @@ put_typing(client &client,
|
|||
|
||||
m::user::id::buf user_id
|
||||
{
|
||||
urldecode(request.parv[2], user_id)
|
||||
url::decode(request.parv[2], user_id)
|
||||
};
|
||||
|
||||
static const milliseconds timeout_default
|
||||
|
@ -422,7 +422,7 @@ put_rooms(client &client, const resource::request &request)
|
|||
|
||||
m::room::id::buf room_id
|
||||
{
|
||||
urldecode(request.parv[0], room_id)
|
||||
url::decode(request.parv[0], room_id)
|
||||
};
|
||||
|
||||
const string_view &cmd
|
||||
|
@ -486,7 +486,7 @@ post_rooms(client &client,
|
|||
|
||||
m::room::id::buf room_id
|
||||
{
|
||||
urldecode(request.parv[0], room_id)
|
||||
url::decode(request.parv[0], room_id)
|
||||
};
|
||||
|
||||
const string_view &cmd
|
||||
|
|
|
@ -35,7 +35,7 @@ get_filter(client &client, const resource::request &request)
|
|||
{
|
||||
m::user::id::buf user_id
|
||||
{
|
||||
urldecode(request.parv[0], user_id)
|
||||
url::decode(request.parv[0], user_id)
|
||||
};
|
||||
|
||||
const auto &filter_id
|
||||
|
@ -91,7 +91,7 @@ post_filter(client &client, const resource::request::object<const m::filter> &re
|
|||
// token must be authorized to make requests for this user id.
|
||||
m::user::id::buf user_id
|
||||
{
|
||||
urldecode(request.parv[0], user_id)
|
||||
url::decode(request.parv[0], user_id)
|
||||
};
|
||||
|
||||
// (5.2) List of event fields to include. If this list is absent then all fields are
|
||||
|
|
|
@ -46,7 +46,7 @@ handle_get(client &client,
|
|||
{
|
||||
m::event::id::buf event_id
|
||||
{
|
||||
urldecode(request.parv[0], event_id)
|
||||
url::decode(request.parv[0], event_id)
|
||||
};
|
||||
|
||||
const unique_buffer<mutable_buffer> buffer
|
||||
|
|
|
@ -47,7 +47,7 @@ handle_get(client &client,
|
|||
char key_id_buf[256];
|
||||
const auto key_id
|
||||
{
|
||||
urldecode(request.parv[0], key_id_buf)
|
||||
url::decode(request.parv[0], key_id_buf)
|
||||
};
|
||||
|
||||
std::string my_key;
|
||||
|
|
Loading…
Reference in a new issue