Skip to content

Commit 4a7f352

Browse files
committed
Implement basic white-list support in signup_prefilter_allowed and use it to
let registered site admins in configuration admin_list through the filter. Allows admins to sign up for alternative X509 or migoid(c) access to existing extoid(c) accounts. Refactor accountreq unit tests to fit class name and add a test to cover the new white-list.
1 parent 2fa9133 commit 4a7f352

File tree

4 files changed

+33
-4
lines changed

4 files changed

+33
-4
lines changed

mig/shared/accountreq.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1393,10 +1393,17 @@ def auto_add_user_allowed_with_peer(configuration, user_dict):
13931393
configuration.auto_add_user_with_peer)
13941394

13951395

1396-
def signup_prefilter_allowed(configuration, user_dict):
1396+
def signup_prefilter_allowed(configuration, user_dict, allow_dn_list=None):
13971397
"""Check if user with user_dict is potentially allowed to sign up in forms
13981398
soleley based on optional configuration prefilter.
1399+
If a list of user distinguished_name values is passed as the allow_dn_list
1400+
those users will unconditionally be allowed through the filter. This is
1401+
mainly useful in relation to allowing registered site admins to sign up for
1402+
X509 certificates or migoid(c) access for an existing extoid(c) account.
13991403
"""
1404+
if allow_dn_list and user_dict.get('distinguished_name', None) in \
1405+
allow_dn_list:
1406+
return True
14001407
for (key, val) in configuration.site_signup_prefilter:
14011408
if not re.match(val, user_dict.get(key, 'NO SUCH FIELD')):
14021409
return False

mig/shared/functionality/reqcertaction.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,9 @@ def main(client_id, user_arguments_dict):
231231
user_dict = canonical_user(configuration, raw_user, raw_user.keys())
232232
fill_distinguished_name(user_dict)
233233

234-
if not signup_prefilter_allowed(configuration, raw_user):
234+
# NOTE: allow registered site admins to request alternative login access
235+
if not signup_prefilter_allowed(configuration, raw_user,
236+
configuration.admin_list):
235237
output_objects.append({'object_type': 'error_text', 'text':
236238
'''Invalid sign up request:
237239
Please read and follow the sign up help and instructions on the request page!

mig/shared/functionality/reqoidaction.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,9 @@ def main(client_id, user_arguments_dict):
245245
user_dict = canonical_user(configuration, raw_user, raw_user.keys())
246246
fill_distinguished_name(user_dict)
247247

248-
if not signup_prefilter_allowed(configuration, raw_user):
248+
# NOTE: allow registered site admins to request alternative login access
249+
if not signup_prefilter_allowed(configuration, raw_user,
250+
configuration.admin_list):
249251
output_objects.append({'object_type': 'error_text', 'text':
250252
'''Invalid sign up request:
251253
Please read and follow the sign up help and instructions on the request page!

tests/test_mig_shared_accountreq.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
from tests.support import MigTestCase, testmain, fixturefile, ensure_dirs_exist
3737

3838
import mig.shared.accountreq as accountreq
39-
from mig.shared.base import canonical_user, fill_distinguished_name
39+
from mig.shared.base import canonical_user, distinguished_name_to_user, \
40+
fill_distinguished_name, get_client_id
4041
from mig.shared.defaults import keyword_auto
4142

4243

@@ -142,6 +143,12 @@ def test_peer_acceptance(self):
142143

143144
self.assertTrue(success)
144145

146+
147+
class MigSharedAccountreq__prefilters(MigTestCase):
148+
"""Unit tests for prefilter helper functions within the accountreq module"""
149+
150+
TEST_ADMIN_DN = '/C=DK/ST=NA/L=NA/O=DIKU/OU=NA/CN=Test Admin/emailAddress=siteadm@di.ku.dk'
151+
145152
def test_signup_prefilter_email_accept(self):
146153
accept = ['john@doe.org', 'a@b.c.org', 'a@ku.dk.com',
147154
'a@sci.ku.dk.org', 'a@diku.dk', 'a@nbi.dk']
@@ -164,6 +171,17 @@ def test_signup_prefilter_email_reject(self):
164171
user)
165172
self.assertFalse(check)
166173

174+
def test_signup_prefilter_email_accept_site_admins(self):
175+
user = distinguished_name_to_user(self.TEST_ADMIN_DN)
176+
admin_list = [get_client_id(user)]
177+
self.configuration.site_signup_prefilter = [
178+
('email', r'^.+(?<!(@|\.)ku\.dk)$')]
179+
check = accountreq.signup_prefilter_allowed(self.configuration, user)
180+
self.assertFalse(check)
181+
check = accountreq.signup_prefilter_allowed(self.configuration, user,
182+
admin_list)
183+
self.assertTrue(check)
184+
167185
def test_peers_prefilter_email_accept(self):
168186
accept = ['john.doe@science.ku.dk', 'abc123@ku.dk',
169187
'john.doe@a.b.c.ku.dk']

0 commit comments

Comments
 (0)