##// END OF EJS Templates
Liwiusz Ociepa -
r1401:eb2d8143442e
parent child
Show More
@@ -52,15 +52,15 Authen::Simple::LDAP (and IO::Socket::SSL if LDAPS is used):
52 52 PerlAuthenHandler Apache::Authn::Redmine::authen_handler
53 53
54 54 ## for mysql
55 PerlSetVar dsn DBI:mysql:database=databasename;host=my.db.server
55 RedmineDSN "DBI:mysql:database=databasename;host=my.db.server"
56 56 ## for postgres
57 # PerlSetVar dsn DBI:Pg:dbname=databasename;host=my.db.server
57 # RedmineDSN "DBI:Pg:dbname=databasename;host=my.db.server;sslmode=disable"
58 58
59 PerlSetVar db_user redmine
60 PerlSetVar db_pass password
59 RedmineDbUser "redmine"
60 RedmineDbPass "password"
61 61 # Optional where clause (fulltext search would be slow - and
62 # is database dependant).
63 # PerlSetVar db_where_clause "and members.role_id IN (1,2)"
62 # database dependant).
63 # RedmineDbWhereClause "and members.role_id IN (1,2)"
64 64 </Location>
65 65
66 66 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).
95 95 =cut
96 96
97 97 use strict;
98 use warnings FATAL => 'all';
98 99
99 100 use DBI;
100 101 use Digest::SHA1;
@@ -106,9 +107,59 use Apache2::Access;
106 107 use Apache2::ServerRec qw();
107 108 use Apache2::RequestRec qw();
108 109 use Apache2::RequestUtil qw();
109 use Apache2::Const qw(:common);
110 use Apache2::Const qw(:common :override :cmd_how);
111
110 112 # use Apache2::Directive qw();
111 113
114 my @directives = (
115 {
116 name => 'RedmineDSN',
117 req_override => OR_AUTHCFG,
118 args_how => TAKE1,
119 errmsg => 'Dsn in format used by Perl DBI. eg: "DBI:Pg:dbname=databasename;host=my.db.server"',
120 },
121 {
122 name => 'RedmineDbUser',
123 req_override => OR_AUTHCFG,
124 args_how => TAKE1,
125 },
126 {
127 name => 'RedmineDbPass',
128 req_override => OR_AUTHCFG,
129 args_how => TAKE1,
130 },
131 {
132 name => 'RedmineDbWhereClause',
133 req_override => OR_AUTHCFG,
134 args_how => TAKE1,
135 },
136 );
137
138 sub RedmineDSN { set_val('RedmineDSN', @_); }
139 sub RedmineDbUser { set_val('RedmineDbUser', @_); }
140 sub RedmineDbPass { set_val('RedmineDbPass', @_); }
141 sub RedmineDbWhereClause {
142 my ($self, $parms, $arg) = @_;
143 my $query = "SELECT
144 hashed_password, auth_source_id
145 FROM members, projects, users
146 WHERE
147 projects.id=members.project_id
148 AND users.id=members.user_id
149 AND users.status=1
150 AND login=?
151 AND identifier=? ";
152 $self->{RedmineQuery} = $query.($arg ? $arg : "").";";
153 }
154
155 sub set_val {
156 my ($key, $self, $parms, $arg) = @_;
157 $self->{$key} = $arg;
158 }
159
160 Apache2::Module::add(__PACKAGE__, \@directives);
161
162
112 163 my %read_only_methods = map { $_ => 1 } qw/GET PROPFIND REPORT OPTIONS/;
113 164
114 165 sub access_handler {
@@ -185,11 +236,9 sub is_member {
185 236
186 237 my $pass_digest = Digest::SHA1::sha1_hex($redmine_pass);
187 238
188 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=? ";
189 my ($where_clause) = map { $r->dir_config($_) } qw/db_where_clause/;
190 my $sth = $dbh->prepare(
191 $query.($where_clause ? $where_clause : "").";"
192 );
239 my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config);
240 my $query = $cfg->{RedmineQuery};
241 my $sth = $dbh->prepare($query);
193 242 $sth->execute($redmine_user, $project_id);
194 243
195 244 my $ret;
@@ -234,9 +283,9 sub get_project_identifier {
234 283
235 284 sub connect_database {
236 285 my $r = shift;
237
238 my ($dsn, $db_user, $db_pass) = map { $r->dir_config($_) } qw/dsn db_user db_pass/;
239 return DBI->connect($dsn, $db_user, $db_pass);
286
287 my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config);
288 return DBI->connect($cfg->{RedmineDSN}, $cfg->{RedmineDbUser}, $cfg->{RedmineDbPass});
240 289 }
241 290
242 291 1;
General Comments 0
You need to be logged in to leave comments. Login now