@@ -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 |
|
|
55 | RedmineDSN "DBI:mysql:database=databasename;host=my.db.server" | |
56 | ## for postgres |
|
56 | ## for postgres | |
57 |
# |
|
57 | # RedmineDSN "DBI:Pg:dbname=databasename;host=my.db.server;sslmode=disable" | |
58 |
|
58 | |||
59 |
|
|
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 |
# |
|
62 | # database dependant). | |
63 |
# |
|
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($ |
|
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