示例#1
0
 def GetUserGroups(self, UserID):
     login_headers = {'Accept': 'application/json'}
     url = "provisioning/user_groups.svc/user/%s/groups" % UserID
     Method = "GET"
     request = CallAPI(url, self.AppKey, self.AccessToken, Method,
                       login_headers).MakeRequest()
     return json.loads(request.content.decode("utf8"))
 def CreateLink(self,
                Syncpoint_ID,
                VirtualPath,
                SharedLinkPolicy=3,
                PasswordPolicy=0,
                ExpirationPolicy=1,
                ExpirationDays='2'):
     login_headers = {
         'As-User': '******' % self.AsUser,
         'Accept': 'application/json',
         "Content-Type": "application/json"
     }
     url = "syncpoint/links.svc/"
     Method = "POST"
     data = [{
         "SyncPointId": "%s" % Syncpoint_ID,
         "VirtualPath": "%s" % VirtualPath,
         "ShareLinkPolicy": SharedLinkPolicy,
         "PasswordProtectPolicy": PasswordPolicy,
         "LinkExpirationPolicy": ExpirationPolicy,
         "LinkExpireInDays": "%s" % ExpirationDays
     }]
     json_data = json.dumps(data)
     request = CallAPI(url,
                       self.AppKey,
                       self.AccessToken,
                       Method,
                       login_headers,
                       data=json_data).MakeRequest()
     return json.loads(request.content.decode("utf8"))
示例#3
0
 def DeleteGroup(self, GroupID):
     login_headers = {}
     url = "provisioning/group.svc/%s" % GroupID
     Method = "DELETE"
     request = CallAPI(url, self.AppKey, self.AccessToken, Method,
                       login_headers).MakeRequest()
     return request
示例#4
0
 def DeleteUserFromGroup(self, User, GroupID):
     login_headers = {}
     url = "provisioning/group_member.svc/%s/member/%s" % (GroupID, User)
     Method = "DELETE"
     request = CallAPI(url, self.AppKey, self.AccessToken, Method,
                       login_headers).MakeRequest()
     return request
示例#5
0
 def __upload_file_simple_mode(self, url, base_url, common_headers,
                               Syncpoint_ID, creation_date,
                               last_write_time):
     Method = "POST"
     common_headers["Content-Range"] = "0-*/*"
     multipart_body = [
         ('fileData', ('%s' % self.filename,
                       open('%s' % self.full_path,
                            'rb'), 'application/octet-stream')),
         ('sha256', (None, hashlib.sha256(
             self.full_path.encode('utf-8')).hexdigest(), None)),
         ('sessionKey', (None, 'Bearer ' + self.AccessToken, None)),
         ('virtualFolderId', (None, '%s' % Syncpoint_ID, None)),
         ('creationTimeUtc', (None, creation_date, None)),
         ('lastWriteTimeUtc', (None, last_write_time, None)),
         ('fileDone', (None, '', None))
     ]
     return CallAPI(url,
                    self.AppKey,
                    self.AccessToken,
                    Method,
                    common_headers,
                    data='',
                    file=multipart_body,
                    base_url='%s/' % base_url).MakeRequest()
示例#6
0
 def GetGroupMember(self, User, GroupID):
     login_headers = {'Accept': 'application/json'}
     url = "provisioning/group_member.svc/%s/member/%s" % (GroupID, User)
     Method = "GET"
     request = CallAPI(url, self.AppKey, self.AccessToken, Method,
                       login_headers).MakeRequest()
     return json.loads(request.content.decode("utf8"))
示例#7
0
 def GetAllSyncpoints(self):
     login_headers = {'As-User': '******' % self.AsUser, 'Accept': 'application/json'}
     url = "syncpoint/syncpoints.svc/?includeType=1,2,3,4,5,6,7,8"
     Method = "GET"
     request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers).MakeRequest()
     if request.status_code == 200:
         return json.loads(request.content.decode("utf8"))
     else:
         print('Failed to get syncpoints')
