summaryrefslogtreecommitdiff
path: root/passlib
diff options
context:
space:
mode:
authorEli Collins <elic@assurancetechnologies.com>2011-09-14 14:19:29 -0400
committerEli Collins <elic@assurancetechnologies.com>2011-09-14 14:19:29 -0400
commitb130100d2f8e7d10e3c810b7a92375bd06af59b6 (patch)
tree18e2b289c004f64799faa1632608d5cdaf17ebcf /passlib
parent1f1f24734c98c517f5d325132f085a5fc7555ac4 (diff)
downloadpasslib-b130100d2f8e7d10e3c810b7a92375bd06af59b6.tar.gz
fixed small bug in CryptPolicy.iter_config() related to deprecation options
Diffstat (limited to 'passlib')
-rw-r--r--passlib/context.py12
-rw-r--r--passlib/tests/test_context.py63
2 files changed, 54 insertions, 21 deletions
diff --git a/passlib/context.py b/passlib/context.py
index 45246ac..46bcec3 100644
--- a/passlib/context.py
+++ b/passlib/context.py
@@ -642,14 +642,16 @@ class CryptPolicy(object):
return h.name
def encode_hlist(hl):
return ", ".join(h.name for h in hl)
+ def encode_nlist(hl):
+ return ", ".join(name for name in hl)
else:
fmt1 = "%s__%s__%s"
fmt2 = "%s__%s"
+ encode_nlist = list
if resolve:
def encode_handler(h):
return h
- def encode_hlist(hl):
- return list(hl)
+ encode_hlist = list
else:
def encode_handler(h):
return h.name
@@ -671,7 +673,7 @@ class CryptPolicy(object):
yield format_key(None, None, "schemes"), encode_hlist(value)
for cat, value in self._deprecated.iteritems():
- yield format_key(cat, None, "deprecated"), encode_hlist(value)
+ yield format_key(cat, None, "deprecated"), encode_nlist(value)
for cat, value in self._default.iteritems():
yield format_key(cat, None, "default"), encode_handler(value)
@@ -822,7 +824,7 @@ class CryptContext(object):
#init
#===================================================================
def __init__(self, schemes=None, policy=default_policy, **kwds):
- #XXX: add a name for the contexts?
+ #XXX: add a name for the contexts, to help out repr?
if schemes:
kwds['schemes'] = schemes
if not policy:
@@ -836,6 +838,8 @@ class CryptContext(object):
names = [ handler.name for handler in self.policy.iter_handlers() ]
return "<CryptContext %0xd schemes=%r>" % (id(self), names)
+ #XXX: make an update() method that just updates policy?
+
def replace(self, **kwds):
"""return mutated CryptContext instance
diff --git a/passlib/tests/test_context.py b/passlib/tests/test_context.py
index b284674..10c7b9c 100644
--- a/passlib/tests/test_context.py
+++ b/passlib/tests/test_context.py
@@ -158,12 +158,40 @@ admin.sha512_crypt.max_rounds = 40000
sample_config_4pd = dict(
schemes = [ "sha512_crypt" ],
- all__vary_rounds = "10%",
+ all__vary_rounds = "10%",
sha512_crypt__max_rounds = 20000,
admin__all__vary_rounds = "5%",
admin__sha512_crypt__max_rounds = 40000,
)
+ #-----------------------------------------------------
+ #sample 5 - to_string & deprecation testing
+ #-----------------------------------------------------
+ sample_config_5s = sample_config_1s + """\
+deprecated = des_crypt
+admin__context__deprecated = des_crypt, bsdi_crypt
+"""
+
+ sample_config_5pd = sample_config_1pd.copy()
+ sample_config_5pd.update(
+ deprecated = [ "des_crypt" ],
+ admin__context__deprecated = [ "des_crypt", "bsdi_crypt" ],
+ )
+
+ sample_config_5pid = sample_config_1pid.copy()
+ sample_config_5pid.update({
+ "deprecated": "des_crypt",
+ "admin.context.deprecated": "des_crypt, bsdi_crypt",
+ })
+
+ sample_config_5prd = sample_config_1prd.copy()
+ sample_config_5prd.update({
+ # XXX: should deprecated return the actual handlers in this case?
+ # would have to modify how policy stores info, for one.
+ "deprecated": ["des_crypt"],
+ "admin__context__deprecated": ["des_crypt", "bsdi_crypt"],
+ })
+
#=========================================================
#constructors
#=========================================================
@@ -407,20 +435,21 @@ admin.sha512_crypt.max_rounds = 40000
def test_14_handler_is_deprecated(self):
"test handler_is_deprecated() method"
pa = CryptPolicy(**self.sample_config_1pd)
- pb = pa.replace(deprecated=["des_crypt", "bsdi_crypt"], admin__context__deprecated=["des_crypt"])
+ pb = CryptPolicy(**self.sample_config_5pd)
- self.assertTrue(not pa.handler_is_deprecated("des_crypt"))
- self.assertTrue(not pa.handler_is_deprecated(hash.bsdi_crypt))
- self.assertTrue(not pa.handler_is_deprecated("sha512_crypt"))
+ self.assertFalse(pa.handler_is_deprecated("des_crypt"))
+ self.assertFalse(pa.handler_is_deprecated(hash.bsdi_crypt))
+ self.assertFalse(pa.handler_is_deprecated("sha512_crypt"))
self.assertTrue(pb.handler_is_deprecated("des_crypt"))
- self.assertTrue(pb.handler_is_deprecated(hash.bsdi_crypt))
- self.assertTrue(not pb.handler_is_deprecated("sha512_crypt"))
+ self.assertFalse(pb.handler_is_deprecated(hash.bsdi_crypt))
+ self.assertFalse(pb.handler_is_deprecated("sha512_crypt"))
#check categories as well
self.assertTrue(pb.handler_is_deprecated("des_crypt", "user"))
+ self.assertFalse(pb.handler_is_deprecated("bsdi_crypt", "user"))
self.assertTrue(pb.handler_is_deprecated("des_crypt", "admin"))
- self.assertFalse(pb.handler_is_deprecated("bsdi_crypt", "admin"))
+ self.assertTrue(pb.handler_is_deprecated("bsdi_crypt", "admin"))
def test_15_min_verify_time(self):
pa = CryptPolicy()
@@ -448,23 +477,23 @@ admin.sha512_crypt.max_rounds = 40000
#=========================================================
def test_20_iter_config(self):
"test iter_config() method"
- p1 = CryptPolicy(**self.sample_config_1pd)
- self.assertEqual(dict(p1.iter_config()), self.sample_config_1pd)
- self.assertEqual(dict(p1.iter_config(resolve=True)), self.sample_config_1prd)
- self.assertEqual(dict(p1.iter_config(ini=True)), self.sample_config_1pid)
+ p5 = CryptPolicy(**self.sample_config_5pd)
+ self.assertEqual(dict(p5.iter_config()), self.sample_config_5pd)
+ self.assertEqual(dict(p5.iter_config(resolve=True)), self.sample_config_5prd)
+ self.assertEqual(dict(p5.iter_config(ini=True)), self.sample_config_5pid)
def test_21_to_dict(self):
"test to_dict() method"
- p1 = CryptPolicy(**self.sample_config_1pd)
- self.assertEqual(p1.to_dict(), self.sample_config_1pd)
- self.assertEqual(p1.to_dict(resolve=True), self.sample_config_1prd)
+ p5 = CryptPolicy(**self.sample_config_5pd)
+ self.assertEqual(p5.to_dict(), self.sample_config_5pd)
+ self.assertEqual(p5.to_dict(resolve=True), self.sample_config_5prd)
def test_22_to_string(self):
"test to_string() method"
- pa = CryptPolicy(**self.sample_config_1pd)
+ pa = CryptPolicy(**self.sample_config_5pd)
s = pa.to_string() #NOTE: can't compare string directly, ordering etc may not match
pb = CryptPolicy.from_string(s)
- self.assertEqual(pb.to_dict(), self.sample_config_1pd)
+ self.assertEqual(pb.to_dict(), self.sample_config_5pd)
#=========================================================
#