class TG_Group(Document):
    """An ultra-simple group definition."""

    type = TextField(default="Group")

    group_name = TextField()
    display_name = TextField()
    created = DateTimeField(default=datetime.now)

    # collection of all users belonging to this group
    #users = RelatedJoin("TG_User", intermediateTable="tg_user_group",
    #    joinColumn="group_id", otherColumn="user_id")

    # collection of all permissions for this group
    #permissions = RelatedJoin("TG_Permission", joinColumn="group_id",
    #    intermediateTable="tg_group_permission",
    #    otherColumn="permission_id")

    @classmethod
    def by_group_name(cls, group_name):
        """Look up Group by given group name."""

        query = db.Query(cls)
        query.filter('group_name =', group_name)
        return query.get()
    by_name = by_group_name
class TG_User(Document):
    """Reasonably basic User definition."""

    type = TextField(default="User")
    
    user_name = TextField()
    email_address = TextField()
    display_name = TextField()
    password = TextField()
    created = DateTimeField(default=datetime.now)

    # groups this user belongs to
    #groups = RelatedJoin("TG_Group", intermediateTable="tg_user_group",
    #    joinColumn="user_id", otherColumn="group_id")

    @classmethod
    def by_user_name(cls, user_name):
        """Look up Group by given group name."""
        query = db.Query(cls)
        query.filter('user_name =', user_name)
        return query.get()
    by_name = by_user_name

    @classmethod
    def by_email_address(cls, email_address):
        """Look up User by given email address."""
        query = db.Query(cls)
        query.filter('email_address =', email_address)
        return query.get()
    by_name = by_user_name


    def _get_permissions(self):
        perms = set()
        for g in self.groups:
            perms = perms | set(g.permissions)
        return perms

    def _set_password(self, cleartext_password):
        """Run cleartext_password through the hash algorithm before saving."""
        try:
            hash = identity.current_provider.encrypt_password(cleartext_password)
        except identity.exceptions.IdentityManagementNotEnabledException:
            # Creating identity provider just to encrypt password
            # (so we don't reimplement the encryption step).
            ip = CouchDbIdentityProvider()
            hash = ip.encrypt_password(cleartext_password)
            if hash == cleartext_password:
                log.info("Identity provider not enabled,"
                    " and no encryption algorithm specified in config."
                    " Setting password as plaintext.")
        self._SO_set_password(hash)

    def set_password_raw(self, password):
        """Save the password as-is to the database."""
        self._SO_set_password(password)
class TG_VisitIdentity(Document):
    """A visit to your website."""

    type = TextField(default="VisitIdentity")
##    visit_key = db.StringProperty(required=True)
    user_id = TextField()
    
    @classmethod
    def by_visit_key(cls, visit_key):
        """Look up VisitIdentity by given visit key."""
        key = "VISITIDENTITY:%s" % visit_key
        return cls.load(datastore.db, key)
class TG_Permission(Document):
    """Permissions for a given group."""

    type = TextField(default="Permission")
    
    permission_name = TextField()
    description = TextField()

    #groups = RelatedJoin("TG_Group", intermediateTable="tg_group_permission",
    #    joinColumn="permission_id", otherColumn="group_id")

    @classmethod
    def by_permission_name(cls, permission_name):
        """Look up Group by given group name."""
        query = db.Query(cls)
        query.filter('permission_name =', permission_name)
        return query.get()
    by_name = by_permission_name
Beispiel #5
0
class TG_Visit(Document):
    type = TextField(default="Visit")

    created = DateTimeField(default=datetime.now)
    expiry = DateTimeField()

    @classmethod
    def lookup_visit(cls, visit_key):
        key = "VISIT:%s" % visit_key
        return cls.load(datastore.db, key)
Beispiel #6
0
class URL(Document):
    target = TextField()
    public = BooleanField()
    added = DateTimeField(default=datetime.utcnow())
    shorty_id = TextField(default=None)
    db = None

    @classmethod
    def load(self, id):
        return super(URL, self).load(URL.db, id)

    @classmethod
    def query(self, code):
        return URL.db.query(code)

    def store(self):
        if getattr(self._data, 'id', None) is None:
            new_id = self.shorty_id if self.shorty_id else None
            while 1:
                id = new_id if new_id else get_random_uid()
                docid = None
                try:
                    docid = URL.db.resource.put(content=self._data,
                                                path='/%s/' % str(id))['id']
                except:
                    continue
                if docid:
                    break
            self._data = URL.db.get(docid)
        else:
            super(URL, self).store(URL.db)
        return self

    @property
    def short_url(self):
        return url_for('link', uid=self.id, _external=True)

    def __repr__(self):
        return '<URL %r>' % self.id
class TG_GroupPermission(Document):
    type = TextField(default="GroupPermission")
    
    group_id = TextField()
    permission_id = TextField()
class TG_UserGroup(Document):
    type = TextField(default="UserGroup")

    user_id = TextField()
    group_id = TextField()
Beispiel #9
0
	def __init__(self, name=None, default=None, verify_exists=True):
		self.verify_exists = verify_exists
		TextField.__init__(self, name, default)
Beispiel #10
0
	def __init__(self, *args, **kwargs):
		TextField.__init__(self, *args, **kwargs)
Beispiel #11
0
class User(Document):
    _id = TextField()
    password = TextField()
    type = TextField(default='User')
    added = DateTimeField(default=datetime.now)