示例#8
0
 def GetDefaultStorage(self):
         login_headers = {'As-User': '******' % self.AsUser, 'Accept': 'application/json'}
         url = "storage/storageendpoint.svc/"
         Method = "GET"
         request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers).MakeRequest()
         if request.status_code == 200:
             return json.loads(request.content.decode("utf8"))
         else:
             print('Failed to get default storage')
 def DeleteFile(self, SyncpointID, FileID):
     login_headers = {
         'As-User': '******' % self.AsUser,
         'Accept': 'application/json'
     }
     url = "sync/file.svc/%s/file/%s" % (SyncpointID, FileID)
     Method = "DELETE"
     request = CallAPI(url, self.AppKey, self.AccessToken, Method,
                       login_headers).MakeRequest()
     return request
示例#10
0
 def CreateFolder(self, SyncpointID, FolderID, NewFolder):
     login_headers = {'As-User': '******' % self.AsUser,
                      'Accept': 'application/json',
                      'Content-Type': 'application/json'}
     data = [{"Name": "%s" % NewFolder, "Status": 1}]
     json_data = json.dumps(data)
     url = "sync/folder_folders.svc/%s/folder/%s/folders" % (SyncpointID, FolderID)
     Method = "GET"
     request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers, data=json_data).MakeRequest()
     print(json.dumps(json.loads(request.content.decode("utf8")), sort_keys=True, indent=4))
 def DeleteLink(self, LinkToken):
     login_headers = {
         'As-User': '******' % self.AsUser,
         'Accept': 'application/json'
     }
     url = "syncpoint/link.svc/%s" % LinkToken
     Method = "DELETE"
     request = CallAPI(url, self.AppKey, self.AccessToken, Method,
                       login_headers).MakeRequest()
     return request
 def CreateUser(self,  User, First_Name='', Last_Name='', Password='', Type=7):
     login_headers = {'Accept': 'application/json', 'Content-Type': 'application/json'}
     data = {'EmailAddress': '%s' % User, 'FirstName': '%s' % First_Name, 'LastName': '%s' % Last_Name,
             'Password': '******' % Password, 'AccountType': Type}
     data = [data]
     json_data = json.dumps(data)
     url = "provisioning/users.svc/?modifier=no_email"
     Method = "POST"
     request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers, data=json_data).MakeRequest()
     return json.loads(request.content.decode("utf8"))
 def GetLink(self, LinkToken):
     login_headers = {
         'As-User': '******' % self.AsUser,
         'Accept': 'application/json'
     }
     Method = "GET"
     url = "syncpoint/link.svc/%s" % LinkToken
     request = CallAPI(url, self.AppKey, self.AccessToken, Method,
                       login_headers).MakeRequest()
     return json.loads(request.content.decode("utf8"))
 def GetFoldersFromSyncpoint(self, SyncpointID):
     login_headers = {
         'As-User': '******' % self.AsUser,
         'Accept': 'application/json'
     }
     url = "sync/folders.svc/%s/folders" % SyncpointID
     Method = "GET"
     request = CallAPI(url, self.AppKey, self.AccessToken, Method,
                       login_headers).MakeRequest()
     return json.loads(request.content.decode("utf8"))
示例#15
0
 def GetAllGroups(self, CompanyID):
     login_headers = {'Accept': 'application/json'}
     url = "provisioning/groups.svc/%s/groups" % CompanyID
     Method = "GET"
     request = CallAPI(url,
                       self.AppKey,
                       self.AccessToken,
                       Method,
                       login_headers,
                       data='').MakeRequest()
     return json.loads(request.content.decode("utf8"))
 def DeleteSyncpoint(self, Syncpoint_ID):
     login_headers = {
         'As-User': '******' % self.AsUser,
         'Accept': 'application/json',
         'Content-Type': ''
     }
     url = "syncpoint/syncpoint.svc/%s" % Syncpoint_ID
     Method = "DELETE"
     request = CallAPI(url, self.AppKey, self.AccessToken, Method,
                       login_headers).MakeRequest()
     return request
