Download raw body.
gotwebd: set filename for RSS feeds
On 2023/01/03 22:43:26 +1100, Mark Jamsek <mark@jamsek.com> wrote:
> On 23-01-03 12:22PM, Omar Polo wrote:
> > a consequence i haven't realized when adding RSS support is that since
> > gotwebd serves the pages from a path that's lacking a filename part,
> > the browser call the RSS feed with a random string.
> >
> > This is not an issue for RSS readers (they extract all the needed info
> > from the XML), but it's ugly, so let's fix it.
> >
> > Diff below uses Content-Disposition to 1) make the browser download
> > the file instead of rendering it and 2) use a reasonable file name
> > (got.git.rss) instead of the random string the browser will use
> > otherwise (lHFP5B6d).
> >
> > ok?
>
> good catch! nice. ok
Thanks!
I wasn't sure about adding that extra PATH_MAX local buffer, since
gotweb_render_content_type_file is just a glorified printf here's an
equivalent diff that passes an extra "suffix" parameter. What do you
think?
diff /home/op/w/got2
commit - 1b18f4cd75fddf070589d9b045e083ac02d8baba
path + /home/op/w/got2
blob - 89718fdd602637e74ca5a949af1e7cfda57b723d
file + gotwebd/got_operations.c
--- gotwebd/got_operations.c
+++ gotwebd/got_operations.c
@@ -1044,7 +1044,7 @@ got_output_file_blob(struct request *c)
if (isbinary(buf, len - hdrlen)) {
error = gotweb_render_content_type_file(c,
"application/octet-stream",
- qs->file);
+ qs->file, NULL);
if (error) {
log_warnx("%s: %s", __func__,
error->msg);
blob - 6f5a07850b9e8e153830292e5ce4f4d986782eff
file + gotwebd/gotweb.c
--- gotwebd/gotweb.c
+++ gotwebd/gotweb.c
@@ -179,8 +179,9 @@ gotweb_process_request(struct request *c)
}
if (qs->action == RSS) {
- error = gotweb_render_content_type(c,
- "application/rss+xml;charset=utf-8");
+ error = gotweb_render_content_type_file(c,
+ "application/rss+xml;charset=utf-8",
+ repo_dir->name, ".rss");
if (error) {
log_warnx("%s: %s", __func__, error->msg);
goto err;
@@ -670,11 +671,11 @@ gotweb_render_content_type_file(struct request *c, con
const struct got_error *
gotweb_render_content_type_file(struct request *c, const char *type,
- const char *file)
+ const char *file, const char *suffix)
{
fcgi_printf(c, "Content-type: %s\r\n"
- "Content-disposition: attachment; filename=%s\r\n\r\n",
- type, file);
+ "Content-disposition: attachment; filename=%s%s\r\n\r\n",
+ type, file, suffix ? suffix : "");
return NULL;
}
blob - 8a9deffd75b83126733cb4d76bb9170bc7604995
file + gotwebd/gotwebd.h
--- gotwebd/gotwebd.h
+++ gotwebd/gotwebd.h
@@ -437,7 +437,7 @@ const struct got_error
const uint8_t *);
const struct got_error
*gotweb_render_content_type_file(struct request *, const char *,
- const char *);
+ const char *, const char *);
void gotweb_get_navs(struct request *, struct gotweb_url *, int *,
struct gotweb_url *, int *);
const struct got_error *gotweb_get_time_str(char **, time_t, int);
gotwebd: set filename for RSS feeds