コード例 #1
0
    def __init__(self, sameFileNamePrompt=None, sameFileHashPrompt=None,
                 load_config=False):

        if os.path.isfile(CONFIG_FILE) != True:
            self.create_genesis_configuration()

        if load_config:

            et = None

            try:
                et = ET.parse(CONFIG_FILE)
            except:
                logger.error("Unspecified XML parse error")

            for tags in et.iter(str("same_file_name_prompt")):
                if tags.text == "1":
                    self.sameFileNamePrompt = True
                elif tags.text == "0":
                    self.sameFileNamePrompt = False
                else:
                    self.sameFileNamePrompt = True
            for tags in et.iter(str("same_file_hash_prompt")):
                if tags.text == "1":
                    self.sameFileHashPrompt = True
                elif tags.text == "0":
                    self.sameFileHashPrompt = False
                else:
                    self.sameFileHashPrompt = True
            for tags in et.iter(str("max_chunk_size_for_download")):
                if tags.text is not None:
                    self.maxDownloadChunkSize = int(tags.text)
                else:
                    self.maxDownloadChunkSize = 1024
コード例 #2
0
    def paint_config_to_ui(self, settings_ui):
        et = None

        try:
            et = ET.parse(CONFIG_FILE)

            for tags in et.iter(str("max_shard_size")):
                settings_ui.max_shard_size.setValue(int(tags.text))
            for tags in et.iter(str("ownstorj_port")):
                settings_ui.ownstorj_port.setValue(int(tags.text))
            for tags in et.iter(str("max_connections_onetime")):
                settings_ui.connections_onetime.setValue(int(tags.text))
            for tags in et.iter(str("bridge_request_timeout")):
                settings_ui.bridge_request_timeout.setValue(int(tags.text))
            for tags in et.iter(str("crypto_keys_location")):
                settings_ui.crypto_keys_location.setText(str(tags.text))
            for tags in et.iter(str("max_download_bandwidth")):
                settings_ui.max_download_bandwidth.setText(str(tags.text))
            for tags in et.iter(str("max_upload_bandwidth")):
                settings_ui.max_upload_bandwidth.setText(str(tags.text))
            for tags in et.iter(str("default_file_encryption_algorithm")):
                settings_ui.default_crypto_algorithm.setCurrentIndex(int(tags.text))
            for tags in et.iter(str("shard_size_unit")):
                settings_ui.shard_size_unit.setCurrentIndex(int(tags.text))
            for tags in et.iter(str("custom_max_shard_size_enabled")):
                if int(tags.text) == 1:
                    settings_ui.max_shard_size_enabled_checkBox.setChecked(True)
                else:
                    settings_ui.max_shard_size_enabled_checkBox.setChecked(False)

        except Exception as e:
            logger.error("Unspecified XML parse error" + str(e))
コード例 #3
0
 def load_config_from_xml(self):
     try:
         et = ET.parse(CONFIG_FILE)
         for tags in et.iter('password'):
             output = tags.text
     except Exception as e:
         logger.error('Unspecified error, %s' % str(e))
コード例 #4
0
    def max_shard_size(self):
        et = None

        max_shard_size = DEFAULT_SHARD_SIZE

        try:

            et = ET.parse(CONFIG_FILE)
            shard_size_unit = 2
            max_shard_size_sterile = None
            for tags in et.iter(str("custom_max_shard_size_enabled")):
                if int(tags.text) == 1:
                    for tags2 in et.iter(str("max_shard_size")):
                        max_shard_size_sterile = int(tags2.text)
                    for tags3 in et.iter(str("shard_size_unit")):
                        shard_size_unit = int(tags3.text)

                    if shard_size_unit == 0:  # KB:
                        max_shard_size = (max_shard_size_sterile * 2048)
                    elif shard_size_unit == 1:  # MB:
                        max_shard_size = (max_shard_size_sterile * 1024 * 2048)
                    elif shard_size_unit == 2:  # GB:
                        max_shard_size = (max_shard_size_sterile * 1024 * 1024 * 2048)
                    elif shard_size_unit == 3:  # TB:
                        max_shard_size = (max_shard_size_sterile * 1024 * 1024 * 1024 * 2048)
                else:
                    max_shard_size = DEFAULT_SHARD_SIZE

        except Exception as e:
            logger.error("Unspecified XML parse error" + str(e))

        return (max_shard_size)
コード例 #5
0
    def user_login_operator(self, info: dict):
        user_name = info.get('user_name')
        user_pw = info.get('user_pw')
        info_time = info.get('time')
        if not all([user_name, user_pw, info_time]):
            logger.error('incomplete params')
            return 'incomplete params', 421

        user_check = self.user_collection.find_one({
            "user_name": user_name,
            "user_pw": user_pw,
            "activate": 1
        })
        if user_check:
            self.user_log_collection.insert_one({
                'id': {
                    'user_id': user_check['_id']
                },
                'operator':
                user_name,
                'time':
                info_time,
                'action':
                'operator %s login' % user_name
            })
            logger.info("login %s" % user_name)
            return user_check['type'], 200
        else:
            logger.error("user:%s didn't exist" % user_name)
            return 'login failed', 421
コード例 #6
0
 def load_config_from_xml(self):
     try:
         et = ET.parse(CONFIG_FILE)
         for tags in et.iter('password'):
             output = tags.text
     except:
         logger.error("Unspecified error")
コード例 #7
0
 def get_config_parametr_value(self, parametr):
     output = ''
     try:
         et = ET.parse(CONFIG_FILE)
         for tags in et.iter(str(parametr)):
             output = tags.text
             return output
     except Exception as e:
         logger.error('Unspecified error, %s' % str(e))
コード例 #8
0
 def get_config_parametr_value(self, parametr):
     output = ""
     try:
         et = ET.parse(CONFIG_FILE)
         for tags in et.iter(str(parametr)):
             output = tags.text
             return output
     except:
         logger.error("Unspecified error")
コード例 #9
0
 def barcode_find(self, info):
     barcode = info.get('barcode')
     if not barcode:
         logger.error('incomplete params')
         return 'incomplete params', 421
     res = self.panel_collection.find_one({'barcode': barcode}, {
         '_id': 0,
         'thresholds': 0
     })
     return res, 200
コード例 #10
0
 def get_user_email(self):
     email = ""
     try:
         et = ET.parse("storj_account_conf.xml")
         for tags in et.iter('login_email'):
             email = tags.text
     except IOError:
         logger.error("Error in Account Manager get email")
         logger.error("Credentials file not existing")
     return email
コード例 #11
0
 def get_user_password(self):
     password = ""
     try:
         et = ET.parse("storj_account_conf.xml")
         for tags in et.iter('password'):
             password = tags.text
     except IOError:
         logger.error("Error in Account Manager get password")
         logger.error("Credentials file not existing")
     return password
コード例 #12
0
 def gui_config_check(self, info: dict):
     gui_no = info.get('gui_no')
     if not gui_no:
         logger.error('incomplete params')
         return 'incomplete params', 421, {'Content-Type': 'application/json'}
     gui_setting_check = self.gui_setting_collection.find_one({'gui_no': gui_no}, {'_id': 0})
     if not gui_setting_check:
         return 'null', 400, {'Content-Type': 'application/json'}
     logger.info('gui_config_check')
     return json.dumps(gui_setting_check), 200, {'Content-Type': 'application/json'}
コード例 #13
0
    def el_panel_config_check(self, info: dict):
        el_no = info.get('el_no')
        if not el_no:
            logger.error('incomplete params')
            return 'incomplete params', 421, {'Content-Type': 'application/json'}

        el_check = self.el_config_collection.find_one({'el_no': el_no}, {'_id': 0})
        if not el_check:
            return 'null', 400, {'Content-Type': 'application/json'}
        logger.info('el_panel_config_check')
        return json.dumps(el_check), 200, {'Content-Type': 'application/json'}
コード例 #14
0
 def panel_check_last(self, info):
     barcode = info.get('barcode')
     create_time = info.get('create_time')
     if not all([barcode, create_time]):
         logger.error('incomplete params')
         return 'incomplete params', 421
     res = self.panel_collection.find_one({
         'barcode': barcode,
         'create_time': create_time
     })
     return '1' if res else '0'
コード例 #15
0
    def join_shards(self, shards_filepath, pattern, destination_file_path):
        # Based on <http://code.activestate.com/recipes/224800-simple-file-splittercombiner-module/>
        import re

        logger.info('Creating file', destination_file_path)

        bname = (os.path.split(destination_file_path))[1]
        bname_input = (os.path.split(shards_filepath))[1]
        bname2_input = bname_input

        input_directory = (os.path.split(shards_filepath))[0]
        output_directory = (os.path.split(destination_file_path))[0]

        # bugfix: if file contains characters like +,.,[]
        # properly escape them, otherwise re will fail to match.
        for a, b in zip(['+', '.', '[', ']', '$', '(', ')'],
                        ['\+', '\.', '\[', '\]', '\$', '\(', '\)']):
            bname2 = bname2_input.replace(a, b)

        chunkre = re.compile(bname2_input + '-' + '[0-9]+')

        chunkfiles = []
        for f in os.listdir(str(input_directory)):
            logger.debug(f)
            if chunkre.match(f):
                chunkfiles.append(f)

        logger.info('Number of chunks', len(chunkfiles))
        chunkfiles.sort(self.sort_index)
        logger.info(chunkfiles)
        data = ''
        for f in chunkfiles:

            try:
                logger.info('Appending chunk',
                            os.path.join(str(input_directory), f))
                data += open(str(input_directory) + "/" + str(f), 'rb').read()
                logger.info(str(input_directory) + "/" + str(f) +
                            "katalog wejsciowy")
            except (OSError, IOError, EOFError) as e:
                logger.error(e)
                continue

        try:
            logger.info(str(output_directory) + "katalog wyjsciowy")
            f = open(str(output_directory) + "/" + str(bname), 'wb')
            f.write(data)
            f.close()
        except (OSError, IOError, EOFError) as e:
            raise ShardingException(str(e))

        logger.info('Wrote file', bname)
        return 1
コード例 #16
0
    def get_max_bridge_request_timeout(self):
        max_bridge_request_timeout = DEFAULT_MAX_BRIDGE_REQUEST_TIMEOUT
        et = None
        try:
            et = ET.parse(CONFIG_FILE)
            for tags in et.iter('bridge_request_timeout'):
                max_bridge_request_timeout = int(tags.text)

        except Exception as e:
            logger.error('Unspecified XML parse error %s' % str(e))

        return max_bridge_request_timeout
コード例 #17
0
    def user_login_admin(self, info: dict):
        res = dict()
        user_name = info.get('user_name')
        user_pw = info.get('user_pw')
        info_time = info.get('time')
        admin_url = info.get('admin_url')
        if not all([user_name, user_pw, info_time, admin_url]):
            logger.error('incomplete params')
            return 'incomplete params', 421, {
                'Content-Type': 'application/json'
            }

        user_check = self.user_collection.find_one({
            "user_name": user_name,
            "user_pw": user_pw,
            "activate": 1
        })
        if not user_check:
            logger.error("user:%s didn't exist" % user_name)
            return "user didn't exist", 421, {
                'Content-Type': 'application/json'
            }
        if user_check['type'] == 'operator':
            return "not admin", 421, {'Content-Type': 'application/json'}
        self.user_log_collection.insert_one({
            'id': {
                'user_id': user_check['_id']
            },
            'operator':
            user_name,
            'time':
            info_time,
            'action':
            "admin %s login" % user_name
        })

        res['type'] = user_check['type']
        # pre_url = url.get(admin_url)
        # res['previous_url'] = user_check.get("previous_url") if user_check.get('previous_url') != pre_url else ''
        # user_check['previous_url'] = pre_url
        # self.user_collection.replace_one({'user_name': user_name, 'activate': 1}, user_check)  # 这句话是沙雕吧

        res['permission_mng'] = list(
            self.permission_collection.find({}, {'_id': 0}))
        res['line_setting'] = list(
            self.el_config_collection.find({}, {'_id': 0}))
        res['string_setting'] = list(
            self.el_string_collection.find({}, {'_id': 0}))
        res['gui_setting'] = list(
            self.gui_setting_collection.find({}, {'_id': 0}))
        logger.info("admin_login_%s" % user_name)
        return json.dumps(res), 200, {'Content-Type': 'application/json'}
コード例 #18
0
    def max_shard_size_unit(self):
        et = None
        shard_size_unit = 1
        try:
            et = ET.parse(CONFIG_FILE)
            # max_shard_size_sterile = None
            for tags in et.iter('custom_max_shard_size_enabled'):
                if int(tags.text) == 1:
                    for tags3 in et.iter('shard_size_unit'):
                        shard_size_unit = int(tags3.text)

        except Exception as e:
            logger.error('Unspecified XML parse error %s' % str(e))

        return (shard_size_unit)
