Apache-Motd
view release on metacpan or search on metacpan
Revision history for Perl extension Apache::Motd.
0.01 Mon Jul 17 14:28:19 2000
- original version; created by h2xs 1.18
0.02 Sun Dec 10 05:23:52 2000
- Fixed Cookie-less browser problems
Browsers with cookies turned off or that do not support
them are handled correctly, although still lacking a real
working implementation for these scenerios.
- Added module directive, SupportCookieLess
- Omitted requirement of MessageFile directive
- Documentation changes and corrections
0.03 Sun Dec 13 15:30:00 2000
- Added no-cache pragma to outgoing headers of motd display
- Added bypass motd on sub-directories and location matches example in pod
- Added Credits section in pod
- Added Notes secion in pod
0.04 Thu Jul 19 01:15:55 2001
- Fixed port bug
- Fixed motd file existance check
- Updated documentation credits
1.00 Thu Oct 31 16:19:33 2002
- Imported in CVS
- Updated to latest version
- Updated README
- Updated Makefile.PL to include Apache::Cookie dependency as
suggested by CPAN Testers results
Makefile.PL view on Meta::CPAN
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
'AUTHOR' => 'Carlos Ramirez (carlos@quantumfx.com)',
'NAME' => 'Apache::Motd',
'VERSION_FROM' => 'Motd.pm', # finds $VERSION
'PREREQ_PM' => {'Apache::Cookie' => '0'}
);
package Apache::Motd;
## FILE: Apache/Motd.pm
## $Id: Motd.pm,v 1.2 2002/11/01 00:39:57 ramirezc Exp $
use strict;
use vars qw($VERSION);
use Apache;
use Apache::Cookie;
use Apache::Constants qw(:common REDIRECT);
$VERSION = '1.00';
sub handler {
my $r = shift;
my $uri = $r->uri;
my $cn = $r->dir_config('CookieName') || 'seenMOTD';
my $exp = $r->dir_config('ExpireCookie') || '+1d';
my $file = $r->dir_config('MessageFile') || 0;
my $cookieless = $r->dir_config('SupportCookieLess') || 1;
my $port = ($r->server->port eq '80') ? "" : ':'.$r->server->port;
my $tquery = $r->args;
## If the request is the part of the cookie test redirect, then
## take out the ct=1 query_string value and make a note of it
## by setting $ct_request
my $ct_request = 0;
if ($tquery =~ /ct=1/) {
$ct_request=1;
$tquery =~ s/ct=1//;
$r->args($tquery) if ($tquery =~ /=/);
}
return OK unless $r->is_initial_req;
## MessageFile appears to be missing, pass onto next phase
return OK unless $file;
return OK unless -e $file;
## Look for cookie ($cn) and verify it's value
my $cookies = Apache::Cookie->new($r)->parse;
if (my $c = $cookies->{$cn}) {
my $cv = $c->value;
return OK if ($ct_request == 0 && $cv eq '1');
displayMotd($r);
return DONE;
}
## Prepare cookie information and add outgoing headers
my $cookie = Apache::Cookie->new($r,
-name => $cn,-value => '1',-expires => $exp );
$cookie->bake;
## Handle Cookieless clients
if ($cookieless) {
## Apparently this client does not like cookies, pass it on to
## next phase
$r->log_error("Apache::Motd::Bypassed by ".
$r->connection->remote_ip) if $ct_request;
return OK if $ct_request;
my $host = $r->hostname;
my $ct_url = 'http://'.$host.$port.$uri.'?ct=1';
## Test for client for cookie worthiness by redirecting client
Apache::Motd - Provide motd (Message of the Day) functionality to a webserver
=head1 SYNOPSIS
in your httpd.conf
<Directive /path/>
PerlHeaderParserHandler Apache::Motd
PerlSetVar MessageFile /path/to/motd/message
PerlSetVar CookieName CookieName [default: seenMOTD]
PerlSetVar ExpireCookie CookieExpirationTime [default: +1d]
PerlSetVar RedirectInSecs N [default: 10]
PerlSetVar SupportCookieLess (1|0) [default: 1]
=head1 DESCRIPTION
This Apache Perl module provides a web administrator the ability to
configure a webserver with motd (Message of the Day) functionality, just
like you find on UNIX systems. This allows custom messages to appear when
visitors enter a website or a section of the website, without the need to
modify any webpages or web application code! The message can be a "Message
of the Day", "Terms of Use", "Server Going Down in N Hours", etc. When
applied in the main server configuration (i.e. non <Location|Directory|Files>
See B<MessageFile Format> for a description how the message should
be used.
=item B<RedirectInSecs> (default: 10 seconds)
This sets the wait time (in seconds) before the visitor is redirected to the
initally requested URI
=item B<CookieName> (default: seenMOTD)
Set the name of the cookie name
=item B<ExpireCookie> (default: +1d, 1 day)
Set the expiration time for the cookie
=item B<SupportCookieLess> (default: 1)
This option is set by default to handle clients that do not support
cookies or that have cookies turned off. It performs an external
redirect to the requested C<$uri> along with a C<ct=1> query_string to test
if the client accepts cookies. If the external redirect successfully sets
the cookie, the user is presented with the B<motd>, otherwise the user is
not directed to the B<motd> but to the C<$uri>.
Future versions will correctly support non-cookie clients via URL munging.
Setting this option to 0 is ideally used for when you are totally certain
that all your visitors will accept cookies. This is usually much faster since
it elminates the external redirect. ***Use with caution. Cookieless clients
will get the motd message and *only* the motd if this option is false.
=back
Example:
<Location />
PerlHeaderParserHandler Apache::Motd
PerlSetVar MessageFile /proj/www/motd.txt
PerlSetVar CookieName TermUsage
PerlSetVar RedirectInSecs 5
</Location>
The example above, sets a server wide message (/proj/www/motd.txt) that
sets a cookie called TermUsage which expires in one day (default value)
and redirects the user to the original URI in 5 seconds.
=head1 Message File Format
The template is not checked for the neccessary information required for the
redirection to work properly, i.e. usage of <VAR_URI> and <VAR_REDIRECT>.
Therefore not using the available tags as described will result in
unpredictable behavior.
=back
=head1 REQUIREMENTS
L<mod_perl>, L<Apache::Cookie>
=head1 CREDITS
Fixes, Bug Reports, Optimizations and Ideas have been generously provided by:
Jerrad Pierce <jpierce@cpan.org>
- no-cache pragma on motd file
- motd bypass on sub-directories and location matches
- no-cookie browser problem bug report
and the mod_perl environment. It allows web administrators to add motd
(Message of the Day) functionality to a webserver.
PRE-REQUISITES
--------------
To use this module, you will need:
Apache, v 1.3+
mod_perl, 1.2+
Apache::Cookie
INSTALLATION
------------
Install using the normal technique for perl modules:
$ perl Makefile.PL
$ make
$ make install
( run in 0.395 second using v1.01-cache-2.11-cpan-4e96b696675 )