Exemple #1
0
 def rename(self, oldPath, newPath):
     obsAdapter = None
     try:
         _oldPath = self._realpath(oldPath)
         _newPath = self._realpath(newPath)
         oldBucketName, oldKey = ObsSftpUtil.getBucketAndKey(_oldPath)
         newBucketName, newKey = ObsSftpUtil.getBucketAndKey(_newPath)
         obsAdapter = obsadpter.ObsAdapter(client=self._client, bucketName=newBucketName, key=newKey,
                                           logClient=self._logClient, ar=self._ar, connHost=self._connHost)
         renameSucceed = obsAdapter.rename(oldBucketName, oldKey)
         if renameSucceed is None:
             return SFTP_NO_SUCH_FILE
         return SFTP_OK if renameSucceed else SFTP_FAILURE
     finally:
         del obsAdapter
Exemple #2
0
    def stat(self, path):
        obsAdapter = None
        try:
            _path = self._realpath(path)
            if ObsSftpUtil.isRoot(_path):
                self._ar.update({'obs_key': _path})
                self._logClient.log(logging.DEBUG, 'Stat root path successfully, return a sftp folder SFTPAttributes.')
                return self._buildSftpFolder()
            if ObsSftpUtil.isBucket(_path):
                bucketName = ObsSftpUtil.getBucketName(_path)
                auditDict = {'obs_bucket': bucketName, 'obs_key': '-'}
                self._ar.update(auditDict)
                if self._bucketExists(bucketName):
                    self._logClient.log(logging.DEBUG,
                                        'Stat obs bucket [%s] successfully, return a sftp folder SFTPAttributes.',
                                        bucketName)
                    return self._buildSftpFolder()
                self._logClient.log(logging.ERROR, 'Stat obs bucket [%s] failed, error message [bucket is not exists].',
                                    bucketName)
                return SFTP_NO_SUCH_FILE

            bucketName, key = ObsSftpUtil.getBucketAndKey(_path)
            obsAdapter = obsadpter.ObsAdapter(client=self._client, bucketName=bucketName, key=key,
                                              logClient=self._logClient, ar=self._ar)
            pathInfo = obsAdapter.pathInfo()
            return SFTP_NO_SUCH_FILE if not pathInfo else pathInfo
        finally:
            del obsAdapter
Exemple #3
0
 def list_folder(self, path):
     _path = self._realpath(path)
     if ObsSftpUtil.isRoot(_path):
         self._ar.update({'obs_bucket': '-', 'obs_key': _path})
         return self._listUserBuckets()
     bucketName, key = ObsSftpUtil.getBucketAndKey(_path)
     obsAdapter = obsadpter.ObsAdapter(client=self._client, bucketName=bucketName, key=key,
                                       logClient=self._logClient, ar=self._ar)
     return obsAdapter.listDir()
Exemple #4
0
 def mkdir(self, path, attr):
     obsAdapter = None
     try:
         _path = self._realpath(path)
         bucketName, key = ObsSftpUtil.getBucketAndKey(_path)
         obsAdapter = obsadpter.ObsAdapter(client=self._client, bucketName=bucketName, key=key,
                                           logClient=self._logClient, ar=self._ar, connHost=self._connHost)
         return SFTP_OK if obsAdapter.mkDir() else SFTP_FAILURE
     finally:
         del obsAdapter
Exemple #5
0
 def remove(self, path):
     obsAdapter = None
     try:
         _path = self._realpath(path)
         bucketName, key = ObsSftpUtil.getBucketAndKey(_path)
         obsAdapter = obsadpter.ObsAdapter(client=self._client, bucketName=bucketName, key=key,
                                           logClient=self._logClient, ar=self._ar)
         removeResult = obsAdapter.remove()
         if removeResult is None:
             return SFTP_NO_SUCH_FILE
         return SFTP_OK if removeResult else SFTP_FAILURE
     finally:
         del obsAdapter
Exemple #6
0
    def open(self, path, flags, attr):
        """ open just for file

        :param path: file path
        :param flags: SSH_FXF_READ|SSH_FXF_WRITE|SSH_FXF_APPEND|SSH_FXF_CREAT|SSH_FXF_TRUNC|SSH_FXF_EXCL
        :param attr: not useful for obs
        :return: file handler
        """
        perm = config.getConfig().auth.get(self._userName).get('perm')
        # put
        if flags & os.O_WRONLY:
            if 'put' not in perm.split(','):
                self._logClient.log(logging.ERROR,
                                          'user [%s] not supported put operation'  , self._userName)
                return SFTP_OP_UNSUPPORTED
        elif flags == os.O_RDONLY:
            if 'get' not in perm.split(','):
                self._logClient.log(logging.ERROR,
                                            'user [%s] not supported get operation'  , self._userName)
                return SFTP_OP_UNSUPPORTED
        else:
            # TODO read and write and append
            raise Exception('Read and Write| Append operation is not support. flags [%d]' % flags)

        _path = self._realpath(path)
        bucketName, key = ObsSftpUtil.getBucketAndKey(_path)
        auditDict = {'obs_start_time': ObsSftpUtil.utcFormater(time.time()), 'obs_bucket': bucketName, 'obs_key': key}
        obsAdapter = obsadpter.ObsAdapter(client=self._client, bucketName=bucketName, key=key,
                                          logClient=self._logClient, ar=self._ar, connHost=self._connHost)
        if not self._obsAdapters:
            self._obsAdapters = []
        self._obsAdapters.append(obsAdapter)
        self._ar.update(auditDict)
        _key = ObsSftpUtil.maybeAddTrailingSlash(key)
        # TODO just successfully for object bucket. file bucket need mode for jungle folder
        if obsAdapter.dirInfo(bucketName, _key):
            self._logClient.log(logging.WARNING,
                                'Open key [%s] of bucket [%s] failed. error message [Client want to open a dir].', _key,
                                bucketName)
            return SFTP_FAILURE
        try:
            fobj = ObsSftpFileHandle(flags=flags, obsAdapter=obsAdapter, bucketName=bucketName, key=key,
                                     logClient=self._logClient, sftpServer=self)
            return fobj
        except Exception as e:
            self._logClient.log(logging.ERROR, 'Open key [%s] of bucket [%s] failed. error message [%s] - %s.', key,
                                bucketName, str(e), traceback.format_exc())
            if 'not support' in str(e):
                return SFTP_OP_UNSUPPORTED
            return SFTP_FAILURE
Exemple #7
0
 def rmdir(self, path):
     obsAdapter = None
     try:
         _path = self._realpath(path)
         bucketName, key = ObsSftpUtil.getBucketAndKey(_path)
         _key = ObsSftpUtil.maybeAddTrailingSlash(key)
         obsAdapter = obsadpter.ObsAdapter(client=self._client, bucketName=bucketName, key=_key,
                                           logClient=self._logClient, ar=self._ar, connHost=self._connHost)
         if not obsAdapter.dirInfo(bucketName, _key):
             self._logClient.log(logging.DEBUG,
                                 'Rmdir key [%s] of bucket [%s] failed. error message [dir is not exists].',
                                 _key, bucketName)
             self._ar.update({'obs_key': _key, 'obs_bucket': bucketName})
             return SFTP_NO_SUCH_FILE
         return SFTP_OK if obsAdapter.rmDir() else SFTP_FAILURE
     finally:
         del obsAdapter