コード例 #1
0
ファイル: ftp_server.py プロジェクト: tg123456/Python_MyFTP
    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)
コード例 #2
0
ファイル: login.py プロジェクト: tg123456/Python_MyFTP
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}
コード例 #3
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
コード例 #4
0
ファイル: ftp_server.py プロジェクト: tg123456/Python_MyFTP
    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)
コード例 #5
0
ファイル: ftp_server.py プロジェクト: tg123456/Python_MyFTP
    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
コード例 #6
0
ファイル: register.py プロジェクト: tg123456/Python_MyFTP
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")