示例#17
0
 def CreateFolderSP(self, Syncpoint, NewFolder):
     login_headers = {'As-User': '******' % self.AsUser,
                      'Accept': 'application/json',
                      'Content-Type': 'application/json'}
     data = [{"SyncpointId": "%s" % Syncpoint,
              "Name": "%s" % NewFolder,
              "Status": 1,
              "VirtualPath": "\\%s" % NewFolder}]
     Method = "POST"
     json_data = json.dumps(data)
     url = "sync/folders.svc/%s/folders" % Syncpoint
     request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers, data=json_data).MakeRequest()
     return json.loads(request.content.decode("utf8"))
 def Download(self):
     Method = "GET"
     url = "retrieveFile.php?vToken=%s" % self.vtoken
     request = CallAPI(
         url,
         self.AppKey,
         self.AccessToken,
         Method,
         AdditionalHeaders='',
         data='',
         base_url='https://data.syncplicity.com/').MakeRequest()
     open('downloaded_file', 'wb').write(request.content)
     return request
 def GetFolderFromSyncpoint(self, Syncpoint, FolderID):
     login_headers = {
         'As-User': '******' % self.AsUser,
         'Accept': 'application/json'
     }
     url = "sync/folder.svc/%s/folder/%s?include=active" % (Syncpoint,
                                                            FolderID)
     Method = "GET"
     request = CallAPI(url,
                       self.AppKey,
                       self.AccessToken,
                       Method,
                       login_headers,
                       data='').MakeRequest()
     return json.loads(request.content.decode("utf8"))
示例#20
0
 def CreateSyncpoint(self, Syncpoint_Name):
         login_headers = {'As-User': '******' % self.AsUser,
                          'Accept': 'application/json',
                          'Content-Type': 'application/json'}
         data = [{"Type": 6,
                  "Name": "%s" % Syncpoint_Name,
                  "Mapped": 0,
                  "DownloadEnabled": 0,
                  "UploadEnabled": 0,
                  "StorageEndpointID": "%s" % self.GetDefaultStorage()['Id']}]
         json_data = json.dumps(data)
         url = "syncpoint/syncpoints.svc/"
         Method = "POST"
         request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers, data=json_data).MakeRequest()
         return json.loads(request.content.decode("utf8"))
示例#21
0
 def AddUserToGroup(self, User, GroupID):
     login_headers = {
         'Content-Type': 'application/json',
         'Accept': 'application/json'
     }
     data = [{'EmailAddress': '%s' % User}]
     json_data = json.dumps(data)
     url = "provisioning/group_members.svc/%s" % GroupID
     Method = "POST"
     request = CallAPI(url,
                       self.AppKey,
                       self.AccessToken,
                       Method,
                       login_headers,
                       data=json_data).MakeRequest()
     return json.loads(request.content.decode("utf8"))
示例#22
0
    def __upload_file_chunk(self, url, base_url, common_headers, chunk,
                            is_last_chunk, content_range_index, Syncpoint_ID,
                            creation_date, last_write_time):
        Method = "POST"
        common_headers['Content-Range'] = '%s-*/*' % content_range_index
        multipart_body = self.__create_chunk_upload_body(
            chunk, is_last_chunk, Syncpoint_ID, creation_date, last_write_time)
        common_headers['Content-Type'] = multipart_body.content_type

        return CallAPI(url,
                       self.AppKey,
                       self.AccessToken,
                       Method,
                       common_headers,
                       data=multipart_body,
                       base_url='%s/' % base_url).MakeRequest()
