summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiwiusz Ociepa <liwiusz.ociepa@softwarelab.eu>2008-05-05 13:18:41 +0000
committerLiwiusz Ociepa <liwiusz.ociepa@softwarelab.eu>2008-05-05 13:18:41 +0000
commiteb2d8143442e79390788ced5f17e801cbf45bad1 (patch)
tree285fd1e099e60cdaaedc310b6c0b060e514b6a32
parentd9385ce9a2b4aef8e9744106348cffcbcd333efa (diff)
downloadredmine-eb2d8143442e79390788ced5f17e801cbf45bad1.tar.gz
redmine-eb2d8143442e79390788ced5f17e801cbf45bad1.zip
http://perl.apache.org/docs/2.0/user/config/custom.html#Description
Rewrite module not to use PerlSetVar git-svn-id: http://redmine.rubyforge.org/svn/branches/swistak@1416 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--extra/svn/Redmine.pm79
1 files changed, 64 insertions, 15 deletions
diff --git a/extra/svn/Redmine.pm b/extra/svn/Redmine.pm
index 49bebf51d..81050b9df 100644
--- a/extra/svn/Redmine.pm
+++ b/extra/svn/Redmine.pm
@@ -52,15 +52,15 @@ Authen::Simple::LDAP (and IO::Socket::SSL if LDAPS is used):
PerlAuthenHandler Apache::Authn::Redmine::authen_handler
## for mysql
- PerlSetVar dsn DBI:mysql:database=databasename;host=my.db.server
+ RedmineDSN "DBI:mysql:database=databasename;host=my.db.server"
## for postgres
- # PerlSetVar dsn DBI:Pg:dbname=databasename;host=my.db.server
+ # RedmineDSN "DBI:Pg:dbname=databasename;host=my.db.server;sslmode=disable"
- PerlSetVar db_user redmine
- PerlSetVar db_pass password
+ RedmineDbUser "redmine"
+ RedmineDbPass "password"
# Optional where clause (fulltext search would be slow - and
- # is database dependant).
- # PerlSetVar db_where_clause "and members.role_id IN (1,2)"
+ # database dependant).
+ # RedmineDbWhereClause "and members.role_id IN (1,2)"
</Location>
To be able to browse repository inside redmine, you must add something
@@ -95,6 +95,7 @@ And you need to upgrade at least reposman.rb (after r860).
=cut
use strict;
+use warnings FATAL => 'all';
use DBI;
use Digest::SHA1;
@@ -106,9 +107,59 @@ use Apache2::Access;
use Apache2::ServerRec qw();
use Apache2::RequestRec qw();
use Apache2::RequestUtil qw();
-use Apache2::Const qw(:common);
+use Apache2::Const qw(:common :override :cmd_how);
+
# use Apache2::Directive qw();
+my @directives = (
+ {
+ name => 'RedmineDSN',
+ req_override => OR_AUTHCFG,
+ args_how => TAKE1,
+ errmsg => 'Dsn in format used by Perl DBI. eg: "DBI:Pg:dbname=databasename;host=my.db.server"',
+ },
+ {
+ name => 'RedmineDbUser',
+ req_override => OR_AUTHCFG,
+ args_how => TAKE1,
+ },
+ {
+ name => 'RedmineDbPass',
+ req_override => OR_AUTHCFG,
+ args_how => TAKE1,
+ },
+ {
+ name => 'RedmineDbWhereClause',
+ req_override => OR_AUTHCFG,
+ args_how => TAKE1,
+ },
+);
+
+sub RedmineDSN { set_val('RedmineDSN', @_); }
+sub RedmineDbUser { set_val('RedmineDbUser', @_); }
+sub RedmineDbPass { set_val('RedmineDbPass', @_); }
+sub RedmineDbWhereClause {
+ my ($self, $parms, $arg) = @_;
+ my $query = "SELECT
+ hashed_password, auth_source_id
+ FROM members, projects, users
+ WHERE
+ projects.id=members.project_id
+ AND users.id=members.user_id
+ AND users.status=1
+ AND login=?
+ AND identifier=? ";
+ $self->{RedmineQuery} = $query.($arg ? $arg : "").";";
+}
+
+sub set_val {
+ my ($key, $self, $parms, $arg) = @_;
+ $self->{$key} = $arg;
+}
+
+Apache2::Module::add(__PACKAGE__, \@directives);
+
+
my %read_only_methods = map { $_ => 1 } qw/GET PROPFIND REPORT OPTIONS/;
sub access_handler {
@@ -185,11 +236,9 @@ sub is_member {
my $pass_digest = Digest::SHA1::sha1_hex($redmine_pass);
- my $query = "SELECT hashed_password, auth_source_id FROM members, projects, users WHERE projects.id=members.project_id AND users.id=members.user_id AND users.status=1 AND login=? AND identifier=? ";
- my ($where_clause) = map { $r->dir_config($_) } qw/db_where_clause/;
- my $sth = $dbh->prepare(
- $query.($where_clause ? $where_clause : "").";"
- );
+ my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config);
+ my $query = $cfg->{RedmineQuery};
+ my $sth = $dbh->prepare($query);
$sth->execute($redmine_user, $project_id);
my $ret;
@@ -234,9 +283,9 @@ sub get_project_identifier {
sub connect_database {
my $r = shift;
-
- my ($dsn, $db_user, $db_pass) = map { $r->dir_config($_) } qw/dsn db_user db_pass/;
- return DBI->connect($dsn, $db_user, $db_pass);
+
+ my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config);
+ return DBI->connect($cfg->{RedmineDSN}, $cfg->{RedmineDbUser}, $cfg->{RedmineDbPass});
}
1;