From: Mark Jamsek Subject: Re: gotwebd: set filename for RSS feeds To: Omar Polo Cc: gameoftrees@openbsd.org Date: Wed, 4 Jan 2023 01:56:14 +1100 On 23-01-03 03:47PM, Omar Polo wrote: > On 2023/01/03 22:43:26 +1100, Mark Jamsek 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? this is better, imo. ok > 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); > > -- Mark Jamsek GPG: F2FF 13DE 6A06 C471 CA80 E6E2 2930 DC66 86EE CF68