0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-09-27 19:28:52 +02:00

modules/media: Convey a user_id through the download stack for the file room.

This commit is contained in:
Jason Volk 2018-04-30 07:30:34 -07:00
parent 9af649f739
commit e6a204263e
6 changed files with 35 additions and 10 deletions

View file

@ -4589,6 +4589,7 @@ console_cmd__file__download(opt &out, const string_view &line)
using prototype = m::room::id::buf (const string_view &server, using prototype = m::room::id::buf (const string_view &server,
const string_view &file, const string_view &file,
const m::user::id &,
const net::hostport &remote); const net::hostport &remote);
static m::import<prototype> download static m::import<prototype> download
@ -4598,7 +4599,7 @@ console_cmd__file__download(opt &out, const string_view &line)
const m::room::id::buf room_id const m::room::id::buf room_id
{ {
download(server, file, remote) download(server, file, m::me.user_id, remote)
}; };
out << room_id << std::endl; out << room_id << std::endl;

View file

@ -57,9 +57,18 @@ get__download(client &client,
request.parv[1] request.parv[1]
}; };
// Download doesn't require auth so if there is no user_id detected
// then we download on behalf of @ircd.
const m::user::id &user_id
{
request.user_id?
m::user::id{request.user_id}:
m::me.user_id
};
const m::room::id::buf room_id const m::room::id::buf room_id
{ {
download(server, file) download(server, file, user_id)
}; };
return get__download_local(client, request, server, file, room_id); return get__download_local(client, request, server, file, room_id);

View file

@ -31,6 +31,7 @@ downloading_dock;
m::room::id::buf m::room::id::buf
download(const string_view &server, download(const string_view &server,
const string_view &mediaid, const string_view &mediaid,
const m::user::id &user_id,
const net::hostport &remote) const net::hostport &remote)
{ {
const m::room::id::buf room_id const m::room::id::buf room_id
@ -38,13 +39,14 @@ download(const string_view &server,
file_room_id(server, mediaid) file_room_id(server, mediaid)
}; };
download(server, mediaid, remote, room_id); download(server, mediaid, user_id, remote, room_id);
return room_id; return room_id;
} }
m::room m::room
download(const string_view &server, download(const string_view &server,
const string_view &mediaid, const string_view &mediaid,
const m::user::id &user_id,
const net::hostport &remote, const net::hostport &remote,
const m::room::id &room_id) const m::room::id &room_id)
try try
@ -115,11 +117,11 @@ try
room_id, &vmopts room_id, &vmopts
}; };
create(room, m::me.user_id, "file"); create(room, user_id, "file");
const size_t written const size_t written
{ {
write_file(room, content, content_type) write_file(room, user_id, content, content_type)
}; };
return room; return room;
@ -197,17 +199,18 @@ download(const mutable_buffer &head_buf,
size_t size_t
write_file(const m::room &room, write_file(const m::room &room,
const m::user::id &user_id,
const const_buffer &content, const const_buffer &content,
const string_view &content_type) const string_view &content_type)
{ {
//TODO: TXN //TODO: TXN
send(room, m::me.user_id, "ircd.file.stat", "size", send(room, user_id, "ircd.file.stat", "size",
{ {
{ "value", long(size(content)) } { "value", long(size(content)) }
}); });
//TODO: TXN //TODO: TXN
send(room, m::me.user_id, "ircd.file.stat", "type", send(room, user_id, "ircd.file.stat", "type",
{ {
{ "value", content_type } { "value", content_type }
}); });

View file

@ -27,7 +27,8 @@ read_each_block(const m::room &,
const std::function<void (const const_buffer &)> &); const std::function<void (const const_buffer &)> &);
extern "C" size_t extern "C" size_t
write_file(const m::room &room, write_file(const m::room &,
const m::user::id &,
const const_buffer &content, const const_buffer &content,
const string_view &content_type); const string_view &content_type);
@ -41,10 +42,12 @@ download(const mutable_buffer &head_buf,
m::room m::room
download(const string_view &server, download(const string_view &server,
const string_view &mediaid, const string_view &mediaid,
const m::user::id &user_id,
const net::hostport &remote, const net::hostport &remote,
const m::room::id &room_id); const m::room::id &room_id);
extern "C" m::room::id::buf extern "C" m::room::id::buf
download(const string_view &server, download(const string_view &server,
const string_view &mediaid, const string_view &mediaid,
const m::user::id &user_id,
const net::hostport &remote = {}); const net::hostport &remote = {});

View file

@ -69,9 +69,18 @@ get__thumbnail(client &client,
request.parv[1] request.parv[1]
}; };
// Thumbnail doesn't require auth so if there is no user_id detected
// then we download on behalf of @ircd.
const m::user::id &user_id
{
request.user_id?
m::user::id{request.user_id}:
m::me.user_id
};
const m::room::id::buf room_id const m::room::id::buf room_id
{ {
download(server, file) download(server, file, user_id)
}; };
return get__thumbnail_local(client, request, server, file, room_id); return get__thumbnail_local(client, request, server, file, room_id);

View file

@ -78,7 +78,7 @@ post__upload(client &client,
const size_t written const size_t written
{ {
write_file(room, buf, content_type) write_file(room, request.user_id, buf, content_type)
}; };
char uribuf[256]; char uribuf[256];