#!/usr/bin/perl -w
# Copyright (C) 2019-2021 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 (development, with auto-reload):
# plackup -I lib -o 127.0.0.1 -R lib -r examples/newswww.psgi
#
# Usage (production, with public-inbox-httpd(1)):
# public-inbox-httpd [OPTIONS] /path/to/examples/newsww.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 'ReverseProxy' };
enable 'Head';
sub { $www->call($_[0]) }
};
}