Ejemplo n.º 1
0
def create_bindhosts(argvs):
    '''
    create bind hosts
    :param argvs:
    :return:
    '''
    if '-f' in argvs:
        bindhosts_file = argvs[argvs.index("-f") + 1]
    else:
        print_err(
            "invalid usage, should be:\ncreate_hosts -f <the new bindhosts file>",
            quit=True)
    source = yaml_parser(bindhosts_file)
    if source:
        for key, val in source.items():
            print(key, val)
            # 获取到了主机
            host_obj = session.query(models.Host).filter(
                models.Host.hostname == val.get('hostname')).first()
            # 取hostname
            assert host_obj  # 断言,必须存在
            for item in val['remote_users']:  # 判断
                print(item)
                assert item.get('auth_type')
                if item.get('auth_type') == 'ssh-password':  # 判断认证password
                    remoteuser_obj = session.query(models.RemoteUser).filter(
                        models.RemoteUser.username == item.get('username'),
                        models.RemoteUser.password == item.get(
                            'password')).first()
                else:
                    # 获取远程用户
                    remoteuser_obj = session.query(models.RemoteUser).filter(
                        models.RemoteUser.username == item.get('username'),
                        models.RemoteUser.auth_type == item.get('auth_type'),
                    ).first()
                if not remoteuser_obj:  # 没取到,程序退出
                    print_err("RemoteUser obj %s does not exist." % item,
                              quit=True)
                bindhost_obj = models.BindHost(host_id=host_obj.id,
                                               remoteuser_id=remoteuser_obj.id)
                session.add(bindhost_obj)  # 获取到关系后添加session
                # for groups this host binds to
                if source[key].get('groups'):  # 获取组
                    group_objs = session.query(models.HostGroup).filter(
                        models.HostGroup.name.in_(
                            source[key].get('groups'))).all()
                    assert group_objs
                    print('groups:', group_objs)
                    bindhost_obj.host_groups = group_objs
                # for user_profiles this host binds to
                if source[key].get('user_profiles'):  # 判断是否直接属于哪一台机器
                    userprofile_objs = session.query(
                        models.Userprofile).filter(
                            models.Userprofile.username.in_(
                                source[key].get('user_profiles'))).all()
                    assert userprofile_objs
                    print("userprofiles:", userprofile_objs)
                    bindhost_obj.user_profiles = userprofile_objs
                # print(bindhost_obj)
        session.commit()
Ejemplo n.º 2
0
def view_record(user):
    '''
    查看上课记录
    :param user:
    :return:
    '''
    record_student = session.query(models.RecordStudent).filter_by().all()
    for i in record_student:
        student_teachclass_obj = session.query(models.StudentTeachClass). \
            filter_by(id=i.student_teach_class_id).first()
        class_teacher_obj = session.query(models.TeacherClass).filter_by(
            id=student_teachclass_obj.teacher_course.bind_teacher_class_id
        ).first()
        course_obj = session.query(models.CourseClassRecord).filter_by(
            id=student_teachclass_obj.teacher_course.bind_course_time_id
        ).first()
        studentname_obj = session.query(models.Student).filter_by(
            qq_number=student_teachclass_obj.student.qq_number).first()
        if class_teacher_obj.teacher.username == user.username:
            print('绑定id:%s 课程:%s 课程时间:%s 讲师:%s 教室:%s 学生名:%s 学生qq %s 上课记录:%s' %
                  (student_teachclass_obj.id, course_obj.course.coursename,
                   course_obj.course_time.course_time_name,
                   class_teacher_obj.teacher.username,
                   class_teacher_obj.class_room.classname,
                   studentname_obj.username, studentname_obj.qq_number,
                   i.record.record))
Ejemplo n.º 3
0
def create_bindhosts(argvs):
    msg = 'the new bind_hosts file'
    bindhost_file = parse_argvs(argvs, msg)
    source = yaml_parser(bindhost_file)
    if source:
        for key,val in source.items():
            host_obj = session.query(models.Host).filter(models.Host.hostname==val.get('hostname')).first()
            assert host_obj
            for item in val['remote_users']:
                assert item.get('auth_type')
                if item.get('auth_type') == 'ssh-passwd':
                    remoteuser_obj = session.query(models.RemoteUser).filter(models.RemoteUser.username==item.get('username'),
                                                                             models.RemoteUser.password==item.get('password')).first()
                else:
                    remoteuser_obj = session.query(models.RemoteUser).filter(models.RemoteUser.username==item.get('username'),
                                                                             models.RemoteUser.auth_type==item.get('auth_type')).first()
                # print('>>>>',host_obj,remoteuser_obj)
                bindhost_obj = models.BindHost(host_id=host_obj.id,remote_user_id=remoteuser_obj.id)
                session.add(bindhost_obj)

                if source[key].get('groups'):
                    groups = common_filters.groups_filter(source[key])
                    bindhost_obj.groups = groups
                if source[key].get('user_profiles'):
                    user_profiles = common_filters.user_profiles_filter(source[key])
                    bindhost_obj.user_profiles = user_profiles

        session.commit()
