Copy a file across Box accounts - box-api

I am working on integrating my application with Box. I am providing a way for a user to send files to the server, and the server will upload to a managed enterprise Box account.
I would like to support users who already have a file in Box so that they can select a file from their Box account and transfer it to the server's Box account. I can do this by having the user download the file, upload it to the server, and having the server upload it to its Box account.
It seems silly to download and re-upload the file. Is there a way to simply copy the file from the user account to the server's account (with the user's approval)?

So let's say you have user A and user B. If you want to copy a file from user A's "outbox" folder to user B's "inbox" folder. You can do it one of two ways.
Either user B can make user A a collaborator with Editor access to the "inbox" folder. Then from user A's account they can do the copy API (POST /files//copy documentation here) and "push" the file into B's inbox.
Or
Via a "pull" model. User A can give user B access to their "outbox" folder, and user B can run the copy API, and copy the content to their "inbox" folder.

Related

Can the OneNote API copy a notebook or section from one user to another user in Office 365

I'm trying to copy section of a notebook, or even notebook itself, from a notebook in one user's OneDrive to another user's notebook in their OneDrive. The user I'm logged in as has permissions to read and write both notebooks. I'm getting the error response:
message=The specified resource ID does not exist.
#api.url=http://aka.ms/onenote-errors#C20102
code=20102
Where the path I'm using is of the form https://www.onenote.com/api/v1.0/users/{id}/notes/sections/{id}/copyToNotebook where the ids in that are for the source section.
which is presumably because the id in the post request represents a notebook under a different user.
If I was copying to a SharePoint site or group then the post request can have additional ids to identify that, so it be logical if there was a argument to identify the user to copy to.
Copying works perfectly when both notebooks are within the same user's OneDrive.
Is there any way of doing it between users in Office 365 OneDrive?
Yes, you can copy a section from one notebook to another user's notebook, as long as you have write permission to that user's notebook (or a notebook under another site).
In you scenario, the destination/post body has to contain the ID to the notebook, as well as the siteCollectionId and siteId, or the groupId of the site where the notebook is stored. (Checkout the message body format here). If you want to copy the section to another user's notebook, you will need the siteCollectionId and siteId of that user's OneDrive for Business; if you want to copy it to a notebook stored in a site, you will need the IDs for that site.
The reason you need those extra IDs is because by default the copy API will consider the destination notebook is stored in your OneDrive for Business. By specifying those IDs you tell the API that the destination is in another location. I'm assuming you didn't provide those IDs that you got the error.
You get get more information about obtaining the siteCollectionId and siteId here.

Google drive folder access from website registered members

I have to develop a web site where only registered and accepted members will have access to my GDrive space in specific personal folders I created, one folder for each member. I want all members to access their Gdrive folder from a login page in the web site.
I have a database where I store Username and Password from the registration process, and want to give permission to the folder associated to every members based on that username and password. The Gdrive Share process, as it is, is not working for my purpose.
You will need to use the Google Drive API.

Is there any way to download folder and files for specific user using box api?

I have a user which has co-admin privileages. i HAVE ACCESS AND AUTH TOKEN CORRESPONDING TO CO-ADMIN. In my code I first fetch all the users present under given enterprise account and then for some specific users i want to download all the folders and files. Is there any way to do so?. I know that box api does have GetFolder(). but this api does not take any arguments such as username . It requires a folder id and It will always return all the folders and files under that id.
It sounds like you want to use the On-Behalf-Of header. Once you've authenticated an admin account, you can use this header to make any API call on behalf any of the users in the admin's enterprise.

Transfer ownership for ALL files in user's google drive - using google-api-java-client and the Drive SDK

We have a google corporate account and need to transfer ALL of a user's google drive files to another account in certain instances. We want to do what is described at the following link for "all files" but programatically via the latest Drive API http://support.google.com/a/bin/answer.py?hl=en&answer=1247799
We are currently using the following API version(s) below, coupled with domain wide authority delegation as described at https://developers.google.com/drive/delegation and are able to see a user's files, iterate over them etc.
google-api-services-drive 1.14.2-beta
google-api-client 1.14.1-beta
My question is this: it appears that the only way to change permissions is by fileId by fileId etc. Instead of having to traverse and iterate over an entire set of user's files, if we just want to transfer ALL of a user's files to another particular user: is there a way in the API to do this (ownership transfer for ALL files) rather than individual requests file/by file?
Also when transferring ownershisp, must the transferee be in the same #domain or can it be another #domain we manage? I read somewhere that you can only transfer to owners in the same domain. Does this still hold true? For instance we manage #myCompany.com and have our corporate account registered under that, however that shell account has several sub-domains within it. We would like to transfer files from users in the sub-domains to a central user in the #myCompany domain.
You need to change permissions file by file, there is no updateAll type of functionality at the moment.
You cant transfer the ownership to another domain's user. Ownership can only be transferred to another user in the same domain as the current owner.
This answer doesn't directly answer your question, but it could be helpful for both you and future visitors.
As of now, you can mass transfer files to new users with Google's new Admin console. It doesn't let you filter for specific folders, but it does allow you to transfer all of one user's Drive files to a second user.
I know you were trying to create something which uses the API to iterate through folders and files, and you probably have a very specific use-case in mind. However, in the case where you have employees leaving, or you need to transfer everything, using the following method is fast and simple.
Open the Google Admin console
Go to Google Apps > Drive
Click on "Transfer ownership"
Fill out both user fields and submit
This process will even email both users once the process is completed.
You can do this with a single call to the Data Transfer API
Exactly what is needed but only with API!
Open the Google Admin console
Go to Google Apps > Drive
Click on "Transfer ownership"
Fill out both user fields and submit
This process will even email both users once the process is completed.
If this is not possible via API calls, then there is no point deleting a user using API.

How to transfer shared files of user who leaves a google domain? (impersonate user)?

I've noticed the doclist api has become deprecated and I'm trying to transfer shared files from 1 user to another.
In Doclist(depricated):
https://developers.google.com/google-apps/documents-list/#using_google_apps_administrative_access_to_impersonate_other_domain_users
Example :
Employee A: Stopped working at the company.
Employee B: New owner of Employee A's files.
Employee C:Admin
I know the admin(User C) has a menu where he can transfer the ownership of the files from user A to user B. But this does not transfer the files that used to be shared with user A.
I would like to make an application wich transfers the files shared with user A and shares them to user C. This has to be done by the admin(user C).
I already know how to transfer the ownership if user A is logged on. But in most cases this is not possible.
*I would like to know if there's a way to get the files shared with user A to be shared with user B without authenticating user A?*
If files are shared with User A, it should be the owner or other editors that share the file with user B again. If user A is only reader on a file, user A can't re-share the file. Also if the owner of the file set the sharing permissions not to allow editors to share the file again, user A could not share the file.
The best way to resolve this would be by procedure:
If the files are shared using folders or groups, swap out user A for user B
If you can logon as user A, run a script to create a listing of all documents shared with A and share this listing with B and have B request access to the documents from the document owners.
The technical option to do this, which is quite nasty, is to write some code (i.e. in Java) that:
impersonates the user using a service account (some sample code here:
Google Drive service account returns 403 usageLimits),
get all the files
(https://developers.google.com/drive/v2/reference/files/list),
determine the owner
impersonate every owner to reshare the file with the user (https://developers.google.com/drive/v2/reference/permissions/update)