##// 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 PerlAuthenHandler Apache::Authn::Redmine::authen_handler
52 PerlAuthenHandler Apache::Authn::Redmine::authen_handler
53
53
54 ## for mysql
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 ## for postgres
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
59 RedmineDbUser "redmine"
60 PerlSetVar db_pass password
60 RedmineDbPass "password"
61 # Optional where clause (fulltext search would be slow - and
61 # Optional where clause (fulltext search would be slow - and
62 # is database dependant).
62 # database dependant).
63 # PerlSetVar db_where_clause "and members.role_id IN (1,2)"
63 # RedmineDbWhereClause "and members.role_id IN (1,2)"
64 </Location>
64 </Location>
65
65
66 To be able to browse repository inside redmine, you must add something
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 =cut
95 =cut
96
96
97 use strict;
97 use strict;
98 use warnings FATAL => 'all';
98
99
99 use DBI;
100 use DBI;
100 use Digest::SHA1;
101 use Digest::SHA1;
@@ -106,9 +107,59 use Apache2::Access;
106 use Apache2::ServerRec qw();
107 use Apache2::ServerRec qw();
107 use Apache2::RequestRec qw();
108 use Apache2::RequestRec qw();
108 use Apache2::RequestUtil qw();
109 use Apache2::RequestUtil qw();
109 use Apache2::Const qw(:common);
110 use Apache2::Const qw(:common :override :cmd_how);
111
110 # use Apache2::Directive qw();
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 my %read_only_methods = map { $_ => 1 } qw/GET PROPFIND REPORT OPTIONS/;
163 my %read_only_methods = map { $_ => 1 } qw/GET PROPFIND REPORT OPTIONS/;
113
164
114 sub access_handler {
165 sub access_handler {
@@ -185,11 +236,9 sub is_member {
185
236
186 my $pass_digest = Digest::SHA1::sha1_hex($redmine_pass);
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=? ";
239 my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config);
189 my ($where_clause) = map { $r->dir_config($_) } qw/db_where_clause/;
240 my $query = $cfg->{RedmineQuery};
190 my $sth = $dbh->prepare(
241 my $sth = $dbh->prepare($query);
191 $query.($where_clause ? $where_clause : "").";"
192 );
193 $sth->execute($redmine_user, $project_id);
242 $sth->execute($redmine_user, $project_id);
194
243
195 my $ret;
244 my $ret;
@@ -234,9 +283,9 sub get_project_identifier {
234
283
235 sub connect_database {
284 sub connect_database {
236 my $r = shift;
285 my $r = shift;
237
286
238 my ($dsn, $db_user, $db_pass) = map { $r->dir_config($_) } qw/dsn db_user db_pass/;
287 my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config);
239 return DBI->connect($dsn, $db_user, $db_pass);
288 return DBI->connect($cfg->{RedmineDSN}, $cfg->{RedmineDbUser}, $cfg->{RedmineDbPass});
240 }
289 }
241
290
242 1;
291 1;
General Comments 0
You need to be logged in to leave comments. Login now