"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Mark Jamsek <mark@jamsek.com>
Subject:
Re: gotwebd: set filename for RSS feeds
To:
Omar Polo <op@omarpolo.com>
Cc:
gameoftrees@openbsd.org
Date:
Wed, 4 Jan 2023 01:56:14 +1100

Download raw body.

Thread
On 23-01-03 03:47PM, Omar Polo wrote:
> 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?

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 <fnc.bsdbox.org>
GPG: F2FF 13DE 6A06 C471 CA80  E6E2 2930 DC66 86EE CF68