Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2012-03-03 01:20:15 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2012-03-03 01:20:15 (GMT)
commita5acb781e13b17147d9859acd49bfd04c61a7748 (patch)
treee33a8491fb25dac7849980663fc100c9c5434772
parentc37d03962cd4e0420714fe4827809f3a07f68d1d (diff)
For cases when User class will be inherited, keep final class in less invasive manner
-rw-r--r--restful_document/user.py27
1 files changed, 16 insertions, 11 deletions
diff --git a/restful_document/user.py b/restful_document/user.py
index 6832e65..d7d46d5 100644
--- a/restful_document/user.py
+++ b/restful_document/user.py
@@ -32,7 +32,18 @@ _logger = logging.getLogger('sugar_stats')
class User(Document):
- @ad.active_property(slot=1, prefix='N', full_text=True)
+ _final = None
+
+ @classmethod
+ def init(cls, index_class):
+ # Since `verify()` might be called with `restful_method.User` class
+ # instance, it should know about real final document class
+ # that will be sotred in `_final`.
+ User._final = cls
+ delattr(User, 'init')
+ cls.init(index_class)
+
+ @ad.active_property(slot=100, prefix='N', full_text=True)
def nickname(self, value):
return value
@@ -40,11 +51,11 @@ class User(Document):
def color(self, value):
return value
- @ad.active_property(slot=2, prefix='S', permissions=ad.ACCESS_CREATE)
+ @ad.active_property(slot=101, prefix='S', permissions=ad.ACCESS_CREATE)
def machine_sn(self, value):
return value
- @ad.active_property(slot=3, prefix='U', permissions=ad.ACCESS_CREATE)
+ @ad.active_property(slot=102, prefix='U', permissions=ad.ACCESS_CREATE)
def machine_uuid(self, value):
return value
@@ -59,7 +70,7 @@ class User(Document):
enforce('pubkey' in props,
_('Property "pubkey" is required for user registeration'))
guid, props['pubkey'] = _load_pubkey(props['pubkey'].strip())
- doc = cls(**props)
+ doc = cls._final(**props)
doc.set('guid', guid, raw=True)
doc.post()
return {'guid': guid}
@@ -67,7 +78,7 @@ class User(Document):
@classmethod
def verify(cls, guid, signature):
try:
- pubkey = cls(guid).get('pubkey', raw=True)
+ pubkey = cls._final(guid).get('pubkey', raw=True)
except ad.NotFound:
raise env.Unauthorized(_('Principal user does not exist'))
if env.trust_users.value:
@@ -78,12 +89,6 @@ class User(Document):
enforce(pubkey.verify_asn1(data, signature.decode('hex')),
env.Forbidden, _('Wrong principal credentials'))
- @classmethod
- def init(cls, index_class, final_class=None):
- # `restful_document.User` is the final class
- # for all possible user documents
- Document.init(index_class, final_class=User)
-
def _load_pubkey(pubkey):
try: