コード例 #1
0
ファイル: ParamFormat.py プロジェクト: zhmsg/dms
class ParamFormatManager:
    def __init__(self):
        self.db = DB()
        self.t_param_format = "param_format"

    def new_param_format(self, user_name, param, param_type, **kwargs):
        cols = ["min_len", "max_len", "not_allow", "match_str", "param_desc"]
        now_time = int(time())
        sql_args = dict(
            add_user=user_name,
            param=param,
            param_type=param_type,
            add_time=now_time,
            update_time=now_time,
            update_user=user_name,
        )
        for col_item in cols:
            if col_item in kwargs:
                sql_args[col_item] = kwargs[col_item]
        result = self.db.execute_insert(self.t_param_format, args=sql_args, ignore=True)
        return True, sql_args

    def update_param_format(self, user_name, param, **kwargs):
        cols = ["param_type", "min_len", "max_len", "not_allow", "match_str", "param_desc"]
        sql_args = dict(update_user=user_name, update_time=int(time()))
        for col_item in cols:
            if col_item in kwargs:
                sql_args[col_item] = kwargs[col_item]
        result = self.db.execute_update(self.t_param_format, update_value=sql_args, where_value={"param": param})
        sql_args["param"] = param
        return True, sql_args

    def select_param_format(self):
        cols = ["param", "param_type", "min_len", "max_len", "not_allow", "match_str", "param_desc"]
        self.db.execute_select(self.t_param_format, cols=cols)
        db_r = self.db.fetchall()
        params_info = []
        for item in db_r:
            param_item = {}
            for i in range(len(cols)):
                param_item[cols[i]] = item[i]
            params_info.append(param_item)
        return True, params_info
コード例 #2
0
ファイル: Task.py プロジェクト: zhmsg/dms
class TaskManager(object):

    def __init__(self, task_type):
        self.db = DB()
        self.register_task = "register_task"
        self.scheduler_status = "task_scheduler_status"
        self.task_type = task_type

    def register_new_task(self, task_no, user_name, reason, reason_desc):
        status_info = "%s1" % int(time())
        args = dict(task_no=task_no, task_type=self.task_type, user_name=user_name, reason=reason,
                    reason_desc=reason_desc, status_info=status_info)
        result = self.db.execute_insert(self.register_task, args=args, ignore=True)
        if result <= 0:
            return False, result
        return True, args

    def update_register_task(self, task_no, run_result=True):
        status_info = "|%s%s" % (int(time()), 1 if run_result is True else 0)
        update_sql = "UPDATE %s SET status_info=CONCAT(status_info, '%s') WHERE task_no=%s AND task_type=%s;" \
                     % (self.register_task, status_info, task_no, self.task_type)
        self.db.execute(update_sql)
        return True, "success"

    def select_register_task(self, task_no, user_name=None):
        cols = ["task_no", "task_type", "user_name", "reason", "reason_desc", "status_info"]
        if user_name is None:
            zero = 1
        else:
            zero = 0
        select_sql = "SELECT %s FROM %s WHERE task_no>=%s AND task_type=%s AND (user_name='%s' OR %s) " \
                     "ORDER BY task_no DESC;" \
                     % (",".join(cols), self.register_task, task_no, self.task_type, user_name, zero)
        self.db.execute(select_sql)
        db_r = self.db.fetchall()
        task_list = []
        for item in db_r:
            task_info = {}
            for i in range(len(cols)):
                task_info[cols[i]] = item[i]
            task_list.append(task_info)
        return True, task_list

    def _new_task_status(self, task_status, user_name, reason_desc):
        update_time = int(time())
        args = dict(task_type=self.task_type, task_status=task_status, user_name=user_name, reason_desc=reason_desc,
                    update_time=update_time)
        result = self.db.execute_insert(self.scheduler_status, args=args)
        return True, result

    def update_scheduler_status(self, task_status, user_name, reason_desc):
        update_time = int(time())
        update_value = dict(task_status="%s" % task_status, user_name=user_name, reason_desc=reason_desc,
                            update_time=update_time)
        result = self.db.execute_update(self.scheduler_status, update_value, {"task_type": self.task_type})
        if result <=0:
            return self._new_task_status(task_status, user_name, reason_desc)
        return True, result

    def select_scheduler_status(self):
        cols = ["task_status", "user_name", "reason_desc", "update_time"]
        result = self.db.execute_select(self.scheduler_status, {"task_type": self.task_type}, cols)
        info = {}
        if result <= 0:
            for col in cols:
                info[col] = None
            return True, info
        db_r = self.db.fetchone()
        for i in range(len(cols)):
            info[cols[i]] = db_r[i]
        return True, info
