Example #1
0
    def login(self, user, psd):
        assert type(user) == str, 'input user not a string'
        assert type(psd) == str, 'input password not a string'

        if user == '' or psd == '':
            raise LogicError('name and password can\'t be empty.')

        self.send_msg('USER ' + user)
        res = self.expect_respond()
        code = self.get_res_code(res)
        if code == 230:
            return
        elif code in [331, 332]:
            self.send_msg('PASS ' + psd)
            res = self.expect_respond()
            code = self.get_res_code(res)
            if code == 230:
                self.status = self.STATUS_LOGGED
                # 获取一下目录
                self.get_server_current_root()
                self.server_root = self.server_current_dir
                self.send_msg('TYPE I')
                code = self.get_res_code(self.expect_respond())
                if code != 200:
                    raise InternalError('Server rejected TYPE')
                return
            elif code == 202:
                raise LogicError('permission already granted')
            elif code == 530:
                raise LogicError('username or password unacceptable')
            else:
                raise LogicError(
                    'failed to login, see command prompt for infomation')
        else:
            raise LogicError('server denied the input user name')
Example #2
0
 def set_root(self, new_root):
     assert type(new_root) == str, 'input not a string'
     if os.path.isdir(new_root):
         self.root_directory = new_root
         self.console_log(0, 'local root changed to: ' + new_root)
     else:
         raise LogicError('wrong input')
Example #3
0
 def server_rename(self, from_name, to_name):
     assert type(
         from_name) == str and from_name != '', 'given old file name wrong'
     assert type(
         to_name) == str and to_name != '', 'given new file name wrong'
     self.send_msg('RNFR ' + from_name)
     res = self.expect_respond()
     code = self.get_res_code(res)
     if code != 350:
         raise LogicError('The server rejected, see command for info')
     self.send_msg('RNTO ' + to_name)
     res = self.expect_respond()
     code = self.get_res_code(res)
     if code != 250:
         raise LogicError('The server rejected, see command for info')
     self.console_log(0, 'server renamed %s to %s.' % (from_name, to_name))
Example #4
0
 def server_delete(self, name):
     assert type(name) == str and name != '', 'given dir name wrong'
     self.send_msg('RMD ' + name)
     res = self.expect_respond()
     code = self.get_res_code(res)
     if code != 250:
         raise LogicError('The server rejected, see command for info')
     self.console_log(0, 'server removed dir: ' + name)
Example #5
0
 def server_make_dir(self, dir_name):
     assert type(dir_name) == str and dir_name != '', 'given dir name wrong'
     self.send_msg('MKD ' + dir_name)
     res = self.expect_respond()
     code = self.get_res_code(res)
     if code not in [257, 250]:
         raise LogicError('The server rejected, see command for info')
     self.console_log(0, 'server created dir: ' + dir_name)
Example #6
0
 def rename_file(self, file_name):
     new_name,ok = QInputDialog.getText(self,'Input',"Please input a new file name: ",
         QLineEdit.Normal, file_name)
     if ok:
         if new_name == '' or new_name[0] == '/':
             raise LogicError('please input a legal file name')
         else:
             self.session.server_rename(file_name, new_name)
             self.update_cloud_file()
Example #7
0
 def make_dir(self):
     name,ok = QInputDialog.getText(self,'Input',"Please input a directory name: ",
         QLineEdit.Normal)
     if ok:
         if name == '' or name[0] == '/':
             raise LogicError('please input a legal dir name')
         else:
             self.session.server_make_dir(name)
             self.update_cloud_file()
Example #8
0
 def server_login(self, *args, **kwargs):
     if self.session.status == self.session.STATUS_LOGGED:
         raise LogicError('You have logged')
     name = self.userEdit.text()
     password = self.passwordEdit.text()
     # 登录,这时会自动获取目前的路径和总体的根目录
     self.session.login(name, password)
     # 获取目录下所有文件
     self.update_cloud_file()
     return
Example #9
0
 def change_trans_mode(self, ipaddr=''):
     if self.trans_mode == self.MODE_PASV:
         assert type(ipaddr) == str, 'input not a string'
         if ipaddr == '' or (not utility.is_address(ipaddr, 0)):
             raise LogicError('Input IP adress not legal')
         self.trans_mode = self.MODE_PORT
         self.console_log(0, 'transfer mode swtiched to PORT')
     else:
         self.trans_mode = self.MODE_PASV
         self.console_log(0, 'transfer mode swtiched to PASV')
     return
Example #10
0
    def connect(self, ip, port):
        if not utility.is_address(ip, port):
            raise LogicError('Input Ip or port format wrong.')

        self.console_log(0, 'connect to host: ' + str(ip) + '/' + str(port))
        self.server_ip = ip
        self.server_port = port
        # 开始连接时才创建socket
        self.control_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            self.control_sock.connect((self.server_ip, self.server_port))
        except:
            self.control_sock.close()
            self.control_sock = None
            raise LogicError('can\'t connect to server')
        code = self.get_res_code(self.expect_respond())
        if code != 220:
            self.control_sock.close()
            self.control_sock = None
            raise LogicError('server refused!')
        self.status = self.STATUS_CONNECT
        return
Example #11
0
 def connect_server(self, *args, **kwargs):
     if self.session.status == self.session.STATUS_OFFLINE:
         ip = self.ipEdit.text()
         port = self.portEdit.text()
         if self.ipEdit.text() == '' or self.portEdit.text() == '':
             raise LogicError('Please input correct ip and port')
         self.session.connect(ip, int(port))
         QMessageBox.information(self, 'Successful', 'Successfully connected', 
             QMessageBox.Yes, QMessageBox.Yes)
         self.connect_btn.setText('disconnect')
     else:
         self.session.disconnect()
         self.clear_ui()
         QMessageBox.information(self, 'Successful', 'Successfully disconnected', 
             QMessageBox.Yes, QMessageBox.Yes)
         self.connect_btn.setText('connect')