def register(self, args): name = args['name'] passwd = common.my_md5('20180610'+name,args['passwd']) person_info_dic = self.data_handle.select_data('person_info') info_dic = {} if name in person_info_dic.keys(): info_dic['state'] = 0 print('该用户已经存在') else: info_dic['state'] = 1 # 实例化一个用户 person = modes.Member('1', name, passwd, args['age'], args['sex'], args['phone']) person_info_dic[name] = person.get_info() # 创建用户对应文件目录 flag = common.create_dir(name) if flag: info_dic['info'] = {'create_dir': 1} # 保存已经注册的用户的数据 self.data_handle.save_data(person_info_dic, 'person_info') print('注册成功!') else: info_dic['info'] = {'create_dir': 0} print('注册失败!') head_json_bytes, head_struct = common.struct_pack(info_dic) common.send_info(head_json_bytes, head_struct, self.request)
def login(): while True: # 判断用户名是否重复2:用户名不存在,1:登录成功,0:登录失败 name = input('请输入您的账号(退出:Q):').strip() if name.upper() == 'Q': break passwd = input('请输入您的密码:') passwd = common.my_md5(name, passwd) info_dic = {'cmd': 'login', 'info': {"name": name, 'passwd': passwd}} # 调用member的登录功能 ret = ftp_manage.FTPManage().request_and_response(info_dic) info_list = [ '\033[1;31;0m登录失败!\n\033[0m', '\033[1;31;0m登录成功!\n\033[0m', '\033[1;31;0m该账号不存在!\n\033[0m', '\033[1;31;0m该用户已经登录!\n\033[0m' ] if ret['state'] == 1: #保存 更新 断点续传的数据 common.update_br_info('download', name, ret['br_download_info']) common.update_br_info('upload', name, ret['br_upload_info']) print('\033[1;31;0m登录成功!\n\033[0m') return ret else: print(info_list[ret['state']]) return {'state': 0}
def secure_connect(self, salt): head_dic = common.recv_info(self.sk, self.coding)['clear'] # 加密 Secure connection verification scv = common.my_md5(salt, head_dic) head_dic = {'scv': scv} head_json_bytes, head_struct = common.struct_pack(head_dic) common.send_info(head_json_bytes, head_struct, self.sk) head_dic = common.recv_info(self.sk, self.coding)['state'] return head_dic
def login(self, args): name = args['name'] passwd = common.my_md5('20180610'+name, args['passwd']) person_info_dic = self.data_handle.select_data('person_info') person_login_info = self.data_handle.select_data('person_login_info') person_login_info = {} # print("person_info_dic = ", person_info_dic) info_dic = {} if name in person_login_info.keys(): info_dic['state'] = 3 print("该用户已经登录!") else: if name in person_info_dic.keys(): if person_info_dic[name]['passwd'] == passwd: # 登录人员的文件目录 self.USER_DIR = name info_dic['state'] = 1 info_dic['name'] = name person_info_dic[name].pop('passwd') # 去除密码 info_dic['person_info'] = person_info_dic[name] # 获取该用户当前目录下的文件信息 file_path = os.path.join(self.FILE_PATH, name) info_dic['file_list'] = os.listdir(file_path) info_dic['current_file'] = name # 获取断点续传文件 br_download_info = common.get_br_file('download', name) br_upload_info = common.get_br_file('upload', name) print('br_download_info br_upload_info = ', br_download_info, br_upload_info) info_dic['br_download_info'] = br_download_info info_dic['br_upload_info'] = br_upload_info print('br_download_info br_upload_info = ', info_dic['br_download_info'], info_dic['br_upload_info']) # 保存登录信息 login_info = {name: 1} self.data_handle.save_data(login_info, 'person_login_info') self.USERS_LIST = os.listdir(os.path.join(self.FILE_PATH, name)) print("登录成功!") else: info_dic['state'] = 0 print("用户名或密码错误!") else: info_dic['state'] = 2 print('该用户名不存在!') head_json_bytes, head_struct = common.struct_pack(info_dic) common.send_info(head_json_bytes, head_struct, self.request)
def secure_connect(self): salt = settings.configuration.get('salt') random_clear = str(os.urandom(32)) # 封装明文 head_dic = {'clear': random_clear} head_json_bytes, head_struct = common.struct_pack(head_dic) common.send_info(head_json_bytes, head_struct, self.request) # 接收校验密文,自加密 scv = common.my_md5(salt, random_clear) head_json = common.recv_info(self.request, self.coding)['scv'] if head_json == scv: head_dic = {'state': True} print("安全连接!") else: head_dic = {'state': False} print("非安全连接!") head_json_bytes, head_struct = common.struct_pack(head_dic) common.send_info(head_json_bytes, head_struct, self.request) return head_dic
def register(): # 正则表达式 name:数字字母下划线 age:数字 phone:字符串 name_re = re.compile(r'^[0-9a-zA-Z]\w*$') age_re = re.compile(r'^[0-9]{1,2}$') sex_re = re.compile(r'[男女]') phone_re = re.compile(r'1[3458]\d{9}') passwd_re = re.compile(r'.{6}') while True: flag = 0 while True: name = input("请输入您的姓名(退出:Q):").strip() if name.upper() == 'Q': flag = 1 print("\033[1;31;0m欢迎使用!\n\033[0m") break if not name_re.match(name): print( "\033[1;31;0m您输入的用户名不合法(用户名:由字母数字下划线组成,不能以下划线开头),请重新输入!\033[0m" ) continue else: break if flag: break while True: age = input("请输入您的年龄(退出:Q):").strip() if age.upper() == 'Q': print("\033[1;31;0m欢迎使用!\n\033[0m") flag = 1 break if not age_re.match(age) or int(age) <= 0 or int(age) >= 100: print("\033[1;31;0m您输入的用户名不合法(年龄:在0-100之间),请重新输入!\033[0m") continue else: break if flag: break while True: sex = input("请输入您的性别(退出:Q):").strip() if sex.upper() == 'Q': print("\033[1;31;0m欢迎使用!\n\033[0m") flag = 1 break if not sex_re.match(sex): print("\033[1;31;0m您输入的性别不合法(性别:只有男或女),请重新输入!\033[0m") continue else: break if flag: break while True: phone = input("请输入您的电话(退出:Q):").strip() if phone.upper() == 'Q': print("\033[1;31;0m欢迎使用!\n\033[0m") flag = 1 break if not phone_re.match(phone): print( "\033[1;31;0m您输入的电话号码不合法(电话号码:支持13\\14\\15\\18开头的:11位电话),请重新输入!\033[0m" ) continue else: break if flag: break while True: passwd = input('请输入您的密码(退出:Q):') if passwd.upper() == 'Q': flag = 1 print("\033[1;31;0m欢迎使用!\n\033[0m") break if not passwd_re.match(passwd) or len(passwd) != 6: print("\033[1;31;0m密码格式错误:密码由6位任意字符构成!\033[0m") continue else: break if flag: break while True: passwd_check = input("请确认您的密码(退出:Q):") if passwd_check.upper() == 'Q': print("\033[1;31;0m欢迎使用!\n\033[0m") flag = 1 break if not passwd_re.match(passwd_check) or len(passwd_check) != 6: print("\033[1;31;0m密码格式错误:密码由6位任意字符构成!\033[0m") continue else: break if flag: break if passwd == passwd_check: passwd = common.my_md5(name, passwd) info_dic = { 'cmd': 'register', 'info': { "name": name, "age": age, "sex": sex, "phone": phone, 'passwd': passwd } } # 调用member的注册功能 ret = ftp_manage.FTPManage().request_and_response(info_dic) # 接收服务器返回的信息,True注册成功,False 注册失败 if ret['state'] == 1: print("\033[1;31;0m注册成功,请登录!\n\033[0m") return ret elif ret['state'] == 2: msg = input("该用户已经存在,是否继续(Y/N):").strip().upper() if msg == 'Y': continue else: break elif ret['state'] == 0: msg = input("用户注册失败,是否继续(Y/N):").strip().upper() if msg == 'Y': continue else: break else: print("\033[1;31;0m对不起,您的密码不一致!\n\033[0m")