示例#23
0
    def Download(self, Storage_Endpoint_ID):
        Method = "GET"
        base_url = self.get_url(Storage_Endpoint_ID)
        url = "retrieveFile.php?vToken=%s" % self.vtoken
        headers = {"As-User": self.AsUser}
        request = CallAPI(url,
                          self.AppKey,
                          self.AccessToken,
                          Method,
                          headers,
                          data='',
                          base_url='%s/' % base_url).MakeRequest()

        open('downloaded_file', 'wb').write(request.content)

        return request
    def GetDefaultStorage(self):
        user_id = self.AsUser if self.AsUser else self.AuthenticatedUserId

        # Note about on-behalf-of sample and As-User header:
        # Since the backend method we are calling requires admin permissions,
        # we must not use the As-User header here (otherwise the method might not be authorized).
        # Instead, specify the target user id in the URL parameter.
        login_headers = {'Accept': 'application/json'}

        url = "storage/storageendpoint.svc/?user=%s" % user_id
        Method = "GET"
        request = CallAPI(url, self.AppKey, self.AccessToken, Method,
                          login_headers).MakeRequest()
        if request.status_code == 200:
            return json.loads(request.content.decode("utf8"))
        else:
            print('Failed to get default storage')
示例#25
0
    def __initiate_chunked_upload_session(self, url, base_url):
        Method = "POST"
        initiate_chunked_upload_body = MultipartEncoder(
            {'sessionKey': (None, 'Bearer ' + self.AccessToken, None)})
        initiate_chunked_upload_headers = {
            'As-User': '******' % self.AsUser,
            "User-Agent": "API_Application",
            'Content-Range': "*/*",
            'Content-Type': initiate_chunked_upload_body.content_type
        }

        return CallAPI(url,
                       self.AppKey,
                       self.AccessToken,
                       Method,
                       initiate_chunked_upload_headers,
                       data=initiate_chunked_upload_body,
                       base_url='%s/' % base_url).MakeRequest()
示例#26
0
 def CreateGroup(self, GroupName, OwnerEmail, CompanyID):
     login_headers = {
         'Accept': 'application/json',
         'Content-Type': 'application/json'
     }
     url = "provisioning/groups.svc/%s/groups" % CompanyID
     data = [{
         "Name": '%s' % GroupName,
         "Owner": {
             "EmailAddress": '%s' % OwnerEmail
         }
     }]
     json_data = json.dumps(data)
     Method = "POST"
     request = CallAPI(url,
                       self.AppKey,
                       self.AccessToken,
                       Method,
                       login_headers,
                       data=json_data).MakeRequest()
     return json.loads(request.content.decode("utf8"))
 def PutLink(self, Syncpoint_ID, LinkToken, Email):
     login_headers = {
         'As-User': '******' % self.AsUser,
         'Accept': 'application/json',
         "Content-Type": "application/json"
     }
     Method = "PUT"
     data = {
         "SyncPointId": "%s" % Syncpoint_ID,
         'Users': [{
             'EmailAddress': '%s' % Email
         }]
     }
     json_data = json.dumps(data)
     url = "syncpoint/link.svc/%s?modifier=send_email" % LinkToken
     request = CallAPI(url,
                       self.AppKey,
                       self.AccessToken,
                       Method,
                       login_headers,
                       data=json_data).MakeRequest()
     return json.loads(request.content.decode("utf8"))
    def RenameFile(self, SynpointId, File):
        login_headers = {
            'As-User': '******' % self.AsUser,
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        }

        File['Filename'] = ''.join(
            random.choice(string.ascii_letters)
            for i in range(len(File['Filename'])))
        File['Status'] = FolderStatus.MOVEDORRENAMED

        json_data = json.dumps(File)
        url = "sync/file.svc/%s/file/" % File['SyncpointId']
        Method = "PUT"
        request = CallAPI(url,
                          self.AppKey,
                          self.AccessToken,
                          Method,
                          login_headers,
                          data=json_data).MakeRequest()
        return request
 def GetUser(self, User):
     login_headers = {'Accept': 'application/json'}
     url = "provisioning/user.svc/%s?include=all_users" % User
     Method = "GET"
     request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers).MakeRequest()
     return json.loads(request.content.decode("utf8"))
示例#30
0
    def Upload(self, Syncpoint_ID, Path):
        Method = "POST"
        creation_date = self.creation_date()
        last_write_time = datetime.datetime.fromtimestamp(
            os.path.getmtime(self.full_path)).isoformat()
        url = "saveFile.php?filepath=" + Path
        login_headers = {
            'As-User': '******' % self.AsUser,
            "User-Agent": "API_Application"
        }
        file_size = os.path.getsize(self.full_path)
        if file_size < self.max_chunk_size:
            login_headers["Content-Range"] = "0-*/*"
            multipart_body = [
                ('fileData', ('%s' % self.filename,
                              open('%s' % self.full_path,
                                   'rb'), 'application/octet-stream')),
                ('sha256', (None, hashlib.sha256(
                    self.full_path.encode('utf-8')).hexdigest(), None)),
                ('sessionKey', (None, 'Bearer ' + self.AccessToken, None)),
                ('virtualFolderId', (None, '%s' % Syncpoint_ID, None)),
                ('creationTimeUtc', (None, creation_date, None)),
                ('lastWriteTimeUtc', (None, last_write_time, None)),
                ('fileDone', (None, '', None))
            ]
            request = CallAPI(
                url,
                self.AppKey,
                self.AccessToken,
                Method,
                login_headers,
                data='',
                file=multipart_body,
                base_url="https://data.syncplicity.com/").MakeRequest()
            return request

        else:
            first_call_headers = {
                'As-User': '******' % self.AsUser,
                "User-Agent": "API_Application",
                'Content-Range': "*/*"
            }
            first_call_body = MultipartEncoder(
                {'sessionKey': (None, 'Bearer ' + self.AccessToken, None)})
            first_call_headers['Content-Type'] = first_call_body.content_type
            first_call_response = CallAPI(
                url,
                self.AppKey,
                self.AccessToken,
                Method,
                first_call_headers,
                data=first_call_body,
                base_url="https://data.syncplicity.com/").MakeRequest()
            if first_call_response.status_code == 308:
                login_headers['If-Match'] = first_call_response.headers['ETag']
            else:
                sys.exit('Failed to create session for chunked upload')
            chunk_count = math.ceil(file_size / self.max_chunk_size)
            f = open(self.full_path, 'rb')

            content_range_index = 0
            sent_chunk_count = 1

            for chunk in self.read_in_chunks(f):
                login_headers['Content-Range'] = '%s-*/*' % content_range_index
                content_range_index += self.max_chunk_size
                if sent_chunk_count == chunk_count:
                    multipart_body = MultipartEncoder({
                        'fileData':
                        (self.filename, chunk, 'application/octet-stream'),
                        'sha256':
                        (None, hashlib.sha256(chunk).hexdigest(), None),
                        'sessionKey':
                        (None, 'Bearer ' + self.AccessToken, None),
                        'virtualFolderId': (None, '%s' % Syncpoint_ID, None),
                        'creationTimeUtc': (None, creation_date, None),
                        'lastWriteTimeUtc': (None, last_write_time, None),
                        'fileDone': (None, '', None)
                    })
                else:
                    multipart_body = MultipartEncoder({
                        'fileData':
                        (self.filename, chunk, 'application/octet-stream'),
                        'sha256':
                        (None, hashlib.sha256(chunk).hexdigest(), None),
                        'sessionKey':
                        (None, 'Bearer ' + self.AccessToken, None),
                        'virtualFolderId': (None, '%s' % Syncpoint_ID, None),
                        'creationTimeUtc': (None, creation_date, None),
                        'lastWriteTimeUtc': (None, last_write_time, None)
                    })
                login_headers['Content-Type'] = multipart_body.content_type
                sent_chunk_count += 1
                request = CallAPI(
                    url,
                    self.AppKey,
                    self.AccessToken,
                    Method,
                    login_headers,
                    data=multipart_body,
                    base_url="https://data.syncplicity.com/").MakeRequest()
                if request.status_code == 308:
                    login_headers['If-Match'] = request.headers['ETag']
                else:
                    f.close()
                    return request