コード例 #1
0
def logout():
    """
    登出函数
    :return: 跳转登录页面
    """
    PLATFORM = Config.PLATFORM
    ip = get_request_ip()
    destip = session.get('destip')
    destport = session.get('destport')
    opuser = session.get('username')
    if PLATFORM == 0:
        operate_db(opuser, ip, result='logout_success')  # 登出成功记入数据库
    else:
        isout = False
        gatekeeper_db('用户认证', opuser, ip, destip, destport, '登出', opuser, '成功',
                      isout, '登出成功')
    logout_user()

    conf2 = MyConfigParser()
    conf2.read(Config.IPAUTHCONF, encoding='gbk')
    ip_section = session.get('ip_section')

    conf2.remove_section(ip_section)
    num = conf2.getint('MAIN', 'Num') - 1
    conf2.set('MAIN', 'Num', str(num))

    with open(Config.IPAUTHCONF, 'w', encoding='gbk') as f:
        conf2.write(f)

    # 登出成功执行该命令
    os.system(Config.LOGIN_COMMAND.format(ip, 'D'))
    return redirect(url_for('auth.login'))
コード例 #2
0
def download_file():
    """
    下载文件函数
    :return:
    """
    base_path = Config.BASE_DIR
    PLATFORM = Config.PLATFORM

    name = request.args.get('d')

    username = session.get('username')
    destip = session.get('destip')
    destport = session.get('destport')
    ip = get_request_ip()

    if '/' in name:
        split_list = name.rsplit('/', 1)
        filename = split_list[-1]
        file_path = base_path + "/" + split_list[0]

    else:
        file_path = base_path
        filename = name

    response = make_response(
        send_from_directory(file_path, filename, as_attachment=True))
    response.headers["Content-Disposition"] = "attachment; filename={}".format(
        filename.encode().decode('latin-1'))
    if PLATFORM == 0:
        operate_db(username, ip, result='download_success',
                   goal=filename)  # 下载成功记入数据库

    if PLATFORM == 0:
        operate_db(username, ip, result='download_success',
                   goal=filename)  # 下载成功记入数据库
    else:
        isout = False
        gatekeeper_db('文件交换', username, ip, destip, destport, '下载', filename,
                      '成功', isout, '下载成功')

    # os.system(os.path.join(Config.FILE_COMMAND, file_path))

    return response
コード例 #3
0
def rv_file():
    dic = {}
    username = session.get('username')
    ip = get_request_ip()

    PLATFORM = Config.PLATFORM
    destip = session.get('destip')
    destport = session.get('destport')

    try:
        folder_path = request.get_json().get('file')
        path = Config.BASE_DIR + folder_path
        os.remove(path)
        dic['status'] = 1

        if PLATFORM == 0:
            operate_db(username, ip, result='rmfile_success',
                       goal=folder_path)  # 删除文件成功记入数据库
        else:
            isout = False
            gatekeeper_db('文件交换', username, ip, destip, destport, '删除文件',
                          folder_path, '成功', isout, '删除文件成功')
        # 删除文件的命令
        os.system(Config.FILE_COMMAND)
        print(Config.FILE_COMMAND)

    except Exception as e:
        print(e)
        dic["status"] = 0

        if PLATFORM == 0:
            operate_db(username, ip, result='rmfile_error')  # 删除文件失败记入数据库
        else:
            isout = False
            gatekeeper_db('文件交换', username, ip, destip, destport, '删除文件', None,
                          '失败', isout, '删除文件失败')

    return jsonify(dic)