Ejemplo n.º 4
0
def create_bindhosts(argvs):
    if '-f' in argvs:
        bindhosts_file = argvs[argvs.index("-f") + 1]
    else:
        print_err(
            "invalid usage, should be:\ncreate_hosts -f <the new bindhosts file>",
            quit=True)
    source = yaml_parser(bindhosts_file)
    if source:
        for key, val in source.items():
            print(key, val)
            host_obj = session.query(models.Host).filter(
                models.Host.hostname == val.get('hostname')).first()
            assert host_obj
            print(host_obj)
            '''注意下面的for语句,实际上val['remote_users']返回的是一个列表(yaml中如果有-,则变成列表),然后列表里面嵌套了字典,
            所以for其实是对列表进行了循环,而列表里面的元素则是一个个字典'''
            for item in val['remote_users']:
                print('remote_users is', item)
                '''assert断言,表示如果没有auth_type这个key,或取不到auth_type这个的值,则下面语句不执行。'''
                assert item.get('auth_type')
                if item.get('auth_type') == 'ssh-password':
                    remoteuser_obj = session.query(models.RemoteUser).filter(
                        models.RemoteUser.username == item.get('username'),
                        models.RemoteUser.password == item.get('password'),
                        #models.RemoteUser.auth_type==item.get('auth_type'),
                    ).first()
                else:
                    remoteuser_obj = session.query(models.RemoteUser).filter(
                        models.RemoteUser.username == item.get('username'),
                        models.RemoteUser.auth_type == item.get('auth_type'),
                    ).first()
                if not remoteuser_obj:
                    print_err('user [%s] is not exist' % (item), quit=True)
                bindhost_obj = models.BindHost(host_id=host_obj.id,
                                               remoteuser_id=remoteuser_obj.id)
                session.add(bindhost_obj)
                '''判断是否有groups这个字段,如果有则执行下面语句'''
                if source[key].get('groups'):
                    print(source[key].get('groups'))
                    group_objs = session.query(models.HostGroup).filter(
                        models.HostGroup.name.in_(
                            source[key].get('groups'))).all()
                    assert group_objs
                    '''通过下面语句将bind_host和host_group两个表的关联表bindhost_m2m_hostgroup建立起来,
                    将两个表相对应的主机和组的id相对应起来,实现主机和组的关联。
                    注意下面的语句将对关联表插入相关联的ID值'''
                    bindhost_obj.host_groups = group_objs

                if source[key].get('user_profiles'):
                    user_objs = session.query(models.UserProfile).filter(
                        models.UserProfile.username.in_(
                            source[key].get('user_profiles'))).all()
                    assert user_objs
                    '''通过下面的语句,将堡垒机用户表和bind_host表相关联起来,对两者的关联表user_m2m_bindhost
                    插入对应的两方id,通过该表的外键实现两表关联,最终实现用户和主机关联'''
                    bindhost_obj.user_profiles = user_objs
        session.commit()
Ejemplo n.º 5
0
def create_bindhosts(argvs):
    '''
    create bind hosts
    :param argvs:
    :return:
    '''
    if '-f' in argvs:
        bindhosts_file = argvs[argvs.index("-f") + 1]
    else:
        print_err(
            "invalid usage, should be:\ncreate_bindhosts -f <the new bindhosts file>",
            quit=True)
    source = yaml_parser(bindhosts_file)
    if source:
        for key, val in source.items():
            # print(key,val)
            host_obj = session.query(model_v2.Host).filter(
                model_v2.Host.hostname == val.get('hostname')).first()
            assert host_obj
            for item in val['remote_users']:
                print(item)
                assert item.get('auth_type')
                if item.get('auth_type') == 'ssh-password':
                    remoteuser_obj = session.query(model_v2.RemoteUser).filter(
                        model_v2.RemoteUser.username == item.get('username'),
                        model_v2.RemoteUser.password == item.get(
                            'password')).first()
                else:
                    remoteuser_obj = session.query(model_v2.RemoteUser).filter(
                        model_v2.RemoteUser.username == item.get('username'),
                        model_v2.RemoteUser.auth_type == item.get('auth_type'),
                    ).first()
                if not remoteuser_obj:
                    print_err("RemoteUser obj %s does not exist." % item,
                              quit=True)
                bindhost_obj = model_v2.BindHost(
                    host_id=host_obj.id, remoteuser_id=remoteuser_obj.id)
                session.add(bindhost_obj)
                # for groups this host binds to
                if source[key].get('groups'):
                    group_objs = session.query(model_v2.HostGroup).filter(
                        model_v2.HostGroup.name.in_(
                            source[key].get('groups'))).all()
                    assert group_objs
                    print('groups:', group_objs)
                    bindhost_obj.hostgroups = group_objs
                # for user_profiles this host binds to
                if source[key].get('fortress_user'):
                    fortressuser_objs = session.query(
                        model_v2.FortressUser).filter(
                            model_v2.FortressUser.username.in_(
                                source[key].get('fortress_user'))).all()
                    assert fortressuser_objs
                    print("fortressuser:", fortressuser_objs)
                    bindhost_obj.fortress_users = fortressuser_objs
                    # print(bindhost_obj)
        session.commit()
