Example #1
0
 def _grant(self, rule, subject, accessor, permission, create=False):
     """
     Add an access rule.
     """
     if(isinstance(accessor, str) and accessor not in group_definitions):
         raise ValueError("Unknown group: %s" % accessor)
     
     if(permission in self.permission_list):
         permission_id = self.permission_list[permission]
     elif(create):
         self.connection.runOperation(sql.build_insert('permission', dict(
             name    = permission
         )))
         permission_id = self.connection.getLastInsertId('permission')
     else:
         raise ValueError("No such permission %r" % permission)
     
     self.connection.runOperation(sql.build_insert('access', {
         'object_id'        : subject.get_id() if isinstance(subject, interface.Object) else None,
         'verb_id'        : subject.get_id() if isinstance(subject, interface.Verb) else None,
         'property_id'    : subject.get_id() if isinstance(subject, interface.Property) else None,
         'rule'            : rule,
         'permission_id' : permission_id,
         'type'            : 'accessor' if isinstance(accessor, int) else 'group',
         'accessor_id'    : accessor if isinstance(accessor, int) else None,
         '"group"'        : accessor if isinstance(accessor, str) else None,
         'weight'        : 0,
     }))
Example #2
0
 def test_build_insert2(self):
     query = sql.build_insert('table',
                              col2='col2_data',
                              col1=sql.RAW("ENCRYPT('something')"))
     expecting = "INSERT INTO table (col1, col2) VALUES (ENCRYPT('something'), 'col2_data')"
     self.assertEqual(query, expecting,
                      'Got "%s" when expecting "%s"' % (query, expecting))
Example #3
0
    def set_player(self,
                   object_id,
                   player=None,
                   wizard=None,
                   passwd=None,
                   test_salt=None,
                   **attribs):
        """
        Edit the player attributes of an object.
        """
        crypt = None
        if (passwd is not None):
            crypt = attribs['crypt'] = hash_password(passwd, salt=test_salt)
        elif (player is False):
            crypt = attribs['crypt'] = '!'

        attribs['enabled'] = player is True
        attribs['wizard'] = wizard is True

        if (self.is_player(object_id)):
            if not (attribs):
                return
            self.connection.runOperation(
                sql.build_update('player', attribs, dict(avatar_id=object_id)))
        else:
            self.connection.runOperation(
                sql.build_insert('player', dict(avatar_id=object_id,
                                                **attribs)))
Example #4
0
 def add_observer(self, object_id, observer_id):
     """
     Add an observer for the provided object.
     """
     self.connection.runOperation(
         sql.build_insert('object_observer',
                          object_id=object_id,
                          observer_id=observer_id))
Example #5
0
 def test_build_insert_dot_syntax(self):
     query = sql.build_insert('db.table', {
         'col2': 'col2_data',
         'col1': sql.RAW("ENCRYPT('something')")
     })
     expecting = "INSERT INTO db.table (col1, col2) VALUES (ENCRYPT('something'), 'col2_data')"
     self.assertEqual(query, expecting,
                      'Got "%s" when expecting "%s"' % (query, expecting))
Example #6
0
 def test_build_insert_raw(self):
     query = sql.build_insert('table', {
         'col2': 'col2_data',
         'col1': 'col1_data'
     })
     expecting = "INSERT INTO table (col1, col2) VALUES ('col1_data', 'col2_data')"
     self.assertEqual(query, expecting,
                      'Got "%s" when expecting "%s"' % (query, expecting))
Example #7
0
    def save(self, obj):
        """
        Save the provided model back into the database.
        """
        obj_type = type(obj).__name__.lower()
        obj_id = obj.get_id()

        if (obj_type == 'object'):
            attribs = dict(
                name=obj._name,
                unique_name=('f', 't')[obj._unique_name],
                owner_id=obj._owner_id,
                location_id=obj._location_id,
            )
        elif (obj_type == 'verb'):
            attribs = dict(
                code=obj._code,
                filename=obj._filename,
                owner_id=obj._owner_id,
                origin_id=obj._origin_id,
                ability=('f', 't')[obj._ability],
                method=('f', 't')[obj._method],
            )
        elif (obj_type == 'property'):

            def check(v):
                if (v is None):
                    return False
                elif (v is ""):
                    return False
                return True

            attribs = dict(
                name=obj._name,
                value=ason.dumps(obj._value)
                if check(obj._value) else obj._value,
                owner_id=obj._owner_id,
                origin_id=obj._origin_id,
                type=obj._type,
            )
        else:
            raise RuntimeError(
                "Don't know how to save an object of type '%s'" % obj_type)

        if (obj_id):
            self.connection.runOperation(
                sql.build_update(obj_type, attribs, dict(id=obj_id)))
        else:
            attribs['id'] = sql.RAW('DEFAULT')
            result = self.connection.runQuery(
                sql.build_insert(obj_type, attribs) + ' RETURNING id')
            obj.set_id(result[0]['id'])

        object_key = '%s-%s' % (obj_type, obj.get_id())
        if (object_key not in self.cache):
            self.cache[object_key] = obj
Example #8
0
    def _grant(self, rule, subject, accessor, permission, create=False):
        """
        Add an access rule.
        """
        if (isinstance(accessor, str) and accessor not in group_definitions):
            raise ValueError("Unknown group: %s" % accessor)

        if (permission in self.permission_list):
            permission_id = self.permission_list[permission]
        elif (create):
            permission_id = self.connection.runQuery(
                sql.build_insert('permission', dict(name=permission)) +
                ' RETURNING id')[0]['id']
        else:
            raise ValueError("No such permission %r" % permission)

        self.connection.runOperation(
            sql.build_insert(
                'access', {
                    'object_id':
                    subject.get_id()
                    if isinstance(subject, interface.Object) else None,
                    'verb_id':
                    subject.get_id()
                    if isinstance(subject, interface.Verb) else None,
                    'property_id':
                    subject.get_id()
                    if isinstance(subject, interface.Property) else None,
                    'rule':
                    rule,
                    'permission_id':
                    permission_id,
                    'type':
                    'accessor' if isinstance(accessor, int) else 'group',
                    'accessor_id':
                    accessor if isinstance(accessor, int) else None,
                    '"group"':
                    accessor if isinstance(accessor, str) else None,
                    'weight':
                    0,
                }))
Example #9
0
 def test_build_multiple_insert(self):
     query = sql.build_insert('table',
                              [{
                                  'col2': 'col2_data',
                                  'col1': sql.RAW("ENCRYPT('something')")
                              }, {
                                  'col2': 'col2_data',
                                  'col1': sql.RAW("ENCRYPT('something')")
                              }])
     expecting = "INSERT INTO table (col1, col2) VALUES (ENCRYPT('something'), 'col2_data'), (ENCRYPT('something'), 'col2_data')"
     self.assertEqual(query, expecting,
                      'Got "%s" when expecting "%s"' % (query, expecting))
Example #10
0
 def register_task(self, user_id, delay, origin_id, verb_name, args, kwargs):
     """
     Register a delayed verb call.
     """
     task_id = self.pool.runQuery(sql.build_insert('task', dict(
         user_id        = user_id,
         delay        = delay,
         origin_id    = origin_id,
         verb_name    = verb_name,
         args        = args,
         kwargs        = kwargs,
     )) + ' RETURNING id')[0]['id']
     return task_id
Example #11
0
 def register_task(self, user_id, delay, origin_id, verb_name, args, kwargs):
     """
     Register a delayed verb call.
     """
     self.connection.runOperation(sql.build_insert('task', dict(
         user_id        = user_id,
         delay        = delay,
         origin_id    = origin_id,
         verb_name    = verb_name,
         args        = args,
         kwargs        = kwargs,
     )))
     return self.connection.getLastInsertId('task')
Example #12
0
    def update_access(self, access_id, rule, access, accessor, permission,
                      weight, subject, deleted):
        """
        Modify an access rule.
        """
        record = {} if not access_id else self.connection.runQuery(
            sql.interp(
                """SELECT a.*, p.name AS permission
                FROM access a
                    INNER JOIN permission p ON a.permission_id = p.id
                WHERE a.id = %s
            """, access_id))
        if (record):
            record = record[0]
        else:
            record = {}

        if (deleted):
            self.connection.runOperation(
                sql.build_delete('access', id=access_id))
            return

        record['rule'] = rule
        record['type'] = access
        record['weight'] = weight

        record.pop('group', '')
        if (access == 'group'):
            record['"group"'] = accessor
            record['accessor_id'] = None
        else:
            record['"group"'] = None
            record['accessor_id'] = accessor.get_id()

        if (record.pop('permission', '') != permission):
            if (permission not in self.permission_list):
                raise ValueError("Unknown permission: %s" % permission)
            record['permission_id'] = self.permission_list[permission]

        if (subject.get_type() == 'object'):
            record['object_id'] = subject.get_id()
        elif (subject.get_type() == 'verb'):
            record['verb_id'] = subject.get_id()
        elif (subject.get_type() == 'property'):
            record['property_id'] = subject.get_id()

        if (access_id):
            self.connection.runOperation(
                sql.build_update('access', record, dict(id=access_id)))
        else:
            self.connection.runOperation(sql.build_insert('access', **record))
Example #13
0
 def save(self, obj):
     """
     Save the provided model back into the database.
     """
     obj_type = type(obj).__name__.lower()
     obj_id = obj.get_id()
     
     if(obj_type == 'object'):
         attribs = dict(
             name        = obj._name,
             unique_name = ('f', 't')[obj._unique_name],
             owner_id    = obj._owner_id,
             location_id = obj._location_id,
         )
     elif(obj_type == 'verb'):
         attribs = dict(
             code        = obj._code,
             filename    = obj._filename,
             owner_id    = obj._owner_id,
             origin_id    = obj._origin_id,
             ability        = ('f', 't')[obj._ability],
             method        = ('f', 't')[obj._method],
         )
     elif(obj_type == 'property'):
         def check(v):
             if(v is None):
                 return False
             elif(v is ""):
                 return False
             return True
         
         attribs = dict(
             name        = obj._name,
             value        = json.dumps(obj._value) if check(obj._value) else obj._value,
             owner_id    = obj._owner_id,
             origin_id    = obj._origin_id,
             type        = obj._type,
         )
     else:
         raise RuntimeError("Don't know how to save an object of type '%s'" % obj_type)
     
     if(obj_id):
         self.pool.runOperation(sql.build_update(obj_type, attribs, dict(id=obj_id)))
     else:
         attribs['id'] = sql.RAW('DEFAULT')
         result = self.pool.runQuery(sql.build_insert(obj_type, attribs) + ' RETURNING id')
         obj.set_id(result[0]['id'])
     
     object_key = '%s-%s' % (obj_type, obj.get_id())
     if(object_key not in self.cache):
         self.cache[object_key] = obj
Example #14
0
 def save(self, obj):
     """
     Save the provided model back into the database.
     """
     obj_type = type(obj).__name__.lower()
     obj_id = obj.get_id()
     
     if(obj_type == 'object'):
         attribs = dict(
             name        = obj._name,
             unique_name = str(int(obj._unique_name)),
             owner_id    = obj._owner_id,
             location_id = obj._location_id,
         )
     elif(obj_type == 'verb'):
         attribs = dict(
             code        = obj._code,
             filename    = obj._filename,
             owner_id    = obj._owner_id,
             origin_id    = obj._origin_id,
             ability        = str(int(obj._ability)),
             method        = str(int(obj._method)),
         )
     elif(obj_type == 'property'):
         def check(v):
             if(v is None):
                 return False
             elif(v is ""):
                 return False
             return True
         
         attribs = dict(
             name        = obj._name,
             value        = ason.dumps(obj._value) if check(obj._value) else obj._value,
             owner_id    = obj._owner_id,
             origin_id    = obj._origin_id,
             type        = obj._type,
         )
     else:
         raise RuntimeError("Don't know how to save an object of type '%s'" % obj_type)
     
     if(obj_id):
         self.connection.runOperation(sql.build_update(obj_type, attribs, dict(id=obj_id)))
     else:
         self.connection.runOperation(sql.build_insert(obj_type, attribs))
         obj.set_id(self.connection.getLastInsertId(obj_type))
     
     object_key = '%s-%s' % (obj_type, obj.get_id())
     if(object_key not in self.cache):
         self.cache[object_key] = obj