コード例 #19
0
    def gui_config_modify(self, info: dict):
        t = time.time()
        gui_no = info.get('gui_no')
        admin_name = info.get('admin_name')
        changed_items = info.get('changed_items')
        info_time = info.get('time')
        if not all([gui_no, admin_name, changed_items, info_time]):
            logger.error('incomplete params')
            return update(), 400, {'Content-Type': 'application/json'}
        gui_check = self.gui_setting_collection.find_one({'gui_no': gui_no})
        admin_check = self.user_collection.find_one({"user_name": info["admin_name"], "activate": 1})
        if not gui_check:
            logger.error("gui_no:%s didn't exist" % (info["admin_name"]))
            return update(), 422, {'Content-Type': 'application/json'}
        try:
            if gui_check["update_time"] != changed_items["update_time"]:
                return update(), 422, {'Content-Type': 'application/json'}

            limit = list(self.el_config_collection.aggregate([
                {'$match': {'gui_no': gui_no}},
                {'$group': {'_id': '$gui_no', 'limit': {'$sum': 1}}}
            ]))
            if limit[0]['limit'] > int(changed_items['el_limit']):
                return update(), 412, {'Content-Type': 'application/json'}
            changed_before = dict()
            changed_after = dict()
            for key, value in changed_items.items():
                if (pre_data := gui_check.get(key)) != value:
                    changed_before[key] = pre_data
                    changed_after[key] = value
                    gui_check[key] = value
            gui_check['update_time'] = t
            self.gui_setting_collection.replace_one({"gui_no": gui_no}, gui_check)
            self.user_log_collection.insert_one({
                'id': {
                    'admin_id': admin_check['_id'],
                    'gui_id': gui_check['_id']
                },
                'operator': admin_name,
                'gui_no': gui_no,
                'time': info_time,
                'action': "change gui_config",
                'changed_before': changed_before,
                'changed_after': changed_after
            })
            logger.info('gui_config_modify')
            return update(), 200, {'Content-Type': 'application/json'}
コード例 #20
0
    def max_shard_size_united(self):
        et = None
        max_shard_size = DEFAULT_SHARD_SIZE
        try:
            et = ET.parse(CONFIG_FILE)
            max_shard_size_sterile = None
            for tags in et.iter('custom_max_shard_size_enabled'):
                if int(tags.text) == 1:
                    for tags2 in et.iter('max_shard_size'):
                        max_shard_size_sterile = int(tags2.text)
                        max_shard_size = max_shard_size_sterile
                else:
                    max_shard_size = DEFAULT_SHARD_SIZE

        except Exception as e:
            logger.error('Unspecified XML parse error %s' % str(e))

        return (max_shard_size)
コード例 #21
0
 def user_delete(self, info: dict):
     t = time.time()
     user_name = info.get('user_name')
     admin_name = info.get('admin_name')
     info_time = info.get('time')
     if not all([user_name, admin_name, info_time]):
         logger.error('incomplete params')
         return update(), 400, {'Content-Type': 'application/json'}
     admin_check = self.user_collection.find_one({
         'user_name': admin_name,
         'activate': 1
     })
     if not admin_check:
         logger.error("admin user:%s didn't exist" % admin_name)
         return "admin user didn't exist", 400, {
             'Content-Type': 'application/json'
         }
     if admin_check['type'] != 'super_admin' and admin_check[
             'type'] != 'yc_admin':
         logger.error("permission denied %s" % admin_name)
         return update(), 423, {'Content-Type': 'application/json'}
     user_check = self.user_collection.find_one({
         'user_name': user_name,
         'activate': 1
     })
     if user_check['type'] == 'super_admin' and admin_check[
             'type'] == 'super_admin':
         logger.error("permission denied %s" % (info["admin_name"]))
         return update(), 423, {'Content-Type': 'application/json'}
     user_check['activate'] = time.time()
     user_check['update_time'] = t
     self.user_collection.replace_one(
         {
             'user_name': user_name,
             'activate': 1
         }, user_check)
     self.user_log_collection.insert_one({
         'id': {
             'user_id': user_check['_id'],
             'admin_id': admin_check['_id']
         },
         'operator':
         admin_name,
         'user_name':
         user_name,
         'time':
         info_time,
         'action':
         "%s delete user %s" % (admin_name, user_name)
     })
     logger.info("user_del_%s" % (info["user_name"]))
     return update(), 200, {'Content-Type': 'application/json'}
コード例 #22
0
 def mes_defects_update(self, info):
     barcode = info.get('barcode')
     create_time = info.get('create_time')
     mes_defects = info.get('mes_defects')
     if not all([barcode, create_time, mes_defects]):
         logger.error('incomplete params')
         return 'incomplete params', 421
     panel_check = self.panel_collection.find_one({
         'barcode': barcode,
         'create_time': create_time
     })
     if not panel_check:
         return 'no such panel', 422
     panel_check['mes_defects'] = mes_defects
     self.panel_collection.replace_one(
         {
             'barcode': barcode,
             'create_time': create_time
         }, panel_check)
     logger.info("mes_defects_update{%s}" % barcode)
     return '1', 200
コード例 #23
0
 def repair(self, info):
     barcode = info.get('barcode')
     if not barcode:
         logger.error('incomplete params')
         return 'incomplete params', 421
     res = list(
         self.panel_collection.aggregate([{
             '$match': {
                 "barcode": barcode
             }
         }, {
             '$sort': {
                 'create_time': -1
             }
         }, {
             '$project': {
                 '_id': 0,
                 'defects': '$mes_defects'
             }
         }, {
             '$limit': 1
         }]))[0]
     return json.dumps(res), 200 if res else '0', 400
コード例 #24
0
    def __init__(self,
                 sameFileNamePrompt=None,
                 sameFileHashPrompt=None,
                 load_config=False):

        if os.path.isfile(CONFIG_FILE) is not True:
            self.create_genesis_configuration()

        if load_config:

            et = None

            try:
                et = ET.parse(CONFIG_FILE)
            except Exception as e:
                logger.error('Unspecified XML parse error, %s' % str(e))

            for tags in et.iter('same_file_name_prompt'):
                if tags.text == '1':
                    self.sameFileNamePrompt = True
                elif tags.text == '0':
                    self.sameFileNamePrompt = False
                else:
                    self.sameFileNamePrompt = True
            for tags in et.iter('same_file_hash_prompt'):
                if tags.text == '1':
                    self.sameFileHashPrompt = True
                elif tags.text == '0':
                    self.sameFileHashPrompt = False
                else:
                    self.sameFileHashPrompt = True
            for tags in et.iter('max_chunk_size_for_download'):
                if tags.text is not None:
                    self.maxDownloadChunkSize = int(tags.text)
                else:
                    self.maxDownloadChunkSize = 1024
コード例 #25
0
 def user_add(self, info: dict):
     t = time.time()
     user_name = info.get('user_name')
     user_pw = info.get('user_pw')
     admin_name = info.get('admin_name')
     user_type = info.get('type')
     info_time = info.get('time')
     if not all([user_name, user_pw, admin_name, user_type, info_time]):
         logger.error('incomplete params')
         return update(), 400, {'Content-Type': 'application/json'}
     admin_check = self.user_collection.find_one({
         'user_name': admin_name,
         'activate': 1
     })
     if not admin_check:
         logger.error("admin user:%s didn't exist" % admin_name)
         return "admin user didn't exist", 400, {
             'Content-Type': 'application/json'
         }
     if admin_check['type'] != 'super_admin' and admin_check[
             'type'] != 'yc_admin':
         logger.error("permission denied %s" % admin_name)
         return update(), 423, {'Content-Type': 'application/json'}
     user_check = self.user_collection.find_one({
         'user_name': user_name,
         'activate': 1
     })
     if user_check:
         return 'user exists', 413, {'Content-Type': 'application/json'}
     res = self.user_collection.insert_one({
         "user_name": user_name,
         "user_pw": user_pw,
         "activate": 1,
         "type": user_type,
         "update_time": t
     })
     self.user_log_collection.insert_one({
         'id': {
             'admin_id': admin_check["_id"],
             'user_id': ObjectId(res.inserted_id)
         },
         'operator':
         admin_name,
         'user_name':
         user_name,
         'time':
         info_time,
         'action':
         "%s add user %s" % (admin_name, user_name)
     })
     logger.info("user_add{%s}" % user_name)
     return update(), 200, {'Content-Type': 'application/json'}
