Exemple #1
0
    def delete_user(self, uniq):
        """
            Deletes user

            @param uniq - resource uniq for the user

        """
        # Remove the user from the system for most purposes, but
        # leave the id for statistics purposes.
        bquser = DBSession.query(BQUser).filter(
            BQUser.resource_uniq == uniq).first()
        if bquser:
            log.debug("ADMIN: Deleting user: %s", str(bquser))
            user = DBSession.query(User).filter(
                User.user_name == bquser.resource_name).first()
            log.debug("Renaming internal user %s", str(user))

            if user:
                DBSession.delete(user)
                # delete the access permission
                for p in DBSession.query(TaggableAcl).filter_by(
                        user_id=bquser.id):
                    log.debug("KILL ACL %s", str(p))
                    DBSession.delete(p)
                self.deleteimages(bquser.resource_name, will_redirect=False)
                #DBSession.delete(bquser)

                #transaction.commit()
            data_service.del_resource(bquser)
            return '<resource>Delete User</resource>'

        abort(400)
Exemple #2
0
 def deleteimages(self, username=None, will_redirect=True, **kw):
     user = DBSession.query(BQUser).filter(
         BQUser.resource_name == username).first()
     log.debug("ADMIN: Deleting all images of: %s", str(user))
     images = DBSession.query(Image).filter(Image.owner_id == user.id).all()
     for i in images:
         log.debug("ADMIN: Deleting image: %s", str(i))
         DBSession.delete(i)
     if will_redirect:
         transaction.commit()
         redirect('/admin/users')
     return dict()
Exemple #3
0
    def delete_group(self, *args, **kw):
        if len(args):
            group_name = args[0]
        else:
            content_type = request.headers.get('Content-Type')
            inputer = find_inputer(content_type)
            body = request.body_file.read()
            log.debug("DELETE content %s", body)
            els = inputer(body)
            group_name = els.xpath('//group/@name')[0]

        resource = etree.Element('resource')
        group = DBSession.query(Group).filter_by(group_name=group_name).first()
        if group:
            etree.SubElement(resource, 'group', name=group.group_name)
            DBSession.delete(group)

        return resource
Exemple #4
0
    def deleteuser(self, username=None, **kw):
        #DBSession.autoflush = False

        # Remove the user from the system for most purposes, but
        # leave the id for statistics purposes.
        user = DBSession.query(User).filter(User.user_name == username).first()
        log.debug("Renaming internal user %s", str(user))
        if user:
            DBSession.delete(user)
            #user.display_name = ("(R)" + user.display_name)[:255]
            #user.user_name = ("(R)" + user.user_name)[:255]
            #user.email_address = ("(R)" + user.email_address)[:16]

        user = DBSession.query(BQUser).filter(
            BQUser.resource_name == username).first()
        log.debug("ADMIN: Deleting user: %s", str(user))
        # delete the access permission
        for p in DBSession.query(TaggableAcl).filter_by(user_id=user.id):
            log.debug("KILL ACL %s", str(p))
            DBSession.delete(p)
        #DBSession.flush()

        self.deleteimages(username, will_redirect=False)
        DBSession.delete(user)
        transaction.commit()
        redirect('/admin/users')
Exemple #5
0
def resource_acl(resource,
                 newauth,
                 user=None,
                 acl=None,
                 notify=False,
                 invalidate=True,
                 action='append'):
    """Create or modify resource acls

    @param resource:  resource (Taggable)
    @param newauth :  an etree of the acl record or None if deleting
    @param user    :  the user (Taggable) of the acl  or None (will be determined from newauth)
    @param acl     :  the acl (TaggableAcl) or None (will be found or created)
    @param notify  :  send an email on state change (boolean)
    @param invalidate: Invalidate caches (boolean)
    @parama delete : Append/modify or Delete record (boolean)

    @return an etree acl record
    """
    log.debug("ACL SET %s", resource)
    user, passwd = match_user(user=user,
                              user_uniq=newauth.get('user'),
                              email=newauth.get('email'))
    if acl is None:
        try:
            DBSession.flush()  # autoflush is off so flush before query
        except sqlalchemy.exc.IntegrityError:
            log.exception("while preparing for query")

        acl = DBSession.query(TaggableAcl).filter_by(taggable_id=resource.id,
                                                     user_id=user.id).first()
        if acl is None:  # Check if newauth is not None or delete is true???
            acl = TaggableAcl()
            acl.taggable_id = resource.id
            acl.user_id = user.id
            acl.action = "read"
            DBSession.add(acl)

    if action == 'delete':
        log.debug("Removing %s from %s  for %s",
                  newauth.get('action', RESOURCE_READ), resource.resource_uniq,
                  user.resource_uniq)
        # http://stackoverflow.com/questions/8306506/deleting-an-object-from-an-sqlalchemy-session-before-its-been-persisted

        if acl in DBSession.new:
            DBSession.expunge(acl)
        else:
            DBSession.delete(acl)
    else:
        log.debug("Changing share on %s for %s action=%s",
                  resource.resource_uniq, user.resource_uniq,
                  newauth.get('action', RESOURCE_READ))
        acl.action = newauth.get('action', RESOURCE_READ)
    #
    # Special actions on sharing  specific resource types
    #
    handler = SHARE_HANDLERS.get(resource.resource_type)
    if handler:
        log.debug("Special share handling with %s", handler)
        handler(resource.resource_uniq, user.resource_uniq, newauth, action)

    # Notify changes if needed
    if notify:
        try:
            notify_user(action, resource, user, passwd)
        except Exception:
            log.exception("While notifying share")

    if invalidate:
        Resource.hier_cache.invalidate_resource(None, user=user.id)

    # Return the new/updated auth element
    return _aclelem(resource, user, acl)
Exemple #6
0
 def deleteimage(self, imageid=None, **kw):
     log.debug("image: %s ", str(imageid))
     image = DBSession.query(Image).filter(Image.id == imageid).first()
     DBSession.delete(image)
     transaction.commit()
     redirect(request.headers.get("Referer", "/"))