Ejemplo n.º 6
0
def create_bindhosts(argvs):
    """
    create bind hosts
    主机及该主机上的账户信息
    :param argvs:
    :return:
    """
    if '-f' in argvs:
        bindhosts_file = argvs[argvs.index("-f") + 1]
    else:
        print_err("invalid usage, should be:\ncreate_bindhosts -f <the new bindhosts file>", logout=True)
        return
    source = yaml_parser(bindhosts_file)
    if source:
        logger.debug("source:\n%s" % source)
        for key, val in source.items():
            logger.debug("%s:%s" % (key, val))
            # 要Bind的主机信息
            host_obj = session.query(models.Host).filter(models.Host.hostname == val.get('hostname')).first()
            logger.debug("host_obj---\n%s" % host_obj)
            assert host_obj
            for item in val['remote_users']:  # 要bind到该主机上的账户信息
                logger.debug(item)
                assert item.get('auth_type')
                if item.get('auth_type') == 'ssh-password':
                    remoteuser_obj = session.query(models.RemoteUser).filter(
                        models.RemoteUser.username == item.get('username'),
                        models.RemoteUser.password == item.get('password')
                    ).first()
                else:
                    remoteuser_obj = session.query(models.RemoteUser).filter(
                        models.RemoteUser.username == item.get('username'),
                        models.RemoteUser.auth_type == item.get('auth_type'),
                    ).first()
                if not remoteuser_obj:
                    print_err("RemoteUser obj %s does not exist." % item, logout=True)
                bindhost_obj = models.BindHost(host_id=host_obj.id, remoteuser_id=remoteuser_obj.id)  # 设定bind关系
                session.add(bindhost_obj)
                # for groups this host binds to 该主机bind到主机组
                if source[key].get('groups'):
                    group_objs = session.query(models.HostGroup).filter(
                        models.HostGroup.name.in_(source[key].get('groups'))).all()
                    assert group_objs
                    logger.info('groups:%s' % group_objs)
                    bindhost_obj.host_groups = group_objs
                # for user_profiles this host binds to  该主机bind到的用户
                if source[key].get('user_profiles'):
                    userprofile_objs = session.query(models.UserProfile).filter(models.UserProfile.username.in_(
                        source[key].get('user_profiles')
                    )).all()
                    logger.debug(userprofile_objs)
                    assert userprofile_objs
                    logger.info("userprofiles:%s" % userprofile_objs)
                    bindhost_obj.user_profiles = userprofile_objs
                    # print(bindhost_obj)
        session.commit()
        logger.info("create bindhosts sucess!")
Ejemplo n.º 7
0
def create_bindhosts(argv):
    '''
    create bind hosts
    :param argv:
    :return:
    '''
    if '-f' in argv:
        bindhost_file = argv[argv.index('-f') + 1]
    else:
        print_err(
            "invalid usage, should be:\ncreate_hosts -f <the new bindhosts file>",
            quit=True)
    source = yaml_parser(bindhost_file)
    if source:
        print(source)
        for key, val in source:
            host_obj = session.query(models.Host).filter(
                models.Host.hostname == val.get('hostname'))
            assert host_obj
            for item in val['remote_users']:
                assert item.get('auth_type')
                if item.get('auth_type') == 'ssh-passwd':
                    remoteuser_obj = session.query(models.RemoteUser).filter(
                        models.RemoteUser.username == item.get('username'),
                        models.RemoteUser.password == item.get('password'),
                    ).first()
                else:
                    remoteuser_obj = session.query(models.RemoteUser).filter(
                        models.RemoteUser.username == item.get('username'),
                        models.RemoteUser.auth_type == item.get('auth_type'),
                    ).first()
            if not remoteuser_obj:
                print_err("RemoteUser obj %s does not exist." % item,
                          quit=True)
            bindhost_obj = models.BindHost(host_id=host_obj.id,
                                           remoteuser_id=remoteuser_obj.id)
            session.add(bindhost_obj)
            if source[key].get('groups'):
                group_obj = session.query(models.HostGroup).filter(
                    models.HostGroup.name.in_(
                        source[key].get('groups'))).all()
                assert group_obj
                bindhost_obj.host_groups = group_obj
            if source[key].get('user_profiles'):
                userprofile_obj = session.query(models.UserProfile).filter(
                    models.UserProfile.username.in_(
                        source[key].get('user_profiles'))).all()
                assert userprofile_obj
                bindhost_obj.user_profiles = userprofile_obj
        session.commit()
Ejemplo n.º 8
0
def create_bindhosts(argvs):
    '''
    create bind hosts
    :param argvs:
    :return:
    '''
    if '-f' in argvs:
        bindhosts_file  = argvs[argvs.index("-f") +1 ]
    else:
        print_err("invalid usage, should be:\ncreate_hosts -f <the new bindhosts file>",quit=True)
    source = yaml_parser(bindhosts_file)
    if source:
        for key,val in source.items():
            #print(key,val)
            host_obj = session.query(models.Host).filter(models.Host.hostname==val.get('hostname')).first()
            assert host_obj
            for item in val['remote_users']:
                print(item )
                assert item.get('auth_type')
                if item.get('auth_type') == 'ssh-passwd':
                    remoteuser_obj = session.query(models.RemoteUser).filter(
                                                        models.RemoteUser.username==item.get('username'),
                                                        models.RemoteUser.password==item.get('password')
                                                    ).first()
                else:
                    remoteuser_obj = session.query(models.RemoteUser).filter(
                                                        models.RemoteUser.username==item.get('username'),
                                                        models.RemoteUser.auth_type==item.get('auth_type'),
                                                    ).first()
                if not remoteuser_obj:
                    print_err("RemoteUser obj %s does not exist." % item,quit=True )
                bindhost_obj = models.BindHost(host_id=host_obj.id,remoteuser_id=remoteuser_obj.id)
                session.add(bindhost_obj)
                #for groups this host binds to
                if source[key].get('groups'):
                    group_objs = session.query(models.Group).filter(models.Group.name.in_(source[key].get('groups') )).all()
                    assert group_objs
                    print('groups:', group_objs)
                    bindhost_obj.groups = group_objs
                #for user_profiles this host binds to
                if source[key].get('user_profiles'):
                    userprofile_objs = session.query(models.UserProfile).filter(models.UserProfile.username.in_(
                        source[key].get('user_profiles')
                    )).all()
                    assert userprofile_objs
                    print("userprofiles:",userprofile_objs)
                    bindhost_obj.user_profiles = userprofile_objs
                #print(bindhost_obj)
        session.commit()
Ejemplo n.º 9
0
def auth_student():
    '''
    用户验证
    do the user login authentication
    :return:
    '''
    count = 0
    while count < 3:
        username = input("\033[32;1mUsername:\033[0m").strip()
        if len(username) == 0:
            continue
        password = input("\033[32;1mPassword:\033[0m").strip()
        if len(password) == 0:
            continue
        user_obj = session.query(models.Student).filter(
            models.Student.username == username,
            models.Student.password == password).first()
        if user_obj:
            return user_obj
        else:
            print("wrong username or password, you have %s more chances." %
                  (3 - count - 1))
            count += 1
    else:
        print_err("too many attempts.")
Ejemplo n.º 10
0
def create_users(argvs):
    '''
    create little_finger access user
    :param argvs:
    :return:
    '''
    if '-f' in argvs:
        user_file  = argvs[argvs.index("-f") +1 ]
    else:
        print_err("invalid usage, should be:\ncreateusers -f <the new users file>",quit=True)

    source = yaml_parser(user_file)
    if source:
        for key,val in source.items():
            print(key,val)
            obj = models.UserProfile(username=key,password=val.get('password'))
            if val.get('groups'):
                groups = session.query(models.Group).filter(models.Group.name.in_(val.get('groups'))).all()
                if not groups:
                    print_err("none of [%s] exist in group table." % val.get('groups'),quit=True)
                obj.groups = groups
            if val.get('bind_hosts'):
                bind_hosts = common_filters.bind_hosts_filter(val)
                obj.bind_hosts = bind_hosts
            #print(obj)
            session.add(obj)
        session.commit()
Ejemplo n.º 11
0
def start_session(argvs):
    print('going to start sesssion ')
    user = auth()
    if user:
        welcome_msg(user)
        exit_flag = False
        while not exit_flag:
            bindhost_ids = display_access_host(user)
            user_option = input('\033[32;1m%s\033[0m' % ("[%s][(q)quit, select host to login]:")%user.username).strip()
            if len(user_option) == 0: continue
            if user_option == 'q':
                exit_flag = True
                break
            if user_option.isdigit():
                user_option = int(user_option)
                if bindhost_ids.index(user_option)>-1:
                    bindhost = session.query(models.BindHost).filter(models.BindHost.id==user_option).first()
                    if bindhost:
                        ssh_login.ssh_login(user,bindhost,session,log_recording)
                    else:
                        print('input error,find any data...')
                else:
                    print("input error..")
            else:
                print("input error..")
