Example #1
0
File: cco.py Project: smjurcak/csm
def check_cisco_authentication():
    preferences = Preferences.get(DBSession(), current_user.id)
    if preferences is not None:
        if not is_empty(preferences.cco_username) and not is_empty(preferences.cco_password):
            return jsonify({'status': 'OK'})

    return jsonify({'status': 'Failed'})
Example #2
0
    def _init(self):
        fee = self.problem.fee
        self._filter_pay_requests(self.problem.payRequests, fee)
        if is_empty(self._payRequests):
            raise RuntimeError("No pay request")

        amount = utils.get_tx_amount(self._payRequests, fee)

        # utxos = utxos - cost of using it in tx
        utxos = map(lambda v: v - fee * utils.inputSizeBytes,
                    self.problem.utxos)
        utxos = filter(lambda v: v > 0, utxos)
        utxos = filter(lambda v: v < amount, utxos)
        utxos = list(utxos)
        #utxos = sorted(utxos, reverse=True)

        if is_empty(utxos):
            raise RuntimeError("Insufficient funds")

        if amount > sum(utxos):
            raise RuntimeError("Insufficient funds")

        solution = Solver._build_any_solution(utxos, amount, fee)

        self.utxos = utxos
        self.amount = amount
        self.solution = solution
Example #3
0
def img_files_flow_page(page, img_detail):
    """
    图片文件流加载
    :param page:
    :param img_detail:
    :return:
    """
    page, pagination = img_detail.dao_find_page(page)

    flow_img_details = []
    for img_detail in pagination.items:
        url = url_for('file.file_download',
                      id=img_detail.file_id,
                      md5_id=img_detail.file_md5)
        if not img_detail.is_handle:
            alt = '待处理'
        elif is_not_empty(img_detail.img_type):
            alt = img_detail.img_type.type_explain
        else:
            alt = img_detail.err_msg
        flow_info = FlowInfo(url, url, alt, img_detail.file_id)
        flow_img_details.append(flow_info)

    flow_img_details_dict, errors = FlowInfoSchema().dump(flow_img_details,
                                                          many=True)
    Assert.is_true(is_empty(errors), errors)

    page_dict, page_errors = PageSchema().dump(page)
    Assert.is_true(is_empty(page_errors), page_errors)
    page_dict['data'] = flow_img_details_dict

    return render_info(page_dict)
Example #4
0
    def mvsi(self, url, image_bs64):
        """
        机动车销售发票OCR识别
        :param url: OCR接口地址
        :param image_bs64: 图片base64数据, base64编码后大小不超过10M。图片最小边不小于15像素,最长边不超过4096像素,
        支持JPG/PNG/BMP/TIFF格式
        :return:
        """
        headers = {
            'Content-Type': 'application/json',
            'charset': 'UTF-8',
            'X-Auth-Token': self.token
        }
        res = requests.post(url=url, data=json.dumps(obj={'image': image_bs64}), headers=headers)
        res.encoding = encodes.Unicode.UTF_8.value

        print(json.dumps(res.json(), indent=4, ensure_ascii=False))

        if res is None or res.status_code != codes.ok:
            mvsi_error, errors = MvsiResultSchema(only=MvsiResultSchema().only_error()).load(res.json())
            Assert.is_true(is_empty(errors), errors)
            return mvsi_error
        mvsi_result, errors = MvsiResultSchema(only=MvsiResultSchema().only_success()).load(res.json().get('result'))
        Assert.is_true(is_empty(errors), errors)
        return mvsi_result
Example #5
0
def get_host_list_by(db_session, platform, software_versions, region_ids, roles):
    """
    :param platform: Host platform
    :param software_versions: a list of software versions or 'ALL'
    :param region_ids: a list of region ids or 'ALL'
    :param roles: a list of roles or 'ALL'
    :return: a list of hosts that satisfied the criteria.
    """
    clauses = []
    clauses.append(Host.software_platform == platform)

    if 'ALL' not in software_versions:
        clauses.append(Host.software_version.in_(software_versions))

    if 'ALL' not in region_ids:
        clauses.append(Host.region_id.in_(region_ids))

    roles_list = [] if 'ALL' in roles else roles

    # Retrieve relevant hosts
    hosts = db_session.query(Host).filter(and_(*clauses)).order_by(Host.hostname.asc()).all()
 
    host_list = []
    for host in hosts:
        # Match on selected roles given by the user
        if not is_empty(roles_list):
            if not is_empty(host.roles):
                for role in host.roles.split(','):
                    if role in roles_list:
                        host_list.append(host)
                        break
        else:
            host_list.append(host)

    return host_list
Example #6
0
def api_get_distinct_host_roles(platform, software_versions, region_ids):
    """
    software_versions may equal to 'ALL' or multiple software versions
    region_ids may equal to 'ALL' or multiple region ids
    """
    clauses = []
    db_session = DBSession()

    clauses.append(Host.software_platform == platform)
    if 'ALL' not in software_versions:
        clauses.append(Host.software_version.in_(software_versions.split(',')))
    if 'ALL' not in region_ids:
        clauses.append(Host.region_id.in_(region_ids.split(',')))

    host_roles = db_session.query(Host.roles).filter(and_(*clauses)).distinct()

    # Change a list of tuples to a list
    # Example of roles_list  = [u'PE Router', u'PE1,R0', u'PE1,PE4', u'PE2,R1', u'Core']
    roles_list = [roles[0] for roles in host_roles if not is_empty(roles[0])]

    # Collapses the comma delimited strings to list
    roles_list = [] if is_empty(roles_list) else ",".join(roles_list).split(',')

    # Make the list unique, then sort it
    roles_list = sorted(list(set(roles_list)))

    rows = []
    for role in roles_list:
        rows.append({'role': role})

    return jsonify(**{'data': rows})
Example #7
0
    def lexer_label(text, asr_nlp_data):
        """
        语义标签过滤
        :param str text:
        :param asr_nlp_data:
        :return:
        """
        _item = '<font id="{id}" class="{ne} lexer_font_show" color="{color}" ' \
                'data-ne-title="{ne_title}" data-bg="{bg}" data-ed="{ed}" ' \
                'data-onebest="{onebest}" data-speaker="{speaker}">{item}</font>'
        _ne_key = 'ne_{0}'

        if is_empty(asr_nlp_data) or is_empty(asr_nlp_data.items):
            return text

        ne_dict = {}
        for item in asr_nlp_data.items:
            lexer = AudioLexerNeModel().dao_get_by_code(item.ne)  # type: AudioLexerNeModel

            ne_key = '{' + _ne_key.format(str(item.byte_offset)) + '}'
            text = text.replace(item.item, ne_key, 1)
            ne_dict.update(
                {_ne_key.format(str(item.byte_offset)): _item.format(
                    id=item.id,
                    ne=item.ne,
                    color=lexer.color,
                    ne_title=lexer.title,
                    item=item.item,
                    bg=asr_nlp_data.bg,
                    ed=asr_nlp_data.ed,
                    onebest=asr_nlp_data.onebest,
                    speaker=asr_nlp_data.speaker
                )}
            )
        return text.format_map(ne_dict)
Example #8
0
    def update(self):
        if mode['micro_battles']:
            self.d['battle_just_ended'] = False
            self.d['battle_won'] = False

            if not utils.is_empty(self.d['deaths']):
                for uid in self.d['deaths']:
                    self._remove_unit(uid)
                    if self._check_battle_ended(self.d['units_myself'],
                                                self.d['units_enemy']):
                        # Ignore the killing of remaining units in that battle.
                        # This will be re-initialized anyway in the next frame.
                        break

        if not mode['micro_battles'] or not self.d['battle_just_ended']:
            if not mode['replay'] and self.d['frame'] is not None:
                self._parse_unit()

            if not utils.is_empty(self.d['deaths']):
                for uid in self.d['deaths']:
                    self._remove_unit(uid)
                self.d['deaths'] = None

            if mode['micro_battles'] and self.d['waiting_for_restart']:
                we = utils.is_empty(self.d['units_myself'])
                ee = utils.is_empty(self.d['units_enemy'])
                if not we and not ee:  # We both have units
                    self.d['waiting_for_restart'] = False
