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'))
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
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)
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)
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)
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)