Ejemplo n.º 12
0
def wisdom():
	try:
		wisdom_obj=session.query(models.Wisdom).order_by(func.random()).limit(1).all()
		if wisdom_obj:
			print(wisdom_obj[0].sentence)
	except:
		print(init_msg)
Ejemplo n.º 13
0
def auth():
    '''
    用户验证
    do the user.txt login authentication
    :return:
    '''
    count = 0
    while count < 3:
        username = input("\033[32;1mUsername>>>:\033[0m").strip()
        if len(username) == 0:
            continue
        password = input("\033[32;1mPassword>>>:\033[0m").strip()
        if len(password) == 0:
            continue
        user_obj = session.query(create_table.UserProfile).filter(
            create_table.UserProfile.user_name == username,
            create_table.UserProfile.password == password).first()
        if user_obj:
            return user_obj
        else:
            print("wrong username or password, you have %s more chances." %
                  (3 - count - 1))
            count += 1
    else:
        print_err("too many attempts.")
Ejemplo n.º 14
0
def bind_group_filter(vals):
    groups = session.query(models.Group).filter(
        models.Group.name.in_(vals.get('groups'))).all()
    if not groups:
        print_err("none of [%s] exist in groups table." % vals.get('groups'),
                  quit=True)
    return groups
Ejemplo n.º 15
0
def user_profiles_filter(vals):
    user_profiles = (
        session.query(models.UserProfile).filter(models.UserProfile.username.in_(vals.get("user_profiles"))).all()
    )
    if not user_profiles:
        print_err("none of [%s] exist in user_profile table." % vals.get("user_profiles"), quit=True)
    return user_profiles
Ejemplo n.º 16
0
def create_users(argvs):
    if '-f' in argvs:
        '''首先判断输入是否存在-f选项,将-f后的文件赋予user_file'''
        user_file = argvs[argvs.index("-f") + 1]
    else:
        print_err(
            "invalid usage, should be:\ncreateusers -f <the new users file>",
            quit=True)

    source = yaml_parser(user_file)
    if source:
        for key, val in source.items():
            print(key, val)
            obj = models.UserProfile(username=key,
                                     password=val.get('password'))
            if val.get('groups'):
                '''如果val中含有group,且该group存在,则同时讲该用户加入对应group'''
                groups = session.query(models.Group).filter(
                    models.Group.name.in_(val.get('groups'))).all()
                if not groups:
                    print_err("none of [%s] exist in group table." %
                              val.get('groups'),
                              quit=True)
                obj.groups = groups
            if val.get('bind_hosts'):
                '''如果val有bind_hosts,则同时绑定hosts'''
                bind_hosts = common_filters.bind_hosts_filter(val)
                obj.bind_hosts = bind_hosts
            #print(obj)
            session.add(obj)
        session.commit()
Ejemplo n.º 17
0
def create_users(argvs):
    '''
    create little_finger access user
    :param argvs:
    :return:
    '''
    if '-f' in argvs:
        user_file  = argvs[argvs.index("-f") +1 ]
    else:
        print_err("invalid usage, should be:\ncreateusers -f <the new users file>",quit=True)

    source = yaml_parser(user_file)
    if source:
        for key,val in source.items():
            print(key,val)
            obj = models.UserProfile(username=key,password=val.get('password'))
            if val.get('groups'):
                groups = session.query(models.Group).filter(models.Group.name.in_(val.get('groups'))).all()
                if not groups:
                    print_err("none of [%s] exist in group table." % val.get('groups'),quit=True)
                obj.groups = groups
            if val.get('bind_hosts'):
                bind_hosts = common_filters.bind_hosts_filter(val)
                obj.bind_hosts = bind_hosts
            #print(obj)
            session.add(obj)
        session.commit()
Ejemplo n.º 18
0
def show_student_class(user):
    print('%s 你所在的班级' % user.username)
    student_class_obj = session.query(
        models.StudentTeachClass).filter_by(student_qq=user.qq_number).all()
    for i in student_class_obj:
        class_teacher_obj = session.query(models.TeacherClass).filter_by(
            id=i.teacher_course.bind_teacher_class_id).first()
        course_obj = session.query(models.CourseClassRecord).filter_by(
            id=i.teacher_course.bind_course_time_id).first()
        studentname_obj = session.query(
            models.Student).filter_by(qq_number=i.student.qq_number).first()
        print('绑定id:%s 课程:%s 课程时间:%s 讲师:%s 教室:%s 学生名:%s 学生qq %s' %
              (i.id, course_obj.course.coursename,
               course_obj.course_time.course_time_name,
               class_teacher_obj.teacher.username,
               class_teacher_obj.class_room.classname,
               studentname_obj.username, studentname_obj.qq_number))
Ejemplo n.º 19
0
def user_profiles_filter(vals):
    user_profiles = session.query(models.UserProfile).filter(
        models.UserProfile.username.in_(vals.get('user_profiles'))).all()
    if not user_profiles:
        print_err("none of [%s] exist in user_profile table." %
                  vals.get('user_profiles'),
                  quit=True)
    return user_profiles
def fortress_user_filter(vals):
    fortress_users = session.query(model_v2.FortressUser).filter(
        model_v2.FortressUser.username.in_(vals.get('fortress_user'))).all()
    if not fortress_users:
        print_err("none of [%s] exist in user_profile table." %
                  vals.get('fortress_user'),
                  quit=True)
    return fortress_users
Ejemplo n.º 21
0
def create_bindhosts(argvs):
    """根据yml文件创建BindHost表中的数据"""
    if '-f' in argvs:
        bindhosts_file = argvs[argvs.index("-f") + 1]
    else:
        print_err("invalid usage, should be:\ncreate_hosts -f <the new bindhosts file>", quit=True)
    source = yaml_parser(bindhosts_file)
    if source:
        for key, val in source.items():
            # print(key,val)
            host_obj = session.query(models_v2.Host).filter(models_v2.Host.hostname == val.get('hostname')).first()
            assert host_obj  # 断言是否存在这个主机, 如果没有抛出异常不向下执行
            for item in val['remote_users']:
                print(item)
                assert item.get('auth_type')
                if item.get('auth_type') == 'ssh-passwd':
                    remoteuser_obj = session.query(models_v2.RemoteUser).filter(
                        models_v2.RemoteUser.username == item.get('username'),
                        models_v2.RemoteUser.password == item.get('password')
                    ).first()
                else:
                    remoteuser_obj = session.query(models_v2.RemoteUser).filter(
                        models_v2.RemoteUser.username == item.get('username'),
                        models_v2.RemoteUser.auth_type == item.get('auth_type'),
                    ).first()
                if not remoteuser_obj:  # 如果RemoteUser表不存在bindhost.yml文件中的remoteUser, 抛出异常
                    print_err("RemoteUser obj %s does not exist." % item, quit=True)
                bindhost_obj = models_v2.BindHost(host_id=host_obj.id, remoteuser_id=remoteuser_obj.id)
                session.add(bindhost_obj)
                # for groups this host binds to
                if source[key].get('groups'):
                    # select * from HostGroup where name in (bjgroup, shgroup);
                    group_objs = session.query(models_v2.HostGroup).filter(
                        models_v2.HostGroup.name.in_(source[key].get('groups'))).all()
                    assert group_objs  # 断言
                    bindhost_obj.host_groups = group_objs
                # for user_profiles this host binds to
                if source[key].get('user_profiles'):
                    userprofile_objs = session.query(models_v2.UserProfile).filter(models_v2.UserProfile.username.in_(
                        source[key].get('user_profiles')
                    )).all()
                    assert userprofile_objs  # 断言
                    print("userprofiles:", userprofile_objs)
                    bindhost_obj.user_profiles = userprofile_objs
                    # print(bindhost_obj)
        session.commit()
Ejemplo n.º 22
0
def bind_hosts_filter(vals):
    print('**>', vals.get('bind_hosts'))
    bind_hosts = session.query(models.BindHost).filter(
        models.Host.hostname.in_(vals.get('bind_hosts'))).all()
    if not bind_hosts:
        print_err("none of [%s] exist in bind_host table." %
                  vals.get('bind_hosts'),
                  quit=True)
    return bind_hosts
Ejemplo n.º 23
0
def groups_filter(vals):
    print('**** groups> ', vals.get('groups'))
    groups = session.query(models.Group).filter(
        models.Group.name.in_(vals.get('groups'))).all()
    if not groups:
        print_err('none of [%s] exists in group table.' % vals.get('groups'),
                  quit=True)
    else:
        return groups
Ejemplo n.º 24
0
def view_student():
    '''
    查看学生
    '''
    student_obj = session.query(models.Student).filter_by().all()
    for i in student_obj:
        # 学生姓名QQ
        print('现有学生:%s 学生QQ:%s' % (i.username, i.qq_number))
    print("----------- END -----------")