コード例 #3
0
class ProjectManager:
    def __init__(self):
        self.db = DB()
        self.t_project = "project_info"
        self.t_user_project = "user_project"

    def insert_user_project(self, project_no, user_name, project_role):
        join_time = int(time())
        kwargs = {
            "user_name": user_name,
            "project_no": project_no,
            "project_role": project_role,
            "join_time": join_time
        }
        result = self.db.execute_insert(self.t_user_project,
                                        kwargs=kwargs,
                                        ignore=True)
        return result

    def update_user_project(self, project_no, user_name, project_role):
        result = self.db.execute_update(
            self.t_user_project,
            update_value={"project_role": project_role},
            where_value={
                "user_name": user_name,
                "project_no": project_no
            })
        return result

    def new_project_info(self, user_name, project_name, project_desc):
        project_no = uuid1().hex
        result = self.insert_user_project(project_no, user_name, 0)
        if result <= 0:
            return False, "用户仅允许参加一个项目"
        create_time = int(time())
        p_info = {
            "project_no": project_no,
            "project_name": project_name,
            "project_desc": project_desc,
            "create_time": create_time
        }
        self.db.execute_insert(self.t_project, kwargs=p_info)
        return True, p_info

    def update_project_info(self, project_no, project_name, project_desc):
        self.db.execute_update(self.t_project,
                               update_value={
                                   "project_name": project_name,
                                   "project_desc": project_desc
                               },
                               where_value={"project_no": project_no})
        return True, "success"

    def get_project(self, user_name):
        cols = ["project_no", "project_role", "join_time"]
        join_ps = self.db.execute_select(self.t_user_project,
                                         where_value={"user_name": user_name},
                                         cols=cols,
                                         package=True)
        if len(join_ps) <= 0:
            return None
        my_project = join_ps[0]
        cols = ["project_name", "project_desc", "create_time"]
        p_info = self.db.execute_select(
            self.t_project,
            where_value={"project_no": my_project["project_no"]},
            cols=cols,
            package=True)
        my_project.update(p_info[0])
        return my_project

    def get_project_user(self, project_no):
        cols = ["user_name", "project_role", "join_time"]
        members = self.db.execute_select(
            self.t_user_project,
            where_value={"project_no": project_no},
            cols=cols,
            package=True)
        return True, members

    def insert_project_member(self, project_no, member_no, add_user):
        kwargs = dict(project_no=project_no,
                      member_no=member_no,
                      add_user=add_user,
                      add_time=int(time()))
        self.db.execute_insert("project_members", kwargs=kwargs)
        return True, "添加成功"
コード例 #4
0
class UserManager:
    def __init__(self):
        self.db = DB()
        self.user = "******"
        self._salt_password = "******"
        self.default_password = "******"
        self._data_role_desc = {
            "module_desc": u"数据传输",
            "role_list": {
                "market": {
                    "role_desc": u"市场",
                    "role_value": 1
                },
                "upload": {
                    "role_desc": u"上传",
                    "role_value": 2
                },
                "calc": {
                    "role_desc": u"计算",
                    "role_value": 4
                }
            }
        }
        self._api_role_desc = {
            "module_desc": u"API文档",
            "role_list": {
                "api_look": {
                    "role_desc": u"查看",
                    "role_value": 8
                },
                "api_new": {
                    "role_desc": u"新建",
                    "role_value": 16
                },
                "api_module_new": {
                    "role_desc": u"新建模块",
                    "role_value": 8192
                }
            }
        }
        self._table_role_desc = {
            "module_desc": u"数据表描述",
            "role_list": {
                "table_look": {
                    "role_desc": u"查看",
                    "role_value": 32
                }
            }
        }
        self._right_role_desc = {
            "module_desc": u"权限列表",
            "role_list": {
                "right_look": {
                    "role_desc": u"查看",
                    "role_value": 64
                },
                "right_new": {
                    "role_desc": u"新建",
                    "role_value": 16384
                }
            }
        }
        self._user_role_desc = {
            "module_desc": u"操作用户",
            "role_list": {
                "user_new": {
                    "role_desc": u"新建",
                    "role_value": 128
                }
            }
        }
        self._bug_role_desc = {
            "module_desc": u"BUG操作",
            "role_list": {
                "bug_look": {
                    "role_desc": u"查看",
                    "role_value": 256
                },
                "bug_new": {
                    "role_desc": u"新建",
                    "role_value": 512
                },
                "bug_link": {
                    "role_desc": u"被关联",
                    "role_value": 1024
                },
                "bug_cancel": {
                    "role_desc": u"取消",
                    "role_value": 2048
                },
                "bug_del": {
                    "role_desc": u"删除",
                    "role_value": 4096
                }
            }
        }
        self._status_code_role_desc = {
            "module_desc": u"API状态码",
            "role_list": {
                "status_code_look": {
                    "role_desc": u"查看",
                    "role_value": 32768
                },
                "status_code_new": {
                    "role_desc": u"新建",
                    "role_value": 65536
                },
                "status_code_del": {
                    "role_desc": u"删除",
                    "role_value": 131072
                },
                "status_code_module": {
                    "role_desc": u"新建模块",
                    "role_value": 524288
                }
            }
        }
        self._log_role_desc = {
            "module_desc": u"晶云平台日志",
            "role_list": {
                "log_look": {
                    "role_desc": u"查看",
                    "role_value": 262144
                },
                "log_receive": {
                    "role_desc": u"接收",
                    "role_value": 1048576
                }
            }
        }
        self._release_role_desc = {
            "module_desc": u"重新发布环境",
            "role_list": {
                "release_ih_N": {
                    "role_desc": u"ih普通",
                    "role_value": 2097152
                },
                "release_ih_V": {
                    "role_desc": u"ihVIP",
                    "role_value": 4194304
                },
                "release_ytj_N": {
                    "role_desc": u"ytj普通",
                    "role_value": 8388608
                }
            }
        }
        self._param_role_desc = {
            "module_desc": u"晶云参数",
            "role_list": {
                "param_look": {
                    "role_desc": u"查看",
                    "role_value": 16777216
                },
                "param_new": {
                    "role_desc": u"新建",
                    "role_value": 33554432
                },
                "param_update": {
                    "role_desc": u"更新",
                    "role_value": 67108864
                },
                "param_del": {
                    "role_desc": u"删除",
                    "role_value": 134217728
                }
            }
        }
        self.role_desc = {
            "data": self._data_role_desc,
            "api": self._api_role_desc,
            "table": self._table_role_desc,
            "right": self._right_role_desc,
            "user": self._user_role_desc,
            "bug": self._bug_role_desc,
            "status_code": self._status_code_role_desc,
            "log": self._log_role_desc,
            "release": self._release_role_desc,
            "param": self._param_role_desc
        }
        self.__init_role__()

    def __init_role__(self):
        self.role_value = {}
        for key, role_module in self.role_desc.items():
            for role, value in role_module["role_list"].items():
                self.role_value[role] = value["role_value"]

    def _md5_hash_password(self, account, password):
        md5_password = _md5_hash(account + password + account)
        return (md5_password + self._salt_password).upper()

    def _password_check(self, password, db_password, account):
        if len(password) <= 20:
            if len(db_password) == 66:
                if check_password_hash(
                        db_password, self._md5_hash_password(
                            account, password)) is True:
                    return True
        return False

    def insert_user(self, user_name, password, tel=None):
        en_password = generate_password_hash(
            self._md5_hash_password(user_name, password))
        result = self.db.execute_insert(self.user,
                                        kwargs={
                                            "user_name": user_name,
                                            "password": en_password,
                                            "tel": tel
                                        })
        return result

    def check(self, user_name, password):
        cols = ["user_name", "nick_name", "password", "tel", "role"]
        result = self.db.execute_select(self.user,
                                        where_value={"user_name": user_name},
                                        cols=cols)
        if result <= 0:
            return False, "账户不存在"
        user_name, nick_name, db_password, tel, role = self.db.fetchone()
        if self._password_check(password, db_password, user_name) is False:
            return False, "密码不正确"
        u_info = {
            "user_name": user_name,
            "nick_name": nick_name,
            "tel": tel,
            "role": role
        }
        return True, u_info

    def check_vip(self, user_name):
        if user_name != "system":
            return False, 0
        role = self.role_value["param_look"]
        return True, {"account": user_name, "role": role}

    def check_account_exist(self, user_name, check_name):
        if check_account_format(check_name) is False:
            return False, u"账户名仅允许数字和字母,下划线(_),而且必须以字母开头,用户名长度不得低于3位,不得高于20位"
        select_sql = "SELECT creator FROM %s WHERE user_name='%s';" % (
            self.user, check_name)
        result = self.db.execute(select_sql)
        if result > 0:
            if self.db.fetchone()[0] == user_name:
                return False, u"您已注册过该用户"
            return False, u"该用户已被他人注册"
        return True, u"可以注册"

    def change_password(self, user_name, old_password, new_password):
        result, u_info = self.check(user_name, old_password)
        if result is False:
            return False, u_info
        en_password = generate_password_hash(
            self._md5_hash_password(user_name, new_password))
        update_value = {"password": en_password}
        self.db.execute_update(self.user,
                               update_value=update_value,
                               where_value={"user_name": user_name})
        return True, u"更新成功"

    def send_code(self, user_name, password, tel):
        change_url = "%s/code/bind/"
        try:
            res = requests.post(change_url,
                                json={
                                    "account": user_name,
                                    "password": password,
                                    "tel": tel
                                })
        except requests.ConnectionError as ce:
            return False, u"暂时无法发送,请稍后重试"
        r = res.json()
        if r["status"] == 2:
            return True, u"发送成功"
        if r["status"] == 10701:
            return False, u"请求频率过高,请稍后重试"
        if r["status"] == 10402:
            return False, u"手机号已被他人绑定,请更改还手机号"
        if r["status"] == 10801:
            return False, u"请求超过限制,请稍后重试"
        return False, r["message"]

    def bind_tel(self, user_name, password, tel, code):
        change_url = "%s/tel/"
        try:
            res = requests.post(change_url,
                                json={
                                    "account": user_name,
                                    "password": password,
                                    "tel": tel,
                                    "code": code
                                })
        except requests.ConnectionError as ce:
            return False, u"暂时绑定,请稍后重试"
        r = res.json()
        if r["status"] == 2:
            return True, u"绑定成功"
        if r["status"] == 10404:
            return False, u"验证码不正确,请重新输入"
        if r["status"] == 10405:
            return False, u"验证码已过期,请重新获得"
        if r["status"] == 10402:
            return False, u"手机号已被他人绑定,请更改还手机号"
        return False, r["message"]

    def clear_password(self, user_name, creator):
        update_sql = "UPDATE %s SET password=null WHERE user_name='%s' AND creator='%s';" % (
            self.user, user_name, creator)
        self.db.execute(update_sql)
        return True, u"重置成功"

    def get_role_user(self, role):
        cols = [
            "user_name", "role", "nick_name", "wx_id", "creator", "add_time",
            "email"
        ]
        select_sql = "SELECT %s FROM %s WHERE role & %s > 0;" \
                     % (",".join(cols), self.user, role)
        self.db.execute(select_sql)
        user_list = []
        for item in self.db.fetchall():
            info = {}
            for i in range(len(cols)):
                info[cols[i]] = item[i]
            info["add_time"] = info["add_time"].strftime(TIME_FORMAT)
            user_list.append(info)
        return True, user_list

    def my_user(self, user_name):
        select_sql = "SELECT user_name,role,nick_name,wx_id,creator,add_time FROM %s WHERE creator='%s';" \
                     % (self.user, user_name)
        self.db.execute(select_sql)
        user_list = []
        for item in self.db.fetchall():
            user_list.append({
                "user_name": item[0],
                "role": item[1],
                "nick_name": item[2],
                "wx_id": item[3],
                "creator": item[4],
                "add_time": item[5].strftime(TIME_FORMAT)
            })
        return True, user_list

    def get_user_info(self, user_name):
        select_sql = "SELECT user_name,role,nick_name,wx_id,creator,add_time,email FROM %s WHERE user_name='%s';" \
                     % (self.user, user_name)
        result = self.db.execute(select_sql)
        if result <= 0:
            return False, "user not exist"
        item = self.db.fetchone()
        user_info = {
            "user_name": item[0],
            "role": item[1],
            "nick_name": item[2],
            "wx_id": item[3],
            "creator": item[4],
            "add_time": item[5],
            "email": item[6]
        }
        return True, user_info

    def update_my_user_role(self, role, user_name, my_name):
        if type(role) != int:
            return False, "Bad role"
        update_sql = "UPDATE %s SET role=%s WHERE user_name='%s' AND creator='%s';" \
                     % (self.user, role, user_name, my_name)
        self.db.execute(update_sql)
        return True, "success"

    def _add_role_my_user(self, role, user_name, my_name):
        if type(role) != int:
            return False, "Bad role"
        update_sql = "UPDATE %s SET role=role | %s WHERE user_name='%s' AND creator='%s';" \
                     % (self.user, role, user_name, my_name)
        self.db.execute(update_sql)
        return True, "success"

    def add_role_my_users(self, role, user_names, my_name):
        if type(user_names) != list:
            return "Bad user_names"
        if len(user_names) == 0:
            return True, "no update"
        if len(user_names) == 1:
            return self.add_role_my_user(role, user_names, my_name)
        if type(role) != int:
            return False, "Bad role"
        update_sql = "UPDATE %s SET role=role | %s WHERE creator='%s' AND user_name in ('%s');" \
                     % (self.user, role, "','".join(user_names), my_name)
        self.db.execute(update_sql)
        return True, "success"

    def _remove_role_my_user(self, role, user_name, my_name):
        if type(role) != int:
            return False, "Bad role"
        update_sql = "UPDATE %s SET role=role & ~%s WHERE user_name='%s' AND creator='%s';" \
                     % (self.user, role, user_name, my_name)
        self.db.execute(update_sql)
        return True, "success"

    def remove_role_my_users(self, role, user_names, my_name):
        if type(user_names) != list:
            return "Bad user_names"
        if len(user_names) == 0:
            return True, "no update"
        if len(user_names) == 1:
            return self.add_role_my_user(role, user_names, my_name)
        if type(role) != int:
            return False, "Bad role"
        update_sql = "UPDATE %s SET role=role & ~%s WHERE creator='%s' AND user_name in ('%s');" \
                     % (self.user, role, "','".join(user_names), my_name)
        self.db.execute(update_sql)
        return True, "success"