Example #1
0
def get_detail_by_record(record_id=None):
    record = db.session.query(OperationRecord).filter(
        OperationRecord.record_id == record_id).first()
    if record is None:
        abort(404, "record is not found")
    username = UserCache.get(record.uid).nickname \
        if UserCache.get(record.uid).nickname \
        else UserCache.get(record.uid).username
    timestamp = record.timestamp.strftime("%Y-%m-%d %H:%M:%S")
    attr_history = db.session.query(CIAttributeHistory).filter(
        CIAttributeHistory.record_id == record_id).all()
    rel_history = db.session.query(CIRelationHistory).filter(
        CIRelationHistory.record_id == record_id).all()
    attr_dict, rel_dict = dict(), {"add": [], "delete": []}
    for attr_h in attr_history:
        attr_dict[CIAttributeCache.get(attr_h.attr_id).attr_alias] = {
            "old": attr_h.old,
            "new": attr_h.new,
            "operate_type": attr_h.operate_type
        }
    manager = CIManager()
    for rel_h in rel_history:
        _, first = manager.get_ci_by_id(rel_h.first_ci_id)
        _, second = manager.get_ci_by_id(rel_h.second_ci_id)
        rel_dict[rel_h.operate_type].append(
            (first, rel_h.relation_type, second))

    return jsonify(username=username,
                   timestamp=timestamp,
                   attr_history=attr_dict,
                   rel_history=rel_dict)
Example #2
0
 def delete_user(self, uid):
     user = UserCache.get(uid)
     if user is None:
         return abort(400, "the user[{0}] is not existed".format(uid))
     db.session.query(UserRole).filter(UserRole.uid == uid).delete()
     db.session.delete(user)
     try:
         db.session.commit()
     except Exception as e:
         db.session.rollback()
         current_app.logger.error("delete user error, {0}".format(str(e)))
         return abort(500, "delete user error, {0}".format(str(e)))
     return True, uid
Example #3
0
 def reset_key(self, uid):
     user = UserCache.get(uid)
     if user is None:
         return abort(400, "the user[{0}] is not existed".format(uid))
     key, secret = self._generate_key()
     user.key = key
     user.secret = secret
     db.session.add(user)
     try:
         db.session.commit()
     except Exception as e:
         db.session.rollback()
         current_app.logger.error("reset key is error, {0}".format(str(e)))
         return abort(500, "reset key is error, {0}".format(str(e)))
     return True, user
Example #4
0
    def wrapper(*args, **kwargs):
        if isinstance(getattr(g, 'user', None), User):
            identity_changed.send(current_app._get_current_object(),
                                  identity=Identity(g.user.uid))
            return func(*args, **kwargs)
        ip = request.remote_addr
        if request.data:
            request_args = dict()
            _args = request.data.split("&")
            for arg in _args:
                if arg:
                    request_args[arg.split("=")[0]] = \
                        urllib.unquote(arg.split("=")[1])
        else:
            request_args = request.values

        key = request_args.get('_key')
        secret = request_args.get('_secret')
        if not key and not secret and \
                ip.strip() in current_app.config.get("WHITE_LIST"):
            ip = ip.strip()
            user = UserCache.get(ip)
            if user:
                identity_changed.send(current_app._get_current_object(),
                                      identity=Identity(user.uid))
                return func(*args, **kwargs)
            else:
                identity_changed.send(current_app._get_current_object(),
                                      identity=AnonymousIdentity())
                return abort(400, "invalid _key and _secret")

        path = request.path

        keys = sorted(request_args.keys())
        req_args = [
            request_args[k] for k in keys if str(k) not in ("_key", "_secret")
        ]
        current_app.logger.debug('args is %s' % req_args)
        user, authenticated = User.query.authenticate_with_key(
            key, secret, req_args, path)
        if user and authenticated:
            identity_changed.send(current_app._get_current_object(),
                                  identity=Identity(user.get("uid")))
            return func(*args, **kwargs)
        else:
            identity_changed.send(current_app._get_current_object(),
                                  identity=AnonymousIdentity())
            return abort(400, "invalid _key and _secret")
Example #5
0
 def update_user(self, uid, **kwargs):
     user = UserCache.get(uid)
     if user is None:
         return abort(400, "the user[{0}] is not existed".format(uid))
     user.username = kwargs.get("username", "") \
         if kwargs.get("username") else user.username
     user.nickname = kwargs.get("nickname") \
         if kwargs.get("nickname") else user.nickname
     user.department = kwargs.get("department") \
         if kwargs.get("department") else user.department
     user.catalog = kwargs.get("catalog") \
         if kwargs.get("catalog") else user.catalog
     user.email = kwargs.get("email") \
         if kwargs.get("email") else user.email
     user.mobile = kwargs.get("mobile") \
         if kwargs.get("mobile") else user.mobile
     db.session.add(user)
     try:
         db.session.commit()
     except Exception as e:
         db.session.rollback()
         current_app.logger.error("create user is error {0}".format(str(e)))
         return abort(500, "create user is error, {0}".format(str(e)))
     return True, user
Example #6
0
    def create_user(self, **kwargs):
        username = kwargs.get("username")
        if username:
            user = UserCache.get(username)
            if user is not None:
                user, authenticated = self.validate(username,
                                                    kwargs.get("password"))
                if authenticated:
                    return user
                else:
                    return abort(401, "authenticate validate failed")
        else:
            return abort(400, "argument username is required")
        user = User()
        email = kwargs.get("email", "")
        if not email:
            return abort(400, "argument email is required")
        user.email = email
        user.password = kwargs.get("password")
        user.username = kwargs.get("username", "")
        user.nickname = kwargs.get("nickname") if kwargs.get("nickname") \
            else kwargs.get("username", "")
        key, secret = self._generate_key()
        user.key = key
        user.secret = secret
        user.date_joined = datetime.datetime.now()
        user.block = 0

        db.session.add(user)
        try:
            db.session.commit()
        except Exception as e:
            db.session.rollback()
            current_app.logger.error("create user is error {0}".format(str(e)))
            return abort(500, "create user is error, {0}".format(str(e)))
        return user
Example #7
0
 def get_user_by_uid(self, uid):
     user = UserCache.get(uid)
     return user
Example #8
0
def get_record():
    page = get_page(request.values.get("page", 1))
    _start = request.values.get("start")
    _end = request.values.get("end")
    username = request.values.get("username", "")
    per_page_cnt = current_app.config.get("DEFAULT_PAGE_COUNT")
    start, end = None, None
    if _start:
        try:
            start = datetime.datetime.strptime(_start, '%Y-%m-%d %H:%M:%S')
        except ValueError:
            abort(400, 'incorrect start date time')
    if _end:
        try:
            end = datetime.datetime.strptime(_end, '%Y-%m-%d %H:%M:%S')
        except ValueError:
            abort(400, 'incorrect end date time')
    records = db.session.query(OperationRecord)
    numfound = db.session.query(db.func.count(OperationRecord.record_id))
    if start:
        records = records.filter(OperationRecord.timestamp >= start)
        numfound = numfound.filter(OperationRecord.timestamp >= start)
    if end:
        records = records.filter(OperationRecord.timestamp <= end)
        numfound = records.filter(OperationRecord.timestamp <= end)
    if username:
        user = UserCache.get(username)
        if user:
            records = records.filter(OperationRecord.uid == user.uid)
        else:
            return jsonify(numfound=0,
                           records=[],
                           page=1,
                           total=0,
                           start=_start,
                           end=_end,
                           username=username)
    records = records.order_by(-OperationRecord.record_id).offset(
        per_page_cnt * (page - 1)).limit(per_page_cnt).all()
    total = len(records)
    numfound = numfound.first()[0]
    res = []
    for record in records:
        _res = row2dict(record)
        _res["user"] = UserCache.get(_res.get("uid")).nickname \
            if UserCache.get(_res.get("uid")).nickname \
            else UserCache.get(_res.get("uid")).username
        attr_history = db.session.query(CIAttributeHistory.attr_id).filter(
            CIAttributeHistory.record_id == _res.get("record_id")).all()
        _res["attr_history"] = [
            CIAttributeCache.get(h.attr_id).attr_alias for h in attr_history
        ]
        rel_history = db.session.query(CIRelationHistory.operate_type).filter(
            CIRelationHistory.record_id == _res.get("record_id")).all()
        rel_statis = {}
        for rel in rel_history:
            if rel.operate_type not in rel_statis:
                rel_statis[rel.operate_type] = 1
            else:
                rel_statis[rel.res.operate_type] += 1
        _res["rel_history"] = rel_statis
        res.append(_res)

    return jsonify(numfound=numfound,
                   records=res,
                   page=page,
                   total=total,
                   start=_start,
                   end=_end,
                   username=username)