Example #9
0
    def _init(self):
        fee = self.problem.fee
        self._filter_pay_requests(self.problem.payRequests, fee)
        if is_empty(self._payRequests):
            raise RuntimeError("No pay request")

        # utxos = utxos - cost of using it in tx
        utxos = map(lambda v: v - fee * utils.inputSizeBytes,
                    self.problem.utxos)
        utxos = filter(lambda v: v > 0, utxos)
        utxos = list(utxos)
        if is_empty(utxos):
            raise RuntimeError("Insufficient funds")

        amount = utils.get_tx_amount(self._payRequests, fee)
        if amount > sum(utxos):
            raise RuntimeError("Insufficient funds")
        largeUtxos = list(filter(lambda v: v >= amount, utxos))
        if is_not_empty(largeUtxos):
            minUtxo = min(largeUtxos)
            change = minUtxo - amount
            solution = Solution(change, [minUtxo],
                                utils.get_solution_expense(fee, change))
            utxos = list(filter(lambda v: v < minUtxo, utxos))
        else:
            solution = Solver._build_solution_min_inputs_with_change(
                utxos, amount, fee)
        # solution - the best solution so far
        if solution is None or len(solution.inputs) > self._inputCountMax:
            raise RuntimeError("No solution")

        self.utxos = utxos
        self.amount = amount
        self.solution = solution
Example #10
0
    def get_file_and_directory_dict(self, sub_directory=None): 
        result_list = []
        is_reachable = False

        if is_empty(sub_directory):
            path = self.server.server_directory
        else:
            path = os.path.join(self.server.server_directory, sub_directory)

        if os.path.exists(path):
            for name in os.listdir(path):
                file = dict()

                if os.path.isfile(os.path.join(path, name)):
                    file['filename'] = name
                    file['is_directory'] = False
                else:
                    file['filename'] = name if is_empty(sub_directory) else (sub_directory + os.sep + name)
                    file['is_directory'] = True

                result_list.append(file)

            is_reachable = True

        return result_list, is_reachable
Example #11
0
def check_cisco_authentication():
    preferences = Preferences.get(DBSession(), current_user.id)
    if preferences is not None:
        if not is_empty(preferences.cco_username) and not is_empty(
                preferences.cco_password):
            return jsonify({'status': 'OK'})

    return jsonify({'status': 'Failed'})
Example #12
0
    def server_repository_url(self):
        """
        Return the server repository URL (TFTP/FTP) where the packages can be found.
        tftp://223.255.254.254;VRF/auto/tftp-gud/sit
        ftp://username:[email protected];VRF/remote/directory
        """
        server_id = self.install_job.server_id
        server = self.db_session.query(Server).filter(
            Server.id == server_id).first()

        if server is not None:
            server_type = server.server_type

            if server_type == ServerType.TFTP_SERVER:
                tftp_string = 'tftp://'
                url = '{}{}'.format(tftp_string,
                                    server.server_url.replace(tftp_string, ''))

                if not is_empty(server.vrf):
                    try:
                        pos = url.index('/', len(tftp_string))
                    except ValueError:
                        pos = len(url)
                    url = url[:pos] + ';' + server.vrf + url[pos:]

                server_sub_directory = self.install_job.server_directory

                if not is_empty(server_sub_directory):
                    url += '/' + server_sub_directory

                return url

            elif server_type == ServerType.FTP_SERVER or server_type == ServerType.SFTP_SERVER:
                protocol = 'ftp' if server_type == ServerType.FTP_SERVER else 'sftp'
                url = protocol + "://{}:{}@{}".format(
                    server.username, server.password, server.server_url)

                if server_type == ServerType.FTP_SERVER and not is_empty(
                        server.vrf):
                    url = url + ";{}".format(server.vrf)

                remote_directory = concatenate_dirs(
                    server.server_directory, self.install_job.server_directory)
                if not is_empty(remote_directory):
                    url = url + "/{}".format(remote_directory)

                return url
            elif server_type == ServerType.SCP_SERVER:
                # scp root:[email protected]:/home_directory destination_on_host
                return "scp {}:{}@{}:{} {}".format(server.username,
                                                   server.password,
                                                   server.server_url,
                                                   server.server_directory,
                                                   server.destination_on_host)
            elif server_type == ServerType.LOCAL_SERVER:
                return server.server_url

        return None
Example #13
0
    def upload_machine_information(self):
        client = self.docker_client
        current_status = status.Status.IDLE.value

        client_containers_count = len(client.containers.list())
        if client_containers_count == 0:
            if not utils.is_empty(self.key):
                current_status = status.Status.COMPLETE.value
                # put.Put(self.key, 'result').put('/root/result', True)
        else:
            current_status = status.Status.IDLE.value

        if client_containers_count > 0:
            if utils.is_empty(self.key):
                self.clean_docker()
            current_status = status.Status.RUNNING.value

        data = utils.get_device_info()
        data['status_info'] = {'key': self.key, 'status': current_status}
        data['mac'] = "machine_%s" % get_mac()
        response = self.api.upload_machine_and_get_task(data)

        print(data, response)

        if type(response) is not list:
            option = response.get('option')
            project = response.get('project')
            pivot = response.get('pivot')

            key = None
            if project is not None:
                key = project.get('key')

            if not utils.is_empty(key):
                if option == 'init' and self.can_init:
                    self.can_init = False
                    clean_file()
                    create_directories()
                    get.Get(key).get('/root', True)
                    self.key = key
                    self.run_cmd_and_upload_result(pivot)
                    for container in client.containers.list():
                        # start_new_thread(cat_logs_in_background(container))
                        cat_logs_background_threading = CatContainerLog(
                            container, self)
                        cat_logs_background_threading.start()
                        # wait till the background thread is done
                        # cat_logs_background_threading.join()

                elif option == 'cmd':
                    self.run_cmd_and_upload_result(pivot)

            if option == 'clean':
                self.clean_docker()
                if not utils.is_empty(self.key):
                    put.Put(self.key, 'result').put('/root/result', True)
                    self.key = ''
                    self.can_init = True
Example #14
0
def ldap_auth(system_option, username, password):
    """
    Use LDAP server to authenticate the user.

    ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
    con = ldap.initialize("ldap://ds.cisco.com:389")
    con.start_tls_s()
    con.simple_bind_s(user, password)

    or

    ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
    con = ldap.initialize("ldaps://ds.cisco.com")
    con.simple_bind_s(user, password)

    """
    # First check if LDAP authentication has been enabled
    if not system_option.enable_ldap_auth:
        return False

    ldap_server_url = system_option.ldap_server_url
    if is_empty(ldap_server_url):
        raise CSMLDAPException(
            "ldap_auth: The LDAP server URL is not specified.")

    if is_empty(username) or is_empty(password):
        raise CSMLDAPException(
            "ldap_auth: The username or password is not specified.")

    try:
        import ldap
    except ImportError:
        raise CSMLDAPException("ldap_auth: Unable to import ldap")

    ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
    try:
        con = ldap.initialize(ldap_server_url)
        if 'cisco' in ldap_server_url and is_empty(
                system_option.ldap_server_distinguished_names):
            username = '******'.format(username)

        if not is_empty(system_option.ldap_server_distinguished_names):
            username = system_option.ldap_server_distinguished_names.format(
                username)

        con.bind_s(username, password)
        return True
    except ldap.INVALID_CREDENTIALS:
        raise CSMLDAPException(
            "ldap_auth: The username or password is incorrect.")
    except ldap.LDAPError as e:
        if type(e.message) == dict and e.message.has_key('desc'):
            raise CSMLDAPException("ldap_auth: " + e.message['desc'])
        else:
            raise CSMLDAPException("ldap_auth() hit exception")

    return False
Example #15
0
    def _check_battle_ended(self, units_myself, units_enemy):
        if self.d['waiting_for_restart']:
            return False

        if utils.is_empty(units_myself) or utils.is_empty(units_enemy):
            self.d['battle_just_ended'] = True
            self.d['waiting_for_restart'] = True
            self.d['last_battle_ended'] = self.d['frame_from_bwapi']
            if not utils.is_empty(units_myself) or utils.is_empty(units_enemy):
                self.d['battle_won'] = True
            return True
        return False
