Apache-WebDAV
view release on metacpan or search on metacpan
lib/Apache/WebDAV.pm view on Meta::CPAN
my $stat = $file->{'stat'};
my $resp = $doc->createElement('D:response');
$multistat->addChild($resp);
my $href = $doc->createElement('D:href');
$href->appendText(
File::Spec->catdir(
map { uri_escape encode_utf8 $_ } File::Spec->splitdir($path)
)
);
$resp->addChild($href);
my $okprops = $doc->createElement('D:prop');
foreach my $wanted_prop (keys %$stat)
{
# We set these down there automatically (we are faking quota
# support to keep webdrive happy).
next if $wanted_prop eq 'quota';
next if $wanted_prop eq 'quotaused';
next if $wanted_prop eq 'quota-available-bytes';
next if $wanted_prop eq 'quota-used-bytes';
next if $wanted_prop eq 'quota-assigned-bytes';
my $prop = $doc->createElement("D:$wanted_prop");
if($wanted_prop eq 'resourcetype')
{
if($stat->{$wanted_prop} eq 'collection')
{
my $collection = $doc->createElement('D:collection');
$prop->addChild($collection);
}
}
else
{
if(defined($stat->{$wanted_prop}))
{
$prop->appendText($stat->{$wanted_prop});
}
else
{
$prop->appendText('');
}
}
$okprops->addChild($prop);
}
# Add quota information. This doesn't appear to be in the WebDAV
# spec, but if it's not here, WebDrive won't allow any uploads.
#
# Update: I found it in a proposal here:
#
# http://www.greenbytes.de/tech/webdav/draft-ietf-webdav-quota-07.html
#
# But it doesn't say anything about quota, quotaused, or
# quota-assigned-bytes - I found out that webdrive was looking for those
# from its log file.
my $quota = $doc->createElement('D:quota');
my $quota_used = $doc->createElement('D:quotaused');
my $quota_available_bytes = $doc->createElement('D:quota-available-bytes');
my $quota_used_bytes = $doc->createElement('D:quota-used-bytes');
my $quota_assigned_bytes = $doc->createElement('D:quota-assigned-bytes');
$quota->appendText('2000000000');
$quota_used->appendText('0');
$quota_available_bytes->appendText('2000000000');
$quota_used_bytes->appendText('0');
$quota_assigned_bytes->appendText('2000000000');
$okprops->addChild($quota);
$okprops->addChild($quota_used);
$okprops->addChild($quota_available_bytes);
$okprops->addChild($quota_used_bytes);
$okprops->addChild($quota_assigned_bytes);
if($okprops->hasChildNodes())
{
my $propstat = $doc->createElement('D:propstat');
$propstat->addChild($okprops);
my $stat = $doc->createElement('D:status');
$stat->appendText('HTTP/1.1 200 OK');
$propstat->addChild($stat);
$resp->addChild($propstat);
}
}
$r->send_http_header();
$r->print($doc->toString(1));
return OK;
}
#
# Parse an incoming PROPFIND request to see what information the client wants.
#
sub get_wanted_properties
{
my ($self, $r) = @_;
# Grab the content of the request so we can parse it and look for which
# properties they are requesting.
my $content = $self->get_request_content($r);
# NSExpand expands namespaces so, xmlns:D eq '{DAV:}' in front of every
# element in that namespace.
my $xml;
eval
{
$xml = XMLin($content, NSExpand => 1, ForceArray => 0, KeyAttr => []);
};
( run in 0.586 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )