Ejemplo n.º 1
0
    def post(self, **kwargs):
        args = login_parser.parse_args()
        username, password = args["username"], args["password"]

        user_obj = User()
        try:
            user = user_obj.get_by_username(username)
            # compare input password with password in db
            if bcrypt.checkpw(password.encode('utf8'),
                              bytes(user.password.encode())):
                login_user(user)

                # if login success save login history
                login_history = LoginHistory(user=user.dbUser)
                login_history.save()
                user_id = str(user.id)
                data = {
                    "success": True,
                    "id": user_id,
                    "role": user.user_role,
                    "next": url_for('bp_index.show')
                }

                return data, 200
            else:
                data = {
                    "success": False,
                    "error": "Wrong username or password"
                }
                return data, 401
        except Exception as exc:
            logger.info("error {}".format(exc))
            data = {"success": False, "error": "login failed"}
            return data, 401
Ejemplo n.º 2
0
    def post(self, **kwargs):
        args = login_parser.parse_args()
        username, password = args["username"], args["password"]

        user_obj = User()
        try:
            user = user_obj.get_by_username(username)
            # compare input password with password in db
            if bcrypt.checkpw(password.encode('utf8'),
                              bytes(user.password.encode())):
                login_user(user)

                # if login success save login history
                login_history = LoginHistory(user=user.dbUser)
                login_history.save()
                user_id = str(user.id)
                data = {
                    "success": True,
                    "id": user_id,
                    "next": url_for('bp_index.show')
                }
                return data, 200
            else:
                data = {
                    "success": False,
                    "error": "Wrong username or password"
                }
                return data, 401
        except Exception as exc:
            logger.info("error {}".format(exc))
            data = {
                "success": False,
                "error": "login failed"
            }
            return data, 401
Ejemplo n.º 3
0
    def post(self, **kwargs):
        args = user_create_parser.parse_args()
        username, password = args["username"], args["password"]
        role, active = args["role"], args["active"]
        balance = args["balance"]
        active = active == "true"
        salt = app.config.get("SALT", b"")
        password = bcrypt.hashpw(password.encode('utf8'), bytes(salt.encode()))
        status = "OK"
        user_id = ""

        try:
            user = User(username,
                        password,
                        is_admin=role == ADMIN,
                        role=role,
                        active=active,
                        balance=balance)
            user.save()
            user_id = user.id
        except Exception as exc:
            logger.error("exc %s", exc)
            status = "FAIL"

        return {"status": status, "id": user_id}, 200
Ejemplo n.º 4
0
    def post(self, **kwargs):
        args = register_parser.parse_args()
        username, password = args["username"], args["password"]
        salt = app.config.get("SALT", b"")
        password = bcrypt.hashpw(password.encode('utf8'), bytes(salt.encode()))

        default_active = not ENABLE_EMAIL_ACTIVE
        try:
            user = User(username, password, active=default_active)
            user_id = user.save()
            user = user.get_by_id(user_id)
            data = {
                "username": user.username,
                "apikey": str(user.id),
                "isActivated": user.active,
                "balance": user.balance,
                "success": True
            }
            return data, 200
        except Exception as exc:
            logger.error("exc %s", exc)
            data = {
                "success": False,
                "error": "register failed"
            }
            return data, 400
Ejemplo n.º 5
0
    def post(self, username):
        args = user_password_parser.parse_args()
        new_password = args["password"]
        curUser = args["curUser"]
        curPassword = args["curPassword"]

        op_log_handler = OperatorLogHandler()
        opName = 'ResetUserPassword'
        opObject = "User"
        operator = "admin"
        opDetails = {}
        opDetails['username'] = username
        cur_time = datetime.datetime.utcnow()

        user_obj = User()
        userCurrent = user_obj.get_by_username(curUser)
        # compare input password with password in db
        if not bcrypt.checkpw(curPassword.encode('utf8'),
                              bytes(userCurrent.dbUser.password.encode())):
            error_msg = "Wrong password"
            op_log_handler.record_operating_log(opDate=cur_time,
                                                opName=opName,
                                                opObject=opObject,
                                                resCode=400,
                                                operator=operator,
                                                errorMsg=error_msg,
                                                opDetails=opDetails)
            return {"error": "Wrong password", "success": False}, 400

        user = user_obj.get_by_username(username)
        if not user:
            error_msg = "No such User"
            op_log_handler.record_operating_log(opDate=cur_time,
                                                opName=opName,
                                                opObject=opObject,
                                                resCode=400,
                                                operator=operator,
                                                errorMsg=error_msg,
                                                opDetails=opDetails)
            return {"error": "No such User", "success": False}, 400
        salt = app.config.get("SALT", b"")
        # reset user's passwordop_log_handler = OperatorLogHandler()
        new_password = bcrypt.hashpw(new_password.encode('utf8'),
                                     bytes(salt.encode()))

        user.update_password(new_password.decode())

        data = {"success": True}

        op_log_handler.record_operating_log(opDate=cur_time,
                                            opName=opName,
                                            opObject=opObject,
                                            resCode=200,
                                            operator=operator,
                                            opDetails=opDetails)
        return data, 200
Ejemplo n.º 6
0
    def post(self, user_id):
        args = user_password_parser.parse_args()
        origin_password, new_password = \
            args["old_password"], args["new_password"]

        op_log_handler = OperatorLogHandler()
        opName = 'ChangePassword'
        opObject = "User"

        opDetails = {}
        cur_time = datetime.datetime.utcnow()

        user_obj = User()
        user = user_obj.get_by_id(user_id)
        operator = user.username

        if not user:
            error_msg = "No such User"
            op_log_handler.record_operating_log(opDate=cur_time,
                                                opName=opName,
                                                opObject=opObject,
                                                resCode=400,
                                                operator=operator,
                                                errorMsg=error_msg,
                                                opDetails=opDetails)
            return {"error": "No such User", "success": False}, 400
        salt = app.config.get("SALT", b"")
        password = bcrypt.hashpw(origin_password.encode('utf8'),
                                 bytes(salt.encode()))
        if not password.decode() == user.dbUser.password:
            error_msg = "Invalid origin password"
            op_log_handler.record_operating_log(opDate=cur_time,
                                                opName=opName,
                                                opObject=opObject,
                                                resCode=400,
                                                operator=operator,
                                                errorMsg=error_msg,
                                                opDetails=opDetails)
            return {"error": "Invalid origin password", "success": False}, 400
        new_password = bcrypt.hashpw(new_password.encode('utf8'),
                                     bytes(salt.encode()))

        user.update_password(new_password.decode())

        data = {"success": True}
        op_log_handler.record_operating_log(opDate=cur_time,
                                            opName=opName,
                                            opObject=opObject,
                                            resCode=200,
                                            operator=operator,
                                            opDetails=opDetails)

        return data, 200
Ejemplo n.º 7
0
    def post(self, **kwargs):

        # add operating log
        cur_time = datetime.datetime.utcnow()
        opName = 'CreateUser'
        opObject = "User"
        operator = "admin"
        opDetails = {}
        op_log_handler = OperatorLogHandler()

        args = user_create_parser.parse_args()
        username, password = args["username"], args["password"]
        opDetails['username'] = username
        role, active = args["role"], args["active"]
        balance = args["balance"]
        active = active == "true"
        salt = app.config.get("SALT", b"")
        password = bcrypt.hashpw(password.encode('utf8'), bytes(salt.encode()))
        status = "OK"
        user_id = ""

        try:
            user = User(username,
                        password,
                        is_admin=role == ADMIN,
                        role=role,
                        active=active,
                        balance=balance)
            user.save()
            user_id = user.id

            op_log_handler.record_operating_log(opDate=cur_time,
                                                opName=opName,
                                                opObject=opObject,
                                                resCode=200,
                                                operator=operator,
                                                opDetails=opDetails)

        except Exception as exc:
            logger.error("exc %s", exc)
            error_msg = "Fail to create user"
            status = "FAIL"
            op_log_handler.record_operating_log(opDate=cur_time,
                                                opName=opName,
                                                opObject=opObject,
                                                resCode=500,
                                                operator=operator,
                                                errorMsg=error_msg,
                                                opDetails=opDetails)

        return {"status": status, "id": user_id}, 200
Ejemplo n.º 8
0
    def get(self, user_id):
        user_obj = User()
        user = user_obj.get_by_id(user_id)
        if not user:
            return {"error": "No such User", "success": False}, 400

        data = {
            "username": user.username,
            "apikey": str(user.id),
            "isActivated": user.active,
            "balance": user.balance,
            "success": True
        }

        return data, 200
Ejemplo n.º 9
0
def main():
    HOME_DIRECTORY = os.path.expanduser("~")
    user = User(os.path.join(HOME_DIRECTORY, ".aws", "credentials"))
    eth = Eth(os.path.join(HOME_DIRECTORY, ".aws", "eth_credentials"))

    backupProgram = BackupProgram(user, eth)
    backupProgram.run()
Ejemplo n.º 10
0
    def post(self, user_id):
        args = user_password_parser.parse_args()
        new_password = args["new_password"]

        user_obj = User()
        user = user_obj.get_by_id(user_id)
        if not user:
            return {"error": "No such User", "success": False}, 400
        salt = app.config.get("SALT", b"")
        new_password = bcrypt.hashpw(new_password.encode('utf8'),
                                     bytes(salt.encode()))

        user.update_password(new_password.decode())

        data = {"success": True}

        return data, 200
Ejemplo n.º 11
0
 def put(self, user_id):
     """
     Update user profile
     :param user_id: user id of User to update profile
     :return: api response, status code
     """
     args = update_profile_parser.parse_args()
     name, email_addr = args["name"], args["email"]
     bio, url = args["bio"], args["url"]
     location = args["location"]
     user_obj = User()
     user = user_obj.get_by_id(user_id)
     if not user:
         return {"error": "No such User", "success": False}, 400
     else:
         user.update_profile(name=name, email=email_addr,
                             bio=bio, url=url, location=location)
         return {"success": True}, 200
Ejemplo n.º 12
0
    def post(self, user_id):
        args = user_password_parser.parse_args()
        new_password = args["new_password"]

        user_obj = User()
        user = user_obj.get_by_id(user_id)
        if not user:
            return {"error": "No such User", "success": False}, 400
        salt = app.config.get("SALT", b"")
        new_password = bcrypt.hashpw(new_password.encode('utf8'),
                                     bytes(salt.encode()))

        user.update_password(new_password.decode())

        data = {
            "success": True
        }

        return data, 200
Ejemplo n.º 13
0
 def put(self, user_id):
     """
     Update user profile
     :param user_id: user id of User to update profile
     :return: api response, status code
     """
     args = update_profile_parser.parse_args()
     name, email_addr = args["name"], args["email"]
     bio, url = args["bio"], args["url"]
     location = args["location"]
     user_obj = User()
     user = user_obj.get_by_id(user_id)
     if not user:
         return {"error": "No such User", "success": False}, 400
     else:
         user.update_profile(name=name,
                             email=email_addr,
                             bio=bio,
                             url=url,
                             location=location)
         return {"success": True}, 200
Ejemplo n.º 14
0
    def post(self, **kwargs):
        args = user_create_parser.parse_args()
        username, password = args["username"], args["password"]
        role, active = args["role"], args["active"]
        balance = args["balance"]
        active = active == "true"
        salt = app.config.get("SALT", b"")
        password = bcrypt.hashpw(password.encode('utf8'), bytes(salt.encode()))
        status = "OK"
        user_id = ""

        try:
            user = User(username, password, is_admin=role == ADMIN,
                        role=role, active=active, balance=balance)
            user.save()
            user_id = user.id
        except Exception as exc:
            logger.error("exc %s", exc)
            status = "FAIL"

        return {"status": status, "id": user_id}, 200
Ejemplo n.º 15
0
    def post(self):
        args = register_parser.parse_args()
        mobile = args.get('mobile')
        email = args.get('email')

        # 验证手机格式
        if not re.match('^1[3456789]\d{9}$', mobile):
            return {'stat': '400', 'msg': '手机号格式错误'}
        if not re.match(
                '^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$',
                email):
            return {'stat': '400', 'msg': '邮箱格式错误'}

        # 验证手机是否存在
        try:
            user = User().get_by_mobile(mobile)
            if user:
                return {'stat': '400', 'msg': '该手机号已提交申请,请耐心等待审核!'}
        except Exception as e:
            logger.error(e)
            return {'stat': '400', 'msg': '读取数据库错误'}

        # 存储用户
        args['password'] = mobile[-6:]
        try:
            user = User(**args, role=1)
            user.save()
        except Exception as e:
            logger.error(e)
            return {'stat': '400', 'msg': '数据库存储错误'}

        data = {"stat": 200, 'msg': '申请成功'}
        return data
Ejemplo n.º 16
0
    def post(self, **kwargs):
        args = register_parser.parse_args()
        username, password = args["username"], args["password"]
        salt = app.config.get("SALT", b"")
        password = bcrypt.hashpw(password.encode('utf8'), bytes(salt.encode()))

        try:
            user = User(username, password)
            user_id = user.save()
            user = user.get_by_id(user_id)
            data = {
                "username": user.username,
                "apikey": str(user.id),
                "isActivated": user.active,
                "balance": user.balance,
                "success": True
            }
            return data, 200
        except Exception as exc:
            logger.error("exc %s", exc)
            data = {"success": False, "error": "register failed"}
            return data, 400
Ejemplo n.º 17
0
    def get(self):
        """
        search user with username
        If user is existed return user info
        else return user_exists False
        :return:
        """
        args = user_search_parser.parse_args()
        username = args["username"]
        user_obj = User()
        user = user_obj.get_by_username(username)
        if not user:
            return {"user_exists": False}, 200

        data = {
            "username": user.username,
            "apikey": str(user.id),
            "isActivated": user.active,
            "balance": user.balance,
            "user_exists": True
        }

        return data, 200
Ejemplo n.º 18
0
    def post(self):
        args = user_password_parser.parse_args()
        origin_password, new_password, new_password2 = \
            args["origin_password"], args["new_password"], args["new_password2"]
        if new_password != new_password2:
            return {'stat': -1, 'msg': '两次密码输入不一致'}
        user_obj = User()
        user = user_obj.get_by_id(current_identity.id)
        if not user:
            return {"msg": "用户不存在", "stat": -1}, 400
        if user.check_password(user.dbUser.password, origin_password):
            return {"msg": "原始密码错误", "stat": -1}, 400

        password = user.set_password(new_password)
        user.update_password(password)

        data = {
            'id': user.id,
            "stat": -1,
            'msg': '密码修改成功'
        }

        return data, 200
Ejemplo n.º 19
0
    def get(self, user_id):
        """
        Get user profile information
        :param user_id: user id of User to query
        :return: profile data, status code
        """
        user_obj = User()
        user = user_obj.get_by_id(user_id)
        if not user:
            return {"error": "No such User", "success": False}, 400

        data = {
            "result": {
                "username": user.username,
                "name": user.profile.name if user.profile else "",
                "email": user.profile.email if user.profile else "",
                "bio": user.profile.bio if user.profile else "",
                "url": user.profile.url if user.profile else "",
                "location": user.profile.location if user.profile else "",
            },
            "success": True
        }

        return data, 200
Ejemplo n.º 20
0
    def get(self, user_id):
        """
        Get user profile information
        :param user_id: user id of User to query
        :return: profile data, status code
        """
        user_obj = User()
        user = user_obj.get_by_id(user_id)
        if not user:
            return {"error": "No such User", "success": False}, 400

        data = {
            "result": {
                "username": user.username,
                "name": user.profile.name if user.profile else "",
                "email": user.profile.email if user.profile else "",
                "bio": user.profile.bio if user.profile else "",
                "url": user.profile.url if user.profile else "",
                "location": user.profile.location if user.profile else "",
            },
            "success": True
        }

        return data, 200
Ejemplo n.º 21
0
    def put(self):
        args = user_update_parser.parse_args()
        password = args.get('password')
        password2 = args.get('password2')
        user_id = args.get('user_id')
        apply_stat = args.get('apply_stat')

        if password and password2:
            if password2 == password:
                hash_password = User.set_password(password)
                args['password'] = hash_password
                args['password2'] = None
            else:
                data = {'stat': 400, 'msg': '密码不一致'}
                return data
        elif password or password2:
            data = {'stat': 400, 'msg': '缺少参数'}
            return data

        if apply_stat and int(apply_stat) == 1:
            try:
                user = UserModel.objects.get(id=user_id)
            except Exception as e:
                logger.error(e)
                return {'msg': '用户不存在'}
            mobile = user.mobile
            # salt = ''.join(random.sample(string.ascii_letters + string.digits, 8))
            # args['password'] = User.set_password(salt)
            send_sms(mobile, str(mobile)[-6:])

        args['user_id'] = None

        update_fields = {arg: args[arg] for arg in args if args.get(arg)}

        try:
            UserModel.objects(id=user_id).update(**update_fields)
        except Exception as exc:
            logger.warning(exc)
            return {'stat': 400, 'msg': '更新数据库失败'}
        data = {'msg': '更新成功'}
        return data
Ejemplo n.º 22
0
    def post(self):
        args = login_parser.parse_args()
        mobile, password = args["mobile"], args["password"]
        if not re.match('^1[3456789]\d{9}$', mobile):
            return {'stat': '400', 'msg': '手机号格式错误'}
        user_obj = User()
        try:
            user = user_obj.get_by_mobile(mobile)
            if not user:
                return {'stat': '400', 'msg': '用户不存在'}
            logger.info('stat:{}'.format(user.apply_stat))
            # compare input password with password in db
            # if user.apply_stat == 0:
            #     return {'stat': '-1', 'msg': '正在审核中'}, 400
            # elif user.apply_stat == -1:
            #     return {'stat': '-1', 'msg': '审核未通过'}, 400
            #
            if int(user.dbUser.apply_stat) == 0:
                return {'stat': '400', 'msg': '审核中'}

            if str(user.dbUser.apply_stat) == '-1':
                return {'stat': '400', 'msg': '审核未通过'}

            if user.check_password(user.password, password) and user.active:
                # login_user(user)

                # if login success save login history
                # login_history = LoginHistory(user=user.dbUser)
                # login_history.save()
                user_id = str(user.id)
                user_info = {
                    'id': user_id,
                    'username': user.username,
                    'mobile': user.mobile,
                    'isAdmin': user.isAdmin,
                    'role': user.role
                }

                token = jwt_encoding(user_info)
                user_orgs_id = user.dbUser.orgs
                cluster_id = ''
                channel_id = ''
                org_id = ''
                if user_orgs_id:
                    logger.info('user_orgs_id:{}'.format(user_orgs_id))
                    org = OrgModel.objects.get(id=user_orgs_id[0])
                    cluster = org.cluster
                    channel = Channel.objects.get(cluster=cluster)
                    org_id = org.alias
                    cluster_id = str(cluster.id)
                    # channel_id = str(channel.id)
                    channel_id = channel.alias

                result = {
                    'id': user_id,
                    'role': user.dbUser.role,
                    'username': user.dbUser.username,
                    'mobile': user.dbUser.mobile,
                    'company': user.dbUser.company,
                    'department': user.dbUser.department,
                    'active': user.dbUser.active,
                    'apply_stat': user.dbUser.apply_stat,
                    'isAdmin': user.dbUser.isAdmin,
                    'org_id': org_id,
                    'cluster_id': cluster_id,
                    'channel_id': channel_id
                }

                data = {
                    "stat": 200,
                    'data': {
                        'token': token,
                        'user_info': result
                    },
                    'msg': '登录成功'
                }

                return data
            else:
                data = {"stat": 401, "msg": "手机号或密码错误"}
                return data
        except Exception as exc:
            logger.info("error {}".format(exc))
            data = {"stat": 401, "msg": "登录失败"}
            return data
Ejemplo n.º 23
0
    def post(self):
        user = utils._get_user()
        user_id = str(user.dbUser.id)
        args = user_create_parser.parse_args()
        mobile = args.get('mobile')
        email = args.get('email')
        password = args.get('password')
        org_id = args.get('org_id')
        channel_id = args.get('channel_id')
        cluster_id = args.get('cluster_id')
        is_admin = args.get('is_admin', False)

        if mobile:
            if not re.match('^1[3456789]\d{9}$', mobile):
                return {'stat': '400', 'msg': '手机号格式错误'}
        if email:
            if not re.match('^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$', email):
                return {'stat': '400', 'msg': '邮箱格式错误'}
        try:
            user = UserModel.objects.get(mobile=mobile)
            if user:
                return {'stat': "400", 'msg': "手机号已存在"}
        except Exception as exc:
            logger.error(exc)
            pass
        try:
            cluster = ClusterModel.objects.get(id=cluster_id)
            org = OrgModel.objects.get(cluster=cluster, org_type='peer',alias=org_id)
        except Exception as e:
            logger.error(e)
            return {'msg': '组织不存在', 'stat': 400}

        try:
            ChannelModel.objects.get(cluster=cluster, alias=channel_id)
        except Exception as e:
            logger.error(e)
            return {'msg': '通道不存在', 'stat': 400}

        args['password'] = User.set_password(password)
        # args['orgs'] = [org_id]
        args.pop('org_id')
        args.pop('channel_id')
        args.pop('is_admin')
        args.pop('cluster_id')
        if int(is_admin) == 1:
            role = 2
        else:
            role = 3

        try:
            new_user = UserModel(**args, orgs=[org.id], apply_stat=1, active=True, role=role)
            new_user.save()
        except Exception as exc:
            logger.error("exc %s", exc)
            return {'stat': "-1", 'msg': "存储数据库失败"}

        body = {
            "BlockchainSign": str(org.cluster.id),
            "ChannelId": channel_id,
            "OrgId": str(org_id),
            "UserId": str(new_user.id)
        }
        logger.info('add user info:{}'.format(body))
        if not send_new_user_info(str(user_id), body=body):
            new_user.delete()
            return {'stat': 400, 'msg': '添加用户失败'}

        org.update(add_to_set__users=[new_user])

        data = {
            'stat': 200,
            'msg': '成功'
        }

        return data
Ejemplo n.º 24
0
    def get(self):
        # user = utils._get_user()
        args = user_list_parser.parse_args()
        page = args['pageNo']
        per_page = args['pageSize']
        mobile = args.get('mobile')
        if mobile:
            user = User().get_by_mobile(mobile)
            # print(user.id)
            user_info = {
                'user_id': str(user.id),
                'username': user.username,
                'mobile': mobile
            }
            data = {'stat': 200, 'data': user_info, 'msg': '成功'}
            return data
        # sort_columns = 'timestamp'
        # sort_columns = sort_columns.split(" ")
        # sort_str = ''
        # if len(sort_columns) > 1:
        #     sort_type = sort_columns[1]
        #     sort_field = sort_columns[0]
        #     if sort_type == "desc":
        #         sort_str = "-%s" % sort_field
        #     else:
        #         sort_str = sort_field
        offset = (page - 1) * per_page

        user_count = UserModel.objects.all().count() - 1
        users = \
            UserModel.objects(role__ne=0).skip(offset).limit(per_page).order_by('-timestamp')

        users_list = []
        sequence_num = (page * per_page) - (per_page - 1)
        for user in users:
            user_info = {
                'id': sequence_num,
                "user_id": str(user.id),
                "username": user.username,
                "mobile": user.mobile,
                "company": user.company,
                "department": user.department,
                'email': user.email,
                "reason": user.reason,
                "isAdmin": user.isAdmin,
                "apply_stat": user.apply_stat,
                'role': user.role,
                "active": user.active,
                "timestamp": user.timestamp.strftime("%Y-%m-%d %H:%M:%S"),
            }
            users_list.append(user_info)
            sequence_num += 1

        result = {
            "users": users_list,
            "totalCount": user_count,
            "pageSize": per_page,
            "pageNo": page
        }
        data = {'stat': 200, 'data': result, 'msg': '成功'}

        return data