moved uploadsAccessHandler into the main webgui handler mechanism

converted macros to use references
fixed some other various bugs
This commit is contained in:
JT Smith 2005-11-07 01:40:07 +00:00
parent 2818ade8b0
commit ea868a8c0e
73 changed files with 256 additions and 275 deletions

View file

@ -7,6 +7,8 @@
- Switched from Apache::Registry/CGI to a pure mod_perl2 interface, which
increased performance by over 70% to the entire system, and in some cases
as much as 100%. See gotcha.txt for details.
- Changed macro API which cuts macro memory consumption in half. See
migration.txt for details.
6.7.7

View file

@ -15,8 +15,9 @@ save you many hours of grief.
DateTime::Cron::Simple
POE
POE::Component::IKC::Server
Test::More
* The API has changed. Check docs/migration.txt for details.
* The core API has changed. Check docs/migration.txt for details.
* Due to the performance increase achieved by switching to DateTime we
no longer need date caching so the enableDateCache directive can
@ -49,6 +50,8 @@ save you many hours of grief.
PerlOptions +ParseHeaders
</Files>
You also no longer need the ExecCGI directive.
Edit each of your virtual hosts and add the following directives,
changing them to suit your needs:
@ -70,6 +73,10 @@ save you many hours of grief.
which will increase performance, and add to our functionality
for the future.
* The Macro API has been changed. If you have any third-party macros
installed make sure to update them prior to upgrading. See
docs/migration.txt for details.
6.7.0
--------------------------------------------------------------------

View file

@ -188,6 +188,12 @@ definitions like so:
alter table MyTable change assetId assetId binary not null;
1.7 processMacros() Method Removed
In 6.8 the long depricated method processMacros() was removed. No one should
be using this any longer anyway, but we thought we'd warn you anyway.
2. Macro Migration
-------------------
@ -204,12 +210,23 @@ If you absolutely must write a navigation macro for some reason that our nav
system does not accomodate you, then please check out the new API in
WebGUI::Navigation.
2.1 Navigation Macros Revisited
2.2 Navigation Macros Revisited
As of 6.3 check out lib/WebGUI/Asset/Wobject/Navigation.pm if you want to
write custom navigation macros.
2.3 Macro API Changed
In 6.8 we modified the macro API to be more user friendly, and more
importantly to use a lot less memory. This has two results. If you use the
macro methods like filter(), negate(), or process() then you need to start
passing your content in as a scalar reference instead of a regular scalar. If
you write your own macros, you no longer need to call getParams() to retreive
your parameters. That is automatically done for you now.
3. Authentication Migration
-----------------------------

View file

@ -1,3 +1,13 @@
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2005 Plain Black Corporation.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#-------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#-------------------------------------------------------------------
use lib "../../lib";
use strict;
use Getopt::Long;

View file

@ -23,6 +23,12 @@ uploadsURL = /uploads
uploadsPath = /data/WebGUI/www/uploads
# An array of URLs that WebGUI should leave alone for normal
# processing by Apache. Anything that begins with these URLs
# will be entirely ignored by WebGUI
# passthruUrls => /icons, /documentation/pdf, /my-custom-application, /server-status, /perl-status
# The scripturl tells WebGUI how to reference the gateway script
# when generating URLs. By default it will use the gateway
# script's filename like /index.pl/

View file

