Exemple #1
0
 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
Exemple #2
0
 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
Exemple #3
0
 def create_user(self):
     """创建用户"""
     username = input('username>>>:').strip()
     UserHandle(username).add_user()
Exemple #4
0
 def create_user(self):
     '''创建用户,执行创建用户的类'''
     username = input(
         "\033[32;1mplease input your username>>>\033[0m").strip()
     UserHandle(username).add_user()