コード例 #26
0
def gen_report():
    start_time = request.args.get('start_time', '')
    end_time = request.args.get('end_time', '')
    context = dict()
    if start_time:
        try:
            start_time = float(start_time)
        except Exception as e:
            logger.error(e)
            return jsonify(errno=RET.PARAMERR, msg='time type error')
        context['create_time'] = dict()
        context['create_time']['$gt'] = start_time
    if end_time:
        try:
            end_time = float(end_time)
        except Exception as e:
            logger.error(e)
            return jsonify(errno=RET.PARAMERR, msg='time type error')
        if context.get('create_time') is None:
            context['create_time'] = dict()
        context['create_time']['$lte'] = end_time
    if start_time and end_time:
        try:
            assert start_time <= end_time
        except Exception as e:
            logger.error(e)
            return jsonify(errno=RET.PARAMERR, msg='date params wrong')
    res = panel_collection.find(
        context, {
            '_id': 0,
            'barcode': 1,
            'create_time': 1,
            'status': 1,
            'ap_result': 1,
            'el_no': 1,
            'mes_res': 1,
            'stack_equipment': 1,
            'cell_amount': 1,
            'defects': 1,
            'ap_defects': 1
        })
    # res.sort('create_time', -1)
    if not res:
        return jsonify(errno=RET.NODATA, msg='there is no matching data')

    res_li = make_report(res)
    return jsonify(errno=RET.OK, msg=res_li)
コード例 #27
0
    def if_logged_in(self):
        """Return True if user has already logged in with these credentials"""
        logged_in = "0"
        try:
            et = ET.parse("storj_account_conf.xml")
            for tags in et.iter('logged_in'):
                logged_in = tags.text
        except IOError:
            logged_in = "0"
            logger.error("Error in Account Manager login")
            logger.error("Function: if_logged_in")
            logger.error("Credentials file not existing")
            return False

        if logged_in == "1":
            return True
        else:
            return False
コード例 #28
0
def log():
    start_time = request.args.get('timeStart', '')
    end_time = request.args.get('timeEnd', '')
    el_no = request.args.get('el_no', '')
    page = request.args.get('page', 1)
    size = request.args.get('size', 10)

    context = dict()
    '''
    {
        'time': {
            '$gt': 3213,
            '$lte': 2344
        },
        '$or': [
            {'el_no': 'prea1'},
            {'el_no': 'prea2'}
        ]
    }
    '''
    if start_time:
        try:
            start_time = float(start_time)
        except Exception as e:
            logger.error(e)
            return jsonify(errno=RET.DATAERR, msg='time type wrong')
        context['time'] = dict()
        context['time']['$gt'] = start_time
    if end_time:
        try:
            end_time = float(end_time)
        except Exception as e:
            logger.error(e)
            return jsonify(errno=RET.DATAERR, msg='time type wrong')
        if context.get('time') is None:
            context['time'] = dict()
        context['time']['$lte'] = end_time
    if start_time and end_time:
        try:
            assert start_time <= end_time
        except Exception as e:
            logger.error(e)
            return jsonify(errno=RET.PARAMERR, msg='date params wrong')
    if el_no:
        el_no_li = el_no.split()
        mult_el = [{'el_no': i} for i in el_no_li]
        context['$or'] = mult_el

    try:
        page = int(page)
        size = int(size)
        if page < 0 or size < 0:
            return jsonify(errno=RET.PARAMERR,
                           msg='page or size must be a unsigned integer')
    except Exception as e:
        logger.error(e)
        return jsonify(errno=RET.PARAMERR,
                       msg='page or size must be a integer')

    res = user_log_collection.find(
        context, {
            '_id': 0,
            'operator': 1,
            'time': 1,
            'action': 1,
            'el_no': 1,
            'changed_before': 1,
            'changed_after': 1
        }).sort('time', -1).limit(size).skip((page - 1) * size)
    amount = user_log_collection.count_documents(context)
    pages = amount // size + 1
    if not amount:
        return jsonify(errno=RET.NODATA, msg='no data')
    li = list()
    for i in res:
        if not i.get('changed_before'):
            i['changed_before'] = {}
        if not i.get('changed_after'):
            i['changed_after'] = {}
        if i.get('changed_before').get('user_pw'):
            i['changed_before']['user_pw'] = '******'
            i['changed_after']['user_pw'] = '******'
        li.append(i)
    content = {'data': li, 'pages': pages}
    return jsonify(errno=RET.OK, msg=content)