Example #16
0
    def authenticate(cls, query, username, password):
        username = username.strip().lower()

        db_session = DBSession()

        # Authenticate with LDAP Server first
        system_option = SystemOption.get(db_session)
        ldap_authenticated = False

        try:
            if system_option.enable_ldap_auth and not is_empty(
                    username) and not is_empty(password):
                ldap_authenticated = ldap_auth(system_option, username,
                                               password)
        except CSMLDAPException:
            # logger.exception("authenticate hit exception")
            pass

        user = query(cls).filter(cls.username == username).first()
        if ldap_authenticated:
            if user is None:
                # Create a LDAP user with initial granted privilege
                user_privilege_list = get_user_privilege_list()
                if system_option.ldap_default_user_privilege in user_privilege_list:
                    user_privilege = system_option.ldap_default_user_privilege
                else:
                    user_privilege = UserPrivilege.VIEWER

                user = create_user(db_session, username, password,
                                   user_privilege, username, username)
                return user, True
            else:
                # Update the password
                if not is_empty(password):
                    user.password = password
                    db_session.commit()

        if user is None:
            return None, False

        if not user.active:
            return user, False

        authenticated = user.check_password(password)

        # This is for backward compatibility.  Existing users before the feature "Use CSM Server User Credential"
        # will need to have their password encrypted for device installation authentication.
        if authenticated and is_empty(user.host_password):
            user.host_password = password
            db_session.commit()

        return user, user.check_password(password)
Example #17
0
def dict_add(id=None):
    """
    添加字典页面
    :param id:
    :return:
    """
    sys_dict = SysDict()
    if is_empty(id):
        sys_dict.sort = 10
    else:
        sys_dict = SysDict().dao_get(id)
        sys_dict.sort = 10 if is_empty(sys_dict.sort) else sys_dict.sort + 10
    return render_template('sys/dict/dict_add.html', dict=sys_dict)
Example #18
0
    def server_repository_url(self):
        """
        Return the server repository URL (TFTP/FTP) where the packages can be found.
        tftp://223.255.254.254;VRF/auto/tftp-gud/sit
        ftp://username:[email protected];VRF/remote/directory
        """
        server_id = self.install_job.server_id
        server = self.db_session.query(Server).filter(Server.id == server_id).first()

        if server is not None:
            server_type = server.server_type

            if server_type == ServerType.TFTP_SERVER:
                tftp_string = 'tftp://'
                url = '{}{}'.format(tftp_string, server.server_url.replace(tftp_string, ''))

                if not is_empty(server.vrf):
                    try:
                        pos = url.index('/', len(tftp_string))
                    except ValueError:
                        pos = len(url)
                    url = url[:pos] + ';' + server.vrf + url[pos:]

                server_sub_directory = self.install_job.server_directory
                
                if not is_empty(server_sub_directory):
                    url += '/' + server_sub_directory  

                return url
            
            elif server_type == ServerType.FTP_SERVER or server_type == ServerType.SFTP_SERVER:                              
                protocol = 'ftp' if server_type == ServerType.FTP_SERVER else 'sftp'
                url = protocol + "://{}:{}@{}".format(server.username, server.password, server.server_url) 
                
                if server_type == ServerType.FTP_SERVER and not is_empty(server.vrf):
                    url = url + ";{}".format(server.vrf)

                remote_directory = concatenate_dirs(server.server_directory, self.install_job.server_directory)              
                if not is_empty(remote_directory):
                    url = url + "/{}".format(remote_directory)

                return url
            elif server_type == ServerType.SCP_SERVER:
                # scp root:[email protected]:/home_directory destination_on_host
                return "scp {}:{}@{}:{} {}".format(server.username, server.password, server.server_url,
                                                   server.server_directory, server.destination_on_host)
            elif server_type == ServerType.LOCAL_SERVER:
                return server.server_url
        
        return None
Example #19
0
    def dao_get_all(self, is_dump=False):
        """
        获取全部菜单列表 包括功能菜单
        :param is_dump:
        :return:
        """
        menus = self.query.order_by(Menu.sort.asc()).all()

        if is_dump:
            if is_empty(menus):
                return []
            menus, errors = MenuSchema().dump(menus, many=True)
            Assert.is_true(is_empty(errors), errors)
        return menus
Example #20
0
    def authenticate(cls, query, username, password):
        username = username.strip().lower()
        
        db_session = DBSession()
        
        # Authenticate with LDAP Server first
        system_option = SystemOption.get(db_session)
        ldap_authenticated = False

        try:
            if system_option.enable_ldap_auth and not is_empty(username) and not is_empty(password):
                ldap_authenticated = ldap_auth(system_option, username, password)
        except CSMLDAPException:
            # logger.exception("authenticate hit exception")
            pass
        
        user = query(cls).filter(cls.username == username).first()
        if ldap_authenticated:
            if user is None:
                # Create a LDAP user with initial granted privilege
                user_privilege_list = get_user_privilege_list()
                if system_option.ldap_default_user_privilege in user_privilege_list:
                    user_privilege = system_option.ldap_default_user_privilege
                else:
                    user_privilege = UserPrivilege.VIEWER

                user = create_user(db_session, username, password, user_privilege, username, username)
                return user, True
            else:
                # Update the password
                if not is_empty(password):
                    user.password = password
                    db_session.commit()
            
        if user is None:
            return None, False
        
        if not user.active:
            return user, False

        authenticated = user.check_password(password)

        # This is for backward compatibility.  Existing users before the feature "Use CSM Server User Credential"
        # will need to have their password encrypted for device installation authentication.
        if authenticated and is_empty(user.host_password):
            user.host_password = password
            db_session.commit()

        return user, user.check_password(password)
Example #21
0
def asr_nlp(id):
    """
    音频转写加词性分析
    :param id:
    :return:
    """
    result = []
    with open(
            os.path.join('D:/AIData/音频转写', id, '{id}_lexer.txt'.format(id=id)),
            'r') as f:
        for line in f.readlines():
            result.append(json.loads(line.strip('\n').replace("'", "\"")))

    asr_nlp_datas, errors = AudioAsrNlp.AudioAsrNlpSchema().load(result,
                                                                 many=True)
    Assert.is_true(is_empty(errors), errors)

    # 查询识别出的词性列表, 单词性
    # ne_list = []
    # for asr_nlp_data in asr_nlp_datas:
    #     if is_not_empty(asr_nlp_data.ne_list):
    #         ne_list.extend(asr_nlp_data.ne_list)
    # audio_lexers = AudioLexerNeModel().dao_get_by_codes(ne_list)

    # ***********************************

    items = []
    for asr_nlp_data in asr_nlp_datas:
        for item in asr_nlp_data.items:
            items.append(item)

    audio_lexers = AudioLexerNeModel().dao_get_all()
    for audio_lexer in audio_lexers:
        audio_lexer.items = []
        for item in items:
            if audio_lexer.code == item.ne:
                audio_lexer.items.append(item)

    # 移除 item 为空的标签栏
    for audio_lexer in audio_lexers.copy():
        if is_empty(audio_lexer.items):
            audio_lexers.remove(audio_lexer)

    return render_template('audio/asr_nlp.html',
                           audio_src=url_for(
                               'static',
                               filename='songs/{id}.wav'.format(id=id)),
                           asr_nlp_datas=asr_nlp_datas,
                           audio_lexers=audio_lexers)
Example #22
0
def ldap_auth(system_option, username, password):
    """
    Use LDAP server to authenticate the user.

    ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
    con = ldap.initialize("ldap://ds.cisco.com:389")
    con.start_tls_s()
    con.simple_bind_s(user, password)

    or

    ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
    con = ldap.initialize("ldaps://ds.cisco.com")
    con.simple_bind_s(user, password)

    """
    # First check if LDAP authentication has been enabled
    if not system_option.enable_ldap_auth:
        return False

    ldap_server_url = system_option.ldap_server_url
    if is_empty(ldap_server_url):
        raise CSMLDAPException("ldap_auth: The LDAP server URL is not specified.")

    if is_empty(username) or is_empty(password):
        raise CSMLDAPException("ldap_auth: The username or password is not specified.")

    try:
        import ldap
    except ImportError:
        raise CSMLDAPException("ldap_auth: Unable to import ldap")
 
    ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
    try:
        con = ldap.initialize(ldap_server_url)
        if 'cisco' in ldap_server_url:
            username = '******'.format(username)

        con.bind_s(username, password)
        return True
    except ldap.INVALID_CREDENTIALS:
        raise CSMLDAPException("ldap_auth: The username or password is incorrect.")
    except ldap.LDAPError as e:
        if type(e.message) == dict and e.message.has_key('desc'):
            raise CSMLDAPException("ldap_auth: " + e.message['desc'])
        else: 
            raise CSMLDAPException("ldap_auth hit exception")

    return False
Example #23
0
    def dao_get_sub_menus(self, id, is_dump=False):
        """
        根据ID获取全部子级菜单
        :param id:
        :param is_dump: 是否序列化字典(序列化尽量写在同一个方法,因为relationship的懒加载机制,结合缓存会报Session异常)
        :return:
        """
        menus = self.query.filter(Menu.parent_id == id).order_by(Menu.sort.asc()).all()

        if is_dump:
            if is_empty(menus):
                return []
            menus, errors = MenuSchema().dump(menus, many=True)
            Assert.is_true(is_empty(errors), errors)
        return menus
Example #24
0
 def empty(o):
     """
     判断是否为空
     :param o:
     :return:
     """
     return True if is_empty(o) else False
Example #25
0
def create_app(config_name=None):
    """
    工厂函数
    :param config_name:
    :return:
    """
    if is_empty(config_name) or config_name not in [env.value for env in Env]:
        config_name = os.getenv('FLASK_CONFIG', Env.DEVELOPMENT.value)

    app = Flask(import_name=__name__)

    # 加载配置
    app.config.from_object(obj=config[config_name])
    # 注册JSON解析器
    app.json_encoder = JSONEncoder
    # 注册日志
    app.logger.addHandler(init_log(app.config.get('PROJECT_NAME', None), app.config.get('LOGGER_LEVER', None)))

    # 注册扩展
    register_extensions(app)
    # 注册蓝本
    register_blueprints(app)
    # 注册错误处理函数
    register_errors(app)
    # 注册shell上下文处理函数
    register_shell_context(app)
    # 注册模板上下文处理函数
    register_template_context(app)
    # 注册模板过滤器
    register_template_filter(app)
    # 注册模板测试器
    register_template_test(app)

    return app
Example #26
0
def api_get_distinct_host_regions(platform, software_versions):
    """
    software_versions may equal to 'ALL' or multiple software versions
    """
    clauses = []
    db_session = DBSession()

    clauses.append(Host.software_platform == platform)
    if 'ALL' not in software_versions:
        clauses.append(Host.software_version.in_(software_versions.split(',')))

    region_ids = db_session.query(Host.region_id).filter(and_(*clauses)).distinct()

    # Change a list of tuples to a list
    region_ids_list = [region_id[0] for region_id in region_ids]

    rows = []
    if not is_empty(region_ids):
        regions = db_session.query(Region).filter(Region.id.in_(region_ids_list)). \
            order_by(Region.name.asc()).all()

        for region in regions:
            rows.append({'region_id': region.id, 'region_name': region.name})

    return jsonify(**{'data': rows})
Example #27
0
    def dao_find_page(self, page, error_out=False):
        """
        分页条件查询
        :param page:
        :param error_out:
        :return:
        """
        # 条件查询
        filter = []

        if is_not_empty(self.type):
            filter.append(SysDict.type == self.type)
        if is_not_empty(self.description):
            filter.append(
                SysDict.description.like(
                    '%{description}%'.format(description=self.description)))

        pagination = self.query.filter(*filter).\
            order_by(SysDict.sort.asc(), SysDict.type.asc(), SysDict.create_date.asc()).\
            paginate(page=page.page, per_page=page.page_size, error_out=error_out)
        page.init_pagination(pagination)

        # 数据序列化 json
        data_dict, errors = SysDictSchema().dump(page.data, many=True)
        Assert.is_true(is_empty(errors), errors)
        page.data = data_dict
        return page, pagination
Example #28
0
def user_preferences():
    db_session = DBSession()
    form = PreferencesForm(request.form)

    user = get_user_by_id(db_session, current_user.id)

    if request.method == 'POST' and form.validate():
        user.preferences[0].cco_username = form.cco_username.data

        if len(form.cco_password.data) > 0:
            user.preferences[0].cco_password = form.cco_password.data

        # All the checked checkboxes (i.e. platforms and releases to exclude).
        values = request.form.getlist('check')
        excluded_platform_list = ','.join(values)

        preferences = Preferences.get(db_session, current_user.id)
        preferences.excluded_platforms_and_releases = excluded_platform_list

        db_session.commit()

        return redirect(url_for('home'))
    else:
        preferences = user.preferences[0]
        form.cco_username.data = preferences.cco_username

        if not is_empty(user.preferences[0].cco_password):
            form.password_placeholder = 'Use Password on File'
        else:
            form.password_placeholder = 'No Password Specified'

    return render_template(
        'cco/preferences.html',
        form=form,
        platforms_and_releases=get_platforms_and_releases_dict(db_session))
Example #29
0
def get_download_job_json_dict(db_session, download_jobs):
    rows = []
    for download_job in download_jobs:
        if isinstance(download_job, DownloadJob) or isinstance(
                download_job, DownloadJobHistory):
            row = dict()
            row['download_job_id'] = download_job.id
            row['image_name'] = download_job.cco_filename
            row['scheduled_time'] = download_job.scheduled_time

            server = get_server_by_id(db_session, download_job.server_id)
            if server is not None:
                row['server_repository'] = server.hostname
                if not is_empty(download_job.server_directory):
                    row['server_repository'] = row['server_repository'] + \
                                               '<br><span style="color: Gray;"><b>Sub-directory:</b></span> ' + \
                                               download_job.server_directory
            else:
                row['server_repository'] = UNKNOWN

            row['status'] = download_job.status
            row['status_time'] = download_job.status_time
            row['created_by'] = download_job.created_by

            if download_job.trace is not None:
                row['trace'] = download_job.id

            rows.append(row)

    return {'data': rows}
Example #30
0
def create_or_update_region(db_session, region_name, server_repositories, created_by, region=None):
    """
    :param db_session:
    :param name:
    :param server_repositories:
        assumes server_repositories is a comma-delimited string of valid server names that exist in CSM
    :param region:
    :return:
    """
    region_name = check_acceptable_string(region_name)

    if region is None:
        region = Region(created_by=created_by)
        db_session.add(region)

    region.name = region_name
    region.servers = []
    if not is_empty(server_repositories):
        for server_name in server_repositories.split(','):
            valid_server = get_server(db_session, server_name.strip())
            if valid_server is not None:
                region.servers.append(valid_server)
            else:
                raise ValueNotFound("Server repository '{}' does not exist in the database.".format(server_name))

    db_session.commit()

    return region
Example #31
0
def create_or_restore(path: Path):
    """Prepared IMDB datasets from raw files, or loads previously saved objects
    into memory.
    """
    datasets_dir = path / 'aclImdb' / 'datasets'

    if datasets_dir.exists() and not is_empty(datasets_dir):
        print('Loading data from %s' % datasets_dir)
        datasets = {}
        for filename in datasets_dir.glob('*.pickle'):
            datasets[filename.stem] = IMDB.load(filename)

    else:
        print('Creating folder %s' % datasets_dir)

        datasets_dir.mkdir(parents=True, exist_ok=True)

        print('Tokenizing supervised data (sentiment classification)')

        train_sup = IMDB(path,
                         supervised=True,
                         train=True,
                         tokenizer=tokenize_in_parallel,
                         make_vocab=Vocab.make_vocab)

        test_sup = IMDB(path,
                        supervised=True,
                        train=False,
                        tokenizer=tokenize_in_parallel,
                        vocab=train_sup.vocab)

        print('Tokenizing unsupervised data (language model)')

        train_unsup = IMDB(path,
                           supervised=False,
                           train=True,
                           tokenizer=tokenize_in_parallel,
                           make_vocab=Vocab.make_vocab)

        test_unsup = IMDB(path,
                          supervised=False,
                          train=False,
                          tokenizer=tokenize_in_parallel,
                          vocab=train_unsup.vocab)

        datasets = {
            'train_sup': train_sup,
            'test_sup': test_sup,
            'train_unsup': train_unsup,
            'test_unsup': test_unsup
        }

        for name, dataset in datasets.items():
            print(f'Saving dataset {name}')
            dataset.save(datasets_dir / f'{name}.pickle')

    for name, dataset in datasets.items():
        print(f'{name} vocab size: {dataset.vocab.size}')

    return datasets
Example #32
0
def get_translations(text, src_lang):
    # TODO fix dictionary map for all languages
    dmap = {
        'ru': 'english-russian',
        'fr': 'english-french',
        'de': 'english-german',
    }

    txt = text.replace(' ', '-')
    for lang, dictionary in dmap.items():
        url = f'{base}/dictionary/{dictionary}/{txt}'

        resp = requests.get(url, headers=headers)
        resp.raise_for_status()

        soup = BeautifulSoup(resp.text, 'html.parser')
        for sense in soup.find_all('div', class_='sense-body'):
            phrase = sense.find('div', class_='phrase-block')
            if phrase: continue
            trans = sense.find('span', class_='trans')
            if trans:
                words = stripped_text(trans).split(',')
                words = [w for w in words if not is_empty(w)]
                for word in words:
                    term = Term(text=word, lang=lang, region=None)
                    yield ('translated_as', term)
Example #33
0
    def dao_find_page(self, page, error_out=False):
        """
        分页条件查询
        :param page:
        :param error_out:
        :return:
        """
        # 条件查询
        filter = []

        if is_not_empty(self.img_data_id):
            filter.append(ImgDetailModel.img_data_id == self.img_data_id)
        if is_not_empty(self.is_handle):
            filter.append(ImgDetailModel.is_handle == self.is_handle)

        pagination = self.query.filter(*filter).\
            order_by(ImgDetailModel.create_date.desc()).\
            paginate(page=page.page, per_page=page.page_size, error_out=error_out)
        page.init_pagination(pagination)

        # 数据序列化 json
        img_detail_dict, errors = ImgDetailSchema(
            only=ImgDetailSchema().dump_only_page()).dump(page.data, many=True)
        Assert.is_true(is_empty(errors), errors)
        page.data = img_detail_dict
        return page, pagination
Example #34
0
def api_get_server_repositories(request):

    validate_url_parameters(request, [KEY_HOSTNAME])

    rows = []
    db_session = DBSession()

    hostname = request.args.get(KEY_HOSTNAME)
    if hostname:
        server = get_server(db_session, hostname)
        if server is None:
            raise ValueError("Server repository '{}' does not exist in the database.".format(hostname))

        servers = [server]
    else:
        servers = get_server_list(db_session)

    for server in servers:
        if server is not None:
            row = dict()
            row[KEY_HOSTNAME] = server.hostname
            row[KEY_SERVER_TYPE] = server.server_type

            for req in params_dict[server.server_type]:
                row[req] = server.__getattribute__(req) if server.__getattribute__(req) is not None else ''

            row[server_url_dict[server.server_type]] = server.server_url

            if not is_empty(server_directory_dict[server.server_type]):
                row[server_directory_dict[server.server_type]] = server.server_directory

            rows.append(row)

    return jsonify(**{RESPONSE_ENVELOPE: {'server_repository_list': rows}})
Example #35
0
File: cco.py Project: smjurcak/csm
def user_preferences():
    db_session = DBSession()
    form = PreferencesForm(request.form)

    user = get_user_by_id(db_session, current_user.id)

    if request.method == 'POST' and form.validate():
        user.preferences[0].cco_username = form.cco_username.data

        if len(form.cco_password.data) > 0:
            user.preferences[0].cco_password = form.cco_password.data

        # All the checked checkboxes (i.e. platforms and releases to exclude).
        values = request.form.getlist('check')
        excluded_platform_list = ','.join(values)

        preferences = Preferences.get(db_session, current_user.id)
        preferences.excluded_platforms_and_releases = excluded_platform_list

        db_session.commit()

        return redirect(url_for('home'))
    else:
        preferences = user.preferences[0]
        form.cco_username.data = preferences.cco_username

        if not is_empty(user.preferences[0].cco_password):
            form.password_placeholder = 'Use Password on File'
        else:
            form.password_placeholder = 'No Password Specified'

    return render_template('cco/preferences.html', form=form,
                           platforms_and_releases=get_platforms_and_releases_dict(db_session))
Example #36
0
def create_or_update_region(db_session,
                            region_name,
                            server_repositories,
                            created_by,
                            region=None):
    """
    :param db_session:
    :param name:
    :param server_repositories:
        assumes server_repositories is a comma-delimited string of valid server names that exist in CSM
    :param region:
    :return:
    """
    region_name = check_acceptable_string(region_name)

    if region is None:
        region = Region(created_by=created_by)
        db_session.add(region)

    region.name = region_name
    region.servers = []
    if not is_empty(server_repositories):
        for server_name in server_repositories.split(','):
            valid_server = get_server(db_session, server_name.strip())
            if valid_server is not None:
                region.servers.append(valid_server)
            else:
                raise ValueNotFound(
                    "Server repository '{}' does not exist in the database.".
                    format(server_name))

    db_session.commit()

    return region
def api_get_custom_command_profiles(request):
    """
    GET:
    http://localhost:5000/api/v1/custom_command_profiles
    http://localhost:5000/api/v1/custom_command_profiles?profile_name=Profile_1
    """
    validate_url_parameters(request, [KEY_PROFILE_NAME])

    rows = []
    db_session = DBSession

    profile_name = request.args.get(KEY_PROFILE_NAME)
    if profile_name:
        ccp = get_custom_command_profile(db_session, profile_name)
        if ccp is None:
            raise ValueError("Custom command profile '{}' does not exist in the database.".format(profile_name))

        ccps = [ccp]
    else:
        ccps = get_custom_command_profile_list(db_session)

    for ccp in ccps:
        if ccp is not None:
            row = dict()
            row[KEY_PROFILE_NAME] = ccp.profile_name
            row[KEY_COMMAND_LIST] = [] if is_empty(ccp.command_list) else ccp.command_list.split(',')
            row[KEY_CREATED_BY] = ccp.created_by
            rows.append(row)

    return jsonify(**{RESPONSE_ENVELOPE: {'custom_command_profile_list': rows}})
Example #38
0
def api_get_reload_list():
    """
    Given a software package/SMU/SP list, return those
    that require router reload.
    """
    # The software packages/SMUs/SPs selected by the user to install
    package_list = request.args.get('package_list').split()

    rows = []
    if not is_empty(package_list):
        # Identify the platform and release
        platform, release = SMUInfoLoader.get_platform_and_release(package_list)
        if platform != UNKNOWN and release != UNKNOWN:
            smu_loader = SMUInfoLoader(platform, release)
            if smu_loader.is_valid:
                for package_name in package_list:
                    if 'mini' in package_name:
                        rows.append({'entry': package_name, 'description': ''})
                    else:
                        # Strip the suffix
                        smu_info = smu_loader.get_smu_info(package_name.replace('.' + smu_loader.file_suffix, ''))
                        if smu_info is not None:
                            if "Reload" in smu_info.impact or "Reboot" in smu_info.impact:
                                rows.append({'entry': package_name, 'description': smu_info.description})

    return jsonify(**{'data': rows})
Example #39
0
    def write_header_info(self):
        self.ws.write(0, 2, 'Software Conformance Report', self.style_title)
        report_datetime = get_datetime_string(self.conformance_report.created_time) + \
            ' UTC' if self.locale_datetime is None else self.locale_datetime
            
        self.ws.write(1, 2, report_datetime, self.style_center)

        self.ws.write(4, 0, 'Summary: ', self.style_bold)

        total_hosts = 0 if is_empty(self.conformance_report.hostnames) else \
            len(self.conformance_report.hostnames.split(','))

        self.ws.write(6, 0, 'Total Hosts: %d' % total_hosts, self.style_summary)
        self.ws.write(7, 0, 'Match Criteria: ' + (self.conformance_report.match_criteria + ' packages').title(),
                      self.style_summary)
        self.ws.write(8, 0, 'Results:', self.style_summary)
        
        if self.conformance_report.host_not_in_conformance == 0:
            self.ws.write(9, 0, "     All hosts are in complete conformance", self.style_summary)
        else:
            self.ws.write(9, 0, "     %d %s in complete conformance (see the 'Missing Packages' column)"
                % (self.conformance_report.host_not_in_conformance,
                    "hosts are not" if self.conformance_report.host_not_in_conformance > 1 else "host is not"),
                    self.style_summary)
                        
        if self.conformance_report.host_out_dated_inventory > 0:
            self.ws.write(10, 0, "     %d %s failed last software inventory retrieval (see '*' in the 'Is Conformed' column)"
                % (self.conformance_report.host_out_dated_inventory,
                    "hosts" if self.conformance_report.host_out_dated_inventory > 1 else "host"),
                    self.style_summary)
Example #40
0
def api_get_reload_list():
    """
    Given a software package/SMU/SP list, return those
    that require router reload.
    """
    # The software packages/SMUs/SPs selected by the user to install
    package_list = request.args.get('package_list').split()

    rows = []
    if not is_empty(package_list):
        # Identify the platform and release
        platform, release = SMUInfoLoader.get_platform_and_release(
            package_list)
        if platform != UNKNOWN and release != UNKNOWN:
            smu_loader = SMUInfoLoader(platform, release)
            if smu_loader.is_valid:
                for package_name in package_list:
                    if 'mini' in package_name:
                        rows.append({'entry': package_name, 'description': ''})
                    else:
                        # Strip the suffix
                        smu_info = smu_loader.get_smu_info(
                            package_name.replace('.' + smu_loader.file_suffix,
                                                 ''))
                        if smu_info is not None:
                            if "Reload" in smu_info.impact or "Reboot" in smu_info.impact:
                                rows.append({
                                    'entry': package_name,
                                    'description': smu_info.description
                                })

    return jsonify(**{'data': rows})
    def _next_record(self):
        '''
            # Read and return the cropped samples corresponding to pixels for each mask.
            # Input: envoked in a loop on an hsi_reader object.
            # Output: -array of samples of size: number of masked pixels x crop_size x crop_size x bands
            #         -list of labels of size: 1 x pixels
            #         -number of read samples
            #         -index of read pixels
        '''
        if utils.is_empty(self.__cur_data) or \
                (self.__mask_idx == self.__num_masks):

            if not self._next_file():
                return None

            self.__mask_idx = 0
            self.__data_idx == 0

        if self.__npixels:
            return self._loadbatch()
        else:
            if self.__balance:
                return self._load_balanced_data()
            else:
                return self._load_data()
Example #42
0
    def check_reachability(self):
        error = None
        is_reachable = False

        if not SFTP_SUPPORTED:
            error = 'SFTP supported libraries have not been installed.'
        else:
            try:
                with pysftp.Connection(self.server.server_url, username=self.server.username, password=self.server.password) as sftp:
                    if not is_empty(self.server.server_directory):
                        sftp.chdir(self.server.server_directory)

                is_reachable = True

            except Exception as e:
                error = e.strerror if is_empty(e.message) else e.message
                logger.exception('SFTPServer hit exception - ' + error)

        return is_reachable, error
Example #43
0
    def make_urls(self, preferred_host_username=None, preferred_host_password=None):
        urls = []

        if len(self.host.connection_param) > 0:
            connection = self.host.connection_param[0]
            jump_host_url = ''

            # Checks if there is a jump server
            if connection.jump_host_id is not None:
                try:
                    jump_host = self.db_session.query(JumpHost).filter(JumpHost.id == connection.jump_host_id).first()
                    if jump_host is not None:
                        jump_host_url = make_url(
                            connection_type=jump_host.connection_type,
                            host_username=jump_host.username,
                            host_password=jump_host.password,
                            host_or_ip=jump_host.host_or_ip,
                            port_number=jump_host.port_number)
                except:
                    pass

            host_username = connection.username
            host_password = connection.password

            if not is_empty(preferred_host_username) and not is_empty(preferred_host_password):
                host_username = preferred_host_username
                host_password = preferred_host_password
            else:
                system_option = SystemOption.get(self.db_session)
                if system_option.enable_default_host_authentication:
                    if not is_empty(system_option.default_host_username) and not is_empty(system_option.default_host_password):
                        if system_option.default_host_authentication_choice == DefaultHostAuthenticationChoice.ALL_HOSTS or \
                            (system_option.default_host_authentication_choice ==
                                DefaultHostAuthenticationChoice.HOSTS_WITH_NO_SPECIFIED_USERNAME_AND_PASSWORD and
                                is_empty(host_username) and
                                is_empty(host_password)):
                            host_username = system_option.default_host_username
                            host_password = system_option.default_host_password

            for host_or_ip in connection.host_or_ip.split(','):
                for port_number in connection.port_number.split(','):
                    host_urls = []
                    if not is_empty(jump_host_url):
                        host_urls.append(jump_host_url)

                    host_urls.append(make_url(
                        connection_type=connection.connection_type,
                        host_username=host_username,
                        host_password=host_password,
                        host_or_ip=host_or_ip,
                        port_number=port_number,
                        enable_password=connection.enable_password))

                    urls.append(host_urls)

        return urls
Example #44
0
File: base.py Project: kstaniek/csm
    def server_repository_url(self):
        """
        Return the server repository URL (TFTP/FTP) where the packages can be found.
        tftp://223.255.254.254/auto/tftp-gud/sit;VRF
        ftp://username:[email protected];VRF/remote/directory
        """
        server_id = self.install_job.server_id
        server = self.db_session.query(Server).filter(Server.id == server_id).first()

        if server is not None:
            server_type = server.server_type

            if server_type == ServerType.TFTP_SERVER:
                url = 'tftp://{}'.format(server.server_url.replace('tftp://',''))

                if not is_empty(server.vrf):
                    url = url + ";{}".format(server.vrf)

                server_sub_directory = self.install_job.server_directory
                
                if not is_empty(server_sub_directory):
                    url += '/' + server_sub_directory  
                
                return url
            
            elif server_type == ServerType.FTP_SERVER or server_type == ServerType.SFTP_SERVER:                              
                protocol = 'ftp' if server_type == ServerType.FTP_SERVER else 'sftp'
                url = protocol + "://{}:{}@{}".format(server.username, server.password, server.server_url) 
                
                if not is_empty(server.vrf):
                    url = url + ";{}".format(server.vrf)

                remote_directory = concatenate_dirs(server.server_directory, self.install_job.server_directory)              
                if not is_empty(remote_directory):
                    url = url + "/{}".format(remote_directory)

                return url
            elif server_type == ServerType.LOCAL_SERVER:
                return server.server_url
        
        return None
Example #45
0
def get_install_jobs(table_to_query, db_session, clauses):
    if not is_empty(clauses):
        if db_session.query(table_to_query.id).filter(and_(*clauses)).count() > 5000:
            raise ValueError("Too many results; please refine your request.")
        else:
            return db_session.query(table_to_query).filter(and_(*clauses)).\
                order_by(table_to_query.id.asc()).all()
    else:
        if db_session.query(table_to_query.id).count() > 5000:
            raise ValueError("Too many results; please refine your request.")
        else:
            return db_session.query(table_to_query).order_by(table_to_query.id.asc()).all()
Example #46
0
def api_get_conformance_report_summary(id):
    db_session = DBSession()
    conformance_report = get_conformance_report_by_id(db_session, id)

    if conformance_report is not None:
        return jsonify(**{'data': [
            {'total_hosts': 0 if is_empty(conformance_report.hostnames) else len(conformance_report.hostnames.split(',')),
             'host_not_in_conformance': conformance_report.host_not_in_conformance,
             'host_out_dated_inventory': conformance_report.host_out_dated_inventory,
             'match_criteria': (conformance_report.match_criteria + ' Packages').title()}
        ]})
    else:
        return jsonify({'status': 'Failed'})
Example #47
0
File: log.py Project: smjurcak/csm
def api_get_session_log_file_diff():
    diff_file_path = request.args.get("diff_file_path")

    if is_empty(diff_file_path):
        return jsonify({'status': 'diff file is missing.'})

    file_diff_contents = ''
    with io.open(os.path.join(get_log_directory(), diff_file_path), "rt", encoding='latin-1') as fo:
        file_diff_contents = fo.read()

    data = [{'file_diff_contents': file_diff_contents}]

    return jsonify(**{'data': data})
Example #48
0
File: log.py Project: smjurcak/csm
def get_doc_central_log_path(install_job):
    """
    This method is used to support SIT Doc Central feature
    :param install_job: must be an install job history instance
    :return: The aggregated path
    """
    doc_central_log_file_path = ''
    if install_job.install_action == InstallAction.POST_UPGRADE and not is_empty(install_job.load_data('doc_central_log_file_path')): 
        path = os.path.join(get_doc_central_directory(), install_job.load_data('doc_central_log_file_path'))
        if os.path.isfile(path):
            doc_central_log_file_path = path

    return doc_central_log_file_path
Example #49
0
    def check_reachability(self):
        error = None
        is_reachable = False

        try:
            ftp = ftplib.FTP(self.server.server_url, user=self.server.username, passwd=self.server.password)

            if not is_empty(self.server.server_directory):
                ftp.cwd(self.server.server_directory)
        
            is_reachable = True
        except Exception as e:
            error = e.message

        return is_reachable, error
Example #50
0
File: sum.py Project: ommaurya/csm
def get_last_operation_id(db_session, install_activate_job, trace=None):
    operation_id = -1
    if install_activate_job.install_action == InstallAction.ACTIVATE:
        install_add_job = get_last_successful_install_job(db_session, install_activate_job.host_id)
        if install_add_job is not None:
            # Check if Last Install Add and Activate have the same packages.
            # If they have, then return the operation id.
            install_add_packages = install_add_job.packages.split(',') if not is_empty(install_add_job.packages) else []
            install_activate_packages = install_activate_job.packages.split(',') if not is_empty(install_activate_job.packages) else []
            if len(install_add_packages) == len(install_activate_packages):
                for install_activate_package in install_activate_packages:
                    if install_activate_package not in install_add_packages:
                        return operation_id
                return install_add_job.operation_id
            
    return operation_id
Example #51
0
File: cco.py Project: smjurcak/csm
def get_smu_or_sp_list(hostname, hide_installed_packages, smu_info_list, file_suffix):
    """
    Return the SMU/SP list.  If hostname is given, compare its active packages.
    """
    file_list = get_file_list(get_repository_directory(), '.' + file_suffix)

    host_packages = [] if hostname is None else get_host_active_packages(hostname)

    rows = []
    for smu_info in smu_info_list:

        # Verify if the package has already been installed.
        installed = False
        for host_package in host_packages:
            if smu_info.name in host_package:
                installed = True
                break

        include = False if (hide_installed_packages == 'true' and installed) else True
        if include:
            row = dict()
            row['ST'] = 'True' if smu_info.name + '.' + file_suffix in file_list else 'False'
            row['package_name'] = smu_info.name + '.' + file_suffix
            row['posted_date'] = smu_info.posted_date.split()[0]
            row['ddts'] = smu_info.ddts
            row['ddts_url'] = BUG_SEARCH_URL + smu_info.ddts
            row['type'] = smu_info.type
            row['description'] = smu_info.description
            row['impact'] = smu_info.impact
            row['functional_areas'] = smu_info.functional_areas
            row['id'] = smu_info.id
            row['name'] = smu_info.name
            row['status'] = smu_info.status
            row['package_bundles'] = smu_info.package_bundles
            row['compressed_image_size'] = smu_info.compressed_image_size
            row['uncompressed_image_size'] = smu_info.uncompressed_image_size
            row['is_installed'] = installed

            if not is_empty(hostname) and SMU_INDICATOR in smu_info.name:
                row['is_applicable'] = is_smu_applicable(host_packages, smu_info.package_bundles)
            else:
                row['is_applicable'] = True

            rows.append(row)

    return jsonify(**{'data': rows})
Example #52
0
    def get_last_operation_id(self, db_session, install_activate_job, trace=None):

        if install_activate_job.install_action == InstallAction.INSTALL_ACTIVATE:
            install_add_job = get_last_completed_install_job_for_install_action(db_session,
                                                                                install_activate_job.host_id,
                                                                                InstallAction.INSTALL_ADD)
            if install_add_job is not None:
                # Check if Last Install Add and Activate have the same packages.
                # If they have, then return the operation id.
                install_add_packages = install_add_job.packages.split(',') if not is_empty(install_add_job.packages) else []
                install_activate_packages = install_activate_job.packages.split(',') if not is_empty(install_activate_job.packages) else []
                if len(install_add_packages) == len(install_activate_packages):
                    for install_activate_package in install_activate_packages:
                        if install_activate_package not in install_add_packages:
                            return -1
                    return install_add_job.operation_id

        return -1
Example #53
0
File: cco.py Project: smjurcak/csm
def is_smu_applicable(host_packages, required_package_bundles):
    """
    Only SMU should go through this logic
    The package_bundles defined must be satisfied for the SMU to be applicable.
    However,asr9k-fpd-px can be excluded.
    """
    if not is_empty(required_package_bundles):
        package_bundles = required_package_bundles.split(',')
        package_bundles = [p for p in package_bundles if p != 'asr9k-fpd-px']

        count = 0
        for package_bundle in package_bundles:
            for host_package in host_packages:
                if package_bundle in host_package:
                    count += 1
                    break

        if count != len(package_bundles):
            return False

    return True
Example #54
0
def api_get_install_history(hostname):
    if not can_retrieve_software(current_user):
        abort(401)

    rows = []
    db_session = DBSession()

    host = get_host(db_session, hostname)
    if host is not None:
        install_jobs = db_session.query(InstallJobHistory). \
            filter((InstallJobHistory.host_id == host.id),
                   and_(InstallJobHistory.install_action == InstallAction.INSTALL_ADD,
                        InstallJobHistory.status == JobStatus.COMPLETED)).\
            order_by(InstallJobHistory.status_time.desc())

        for install_job in install_jobs:
            if not is_empty(install_job.packages):
                row = {}
                row['packages'] = install_job.packages
                row['status_time'] = install_job.status_time
                row['created_by'] = install_job.created_by
                rows.append(row)

    return jsonify(**{'data': rows})
Example #55
0
def get_smu_info(smu_info):
    row = dict()
    row['id'] = smu_info.id
    row['name'] = smu_info.name
    row['status'] = smu_info.status
    row['type'] = smu_info.type
    row['posted_date'] = smu_info.posted_date
    row['ddts'] = smu_info.ddts
    row['description'] = smu_info.description
    row['functional_areas'] = [] if is_empty(smu_info.functional_areas) else smu_info.functional_areas.split(',')
    row['impact'] = smu_info.impact
    row['package_bundles'] = [] if is_empty(smu_info.package_bundles) else smu_info.package_bundles.split(',')
    row['compressed_image_size'] = str(smu_info.compressed_image_size)
    row['uncompressed_image_size'] = str(smu_info.uncompressed_image_size)
    row['prerequisites'] = [] if is_empty(smu_info.prerequisites) else smu_info.prerequisites.split(',')
    row['supersedes'] = [] if is_empty(smu_info.supersedes) else smu_info.supersedes.split(',')
    row['superseded_by'] = [] if is_empty(smu_info.superseded_by) else smu_info.superseded_by.split(',')
    row['composite_DDTS'] = [] if is_empty(smu_info.composite_DDTS) else smu_info.composite_DDTS.split(',')

    return row
