@@ -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 |
|
|
|
55 | RedmineDSN "DBI:mysql:database=databasename;host=my.db.server" | |
|
56 | 56 | ## for postgres |
|
57 |
# |
|
|
57 | # RedmineDSN "DBI:Pg:dbname=databasename;host=my.db.server;sslmode=disable" | |
|
58 | 58 | |
|
59 |
|
|
|
60 | PerlSetVar db_pass password | |
|
59 | RedmineDbUser "redmine" | |
|
60 | RedmineDbPass "password" | |
|
61 | 61 | # Optional where clause (fulltext search would be slow - and |
|
62 |
# |
|
|
63 |
# |
|
|
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($ |
|
|
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