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"))
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
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
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()
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"))
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')
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
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"))
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
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"))
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"))
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"))
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()
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')
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()
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"))
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