コード例 #4
0
def login():
    res = ProductionConfig.product_message()
    PLATFORM = Config.PLATFORM

    lock = Lock()
    login_cnt = 0
    lock_time = 0
    global login_user_list

    if request.method == 'POST':
        username = request.form.get('username', None)
        password = request.form.get('password', None)
        destip = request.host_url.split(':')[1].split('//')[1]
        destport = request.host_url.split(':')[2].split('/')[0]

        if not username or not password:
            return jsonify({"status": 2, "msg": "请输入用户名和密码"})

        file_obj = request.files.get("authorized_file", None)
        if not file_obj:
            return jsonify({"status": 2, "msg": "请上传文件"})

        try:
            cert_key = hashlib.new('md5',
                                   file_obj.getvalue()).hexdigest().lower()

        except Exception as e:
            print(e)
            return jsonify({"status": 2, "msg": "文件不合法"})

        ip = get_request_ip()
        user_info_list = UserInfoConfig.get_user(username)

        if not user_info_list:
            if PLATFORM == 0:
                operate_db(username, ip, result='login_error')

            else:
                isout = False
                gatekeeper_db('用户认证', username, ip, destip, destport, '登录',
                              username, '失败', isout, '用户名不存在')

            return jsonify({"status": 2, "msg": "用户名不存在"})

        for user_info in user_info_list:
            if username in user_info:
                begin_data = user_info.get('begin', None)
                upp_pwd = user_info.get('update_time', None)

                if begin_data:
                    # 光闸的登陆逻辑
                    login_date = datetime.datetime.now().strftime('%Y-%m-%d')
                    end_data = user_info.get('end', None)

                    if login_date < begin_data or login_date > end_data:
                        operate_db(username, ip, result='login_error')
                        return jsonify({"status": 2, "msg": "密码已失效,联系管理员修改密码"})

                if upp_pwd:
                    # 网闸的登陆逻辑
                    login_date = datetime.datetime.now()
                    pwd_day = user_info.get('pwd_day', None)
                    login_cnt = user_info.get('login_cnt', None)
                    lock_time = user_info.get('lock_time', None)

                    upp_pwd = datetime.datetime.strptime(
                        upp_pwd, '%Y-%m-%d %H:%M:%S')

                    if login_date - datetime.timedelta(
                            days=int(pwd_day)) > upp_pwd:
                        isout = False
                        gatekeeper_db('用户认证', username, ip, destip, destport,
                                      '登录', username, '失败', isout, '密码已失效')
                        return jsonify({"status": 2, "msg": "密码已失效,联系管理员修改密码"})

                if login_user_list:
                    for try_login in login_user_list:
                        if username in try_login and try_login[
                                "login_cnt"] >= int(login_cnt):
                            last_login_time = try_login[
                                "try_login_time"] + int(lock_time) * 60
                            time_now = time.time()
                            if time_now >= last_login_time:
                                lock.acquire()
                                login_user_list.remove(try_login)
                                lock.release()
                            else:
                                time_sleep = last_login_time - time_now

                                return jsonify({
                                    "status":
                                    2,
                                    "msg":
                                    "账号被锁定%d秒后重试" % round(time_sleep, 0)
                                })

                if password == user_info.get(
                        "password") and cert_key == user_info.get("cert_key"):
                    level = user_info.get("level")
                    user = User(username)
                    login_user(user)

                    session["username"] = username
                    session["id"] = user.id
                    session["level"] = level
                    session["login_time"] = time.time() * 1000
                    session["ip"] = ip
                    session["destip"] = destip
                    session["destport"] = destport

                    conf1 = MyConfigParser()
                    count = 0
                    conf1.add_section('MAIN')

                    while True:
                        ip_section = 'IP{}'.format(count)
                        conf1.read(Config.IPAUTHCONF, encoding='gbk')
                        session['ip_section'] = ip_section

                        if not conf1.has_section(ip_section):
                            conf1.add_section(ip_section)

                        if not conf1.has_option(ip_section, 'Name'):
                            conf1[ip_section]['Name'] = ''
                            write_conf(ip_section, username, level, ip, destip,
                                       destport, conf1)
                            break
                        else:
                            if conf1.get(ip_section, 'Name') == username:
                                write_conf(ip_section, username, level, ip,
                                           destip, destport, conf1)
                                break
                            else:
                                count += 1

                    conf1.set('MAIN', 'Num', '{}'.format(count + 1))
                    with open(Config.IPAUTHCONF, 'w') as f:
                        conf1.write(f)
                    if PLATFORM == 0:
                        operate_db(username, ip, result='login_success')
                    else:
                        isout = False
                        gatekeeper_db('用户认证', username, ip, destip, destport,
                                      '登录', username, '成功', isout, '登录成功')

                    # 登录成功执行该脚本
                    os.system(Config.LOGIN_COMMAND.format(ip, 'I'))

                    if session.get("username"):
                        path = os.path.join(Config.BASE_DIR, username)
                        if not os.path.exists(path):
                            os.mkdir(path)

                    return jsonify({'url': url_for('show.index')})

                else:
                    if PLATFORM == 0:
                        operate_db(username, ip, result='login_error')
                    else:

                        if login_user_list:
                            for try_login in login_user_list:
                                if username not in try_login:
                                    try_login_time = time.time()
                                    dic = {
                                        username: username,
                                        "login_cnt": 1,
                                        "try_login_time": try_login_time
                                    }
                                    lock.acquire()
                                    login_user_list.append(dic)
                                    lock.release()

                                try_login[
                                    "login_cnt"] = try_login["login_cnt"] + 1
                                try_login["try_login_time"] = time.time()

                        else:
                            try_login_time = time.time()
                            dic = {
                                username: username,
                                "login_cnt": 1,
                                "try_login_time": try_login_time
                            }
                            lock.acquire()
                            login_user_list.append(dic)
                            lock.release()

                        isout = False
                        gatekeeper_db('用户认证', username, ip, destip, destport,
                                      '登录', username, '失败', isout,
                                      '密码或者校验文件失败')

                    return jsonify({"status": 2, "msg": "密码或者校验文件失败"})

    return render_template('login.html', res=res)
