From 285b9b4d7de53b0d607be81fd608d40da82a2fad Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 4 Feb 2019 11:00:26 +0000 Subject: [PATCH] examples/newswww.psgi: demonstrate standalone NewsWWW usage Plack::Builder allows "mounting" on with hostnames as well as path names to enable virtual hosting. This example demonstrates how port 80/443 for "news.example.com" can redirect browser requests when somebody attempts to use a "nntp://" URL and the software assumes "http://" --- examples/newswww.psgi | 48 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 examples/newswww.psgi diff --git a/examples/newswww.psgi b/examples/newswww.psgi new file mode 100644 index 00000000..0f667822 --- /dev/null +++ b/examples/newswww.psgi @@ -0,0 +1,48 @@ +#!/usr/bin/perl -w +# Copyright (C) 2019 all contributors +# License: GPL-3.0+ +# +# NewsWWW may be used independently of WWW. This can be useful +# for mapping HTTP/HTTPS requests to the hostname of an NNTP server +# to redirect users to the proper HTTP/HTTPS endpoint for a given +# inbox. NewsWWW exists because people (or software) can mishandle +# "nntp://" or "news://" URLs as "http://" (or "https://") +# +# Usage: +# plackup -I lib -o 127.0.0.1 -R lib -r examples/newswww.psgi +use strict; +use warnings; +use Plack::Builder; +use PublicInbox::WWW; +use PublicInbox::NewsWWW; + +my $newswww = PublicInbox::NewsWWW->new; + +# Optional, (you may drop the "mount '/'" section below) +my $www = PublicInbox::WWW->new; +$www->preload; + +builder { + # HTTP/1.1 requests to "Host: news.example.com" will hit this: + mount 'http://news.example.com/' => builder { + enable 'Head'; + sub { $newswww->call($_[0]) }; + }; + + # rest of requests will hit this (optional) part for the + # regular PublicInbox::WWW code: + # see comments in examples/public-inbox.psgi for more info: + mount '/' => builder { + eval { + enable 'Deflater', + content_type => [ qw( + text/html + text/plain + application/atom+xml + )] + }; + eval { enable 'ReverseProxy' }; + enable 'Head'; + sub { $www->call($_[0]) } + }; +} -- 2.44.0