Ejemplo n.º 25
0
    def create_bindhosts(bindhost_file):
        source = yaml_parser(bindhost_file)
        if source:
            for key, val in source.items():
                host_obj = session.query(models.Host).filter(
                    models.Host.hostname == val['hostname']).first()
                #print(host_obj.id)
                for item in val['remote_users']:
                    print(item)
                    if item['auth_type'] == 'ssh-key':
                        remoteuser_obj = session.query(
                            models.RemoteUser).filter(
                                models.RemoteUser.username == item['username'],
                                models.RemoteUser.auth_type ==
                                'ssh-key').first()
                    elif item['auth_type'] == 'ssh-passwd':
                        remoteuser_obj = session.query(
                            models.RemoteUser).filter(
                                models.RemoteUser.username == item['username'],
                                models.RemoteUser.password ==
                                item['password']).first()
                    print(remoteuser_obj.id)
                    if (not host_obj) or (not remoteuser_obj):
                        print(
                            'There is something error between hostname or remote_user.'
                        )
                        continue
                    bindhost_obj = models.BindHost(
                        host_id=host_obj.id, remoteuser_id=remoteuser_obj.id)
                    session.add(bindhost_obj)
                if val['groups']:
                    for item in val['groups']:
                        group_obj = session.query(models.Group).filter(
                            models.Group.name.in_(item)).all()
                        bindhost_obj.groups = group_obj
                if val['user_profiles']:
                    for item in val['user_profiles']:
                        userprofile_obj = session.query(
                            models.UserProfile).filter(
                                models.UserProfile.username.in_(item)).all()
                        bindhost_obj.user_profiles = userprofile_obj

            session.commit()
Ejemplo n.º 26
0
def user_profiles_filter(vals):
    print('**** user_profiles> ', vals.get('user_profiles'))
    user_profiles = session.query(models.UserProfile).filter(
        models.UserProfile.username.in_(vals.get('user_profiles'))).all()
    if not user_profiles:
        print_err('none of [%s] exists in user_profile table.' %
                  vals.get('user_profiles'),
                  quit=True)
    else:
        return user_profiles
Ejemplo n.º 27
0
def user_profiles_filter(vals):
    '''

    :param vals:
    :return:
    '''
    user_profiles = session.query(create_table.UserProfile).filter(create_table.UserProfile.user_name.
                                                                   in_(vals.get('user_profiles'))).all()
    if not user_profiles:
        print_err("none of [%s] exist in user_profile table." % vals.get('user_profiles'), quit=True)
    return user_profiles
Ejemplo n.º 28
0
def bind_hosts_filter(vals):
    print('**** bind_hosts> ', vals.get('bind_hosts'))
    #只是为了找出host表中是否有指定的主机名,直接找host表就行
    bind_hosts = session.query(models.BindHost).filter(
        models.Host.hostname.in_(vals.get('bind_hosts'))).all()
    if not bind_hosts:
        print_err('none of [%s] exists in bind_host table.' %
                  vals.get('bind_hosts'),
                  quit=True)
    else:
        return bind_hosts
Ejemplo n.º 29
0
def show_class(user):
    '''
    show教室
    :param user:
    :return:
    '''
    print('%s 请参照现有课程教室管理' % user.username)
    data = session.query(models.ClassRoom).filter_by().all()
    print('所有班级')
    for index, x in enumerate(data):
        print(index, x.classname)
Ejemplo n.º 30
0
def show_course(user):
    '''
    展示课程,课程安排,教室
    :param user:
    :return:
    '''
    print('你可以创建班级关系或给学生分配班级')
    teacher_class_obj = session.query(
        models.TeacherClass).filter_by(teacher_id=user.id).all()
    for i in teacher_class_obj:
        course_teacher_obj = session.query(
            models.TeacheCourse).filter_by(bind_teacher_class_id=i.id).all()
        for x in course_teacher_obj:
            time_course_obj = session.query(
                models.CourseClassRecord).filter_by(
                    id=x.bind_course_time_id).first()
            print('课堂ID: %s 课程:%s 课程安排:%s 教室:%s' %
                  (x.id, time_course_obj.course.coursename,
                   time_course_obj.course_time.course_time_name,
                   i.class_room.classname))
Ejemplo n.º 31
0
def bind_hosts_filter(vals):
    '''

    :param vals:
    :return:
    '''
    print('**>', vals.get('bind_hosts'))
    bind_hosts = session.query(create_table.BindHost).\
        filter(create_table.Host.host_name.in_(vals.get('bind_hosts'))).all()
    if not bind_hosts:
        print_err("none of [%s] exist in bind_host table." % vals.get('bind_hosts'), quit=True)
    return bind_hosts
Ejemplo n.º 32
0
def view_student_class(user):
    '''
    查看该教室的学生,通过学生和老师id反查
    :param user:
    :return:
    '''
    teacher_class_obj = session.query(
        models.TeacherClass).filter_by(teacher_id=user.id).all()
    for i in teacher_class_obj:
        teachecourse_obj = session.query(
            models.TeacheCourse).filter_by(bind_teacher_class_id=i.id).all()
        for y in teachecourse_obj:
            student_teachclass_obj = session.query(
                models.StudentTeachClass).filter_by(
                    teacher_course_id=y.id).all()
            for x in student_teachclass_obj:
                class_teacher_obj = session.query(
                    models.TeacherClass).filter_by(
                        id=x.teacher_course.bind_teacher_class_id).first()
                course_obj = session.query(models.CourseClassRecord).filter_by(
                    id=x.teacher_course.bind_course_time_id).first()
                studentname_obj = session.query(models.Student).filter_by(
                    qq_number=x.student.qq_number).first()
                print('绑定id:%s 课程:%s 课程时间:%s 讲师:%s 教室:%s 学生名:%s 学生qq %s' %
                      (x.id, course_obj.course.coursename,
                       course_obj.course_time.course_time_name,
                       class_teacher_obj.teacher.username,
                       class_teacher_obj.class_room.classname,
                       studentname_obj.username, studentname_obj.qq_number))
Ejemplo n.º 33
0
def auth():
    while 1:
        user = input('Please enter your username:'******'exit':
            exit()
        passwd = input('passwd:')
        user_obj = session.query(models.UserProfile).filter(
            models.UserProfile.username == user,
            models.UserProfile.password == passwd).first()
        if user_obj:
            return user_obj
        else:
            print("Wrong username or password.")
Ejemplo n.º 34
0
def audit_recording(argvs):
    """
    audit users records
    :param argvs:
    :return:
    """
    if '-u' in argvs:
        user_name = argvs[argvs.index("-u") + 1]
    else:
        print_err("invalid usage, should be:\naudit_user -u <username>", logout=True)
        return
    # records = session.query(models.AuditLog).filter(
    #     models.AuditLog.user_id == (
    #         session.query(models.UserProfile.id).filter_by(username=user_name).first())).all().order_by(id).desc()
    user_profile = session.query(models.UserProfile).filter_by(username=user_name).first()
    if not user_profile:
        print_err("Wrong username...", logout=True)
    records = user_profile.audit_logs
    logger.info(records)
    msg = '''\033[32;1m
    ---------------------------------------All records of [%s] ---------------------------------------
    \033[0m''' % user_name
    print(msg)
    if records:
        attributes = ["UserName", "HostName", "IP", "Port", "RemoteUser", "ActionType", "CMD", "DateTime"]
        table = pylsytable(attributes)
        for record in records:
            # record_list = [user_name,
            #                records[0].bind_host.host.hostname,
            #                records[0].bind_host.host.ip,
            #                records[0].bind_host.host.port,
            #                records[0].bind_host.remote_user,
            #                record.action_type.value,
            #                record.cmd,
            #                record.date
            #                ]
            # print(record_list)
            # table.append_data(attributes, record_list)
            table.append_data("UserName", user_name)
            table.append_data("HostName", records[0].bind_host.host.hostname)
            table.append_data("IP", records[0].bind_host.host.ip)
            table.append_data("Port", records[0].bind_host.host.port)
            table.append_data("RemoteUser", records[0].bind_host.remote_user)
            table.append_data("ActionType", record.action_type.value)
            table.append_data("CMD", record.cmd)
            table.append_data("DateTime", record.date)
        logger.info(table)
    else:
        print("No records for %s" % user_name)
Ejemplo n.º 35
0
def auth():
    """ start session中用户认证操作 """
    count = 0
    while count < 3:
        username = input("\033[32;1mUsername:\033[0m").strip()
        if len(username) == 0:
            continue
        password = input("\033[32;1mPassword:\033[0m").strip()
        if len(password) == 0:
            continue
        user_obj = session.query(models_v2.UserProfile).filter(models_v2.UserProfile.username == username,
                                                               models_v2.UserProfile.password == password).first()
        if user_obj:
            return user_obj
        else:
            print("wrong username or password, you have %s more chances." % (3 - count - 1))
            count += 1
    else:
        print_err("too many attempts.")
Ejemplo n.º 36
0
def auth():
    '''
    do the user login authentication
    :return:
    '''
    count = 0
    while count <3:
        username = raw_input("\033[32;1mUsername:\033[0m").strip()
        if len(username) ==0:continue
        password = raw_input("\033[32;1mPassword:\033[0m").strip()
        if len(password) ==0:continue
        user_obj = session.query(models.UserProfile).filter(models.UserProfile.username==username,
                                                            models.UserProfile.password==password).first()
        if user_obj:
            return user_obj
        else:
            print("wrong username or password, you have %s more chances." %(3-count-1))
            count +=1
    else:
        print_err("too many attempts.")
Ejemplo n.º 37
0
def bind_hosts_filter(vals):
    print("**>", vals.get("bind_hosts"))
    bind_hosts = session.query(models.BindHost).filter(models.Host.hostname.in_(vals.get("bind_hosts"))).all()
    if not bind_hosts:
        print_err("none of [%s] exist in bind_host table." % vals.get("bind_hosts"), quit=True)
    return bind_hosts