Example #15
0
 def update_access(self, access_id, rule, access, accessor, permission, weight, subject, deleted):
     """
     Modify an access rule.
     """
     record = {} if not access_id else self.connection.runQuery(sql.interp(
         """SELECT a.*, p.name AS permission
             FROM access a
                 INNER JOIN permission p ON a.permission_id = p.id
             WHERE a.id = %s
         """, access_id))
     if(record):
         record = record[0]
     else:
         record = {}
     
     if(deleted):
         self.connection.runOperation(sql.build_delete('access', id=access_id))
         return
     
     record['rule'] = rule
     record['type'] = access
     record['weight'] = weight
     
     record.pop('group', '')
     if(access == 'group'):
         record['"group"'] = accessor
         record['accessor_id'] = None
     else:
         record['"group"'] = None
         record['accessor_id'] = accessor.get_id()
     
     if(record.pop('permission', '') != permission):
         if(permission not in self.permission_list):
             raise ValueError("Unknown permission: %s" % permission)
         record['permission_id'] = self.permission_list[permission]
     
     if(subject.get_type() == 'object'):
         record['object_id'] = subject.get_id()
     elif(subject.get_type() == 'verb'):
         record['verb_id'] = subject.get_id()
     elif(subject.get_type() == 'property'):
         record['property_id'] = subject.get_id()
     
     if(access_id):
         self.connection.runOperation(sql.build_update('access', record, dict(id=access_id)))
     else:
         self.connection.runOperation(sql.build_insert('access', **record))
Example #16
0
 def register_task(self, user_id, delay, origin_id, verb_name, args,
                   kwargs):
     """
     Register a delayed verb call.
     """
     task_id = self.connection.runQuery(
         sql.build_insert(
             'task',
             dict(
                 user_id=user_id,
                 delay=delay,
                 origin_id=origin_id,
                 verb_name=verb_name,
                 args=args,
                 kwargs=kwargs,
             )) + ' RETURNING id')[0]['id']
     return task_id
Example #17
0
 def set_player(self, object_id, player=None, wizard=None, passwd=None, test_salt=None, **attribs):
     """
     Edit the player attributes of an object.
     """
     crypt = None
     if(passwd is not None):
         crypt = attribs['crypt'] = hash_password(passwd, salt=test_salt)
     elif(player is False):
         crypt = attribs['crypt'] = '!'
     
     attribs['enabled'] = str(int(player is True))
     attribs['wizard'] = str(int(wizard is True))
     
     if(self.is_player(object_id)):
         if not(attribs):
             return
         self.connection.runOperation(sql.build_update('player', attribs, dict(avatar_id=object_id)))
     else:
         self.connection.runOperation(sql.build_insert('player', dict(avatar_id=object_id, **attribs)))
Example #18
0
 def add_verb_name(self, verb_id, name):
     """
     Add another name for a given verb.
     """
     self.connection.runOperation(sql.build_insert('verb_name', verb_id=verb_id, name=name))
Example #19
0
 def add_observer(self, object_id, observer_id):
     """
     Add an observer for the provided object.
     """
     self.connection.runOperation(sql.build_insert('object_observer', object_id=object_id, observer_id=observer_id));
Example #20
0
 def add_alias(self, object_id, alias):
     """
     Add an aliases for the provided object.
     """
     self.connection.runOperation(sql.build_insert('object_alias', object_id=object_id, alias=alias));
Example #21
0
 def test_build_insert2(self):
     query = sql.build_insert('table', col2='col2_data', col1=sql.RAW("ENCRYPT('something')"));
     expecting = "INSERT INTO table (col1, col2) VALUES (ENCRYPT('something'), 'col2_data')"
     self.failUnlessEqual(query, expecting, 'Got "%s" when expecting "%s"' % (sql, expecting))
Example #22
0
 def add_alias(self, object_id, alias):
     """
     Add an aliases for the provided object.
     """
     self.connection.runOperation(
         sql.build_insert('object_alias', object_id=object_id, alias=alias))
Example #23
0
# antioch
# Copyright (c) 1999-2018 Phil Christensen
#
#
# See LICENSE for details
"""
Default database bootstrap.
"""