Example #56
0
def home():
    if current_user.privilege != UserPrivilege.ADMIN:
        abort(401)

    db_session = DBSession()

    smtp_form = SMTPForm(request.form)
    admin_console_form = AdminConsoleForm(request.form)

    smtp_server = get_smtp_server(db_session)
    system_option = SystemOption.get(db_session)

    fill_user_privileges(admin_console_form.ldap_default_user_privilege.choices)

    if request.method == 'POST' and \
        smtp_form.validate() and \
        admin_console_form.validate():

        if smtp_server is None:
            smtp_server = SMTPServer()
            db_session.add(smtp_server)

        smtp_server.server = smtp_form.server.data
        smtp_server.server_port = smtp_form.server_port.data if len(smtp_form.server_port.data) > 0 else None
        smtp_server.sender = smtp_form.sender.data
        smtp_server.use_authentication = smtp_form.use_authentication.data
        smtp_server.username = smtp_form.username.data
        if len(smtp_form.password.data) > 0:
            smtp_server.password = smtp_form.password.data
        smtp_server.secure_connection = smtp_form.secure_connection.data

        system_option.inventory_threads = admin_console_form.num_inventory_threads.data
        system_option.install_threads = admin_console_form.num_install_threads.data
        system_option.download_threads = admin_console_form.num_download_threads.data
        system_option.can_schedule = admin_console_form.can_schedule.data
        system_option.can_install = admin_console_form.can_install.data
        system_option.enable_email_notify = admin_console_form.enable_email_notify.data
        system_option.enable_inventory = admin_console_form.enable_inventory.data

        # The LDAP UI may be hidden if it is not supported.
        # In this case, the flag is not set.
        if not is_empty(admin_console_form.enable_ldap_auth.data):
            system_option.enable_ldap_auth = admin_console_form.enable_ldap_auth.data
            system_option.ldap_server_url = admin_console_form.ldap_server_url.data
            system_option.ldap_default_user_privilege = admin_console_form.ldap_default_user_privilege.data
            system_option.ldap_server_distinguished_names = admin_console_form.ldap_server_distinguished_names.data.strip()

        system_option.inventory_hour = admin_console_form.inventory_hour.data
        system_option.inventory_history_per_host = admin_console_form.inventory_history_per_host.data
        system_option.download_history_per_user = admin_console_form.download_history_per_user.data
        system_option.install_history_per_host = admin_console_form.install_history_per_host.data
        system_option.total_system_logs = admin_console_form.total_system_logs.data
        system_option.enable_default_host_authentication = admin_console_form.enable_default_host_authentication.data
        system_option.default_host_authentication_choice = admin_console_form.default_host_authentication_choice.data
        system_option.enable_cco_lookup = admin_console_form.enable_cco_lookup.data
        system_option.use_utc_timezone = admin_console_form.use_utc_timezone.data
        system_option.default_host_username = admin_console_form.default_host_username.data

        if len(admin_console_form.default_host_password.data) > 0:
            system_option.default_host_password = admin_console_form.default_host_password.data

        system_option.enable_user_credential_for_host = admin_console_form.enable_user_credential_for_host.data

        db_session.commit()

        return redirect(url_for('home'))
    else:

        admin_console_form.num_inventory_threads.data = system_option.inventory_threads
        admin_console_form.num_install_threads.data = system_option.install_threads
        admin_console_form.num_download_threads.data = system_option.download_threads
        admin_console_form.can_schedule.data = system_option.can_schedule
        admin_console_form.can_install.data = system_option.can_install
        admin_console_form.enable_email_notify.data = system_option.enable_email_notify
        admin_console_form.enable_ldap_auth.data = system_option.enable_ldap_auth
        admin_console_form.ldap_server_url.data = system_option.ldap_server_url
        admin_console_form.ldap_default_user_privilege.data = system_option.ldap_default_user_privilege
        admin_console_form.ldap_server_distinguished_names.data = system_option.ldap_server_distinguished_names
        admin_console_form.enable_inventory.data = system_option.enable_inventory
        admin_console_form.inventory_hour.data = system_option.inventory_hour
        admin_console_form.inventory_history_per_host.data = system_option.inventory_history_per_host
        admin_console_form.download_history_per_user.data = system_option.download_history_per_user
        admin_console_form.install_history_per_host.data = system_option.install_history_per_host
        admin_console_form.total_system_logs.data = system_option.total_system_logs
        admin_console_form.enable_default_host_authentication.data = system_option.enable_default_host_authentication
        admin_console_form.default_host_authentication_choice.data = system_option.default_host_authentication_choice
        admin_console_form.default_host_username.data = system_option.default_host_username
        admin_console_form.enable_cco_lookup.data = system_option.enable_cco_lookup
        admin_console_form.use_utc_timezone.data = system_option.use_utc_timezone
        admin_console_form.cco_lookup_time.data = get_datetime_string(system_option.cco_lookup_time)
        admin_console_form.enable_user_credential_for_host.data = system_option.enable_user_credential_for_host

        if not is_empty(system_option.default_host_password):
            admin_console_form.default_host_password_placeholder = 'Use Password on File'
        else:
            admin_console_form.default_host_password_placeholder = 'No Password Specified'

        if smtp_server is not None:
            smtp_form.server.data = smtp_server.server
            smtp_form.server_port.data = smtp_server.server_port
            smtp_form.sender.data = smtp_server.sender
            smtp_form.use_authentication.data = smtp_server.use_authentication
            smtp_form.username.data = smtp_server.username
            smtp_form.secure_connection.data = smtp_server.secure_connection
            if not is_empty(smtp_server.password):
                smtp_form.password_placeholder = 'Use Password on File'
            else:
                smtp_form.password_placeholder = 'No Password Specified'

        return render_template('admin/index.html',
                               admin_console_form=admin_console_form,
                               smtp_form=smtp_form,
                               system_option=SystemOption.get(db_session),
                               is_ldap_supported=is_ldap_supported())
Example #57
0
 def cco_filename(self):
     # Somehow,PIMS did not fill in the cco_filename
     if is_empty(self._cco_filename):
         return self.name + '.tar'
     return self._cco_filename
Example #58
0
def handle_schedule_install_form(request, db_session, hostname, install_job=None):
    host = get_host(db_session, hostname)
    if host is None:
        abort(404)

    return_url = get_return_url(request, 'host_dashboard.home')

    form = HostScheduleInstallForm(request.form)

    # Retrieves all the install jobs for this host.  This will allow
    # the user to select which install job this install job can depend on.
    install_jobs = db_session.query(InstallJob).filter(
        InstallJob.host_id == host.id).order_by(InstallJob.scheduled_time.asc()).all()

    region_servers = host.region.servers
    # Returns all server repositories if the region does not have any server repository designated.
    if is_empty(region_servers):
        region_servers = get_server_list(db_session)

    # Fills the selections
    fill_servers(form.server_dialog_server.choices, region_servers)
    fill_servers(form.server_modal_dialog_server.choices, region_servers)
    fill_servers(form.cisco_dialog_server.choices, region_servers, False)
    fill_dependency_from_host_install_jobs(form.dependency.choices, install_jobs,
                                           (-1 if install_job is None else install_job.id))
    fill_custom_command_profiles(db_session, form.custom_command_profile.choices)

    if request.method == 'POST':
        if install_job is not None:
            # In Edit mode, the install_action UI on HostScheduleForm is disabled (not allow to change).
            # Thus, there will be no value returned by form.install_action.data.  So, re-use the existing ones.
            install_action = [install_job.install_action]
        else:
            install_action = form.install_action.data

        scheduled_time = form.scheduled_time_UTC.data
        software_packages = form.software_packages.data.split()
        server_id = form.hidden_server.data
        server_directory = form.hidden_server_directory.data
        pending_downloads = form.hidden_pending_downloads.data.split()
        custom_command_profile_ids = [str(i) for i in form.custom_command_profile.data]

        # install_action is a list object which may contain multiple install actions.
        # If only one install_action, accept the selected dependency if any
        if len(install_action) == 1:
            dependency = int(form.dependency.data)
            create_or_update_install_job(db_session=db_session, host_id=host.id, install_action=install_action[0],
                                         scheduled_time=scheduled_time, software_packages=software_packages,
                                         server_id=server_id, server_directory=server_directory,
                                         pending_downloads=pending_downloads,
                                         custom_command_profile_ids=custom_command_profile_ids, dependency=dependency,
                                         created_by=current_user.username, install_job=install_job)
        else:
            # The dependency on each install action is already indicated in the implicit ordering in the selector.
            # If the user selected Pre-Upgrade and Install Add, Install Add (successor) will
            # have Pre-Upgrade (predecessor) as the dependency.
            dependency = 0
            for one_install_action in install_action:
                new_install_job = create_or_update_install_job(db_session=db_session,
                                                               host_id=host.id,
                                                               install_action=one_install_action,
                                                               scheduled_time=scheduled_time,
                                                               software_packages=software_packages, server_id=server_id,
                                                               server_directory=server_directory,
                                                               pending_downloads=pending_downloads,
                                                               custom_command_profile_ids=custom_command_profile_ids,
                                                               dependency=dependency, created_by=current_user.username,
                                                               install_job=install_job)
                dependency = new_install_job.id

        return redirect(url_for(return_url, hostname=hostname))

    elif request.method == 'GET':
        # Initialize the hidden fields
        form.hidden_server.data = -1
        form.hidden_selected_hosts.data = ''
        form.hidden_server_name.data = ''
        form.hidden_server_directory.data = ''
        form.hidden_pending_downloads.data = ''
        form.hidden_edit.data = install_job is not None

        # In Edit mode
        if install_job is not None:
            form.install_action.data = install_job.install_action

            if install_job.server_id is not None:
                form.hidden_server.data = install_job.server_id
                server = get_server_by_id(db_session, install_job.server_id)
                if server is not None:
                    form.hidden_server_name.data = server.hostname

                form.hidden_server_directory.data = '' if install_job.server_directory is None else install_job.server_directory

            form.hidden_pending_downloads.data = '' if install_job.pending_downloads is None else install_job.pending_downloads

            # Form a line separated list for the textarea
            if install_job.packages is not None:
                form.software_packages.data = '\n'.join(install_job.packages.split(','))

            form.dependency.data = str(install_job.dependency)

            if install_job.scheduled_time is not None:
                form.scheduled_time_UTC.data = get_datetime_string(install_job.scheduled_time)

            if install_job.custom_command_profile_ids:
                ids = [int(id) for id in install_job.custom_command_profile_ids.split(',')]
                form.custom_command_profile.data = ids

    return render_template('host/schedule_install.html', form=form, system_option=SystemOption.get(db_session),
                           host=host, server_time=datetime.datetime.utcnow(), install_job=install_job,
                           return_url=return_url)