@ -27,9 +27,9 @@ use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::Style;
use WebGUI::URL;
use WebGUI::Utility;
use WebGUI::PassiveProfiling;
use Apache2::Request;
use Apache2::Cookie;
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::Const -compile => qw(OK DECLINED);
@ -41,11 +41,17 @@ sub handler {
my $r = shift;
my $s = Apache2::ServerUtil->server;
my $config = WebGUI::Config::getConfig($s->dir_config('WebguiRoot'),$r->dir_config('WebguiConfig'));
my $extras = $config->{extrasURL};
foreach my $url ($config->{extrasURL}, @{$config->{passthruUrls}}) {
return Apache2::Const::DECLINED if ($r->uri =~ m/^$url/);
}
my $uploads = $config->{uploadsURL};
unless ($r->uri =~ m/^$extras/ || $r->uri =~ m/^$uploads/) {
if ($r->uri =~ m/^$uploads/) {
$r->handler('perl-script');
$r->set_handlers(PerlAccessHandler => \&uploadsHandler);
} else {
$r->handler('perl-script');
$r->set_handlers(PerlResponseHandler => \&contentHandler);#, PerlTransHandler => \&Apache2::Const::OK);
$r->set_handlers(PerlResponseHandler => \&contentHandler);
$r->set_handlers(PerlTransHandler => sub { return Apache2::Const::OK });
}
return Apache2::Const::DECLINED;
}
@ -55,16 +61,10 @@ sub handler {
sub contentHandler {
my $r = shift;
my $s = Apache2::ServerUtil->server;
$session{cookie} = APR::Request::Apache2->handle($r)->jar();
WebGUI::HTTP::getCookies();
WebGUI::Session::open($s->dir_config('WebguiRoot'),$r->dir_config('WebguiConfig'),$r);
###----------------------------
### Apache2::Request object
$session{req} = Apache2::Request->new($r, POST_MAX => 1024 * $session{setting}{maxAttachmentSize});
# Add wgSession cookie to header
WebGUI::HTTP::setCookie("wgSession",$session{var}{sessionId});
### Add Apache Request stuff to Session
$session{wguri} = $r->uri;
### check to see if client is proxied and adjust remote_addr as necessary
@ -72,7 +72,6 @@ sub contentHandler {
$session{env}{REMOTE_ADDR} = $ENV{HTTP_X_FORWARDED_FOR};
}
### form variables
#
foreach ($session{req}->param) {
$session{form}{$_} = $session{req}->param($_);
}
@ -168,6 +167,46 @@ sub setup {
}
#-------------------------------------------------------------------
sub uploadsHandler {
my $r = shift;
my $s = Apache2::ServerUtil->server;
my $ok = Apache2::Const::OK();
my $notfound = Apache2::Const::NOT_FOUND();
if (-e $r->filename) {
my $path = $r->filename;
$path =~ s/^(\/.*\/).*$/$1/;
if (-e $path.".wgaccess") {
my $fileContents;
open(FILE,"<".$path.".wgaccess");
while (<FILE>) {
$fileContents .= $_;
}
close(FILE);
my @privs = split("\n",$fileContents);
unless ($privs[1] eq "7" || $privs[1] eq "1") {
WebGUI::HTTP::getCookies();
WebGUI::Session::open($s->dir_config('WebguiRoot'),$r->dir_config('WebguiConfig'),$r);
### Apache2::Request object
$session{req} = $r;
WebGUI::Session::refreshSessionVars($session{cookie}{wgSession});
my $hasPrivs = ($session{user}{userId} eq $privs[0] || WebGUI::Grouping::isInGroup($privs[1]) || WebGUI::Grouping::isInGroup($privs[2]));
WebGUI::Session::close();
if ($hasPrivs) {
return $ok;
} else {
return 401;
}
}
}
return $ok;
} else {
return $notfound;
}
}
#-------------------------------------------------------------------
sub upgrading {
my $output = WebGUI::HTTP::getHeader();

View file

@ -120,7 +120,9 @@ sub www_view {
if ($session{var}{adminOn}) {
return $self->getContainer->www_view;
}
WebGUI::HTTP::setRedirect(WebGUI::Macro::process($self->get("redirectUrl"))) unless $self->get("redirectUrl") eq $self->get("url");
my $url = $self->get("redirectUrl");
WebGUI::Macro::process(\$url);
WebGUI::HTTP::setRedirect($url) unless $self->get("redirectUrl") eq $self->get("url");
return "Redirect is self-referential";
}

View file

@ -17,7 +17,6 @@ package WebGUI::Asset::RichEdit;
use strict;
use WebGUI::Asset;
use WebGUI::Form;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::Utility;
use WebGUI::International;

View file

@ -13,6 +13,7 @@ package WebGUI::Asset::Shortcut;
use strict;
use WebGUI::Asset;
use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Privilege;
use WebGUI::Session;
use WebGUI::SQL;
@ -240,7 +241,7 @@ sub getShortcutByCriteria {
my $assetId = $self->getId;
# Parse macro's in criteria
$criteria = WebGUI::Macro::process($criteria);
WebGUI::Macro::process(\$criteria);
# Once a asset is found, we will stick to that asset,
# to prevent the proxying of multiple- depth assets like Surveys and USS.

View file

@ -148,7 +148,8 @@ sub getToolbar {
sub view {
my $self = shift;
my $calledAsWebMethod = shift;
my $output = WebGUI::Macro::process($self->get("snippet"));
my $output = $self->get("snippet");
WebGUI::Macro::process(\$output);
$output = '<p>'.$self->getToolbar.'</p>'.$output if ($session{var}{adminOn} && !$calledAsWebMethod);
return $output unless ($self->getValue("processAsTemplate"));
return WebGUI::Asset::Template->processRaw($output);

View file

@ -395,23 +395,6 @@ sub moveCollateralUp {
WebGUI::SQL->commit;
}
#-------------------------------------------------------------------
=head2 processMacros ( output )
Decides whether or not macros should be processed and returns the appropriate output.
=head3 output
An HTML blob to be processed for macros.
=cut
sub processMacros {
return WebGUI::Macro::process($_[1]);
}
#-------------------------------------------------------------------
sub processPropertiesFromFormPost {
my $self = shift;

View file

@ -461,7 +461,9 @@ sub getRecordTemplateVars {
$data{value} = WebGUI::DateTime::setToEpoch($data{value}) if ($data{type} eq "date");
}
if (not exists $data{value}) {
$data{value} = WebGUI::Macro::process($data{defaultValue});
my $defaultValue = $data{defaultValue};
WebGUI::Macro::process(\$defaultValue);
$data{value} = $defaultValue;
}
my $hidden = (($data{status} eq "hidden" && !$session{var}{adminOn}) || ($data{isMailField} && !$self->get("mailData")));
my $value = $data{value};
@ -503,7 +505,9 @@ sub getRecordTemplateVars {
$data{value} = WebGUI::DateTime::setToEpoch($data{value}) if ($data{type} eq "date");
}
if (not exists $data{value}) {
$data{value} = WebGUI::Macro::process($data{defaultValue});
my $defaultValue = $data{defaultValue};
WebGUI::Macro::process(\$defaultValue);
$data{value} = $defaultValue;
}
my $hidden = (($data{status} eq "hidden" && !$session{var}{adminOn}) || ($data{isMailField} && !$self->get("mailData")));
my $value = $data{value};
@ -612,7 +616,8 @@ sub purge {
sub sendEmail {
my $self = shift;
my $var = shift;
my $message = WebGUI::Macro::process($self->processTemplate($var,$self->get("emailTemplateId")));
my $message = $self->processTemplate($var,$self->get("emailTemplateId"));
WebGUI::Macro::process(\$message);
my ($to, $subject, $from, $bcc, $cc);
foreach my $row (@{$var->{field_loop}}) {
if ($row->{"field.name"} eq "to") {
@ -1079,7 +1084,7 @@ sub www_process {
my $value = $row{defaultValue};
if ($row{status} eq "required" || $row{status} eq "editable") {
$value = WebGUI::FormProcessor::process($row{name},$row{type},$row{defaultValue});
$value = WebGUI::Macro::filter($value);
WebGUI::Macro::filter(\$value);
}
if ($row{status} eq "required" && ($value =~ /^\s$/ || $value eq "" || not defined $value)) {
push (@errors,{
@ -1089,7 +1094,8 @@ sub www_process {
delete $var->{entryId};
}
if ($row{status} eq "hidden") {
$value = WebGUI::Macro::process($row{defaultValue});
$value = $row{defaultValue};
WebGUI::Macro::process(\$value);
}
unless ($hadErrors) {
my ($exists) = WebGUI::SQL->quickArray("select count(*) from DataForm_entryData where DataForm_entryId=".quote($entryId)."

View file

@ -15,7 +15,6 @@ use Tie::CPHash;
use WebGUI::DateTime;
use WebGUI::ErrorHandler;
use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Privilege;
use WebGUI::Id;
use WebGUI::Session;

View file

@ -235,7 +235,9 @@ sub view {
$var{query} .= " ".join(" ",map("-".$_,split(/\s+/,$var{without}))) if ($var{without});
# Remove macro's from query
$var{query} = WebGUI::Macro::negate($var{query});
my $query = $var{query};
WebGUI::Macro::negate(\$query);
$var{query} = $query;
# Set some standard vars
$var{submit} = WebGUI::Form::submit({value=>WebGUI::International::get(16, "Asset_IndexedSearch")});

View file

@ -293,7 +293,7 @@ sub _parsePlaceholderParams {
} elsif ($type =~ /^query(\d)/) {
$param = $self->{_query}{$1}{rowData}{$field};
}
$param = WebGUI::Macro::process($param);
WebGUI::Macro::process(\$param);
push(@placeholderParams, $param);
}
return \@placeholderParams;
@ -316,7 +316,8 @@ sub _processQuery {
# Preprocess macros
if ($self->{_query}{$nr}{preprocessMacros}) {
$query = WebGUI::Macro::process($self->{_query}{$nr}{dbQuery});
my $query = $self->{_query}{$nr}{dbQuery};
WebGUI::Macro::process(\$query);
} else {
$query = $self->{_query}{$nr}{dbQuery};
}

View file

@ -298,8 +298,10 @@ sub view {
# snag our SOAP call and preprocess if needed
if ($self->get('preprocessMacros')) {
$call = WebGUI::Macro::process($self->get("callMethod"));
$param_str = WebGUI::Macro::process($self->get("params"));
$call = $self->get("callMethod");
WebGUI::Macro::process(\$call);
$param_str = $self->get("params");
WebGUI::Macro::process(\$param_str);
} else {
$call = $self->get('callMethod');
$param_str = $self->get('params');

View file

@ -261,7 +261,9 @@ sub createAccountSave {
WebGUI::Session::convertVisitorToUser($session{var}{sessionId},$userId);
_logLogin($userId,"success");
system(WebGUI::Macro::process($session{setting}{runOnRegistration})) if ($session{setting}{runOnRegistration} ne "");
my $command = $session{setting}{runOnRegistration};
WebGUI::Macro::process(\$command);
system($command) if ($session{setting}{runOnRegistration} ne "");
WebGUI::MessageLog::addInternationalizedEntry('',$session{setting}{onNewUserAlertGroup},'',536) if ($session{setting}{alertOnNewUser});
return "";
}
@ -739,7 +741,8 @@ Validates the a username.
sub validUsername {
my $self = shift;
my $username = WebGUI::Macro::negate($_[0]);
my $username = shift;
WebGUI::Macro::negate(\$username);
my $error = "";
if($self->_isDuplicateUsername($username)){

View file

@ -39,8 +39,10 @@ our @ISA = qw(WebGUI::Auth);
sub _isValidPassword {
my $self = shift;
my $password = WebGUI::Macro::negate(shift);
my $confirm = WebGUI::Macro::negate(shift);
my $password = shift;
WebGUI::Macro::negate(\$password);
my $confirm = shift;
WebGUI::Macro::negate(\$confirm);
my $error = "";
if ($password ne $confirm) {

View file

@ -172,8 +172,7 @@ Adds a FATAL type message to the log, outputs an error message to the user, and
sub fatal {
my $message = shift;
my $logger = getLogger();
Apache2::RequestUtil->request->content_type('text/html');
Apache2::RequestUtil->request->content_type('text/html') if ($WebGUI::Session::session{req});
$logger->fatal($message);
$logger->debug("Stack trace for FATAL ".$message."\n".getStackTrace());
unless ($WebGUI::Session::session{setting}{showDebug}) {

View file

@ -20,6 +20,7 @@ use WebGUI::Cache;
use WebGUI::DateTime;
use WebGUI::ErrorHandler;
use WebGUI::LDAPLink;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::Utility;
@ -427,7 +428,9 @@ sub isInGroup {
my $dbh = $dbLink->dbh;
if (defined $dbh) {
if ($group{dbQuery} =~ /select 1/i) {
$group{dbQuery} = WebGUI::Macro::process($group{dbQuery});
my $query = $group{dbQuery};
WebGUI::Macro::process(\$query);
$group{dbQuery} = $query;
my $sth = WebGUI::SQL->unconditionalRead($group{dbQuery},$dbh);
unless ($sth->errorCode < 1) {
WebGUI::ErrorHandler::warn("There was a problem with the database query for group ID $gid.");

View file

@ -102,14 +102,13 @@ Choose from "all", "none", "macros", "javascript", or "most". Defaults to "most"
=cut
sub filter {
my ($filter, $html, $type);
$type = $_[1];
my $html = shift;
my $type = shift;
if ($type eq "all") {
$filter = HTML::TagFilter->new(allow=>{'none'},strip_comments=>1);
$html = $filter->filter($_[0]);
return WebGUI::Macro::negate($html);
my $filter = HTML::TagFilter->new(allow=>{'none'},strip_comments=>1);
$html = $filter->filter($html);
WebGUI::Macro::negate(\$html);
} elsif ($type eq "javascript") {
$html = $_[0];
$html =~ s/\<script.*?\/script\>//ixsg;
$html =~ s/(href="??)javascript\:.*?\)/$1removed/ixsg;
$html =~ s/onClick/removed/ixsg;
@ -125,16 +124,17 @@ sub filter {
$html =~ s/onKeyDown/removed/ixsg;
$html =~ s/onSubmit/removed/ixsg;
$html =~ s/onReset/removed/ixsg;
$html = WebGUI::Macro::negate($html);
WebGUI::Macro::negate(\$html);
} elsif ($type eq "macros") {
return WebGUI::Macro::negate($_[0]);
WebGUI::Macro::negate(\$html);
} elsif ($type eq "none") {
return $_[0];
# do nothing
} else {
$filter = HTML::TagFilter->new; # defaultly strips almost everything
$html = $filter->filter($_[0]);
return WebGUI::Macro::filter($html);
my $filter = HTML::TagFilter->new; # defaultly strips almost everything
$html = $filter->filter($html);
WebGUI::Macro::filter(\$html);
}
return $html;
}
#-------------------------------------------------------------------

View file

@ -16,6 +16,7 @@ package WebGUI::HTTP;
use strict;
use Apache2::Cookie;
use WebGUI::Session;
use WebGUI::Style;
@ -31,6 +32,7 @@ This package allows the manipulation of HTTP protocol information.
use WebGUI::HTTP;
$cookies = WebGUI::HTTP::getCookies();
$header = WebGUI::HTTP::getHeader();
$mimetype = WebGUI::HTTP::getMimeType();
$code = WebGUI::HTTP::getStatus();
@ -50,6 +52,26 @@ These subroutines are available from this package:
#-------------------------------------------------------------------
=head2 getCookies ( )
Retrieves the cookies from the HTTP header, persists them to the session, and returns a hash reference containing them.
=cut
sub getCookies {
my %cookies = Apache2::Cookie->fetch();
foreach my $key (keys %cookies) {
my $value = $cookies{$key};
$value =~ s/$key=//; # Strange... The Apache2::Cookie value also contains the key ????
# Must be a bug in Apache2::Cookie...
$WebGUI::Session::session{cookie}{$key} = $value;
}
return $WebGUI::Session::session{cookie};
}
#-------------------------------------------------------------------
=head2 getHeader ( )

View file

@ -33,10 +33,12 @@ B<NOTE:> This entire system is likely to be replaced in the near future. It has
=head1 SYNOPSIS
use WebGUI::Macro;
$html = WebGUI::Macro::filter($html);
@array = WebGUI::Macro::getParams($parameterString);
$html = WebGUI::Macro::negate($html);
$html = WebGUI::Macro::process($html);
WebGUI::Macro::filter(\$html);
WebGUI::Macro::negate(\$html);
WebGUI::Macro::process(\$html);
=head1 METHODS
@ -73,43 +75,18 @@ Removes all the macros from the HTML segment.
=head3 html
The segment to be filtered.
The segment to be filtered as a scalar reference.
=cut
sub filter {
my $content = shift;
while ($content =~ /($nestedMacro)/gs) {
$content =~ s/\Q$1//gs;
while ($$content =~ /($nestedMacro)/gs) {
$$content =~ s/\Q$1//gs;
}
return $content;
}
#-------------------------------------------------------------------
=head2 getParams ( parameterString )
A simple, but error prone mechanism for getting a prameter list from a string. Returns an array of parameters.
=head3 parameterString
A string containing a comma separated list of paramenters.
=cut
sub getParams {
my ($data, @param);
$data = $_[0];
push(@param, $+) while $data =~ m {
"([^\"\\]*(?:\\.[^\"\\]*)*)",?
| ([^,]+),?
| ,
}gx;
push(@param, undef) if substr($data,-1,1) eq ',';
return @param;
}
#-------------------------------------------------------------------
=head2 negate ( html )
@ -118,14 +95,13 @@ Nullifies all macros in this content segment.
=head3 html
A string of HTML to be processed.
A scalar refernece of HTML to be processed.
=cut
sub negate {
my $html = $_[0];
$html =~ s/\^/\&\#94\;/g;
return $html;
my $html = shift;
$$html =~ s/\^/\&\#94\;/g;
}
@ -137,27 +113,34 @@ Runs all the WebGUI macros to and replaces them in the HTML with their output.
=head3 html
A string of HTML to be processed.
A scalar reference of HTML to be processed.
=cut
sub process {
my $content = shift;
while ($content =~ /$nestedMacro/gs) {
while ($$content =~ /$nestedMacro/gs) {
my ($macro, $searchString, $params) = ($1, $2, $3);
next if ($searchString =~ /^\d+$/); # don't process ^0; ^1; ^2; etc.
next if ($searchString =~ /^\-$/); # don't process ^-;
if ($params ne "") {
$params =~ s/(^\(|\)$)//g; # remove parenthesis
$params = &process($params); # recursive process params
&process(\$params); # recursive process params
}
if ($WebGUI::Session::session{config}{macros}{$searchString} ne "") {
my $cmd = "WebGUI::Macro::".$WebGUI::Session::session{config}{macros}{$searchString};
my $load = "use ".$cmd;
eval($load);
WebGUI::ErrorHandler::error("Macro failed to compile: $cmd.".$@) if($@);
my @param;
push(@param, $+) while $params =~ m {
"([^\"\\]*(?:\\.[^\"\\]*)*)",?
| ([^,]+),?
| ,
}gx;
push(@param, undef) if substr($params,-1,1) eq ',';
$cmd = $cmd."::process";
my $result = eval{&$cmd($params)};
my $result = eval{&$cmd(@param)};
if ($@) {
WebGUI::ErrorHandler::error("Processing failed on macro: $macro: ".$@);
} else {
@ -165,14 +148,11 @@ sub process {
$result = "Endless macro loop detected. Stopping recursion.";
WebGUI::ErrorHandler::warn($macro." : ".$result)
}
$content =~ s/\Q$macro/$result/ges;
$$content =~ s/\Q$macro/$result/ges;
}
}
}
return $content;
}
1;

View file

@ -11,14 +11,13 @@ package WebGUI::Macro::AOIHits;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::SQL;
#-------------------------------------------------------------------
sub process {
my (@param, $temp);
@param = WebGUI::Macro::getParams($_[0]);
@param = @_;
my $key = $param[0];
my $value = $param[1];
my $sql = "select count from passiveProfileAOI a, metaData_properties f

View file

@ -11,14 +11,13 @@ package WebGUI::Macro::AOIRank;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::SQL;
#-------------------------------------------------------------------
sub process {
my (@param, $temp);
@param = WebGUI::Macro::getParams($_[0]);
@param = @_;
my $key = $param[0];
my $rank = $param[1] || 1; # 1 is highest rank
$rank--; # Rank is zero based

View file

@ -18,7 +18,6 @@ use WebGUI::Asset;
use WebGUI::Asset::Template;
use WebGUI::Grouping;
use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::URL;
@ -27,7 +26,7 @@ use WebGUI::Utility;
#-------------------------------------------------------------------
sub process {
return "" unless ($session{var}{adminOn});
my @param = WebGUI::Macro::getParams($_[0]);
my @param = @_;
my $templateId = $param[0] || "PBtmpl0000000000000090";
my %var;
my (%cphash, %hash2, %hash, $r, @item, $query);

View file

@ -11,12 +11,11 @@ package WebGUI::Macro::AdminText;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::Session;
#-------------------------------------------------------------------
sub process {
my @param = WebGUI::Macro::getParams(shift);
my @param = @_;
return "" unless ($session{var}{adminOn});
return $param[0];
}

View file

@ -13,7 +13,6 @@ package WebGUI::Macro::AdminToggle;
use strict;
use WebGUI::Grouping;
use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::Asset::Template;
use WebGUI::URL;
@ -22,7 +21,7 @@ use WebGUI::URL;
sub process {
if (WebGUI::Grouping::isInGroup(12)) {
my %var;
my ($turnOn,$turnOff,$templateName) = WebGUI::Macro::getParams($_[0]);
my ($turnOn,$turnOff,$templateName) = @_;
$turnOn ||= WebGUI::International::get(516,'Macro_AdminToggle');
$turnOff ||= WebGUI::International::get(517,'Macro_AdminToggle');
if (WebGUI::Session::isAdminOn()) {

View file

@ -14,12 +14,11 @@ use strict;
use Time::HiRes;
use WebGUI::Asset;
use WebGUI::ErrorHandler;
use WebGUI::Macro;
use WebGUI::Session;
#-------------------------------------------------------------------
sub process {
my ($url) = WebGUI::Macro::getParams(shift);
my $url = shift;
my $t = [Time::HiRes::gettimeofday()] if (WebGUI::ErrorHandler::canShowPerformanceIndicators());
my $asset = WebGUI::Asset->newByUrl($url);
#Sorry, you cannot proxy the notfound page.

View file

@ -11,12 +11,11 @@ package WebGUI::Macro::CanEditText;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::Session;
#-------------------------------------------------------------------
sub process {
my @param = WebGUI::Macro::getParams($_[0]);
my @param = @_;
if (exists $session{asset} && $session{asset}->canEdit) {
return $param[0];
} else {

View file

@ -12,12 +12,11 @@ package WebGUI::Macro::D_date;
use strict;
use WebGUI::DateTime;
use WebGUI::Macro;
#-------------------------------------------------------------------
sub process {
my (@param, $temp, $time);
@param = WebGUI::Macro::getParams($_[0]);
@param = @_;
$time = $param[1] || time();
$temp = epochToHuman($time,$param[0]);
return $temp;

View file

@ -13,7 +13,6 @@ package WebGUI::Macro::EditableToggle;
use strict;
use WebGUI::Grouping;
use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::Asset::Template;
use WebGUI::URL;
@ -22,7 +21,7 @@ use WebGUI::URL;
sub process {
if (exists $session{asset} && $session{asset}->canEdit && WebGUI::Grouping::isInGroup(12)) {
my %var;
my @param = WebGUI::Macro::getParams($_[0]);
my @param = @_;
my $turnOn = $param[0] || WebGUI::International::get(516,'Macro_EditableToggle');
my $turnOff = $param[1] || WebGUI::International::get(517,'Macro_EditableToggle');
if ($session{var}{adminOn}) {

View file

@ -11,13 +11,11 @@ package WebGUI::Macro::Env;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::Session;
#-------------------------------------------------------------------
sub process {
my @param = WebGUI::Macro::getParams($_[0]);
return $session{env}{$param[0]};
return $session{env}{shift};
}
1;

View file

@ -11,11 +11,10 @@ package WebGUI::Macro::Execute;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
#-------------------------------------------------------------------
sub process {
my @param = WebGUI::Macro::getParams($_[0]);
my @param = @_;
if ($param[0] =~ /passwd/ || $param[0] =~ /shadow/ || $param[0] =~ /\.conf/) {
return "SECURITY VIOLATION";
} else {

View file

@ -12,13 +12,12 @@ package WebGUI::Macro::FileUrl;
use strict;
use WebGUI::Asset;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::Storage;
#-------------------------------------------------------------------
sub process {
my ($url) = WebGUI::Macro::getParams(shift);
my $url = shift;
my $asset = WebGUI::Asset->newByUrl($url);
if (defined $asset) {
my $storage = WebGUI::Storage->get($asset->get("storageId"));

View file

@ -11,13 +11,11 @@ package WebGUI::Macro::FormParam;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::Session;
#-------------------------------------------------------------------
sub process {
my @param = WebGUI::Macro::getParams($_[0]);
return $session{form}{$param[0]};
return $session{form}{shift};
}

View file

@ -13,14 +13,13 @@ package WebGUI::Macro::GroupAdd;
use strict;
use WebGUI::Group;
use WebGUI::Grouping;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::Asset::Template;
use WebGUI::URL;
#-------------------------------------------------------------------
sub process {
my @param = WebGUI::Macro::getParams($_[0]);
my @param = @_;
return "" if ($param[0] eq "");
return "" if ($param[1] eq "");
return "" if ($session{user}{userId} eq '1');

View file

@ -13,14 +13,13 @@ package WebGUI::Macro::GroupDelete;
use strict;
use WebGUI::Group;
use WebGUI::Grouping;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::Asset::Template;
use WebGUI::URL;
#-------------------------------------------------------------------
sub process {
my @param = WebGUI::Macro::getParams($_[0]);
my @param = @_;
return "" if ($param[0] eq "");
return "" if ($param[1] eq "");
return "" if ($session{user}{userId} eq '1');

View file

@ -12,13 +12,12 @@ package WebGUI::Macro::GroupText;
use strict;
use WebGUI::Grouping;
use WebGUI::Macro;
use WebGUI::SQL;
use WebGUI::Session;
#-------------------------------------------------------------------
sub process {
my @param = WebGUI::Macro::getParams($_[0]);
my @param = @_;
my ($groupId) = WebGUI::SQL->quickArray("select groupId from groups where groupName=".quote($param[0]),WebGUI::SQL->getSlave);
$groupId = 3 if ($groupId eq "");
if (WebGUI::Grouping::isInGroup($groupId)) {

View file

@ -14,12 +14,11 @@ use strict;
use WebGUI::Asset;
use WebGUI::Asset::Template;
use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session;
#-------------------------------------------------------------------
sub process {
my ($label, $templateUrl) = WebGUI::Macro::getParams(shift);
my ($label, $templateUrl) = @_;
my $home = WebGUI::Asset->getDefault;
if ($label ne "linkonly") {
my %var;

View file

@ -13,10 +13,9 @@ package WebGUI::Macro::If;
use strict;
use Safe;
use WebGUI::Macro;
sub process {
my ($expression, $true, $false) = WebGUI::Macro::getParams(shift);
my ($expression, $true, $false) = @_;
my $output = $false;
# Workaround to "Safely" eval $expression

View file

@ -12,12 +12,11 @@ package WebGUI::Macro::Include;
use strict;
use FileHandle;
use WebGUI::Macro;
#-------------------------------------------------------------------
sub process {
my (@param, $temp, $file);
@param = WebGUI::Macro::getParams($_[0]);
@param = @_;
if ($param[0] =~ /passwd/ || $param[0] =~ /shadow/ || $param[0] =~ /WebGUI.conf/) {
$temp = "SECURITY VIOLATION";
} else {

View file

@ -12,13 +12,11 @@ package WebGUI::Macro::International;
use strict;
use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session;
#-------------------------------------------------------------------
sub process {
my @param = WebGUI::Macro::getParams($_[0]);
return WebGUI::International::get($param[0],$param[1]);
return WebGUI::International::get(shift,shift);
}

View file

@ -11,14 +11,12 @@ package WebGUI::Macro::JavaScript;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::Style;
#-------------------------------------------------------------------
sub process {
my ($script) = WebGUI::Macro::getParams(shift);
WebGUI::Style::setScript($script,{type=>'text/javascript'});
WebGUI::Style::setScript(shift,{type=>'text/javascript'});
return "";
}

View file

@ -13,7 +13,6 @@ package WebGUI::Macro::L_loginBox;
use strict;
use WebGUI::Form;
use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::Asset::Template;
use WebGUI::URL;
@ -25,7 +24,7 @@ sub _createURL {
#-------------------------------------------------------------------
sub process {
my @param = WebGUI::Macro::getParams($_[0]);
my @param = @_;
my $templateId = $param[2] || "PBtmpl0000000000000044";
my %var;
$var{'user.isVisitor'} = ($session{user}{userId} eq "1");

View file

@ -12,7 +12,6 @@ package WebGUI::Macro::LastModified;
use strict;
use WebGUI::DateTime;
use WebGUI::Macro;
use WebGUI::Asset;
use WebGUI::Session;
use WebGUI::International;
@ -22,7 +21,7 @@ use WebGUI::SQL;
sub process {
return '' unless $session{asset};
my ($label, $format, $time);
($label, $format) = WebGUI::Macro::getParams(shift);
($label, $format) = @_;
$format = '%z' if ($format eq "");
($time) = WebGUI::SQL->quickArray("SELECT max(revisionDate) FROM assetData where assetId=".quote($session{asset}->getId),WebGUI::SQL->getSlave);
return WebGUI::International::get(43,'Asset_Survey') if $time eq 0;

View file

@ -12,14 +12,13 @@ package WebGUI::Macro::LoginToggle;
use strict;
use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::Asset::Template;
use WebGUI::URL;
#-------------------------------------------------------------------
sub process {
my @param = WebGUI::Macro::getParams($_[0]);
my @param = @_;
my $login = $param[0] || WebGUI::International::get(716,'Macro_LoginToggle');
my $logout = $param[1] || WebGUI::International::get(717,'Macro_LoginToggle');
my %var;

View file

@ -11,14 +11,12 @@ package WebGUI::Macro::Page;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::Session;
#-------------------------------------------------------------------
sub process {
my @param = WebGUI::Macro::getParams($_[0]);
if (exists $session{asset}) {
return $session{asset}->get($param[0]);
return $session{asset}->get(shift);
}
return "";
}

View file

@ -2,7 +2,6 @@ package WebGUI::Macro::Product;
use strict;
use WebGUI::Session;
use WebGUI::Macro;
use WebGUI::Product;
use WebGUI::Asset::Template;
use WebGUI::SQL;
@ -11,7 +10,7 @@ use WebGUI::International;
sub process {
my (@param, $productId, $variantId, $product, $variant, $output, $templateId, @variantLoop, %var);
@param = WebGUI::Macro::getParams(@_);
@param = @_;
return 'No SKU or productId passed' unless ($_[0]);

View file

@ -11,13 +11,11 @@ package WebGUI::Macro::Quote;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::SQL;
#-------------------------------------------------------------------
sub process {
my ($value) = WebGUI::Macro::getParams(shift);
return quote($value);
return quote(shift);
}

View file

@ -12,12 +12,11 @@ package WebGUI::Macro::RandomAssetProxy;
use strict;
use WebGUI::Asset;
use WebGUI::Macro;
use WebGUI::Session;
#-------------------------------------------------------------------
sub process {
my ($url) = WebGUI::Macro::getParams(shift);
my $url = shift;
my $asset = WebGUI::Asset->newByUrl($url);
if (defined $asset) {
my $children = $asset->getLineage(["children"]);

View file

@ -11,14 +11,12 @@ package WebGUI::Macro::RawHeadTags;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::Style;
#-------------------------------------------------------------------
sub process {
my ($html) = WebGUI::Macro::getParams(shift);
WebGUI::Style::setRawHeadTags($html);
WebGUI::Style::setRawHeadTags(shift);
return "";
}

View file

@ -11,14 +11,13 @@ package WebGUI::Macro::SQL;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::SQL;
#-------------------------------------------------------------------
sub process {
my ($output, @data, $rownum, $temp);
my ($statement, $format) = WebGUI::Macro::getParams(shift);
my ($statement, $format) = @_;
$format = '^0;' if ($format eq "");
if ($statement =~ /^\s*select/i || $statement =~ /^\s*show/i || $statement =~ /^\s*describe/i) {
my $sth = WebGUI::SQL->unconditionalRead($statement,WebGUI::SQL->getSlave);

View file

@ -12,13 +12,12 @@ package WebGUI::Macro::Spacer;
use strict;
use WebGUI::Session;
use WebGUI::Macro;
#-------------------------------------------------------------------
sub process {
my ($output, @param, $width, $height);
@param = WebGUI::Macro::getParams($_[0]);
@param = @_;
$width = $param[0] if defined $param[0];
$height = $param[1] if defined $param[1];
$output = '<img src="'.$session{config}{extrasURL}.'/spacer.gif"'.(defined $width?' width="'.$width.'"':'').(defined $height?' height="'.$height.'"':'').' border="0" alt="" />';

View file

@ -11,13 +11,12 @@ package WebGUI::Macro::Splat_random;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::Utility;
#-------------------------------------------------------------------
sub process {
my ($temp, @param);
@param = WebGUI::Macro::getParams($_[0]);
@param = @_;
if ($param[0] ne "") {
$temp = round(rand()*$param[0]);
} else {

View file

@ -11,14 +11,12 @@ package WebGUI::Macro::StyleSheet;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::Style;
#-------------------------------------------------------------------
sub process {
my ($file) = WebGUI::Macro::getParams(shift);
WebGUI::Style::setLink($file,{
WebGUI::Style::setLink(shift,{
type=>'text/css',
rel=>'stylesheet'
});

View file

@ -2,13 +2,12 @@ package WebGUI::Macro::SubscriptionItem;
use strict;
use WebGUI::Asset::Template;
use WebGUI::Macro;
use WebGUI::SQL;
use WebGUI::URL;
sub process {
my ($subscriptionId, $templateId, %var);
($subscriptionId, $templateId) = WebGUI::Macro::getParams(@_);
($subscriptionId, $templateId) = @_;
%var = WebGUI::SQL->quickHash('select * from subscription where subscriptionId='.quote($subscriptionId));
$var{url} = WebGUI::URL::page('op=purchaseSubscription;sid='.$subscriptionId);
return WebGUI::Asset::Template->new($templateId || "PBtmpl0000000000000046")->process(\%var);

View file

@ -1,12 +1,10 @@
package WebGUI::Macro::SubscriptionItemPurchaseUrl;
use strict;
use WebGUI::Macro;
use WebGUI::URL;
sub process {
my ($subscriptionId) = WebGUI::Macro::getParams(@_);
return WebGUI::URL::page('op=purchaseSubscription;sid='.$subscriptionId);
return WebGUI::URL::page('op=purchaseSubscription;sid='.shift);
}
1;

View file

@ -12,12 +12,11 @@ package WebGUI::Macro::Thumbnail;
use strict;
use WebGUI::Asset::File::Image;
use WebGUI::Macro;
use WebGUI::Session;
#-------------------------------------------------------------------
sub process {
my ($url) = WebGUI::Macro::getParams(shift);
my $url = shift;
if (my $image = WebGUI::Asset::File::Image->newByUrl($url)) {
return $image->getThumbnailUrl;
} else {

View file

@ -11,14 +11,12 @@ package WebGUI::Macro::URLEncode;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::URL;
#-------------------------------------------------------------------
sub process {
my @param = WebGUI::Macro::getParams($_[0]);
return WebGUI::URL::escape($param[0]);
return WebGUI::URL::escape(shift);
}

View file

@ -11,13 +11,11 @@ package WebGUI::Macro::User;
#-------------------------------------------------------------------
use strict;
use WebGUI::Macro;
use WebGUI::Session;
#-------------------------------------------------------------------
sub process {
my @param = WebGUI::Macro::getParams($_[0]);
return $session{user}{$param[0]};
return $session{user}{shift};
}

View file

@ -12,7 +12,6 @@ package WebGUI::Macro::a_account;
use strict;
use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::Asset::Template;
use WebGUI::URL;
@ -20,7 +19,7 @@ use WebGUI::URL;
#-------------------------------------------------------------------
sub process {
my %var;
my @param = WebGUI::Macro::getParams(shift);
my @param = @_;
return WebGUI::URL::page("op=auth;method=init") if ($param[0] eq "linkonly");
$var{'account.url'} = WebGUI::URL::page('op=auth;method=init');
$var{'account.text'} = $param[0] || WebGUI::International::get(46,'Macro_a_account');

View file

@ -12,7 +12,6 @@ package WebGUI::Macro::r_printable;
use strict;
use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session;
use WebGUI::Asset::Template;
use WebGUI::URL;
@ -21,7 +20,7 @@ use WebGUI::Utility;
#-------------------------------------------------------------------
sub process {
my ($temp, @param, $styleId);
@param = WebGUI::Macro::getParams($_[0]);
@param = @_;
my $append = 'op=makePrintable';
if ($session{env}{REQUEST_URI} =~ /op\=/) {
$append = 'op2='.WebGUI::URL::escape($append);

View file

@ -99,11 +99,13 @@ sub send {
$message .= "Content-Type: text/plain; charset=UTF-8\n";
}
$message .= "\n";
$message = WebGUI::Macro::process($message);
WebGUI::Macro::process(\$message);
#body
$message .= $_[2]."\n";
#footer
$message .= WebGUI::Macro::process("\n".$session{setting}{mailFooter});
my $footer = "\n".$session{setting}{mailFooter};
WebGUI::Macro::process(\$footer);
$message .= $footer;
$message .= "\n\n\nThis message was intended for ".$_[0].", but was overridden in the config file.\n\n\n" if ($session{config}{emailOverride});
if ($session{setting}{smtpServer} =~ /\/sendmail/) {
if (open(MAIL,"| $session{setting}{smtpServer} -t -oi")) {

View file

@ -213,7 +213,8 @@ sub addInternationalizedEntry {
$subject{$u->profileField("language")} = $subject{1} if ($subject{$u->profileField("language")} eq "");
$subject = $subject{$u->profileField("language")};
$message{$u->profileField("language")} = $message{1} if ($message{$u->profileField("language")} eq "");
$message = WebGUI::Macro::process($message{$u->profileField("language")});
$message = $message{$u->profileField("language")};
WebGUI::Macro::process(\$message);
WebGUI::SQL->write("insert into messageLog values (".quote($messageLogId).",".quote($u->userId).",
".quote($message).",".quote($url).",".time().",".quote($message).",".quote($status).")");
if ($url ne "") {

View file

@ -96,8 +96,9 @@ sub www_viewHelp {
my $body = WebGUI::Asset::Template->new("PBtmplHelp000000000001")->process(\%vars);
$ac->addSubmenuItem(WebGUI::URL::page('op=viewHelpIndex'),WebGUI::International::get(95));
$ac->addSubmenuItem(WebGUI::URL::page('op=viewHelpTOC'),WebGUI::International::get('help contents'));
WebGUI::Macro::process(\$body);
return $ac->render(
WebGUI::Macro::process($body),
$body,
WebGUI::International::get(93).': '.$i18n->get($help->{title})
);
}

View file

@ -114,7 +114,10 @@ sub validateProfileData {
$a = WebGUI::SQL->read("select * from userProfileField,userProfileCategory where userProfileField.profileCategoryId=userProfileCategory.profileCategoryId
and userProfileCategory.editable=1 and userProfileField.editable=1 order by userProfileCategory.sequenceNumber,userProfileField.sequenceNumber");
while (%field = $a->hash) {
$data{$field{fieldName}} = WebGUI::Macro::negate(WebGUI::FormProcessor::process($field{fieldName},$field{dataType}, $field{dataDefault}));
my $fieldData = WebGUI::FormProcessor::process($field{fieldName},$field{dataType}, $field{dataDefault});
WebGUI::Macro::negate(\$fieldData);
$data{$field{fieldName}} = $fieldData;
if ($field{required} && $data{$field{fieldName}} eq "") {
$error .= '<li>'.(WebGUI::Operation::Shared::secureEval($field{fieldLabel})).' '.WebGUI::International::get(451).'</li>';
}elsif($field{fieldName} eq "email" && isDuplicateEmail($data{$field{fieldName}})){

View file

@ -287,13 +287,12 @@ sub execute {
=head2 finish ( )
Ends a query after calling the "read" method.
Ends a query after calling the read() or unconditionalRead() methods. Don't use this unless you're not retrieving the full result set, or if you're using it with the unconditionalRead() method.
=cut
sub finish {
$_[0]->{_sth}->finish;
return "";
return $_[0]->{_sth}->finish;
}

View file

@ -150,9 +150,9 @@ if (WebGUI::Grouping::isInGroup(2)) {
} else {
$output = "WebGUI was unable to instantiate your style template.".$var{'body.content'};
}
$output = WebGUI::Macro::process($output);
WebGUI::Macro::process(\$output);
my $macroHeadTags = generateAdditionalHeadTags();
$macroHeadTags = WebGUI::Macro::process($macroHeadTags);
WebGUI::Macro::process(\$macroHeadTags);
$output =~ s/\<\!-- macro head tags --\>/$macroHeadTags/;
return $output;
}

View file

@ -3,6 +3,7 @@ package WebGUI::Subscription;
use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::Grouping;
use WebGUI::Macro;
use WebGUI::Utility;
use WebGUI::Commerce::Payment;
use WebGUI::DateTime;
@ -33,7 +34,9 @@ sub apply {
WebGUI::User->new($userId)->karma($self->{_properties}{karma}, 'Subscription', 'Added for purchasing subscription '.$self->{_properties}{name});
# Process executeOnPurchase field
system(WebGUI::Macro::process($self->{_properties}{executeOnSubscription})) if ($self->{_properties}{executeOnSubscription} ne "");
my $command = $self->{_properties}{executeOnSubscription};
WebGUI::Macro::process(\$command);
system($command) if ($self->{_properties}{executeOnSubscription} ne "");
}
#-------------------------------------------------------------------

View file

@ -305,7 +305,7 @@ sub profileField {
$self = shift;
$fieldName = shift;
$value = shift;
$value = WebGUI::Macro::negate($value);
WebGUI::Macro::negate(\$value);
if (defined $value) {
$self->uncache;
$self->{_profile}{$fieldName} = $value;

View file

@ -45,6 +45,7 @@ if ($] >= 5.006) {
checkModule("LWP",5.80);
checkModule("HTTP::Request",1.40);
checkModule("HTTP::Headers",1.61);
checkModule("Test::More",0.61);
checkModule("Digest::MD5",2.20);
checkModule("DBI",1.40);
checkModule("DBD::mysql",2.1021);

View file

@ -1,64 +0,0 @@
package WebGUI::UploadsAccessHandler;
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2005 Plain Black Corporation.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#-------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#-------------------------------------------------------------------
our $webguiRoot;
BEGIN {
my $s = Apache2::ServerUtil->server;
$webguiRoot = $s->dir_config('WebguiRoot');
unshift (@INC, $webguiRoot."/lib");
}
print "Starting WebGUI Uploads Access Handler\n";
use strict;
use CGI::Util qw/escape/;
use WebGUI::Grouping;
use WebGUI::Session;
use WebGUI::URL;
sub handler {
my $r;
my $ok;
my $notfound;
$r = Apache2::RequestUtil->request;
$ok = Apache2::Const::OK();
$notfound = Apache2::Const::NOT_FOUND();
if (-e $r->filename) {
my $path = $r->filename;
$path =~ s/^(\/.*\/).*$/$1/;
if (-e $path.".wgaccess") {
my $fileContents;
open(FILE,"<".$path.".wgaccess");
while (<FILE>) {
$fileContents .= $_;
}
close(FILE);
my @privs = split("\n",$fileContents);
unless ($privs[1] eq "7" || $privs[1] eq "1") {
WebGUI::Session::open($webguiRoot, $r->dir_config('WebguiConfig'));
my $cookie = $r->headers_in->{Cookie} || '';
$cookie =~ s/wgSession\=(.*)/$1/;
$cookie = WebGUI::URL::unescape($cookie);
WebGUI::Session::refreshSessionVars($cookie);
return $ok if ($session{user}{userId} eq $privs[0] || WebGUI::Grouping::isInGroup($privs[1]) || WebGUI::Grouping::isInGroup($privs[2]));
WebGUI::Session::close();
return 401;
}
}
return $ok;
} else {
return $notfound;
}
}
1;