from antioch.core import interface, bootstrap
from antioch.util import sql

for name in interface.default_permissions:
    exchange.connection.runOperation(sql.build_insert('permission', name=name))

exchange.load_permissions()

system = exchange.instantiate('object', name='System Object')
set_default_permissions_verb = interface.Verb(system)
set_default_permissions_verb._method = True
set_default_permissions_verb._code = bootstrap.get_source(
    'system_set_default_permissions.py')
exchange.save(set_default_permissions_verb)
set_default_permissions_verb.add_name('set_default_permissions')

set_default_permissions_verb(set_default_permissions_verb)
set_default_permissions_verb(system)

wizard = exchange.instantiate('object', name='Wizard', unique_name=True)
wizard.set_owner(wizard)
system.set_owner(wizard)
Example #24
0
 def test_build_multiple_insert(self):
     query = sql.build_insert('table', [{'col2':'col2_data', 'col1':sql.RAW("ENCRYPT('something')")}, {'col2':'col2_data', 'col1':sql.RAW("ENCRYPT('something')")}]);
     expecting = "INSERT INTO table (col1, col2) VALUES (ENCRYPT('something'), 'col2_data'), (ENCRYPT('something'), 'col2_data')"
     self.failUnlessEqual(query, expecting, 'Got "%s" when expecting "%s"' % (sql, expecting))
Example #25
0
# Copyright (c) 1999-2019 Phil Christensen
#
#
# See LICENSE for details

"""
Default database bootstrap.
"""



from antioch.core import interface, bootstrap
from antioch.util import sql

for name in interface.default_permissions:
    exchange.connection.runOperation(sql.build_insert('permission', name=name))

exchange.load_permissions()

system = exchange.instantiate('object', name='System Object')
set_default_permissions_verb = interface.Verb(system)
set_default_permissions_verb._method = True
set_default_permissions_verb._code = bootstrap.get_source('system_set_default_permissions.py')
exchange.save(set_default_permissions_verb)
set_default_permissions_verb.add_name('set_default_permissions')

set_default_permissions_verb(set_default_permissions_verb)
set_default_permissions_verb(system)

wizard = exchange.instantiate('object', name='Wizard', unique_name=True)
wizard.set_owner(wizard)
Example #26
0
 def test_build_insert_dot_syntax(self):
     query = sql.build_insert('db.table', {'col2':'col2_data', 'col1':sql.RAW("ENCRYPT('something')")});
     expecting = "INSERT INTO db.table (col1, col2) VALUES (ENCRYPT('something'), 'col2_data')"
     self.failUnlessEqual(query, expecting, 'Got "%s" when expecting "%s"' % (sql, expecting))
Example #27
0
 def add_verb_name(self, verb_id, name):
     """
     Add another name for a given verb.
     """
     self.connection.runOperation(
         sql.build_insert('verb_name', verb_id=verb_id, name=name))
Example #28
0
# Copyright (c) 1999-2016 1999-2012 Phil Christensen
#
#
# See LICENSE for details

"""
Default database bootstrap.
"""

from __future__ import with_statement

from antioch.core import interface, bootstrap
from antioch.util import sql

for name in interface.default_permissions:
    exchange.pool.runOperation(sql.build_insert("permission", name=name))

exchange.load_permissions()

system = exchange.instantiate("object", name="System Object")
set_default_permissions_verb = interface.Verb(system)
set_default_permissions_verb._method = True
set_default_permissions_verb._code = bootstrap.get_source("system_set_default_permissions.py")
exchange.save(set_default_permissions_verb)
set_default_permissions_verb.add_name("set_default_permissions")

set_default_permissions_verb(set_default_permissions_verb)
set_default_permissions_verb(system)

wizard = exchange.instantiate("object", name="Wizard", unique_name=True)
wizard.set_owner(wizard)
Example #29
0
 def test_build_insert_raw(self):
     query = sql.build_insert('table', {'col2':'col2_data', 'col1':'col1_data'});
     expecting = "INSERT INTO table (col1, col2) VALUES ('col1_data', 'col2_data')"
     self.failUnlessEqual(query, expecting, 'Got "%s" when expecting "%s"' % (sql, expecting))