Some more minor corrections to get it to run as well as compile... (removes some XXX comments and adds some error checking)

This commit is contained in:
ian%hixie.ch 2001-06-03 15:27:16 +00:00
parent 5dd8af9c83
commit 02d609eb82
6 changed files with 62 additions and 29 deletions

View File

@ -48,8 +48,12 @@ sub getUserByUsername {
my($app, $username) = @_;
# decent databases can do this in one go. Those that can't can do
# it in a generic two-step process:
return $self->getUserByID($app, $self->getUserIDByUsername($app, $username));
# XXX no error checking! if getUserID... return undef, return ()!
my $userID = $self->getUserIDByUsername($app, $username);
if (defined($userID)) {
return $self->getUserByID($app, $userID);
} else {
return ();
}
# return the same as getUserByID()
}
@ -65,8 +69,12 @@ sub getUserByContactDetails {
my($app, $contactName, $address) = @_;
# decent databases can do this in one go. Those that can't can do
# it in a generic two-step process:
return $self->getUserByID($app, $self->getUserIDByContactDetails($app, $contactName, $address));
# XXX no error checking! if getUserID... return undef, return ()!
my $userID = $self->getUserIDByContactDetails($app, $contactName, $address);
if (defined($userID)) {
return $self->getUserByID($app, $userID);
} else {
return ();
}
# return the same as getUserByID()
}

View File

@ -45,25 +45,33 @@ sub getUserIDByUsername {
# example, for the field 'contact.icq', the type data field might
# contain the string 'ICQ:' and the user field might be '55378571'
# making the username 'ICQ:55378571'.
return $self->database($app)->execute('SELECT userData.userID
FROM userData, userDataTypes
WHERE userData.fieldID = userDataTypes.fieldID
AND userDataTypes.category = \'contact\'
AND CONCAT(userDataTypes.data, userData.data) = ?', $username)->row->[0];
# XXX no error checking!
my $row = $self->database($app)->execute('SELECT userData.userID
FROM userData, userDataTypes
WHERE userData.fieldID = userDataTypes.fieldID
AND userDataTypes.category = \'contact\'
AND CONCAT(userDataTypes.data, userData.data) = ?', $username)->row;
if (defined($row)) {
return $row->[0];
} else {
return undef;
}
# return userID or undef
}
sub getUserIDByContactDetails {
my $self = shift;
my($app, $contactName, $address) = @_;
return $self->database($app)->execute('SELECT userData.userID
FROM userData, userDataTypes
WHERE userData.fieldID = userDataTypes.fieldID
AND userDataTypes.category = \'contact\'
AND userDataTypes.name = ?
AND userData.data = ?', $contactName, $address)->row->[0];
# XXX no error checking!
my $row = $self->database($app)->execute('SELECT userData.userID
FROM userData, userDataTypes
WHERE userData.fieldID = userDataTypes.fieldID
AND userDataTypes.category = \'contact\'
AND userDataTypes.name = ?
AND userData.data = ?', $contactName, $address)->row;
if (defined($row)) {
return $row->[0];
} else {
return undef;
}
# return userID or undef
}
@ -218,8 +226,13 @@ sub getGroups {
sub getGroupName {
my $self = shift;
my($app, $groupID) = @_;
return $self->database($app)->execute('SELECT name FROM groups WHERE groupID = ?', $groupID)->row->[0];
# return name
my $row = $self->database($app)->execute('SELECT name FROM groups WHERE groupID = ?', $groupID)->row;
if (defined($row)) {
return $row->[0];
} else {
return undef;
}
# return name or undef
}
sub setGroup {
@ -271,7 +284,13 @@ sub addRight {
sub getRightID {
my $self = shift;
my($app, $name) = @_;
return $self->database($app)->execute('SELECT rightID FROM rights WHERE name = ?', $name)->row->[0];
my $row = $self->database($app)->execute('SELECT rightID FROM rights WHERE name = ?', $name)->row;
if (defined($row)) {
return $row->[0];
} else {
return undef;
}
# return rightID or undef
}
sub setupInstall {
@ -286,11 +305,11 @@ sub setupInstall {
CREATE TABLE user (
userID integer unsigned auto_increment NOT NULL PRIMARY KEY,
password varchar(255) NOT NULL,
mode integer unsigned DEFAULT 0,
mode integer unsigned NOT NULL DEFAULT 0,
adminMessage varchar(255),
newFieldID integer unsigned,
newFieldValue varchar(255),
newFieldKey varchar(255),
newFieldKey varchar(255)
)
');
# +-------------------+
@ -338,7 +357,7 @@ sub setupInstall {
name varchar(64) NOT NULL,
type varchar(64) NOT NULL,
data text,
mode integer unsigned DEFAULT 0,
mode integer unsigned NOT NULL DEFAULT 0,
UNIQUE KEY (category, name)
)
');

View File

@ -101,6 +101,11 @@ sub createResultsFrame {
my($statement, $execute, @values) = @_;
$self->assert($self->handle, 1, 'No database handle: '.(defined($self->errstr) ? $self->errstr : 'unknown error'));
my $handle = $self->handle->prepare($statement);
# untaint the values... (XXX?)
foreach my $value (@values) {
$value =~ /^(.*)$/os;
$value = $1;
}
if ($handle and ((not defined($execute)) or $handle->execute(@values))) {
return PLIF::Database::ResultsFrame::DBI->create($handle, $self, $execute);
} else {

View File

@ -74,7 +74,8 @@ sub getArguments {
# Returns the values given for that argument if it already exists,
# otherwise undef. In a scalar context, returns the first value (or
# undef if the argument was never given). In an array context, returns
# all the values given.
# all the values given. (i.e., the same as getArgument but without the
# implicit call to createArgument)
sub peekArgument {
my $self = shift;
my($argument) = @_;
@ -151,7 +152,7 @@ sub propertyGet {
if ($self->SUPER::propertyExists(@_)) {
return $self->SUPER::propertyGet(@_);
} else {
return $self->getArgument(@_); # XXX assumes that return propagates wantarray context...
return $self->peekArgument(@_); # XXX assumes that return propagates wantarray context...
# if not:
# my @result = $self->getArgument(@_);
# if (wantarray) {

View File

@ -185,15 +185,15 @@ sub getDefaultString {
} elsif ($string eq 'loginFailed') {
return '<text><if lvalue="(data.tried)" condition="=" rvalue="1">Wrong username or password.</if><else>You must give your username or password.</else><br/><!-- XXX offer to create an account or send the password --><br/></text>';
} elsif ($string eq 'loginDetailsSent') {
return '<text>Login details were sent. (Protocol: <text variable="(data.protocol)"/>; Address: <text variable="(data.address)"/>)<br/></text>';
return '<text>Login details were sent. (Protocol: <text value="(data.protocol)"/>; Address: <text value="(data.address)"/>)<br/></text>';
}
} elsif ($protocol eq 'http') {
if ($string eq 'loginAccessDenied') {
return '<text>HTTP/1.1 401 Access Denied<br/>Content-Type: text/plain<br/><br/>Access Denied</text>';
} elsif ($string eq 'loginFailed') {
return '<text>HTTP/1.1 401 Login Required<br/>WWW-Authenticate: Basic realm="<text variable="(data.app.name)"/>"<br/>Content-Type: text/plain<br/><br/><if lvalue="(data.tried)" condition="=" rvalue="1">Wrong username or password.</if><else>You must give your username or password.</else><br/><!-- XXX offer to create an account or send the password --></text>';
return '<text>HTTP/1.1 401 Login Required<br/>WWW-Authenticate: Basic realm="<text value="(data.app.name)"/>"<br/>Content-Type: text/plain<br/><br/><if lvalue="(data.tried)" condition="=" rvalue="1">Wrong username or password.</if><else>You must give your username or password.</else><br/><!-- XXX offer to create an account or send the password --></text>';
} elsif ($string eq 'loginDetailsSent') {
return '<text>HTTP/1.1 200 OK<br/>Content-Type: text/plain<br/><br/>Login details were sent.<br/>Protocol: <text variable="(data.protocol)"/><br/>Address: <text variable="(data.address)"/>)</text>';
return '<text>HTTP/1.1 200 OK<br/>Content-Type: text/plain<br/><br/>Login details were sent.<br/>Protocol: <text value="(data.protocol)"/><br/>Address: <text value="(data.address)"/>)</text>';
}
}
return; # nope, sorry

View File

@ -53,7 +53,7 @@ sub getUserByCredentials {
my $self = shift;
my($app, $username, $password) = @_;
my $object = $self->getUserByUsername($app, $username);
if ($object->checkPassword($password)) {
if (defined($object) and ($object->checkPassword($password))) {
return $object;
} else {
return undef;