コード例 #29
0
 def permission_modify(self, info):  # TODO: oxxx
     """ info
     {
         "time": 1578900329.842,
         "admin_name": "yc_user",
         "changed_items": [
             {"type": "super_admin", "user_mng": 1, "line_mng": 1, "gui_mng": 1, "threshold_mng": 1, "shift_mng": 1,
              "pic_upload": 1, "update_time": 0},
             {"type": "quality_admin", "user_mng": 0, "line_mng": 0, "gui_mng": 1, "threshold_mng": 1,
              "shift_mng": 0,
              "pic_upload": 1, "update_time": 0},
             {"type": "production_admin", "user_mng": 1, "line_mng": 1, "gui_mng": 1, "threshold_mng": 1,
              "shift_mng": 1,
              "pic_upload": 1, "update_time": 0}
         ]
     }
     """
     t = time.time()
     admin_name = info.get('admin_name')
     changed_items = info.get('changed_items')
     info_time = info.get('time')
     if not all([admin_name, changed_items, info_time]):
         logger.error('incomplete params')
         return update(), 400, {'Content-Type': 'application/json'}
     admin_check = self.user_collection.find_one({
         'user_name': admin_name,
         'activate': 1
     })
     if admin_check.get('type') != 'yc_admin':
         return 'permission denied', 423, {
             'Content-Type': 'application/json'
         }
     for i in changed_items:
         try:
             permission_check = self.permission_collection.find_one(
                 {'type': i['type']})
             if permission_check['update_time'] != i['update_time']:
                 return update(), 422, {'Content-Type': 'application/json'}
             changed_before = dict()
             changed_after = dict()
             for key, value in i.items():
                 if (pre_data := permission_check.get(key)) != value:
                     changed_before[key] = pre_data
                     changed_after[key] = value
                     permission_check[key] = value
             permission_check['update_time'] = t
             self.permission_collection.replace_one({'type': i['type']},
                                                    permission_check)
             if changed_after:
                 self.user_log_collection.insert_one({
                     'id': {
                         'admin_id': admin_check['_id']
                     },
                     'operator':
                     admin_name,
                     'type':
                     i['type'],
                     'time':
                     info_time,
                     'action':
                     "change permission config",
                     'changed_before':
                     changed_before,
                     'changed_after':
                     changed_after
                 })
                 logger.info('permission_modify')
         except Exception as e:
             logger.error(str(e))
             return update(), 400, {'Content-Type': 'application/json'}
コード例 #30
0
 def user_modify(self, info: dict):
     t = time.time()
     admin_name = info.get('admin_name')
     user_name = info.get('user_name')
     changed_items: dict = info.get('changed_items')
     info_time = info.get('time')
     cg_user_name = changed_items.get('user_name')
     cg_update_time = changed_items.get('update_time')
     if not all(
         [admin_name, user_name, changed_items, info_time, cg_update_time]):
         logger.error('incomplete params')
         return update(), 400, {'Content-Type': 'application/json'}
     admin_check = self.user_collection.find_one({
         'user_name': admin_name,
         'activate': 1
     })
     if not admin_check:
         logger.error("user:%s didn't exist" % admin_name)
         return update(), 422, {'Content-Type': 'application/json'}
     if admin_check['type'] != 'super_admin' and admin_check[
             'type'] != 'yc_admin':
         logger.error("permission denied %s" % (info["admin_name"]))
         return update(), 423, {'Content-Type': 'application/json'}
     user_check = self.user_collection.find_one({
         'user_name': user_name,
         'activate': 1
     })
     if not user_check:
         logger.error("user:%s didn't exist" % user_name)
         return update(), 422, {'Content-Type': 'application/json'}
     if cg_user_name and self.user_collection.find_one({
             'user_name': cg_user_name,
             'activate': 1
     }):
         # if change name have be used
         return update(), 412, {'Content-Type': 'application/json'}
     changed_before = dict()
     changed_after = dict()
     if user_check['update_time'] == cg_update_time:
         for key, value in changed_items.items():
             if (pre_data := user_check.get(key)) != value:
                 changed_before[key] = pre_data
                 changed_after[key] = value
                 user_check[key] = value
         user_check['update_time'] = t
         self.user_collection.replace_one(
             {
                 "_id": user_check["_id"],
                 "activate": 1
             }, user_check)
         self.user_log_collection.insert_one({
             'id': {
                 'admin_id': admin_check['_id'],
                 'user_id': user_check['_id']
             },
             'operator': admin_name,
             'user_name': user_name,
             'time': info_time,
             'action': "user %s changed" % user_name,
             'changed_before': changed_before,
             'changed_after': changed_after
         })
         logger.info("user modify %s" % user_name)
         return update(), 200, {'Content-Type': 'application/json'}