def auth(self, conn): """处理用户的认证请求 1.根据username读取accounts.ini文件,password相比,判断用户是否存在 2.将用户的home,current_dir存在homedir_conn[conn],供后续conn使用 3.给client返回用户的详细信息 """ while True: try: user_dic = pickle.loads(conn.recv(self.MAX_RECV_SIZE)) name = user_dic.get('username') user_handle = UserHandle(name) # 判断用户是否存在 返回列表eg:[('password', '202cb962ac59075b964b07152d234b70'), ('homedir', 'home/alice'), ('quota', '100')] user_data = user_handle.judge_user() if user_data: if user_data[0][1] == hashlib.md5( user_dic.get('password').encode( 'utf-8')).hexdigest(): # 密码也相同 username = name homedir_path = '%s/%s/%s' % (settings.BASE_DIR, 'home', username) self.homedir_conn[conn] = { 'username': username, 'home': homedir_path, 'current_dir': homedir_path } # 第一个表示用户的home目录,第二个表示用户切换的当前目录 self.homedir_conn[conn]['quota_bytes'] = int( user_data[2][1]) * 1024 * 1024 # 将用户配额的大小从M 改到字节 user_info_dic = { 'username': username, 'homedir': user_data[1][1], 'quota': user_data[2][1] } conn.send(self.message['208'] + (';' + str(user_info_dic)).encode('utf-8')) user_logger.info('user: %s 登录成功' % username) return True else: conn.send(self.message['209']) # 密码不对 else: conn.send(self.message['210']) # 用户不存在 except Exception as e: print(e) conn.close() self.q_conn.get() break
def auth(self, conn): ''' 处理用户的认证请求 1,根据username读取accounts.ini文件,然后查看用户是否存在 2,将程序运行的目录从bin.user_auth修改到用户home/username方便之后查询 3,把客户端返回用户的详细信息 :return: ''' while True: user_dic = self.get_recv(conn) username = user_dic['username'] password = user_dic['password'] md5_obj = hashlib.md5(password.encode('utf-8')) check_password = md5_obj.hexdigest() user_handle = UserHandle(username) # 判断用户是否存在 返回列表, user_data = user_handle.judge_user() if user_data: if user_data[0][1] == check_password: conn.send(struct.pack('i', 1)) # 登录成功返回 1 self.homedir_path = os.path.join(settings.BASE_DIR, 'home', username) # 将程序运行的目录名修改到 用户home目录下 os.chdir(self.homedir_path) # 将用户配额的大小从M 改到字节 self.quota_bytes = int(user_data[2][1]) * 1024 * 1024 user_info_dic = { 'username': username, 'homedir': user_data[1][1], 'quota': user_data[2][1] } # 用户的详细信息发送到客户端 conn.send(pickle.dumps(user_info_dic)) return True else: conn.send(struct.pack('i', 0)) # 登录失败返回 0 else: conn.send(struct.pack('i', 0)) # 登录失败返回 0
def create_user(self): """创建用户""" username = input('username>>>:').strip() UserHandle(username).add_user()
def create_user(self): '''创建用户,执行创建用户的类''' username = input( "\033[32;1mplease input your username>>>\033[0m").strip() UserHandle(username).add_user()