コード例 #5
0
def upload():
    """
    上传文件函数
    :return:
    """
    PLATFORM = Config.PLATFORM
    dic = {}
    permission = {}

    file = request.files.get('file')
    position = request.values.get('type')
    folder = request.values.get('dir')

    username = session.get("username")
    level = session.get("level")
    destip = session.get('destip')
    destport = session.get('destport')
    ip = get_request_ip()
    #  1 是私有区 0 是共有区
    if int(position) == 0:
        permission['username'] = username
        permission['level'] = level
        permission[folder + file.filename] = file.filename
        file_info = json.dumps(permission)
        with open(Config.PERMISSION_FILE, "a+") as f:
            f.write(file_info)
            f.write('\n')

    path = Config.BASE_DIR + folder

    try:
        position_file = path + "/{}".format(file.filename)

        if os.path.exists(position_file):
            os.remove(position_file)

        with open(position_file, 'wb') as f:
            file.save(f)
        # 发送文件的命令
        os.system(Config.FILE_COMMAND)

        file_size = get_file_size(position_file)
        dic['type'] = int(position)
        dic['path'] = folder
        dic["status"] = 1

        if PLATFORM == 0:
            operate_db(username,
                       ip,
                       result='upload_success',
                       goal=file.filename)  # 上传成功记入数据库

        else:
            isout = False
            gatekeeper_db('文件交换', username, ip, destip, destport, '上传',
                          file.filename, '成功', isout, '上传成功')

        uploadfile_db(username, path, file.filename, file_size,
                      ip)  # 上传到sfiles数据库和sfilebaks备份数据库

    except Exception as e:
        print(e)
        dic["status"] = 0
        if PLATFORM == 0:
            operate_db(username, ip, result='upload_error',
                       goal=file.filename)  # 上传失败记入数据库
        else:
            isout = False
            gatekeeper_db('文件交换', username, ip, destip, destport, '上传',
                          file.filename, '失败', isout, '上传失败')

    return jsonify(dic)
コード例 #6
0
def make_dir():
    dic = {}
    PLATFORM = Config.PLATFORM

    destip = session.get('destip')
    destport = session.get('destport')
    username = session.get('username')
    ip = get_request_ip()

    original = request.get_json().get('original')
    add = request.get_json().get('add')
    path = Config.BASE_DIR + original + "/" + add

    PLATFORM = Config.PLATFORM
    destip = session.get('destip')
    destport = session.get('destport')

    if not os.path.exists(path):
        try:
            make_path = Config.BASE_DIR + original
            os.mkdir(make_path + './{}'.format(add))
            dic['status'] = 1

            if PLATFORM == 0:
                operate_db(username,
                           ip,
                           result='mkdir_success',
                           goal='{}/{}'.format(original, add))  # 创建目录成功记入数据库

            else:
                isout = False
                gatekeeper_db('文件交换', username, ip, destip, destport, '创建目录',
                              add, '成功', isout, '创建目录成功')

        except Exception as e:
            print(e)
            dic["status"] = 0

            if PLATFORM == 0:
                operate_db(username,
                           ip,
                           result='mkdir_error',
                           goal='{}/{}'.format(original, add))  # 创建目录失败记入数据库

            else:
                isout = False
                gatekeeper_db('文件交换', username, ip, destip, destport, '创建目录',
                              add, '成功', isout, '创建目录成功')
        except Exception as e:
            print(e)
            dic["status"] = 0
            if PLATFORM == 0:
                operate_db(username,
                           ip,
                           result='mkdir_error',
                           goal='{}/{}'.format(original, add))  # 创建目录失败记入数据库

            else:
                isout = False
                gatekeeper_db('文件交换', username, ip, destip, destport, '创建目录',
                              add, '失败', isout, '创建目录失败')
    else:
        dic['status'] = 2
        dic['msg'] = '文件夹已存在'

        if PLATFORM == 0:
            operate_db(username,
                       ip,
                       result='mkdir_error',
                       goal='{}/{}'.format(original, add))  # 创建目录失败记入数据库

        else:
            isout = False
            gatekeeper_db('文件交换', username, ip, destip, destport, '创建目录', add,
                          '失败', isout, '文件夹已存在')
    return jsonify(dic)