Mark Overmeer > HTTP-Server-Multiplex > HTTP::Server::Directory

Download:
HTTP-Server-Multiplex-0.11.tar.gz

Dependencies

Annotate this POD

CPAN RT

Open  0
View/Report Bugs
Module Version: 0.11   Source  

NAME ^

HTTP::Server::Directory - describe a server directory

INHERITANCE ^

 HTTP::Server::Directory is extended by
   HTTP::Server::Directory::UserDirs

SYNOPSIS ^

 # implicit creation of ::Directory object
 my $vh = HTTP::Server::VirtualHost
   ->new(directories => {path => '/', location => ...})

 # explicit use
 my $root = HTTP::Server::Directory
   ->new(path => '/', location => '...');
 my $vh = HTTP::Server::VirtualHost
   ->new(directories => $root);

DESCRIPTION ^

Each HTTP::Server::VirtualHost will define where the files are located. Parts of the URI path can map on different directories, with different permissions.

User directories, like used in the URI <http://xx/~user/yy> is implemented in HTTP::Server::Directory::UserDirs.

METHODS ^

Constructors

HTTP::Server::Directory->new(OPTIONS|HASH-of-OPTIONS)

 Option  --Default
 allow     <undef>
 deny      <undef>
 location  <required>
 path      '/'

. allow => CIDR|HOSTNAME|DOMAIN|CODE|ARRAY

Allow all requests which pass any of these parameters, and none of the deny parameters. See "Allow access".

. deny => CIDR|HOSTNAME|DOMAIN|CODE|ARRAY

See allow and "Allow access"

. location => DIRECTORY|CODE

The absolute prefix DIRECTORY befor the path of the URI, or a CODE reference which will rewrite the path (only parameter) into the absolute file or directory name.

. path => STRING

Attributes

$obj->location

$obj->path

Permissions

$obj->allow(CLIENT, SESSION, REQUEST, URI)

BE WARNED that the URI is the rewrite of the REQUEST uri, and therefore you should use that URI. The SESSION represents a user.

See "Allow access".

$obj->filename(PATH)

Convert a URI PATH into a directory path. Return undef if not possible.

DETAILS ^

Directory limits

Allow access

The allow() method handles access rights. When a trueth value is produced, then access is permitted.

The base class implements access rules via the allow or deny option of new(). These parameters are exclusive (which is slightly different from Apache); you can either allow or deny, but not both at the same time.

The parameters to allow or deny are an ARRAY with any combination of

IPv4 and IPv6 addresses
IPv4 and IPv6 address ranges in CIDR notation
hostname
domain name (leading dot)
your own CODE reference, which will be called with the IP address,
  the hostname, the session, and the rewritten URI.

example: new(allow) parameters

 MyVHOST->new( allow =>
    [ '192.168.2.1'           # IPv4
    , '10/32'                 # IPv4 CIDR
    , '10.0.0.0-10.3.255.255' # IPv4 range
    , '::dead:beef:0:0/110'   # IPv6 range
    , 'www.example.com'       # hostname
    , '.example.com'          # domain and subdomains
    , 'example.com'           # only this domain
    ], ...

example: create own access rules

If you have an ::VirtualHost extension class, you do this:

 sub allow($$$)
 {   my ($self, $session, $request, $uri) = @_;

     # General rules may refuse access already
     $self->SUPER::allow($session, $request, $uri)
         or return 0;

     # here your own checks
     # $session is a HTTP::Server::Session
     # $request is a HTTP::Request
     # $uri     is a URI::

     1;
 }

You may also pass a code-ref to new(allow):

 HTTP::Server::VirtualHost->new(allow => \&my_rules);

 sub my_rules($$$$)   # called before each request
 {   my ($ip, $host, $session, $uri) = @_;
     # return true if access is permitted
 }

SEE ALSO ^

This module is part of HTTP-Server-Multiplex distribution version 0.11, built on October 01, 2008. Website: http://perl.overmeer.net/httpd-multiplex/

LICENSE ^

Copyrights 2008 by Mark Overmeer. For other contributors see ChangeLog.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See http://www.perl.com/perl/misc/Artistic.html

syntax highlighting: