NAME
Any::Daemon::HTTP::Source - source of information
INHERITANCE
Any::Daemon::HTTP::Source is extended by
Any::Daemon::HTTP::Directory
Any::Daemon::HTTP::Proxy
SYNOPSIS
DESCRIPTION
Each Any::Daemon::HTTP::VirtualHost will define where the files are located. Parts of the URI path can map on different (virtual) resources, with different access rights.
Directories containing files are handled by Any::Daemon::HTTP::Directory objects.
User directories, like used in the URI
<http://xx/~user/yy
> are implemented in Any::Daemon::HTTP::UserDirs, which extends this class.Forwarding proxies translate a path into requests to a remote server. The reply is returned. Various rules can be applied. Implemented in Any::Daemon::HTTP::Proxy.
METHODS
Constructors
- Any::Daemon::HTTP::Source->new(%options|\%options)
-
-Option--Default allow <undef> deny <undef> name path 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". Be warned that the access rights are not inherited from directory configurations encapsulating this one.
- deny => CIDR|HOSTNAME|DOMAIN|CODE|ARRAY
-
See
allow
and "Allow access" - name => STRING
- path => PATH
-
If the directory PATH (relative to the document root
location
) is not trailed by a '/', it will be made so.
Attributes
Permissions
- $obj->allow($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->collect($vhost, $session, $request, $uri)
-
Try to produce a response (HTTP::Response) for something inside this directory structure.
undef
is returned if nothing useful is found.
Actions
DETAILS
Resource restrictions
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. Be warned that the access rights are also not inherited from directory configurations encapsulating this one.
The parameters to allow
or deny
are an ARRAY with any combination of
- 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
my $vhost = My::VHOST::Class->new( allow =>
[ '192.168.2.1/32 # IPv4 CIDR, single address
, '10/8' # 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 Any::Daemon::HTTP::Session
# $request is a HTTP::Request
# $uri is a URI::
1;
}
You may also pass a code-ref to new(allow):
my $vhost = Any::Daemon::HTTP::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 Any-Daemon-HTTP distribution version 0.30, built on April 06, 2020. Website: http://perl.overmeer.net/any-daemon/
LICENSE
Copyrights 2013-2020 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://dev.perl.org/licenses/