Skip to content

Commit

Permalink
onedrive: add link sharing support #2178
Browse files Browse the repository at this point in the history
  • Loading branch information
jackyzy823 authored and Cnly committed Oct 9, 2018
1 parent 1e2676d commit 411a6cc
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 1 deletion.
22 changes: 22 additions & 0 deletions backend/onedrive/api/types.go
Expand Up @@ -250,6 +250,28 @@ type MoveItemRequest struct {
FileSystemInfo *FileSystemInfoFacet `json:"fileSystemInfo,omitempty"` // File system information on client. Read-write.
}

//CreateShareLinkRequest is the request to create a sharing link
//Always Type:view and Scope:anonymous for public sharing
type CreateShareLinkRequest struct {
Type string `json:"type"` //Link type in View, Edit or Embed
Scope string `json:"scope,omitempty"` //Optional. Scope in anonymousi, organization
}

//CreateShareLinkResponse is the response from CreateShareLinkRequest
type CreateShareLinkResponse struct {
ID string `json:"id"`
Roles []string `json:"roles"`
Link struct {
Type string `json:"type"`
Scope string `json:"scope"`
WebURL string `json:"webUrl"`
Application struct {
ID string `json:"id"`
DisplayName string `json:"displayName"`
} `json:"application"`
} `json:"link"`
}

// AsyncOperationStatus provides information on the status of a asynchronous job progress.
//
// The following API calls return AsyncOperationStatus resources:
Expand Down
27 changes: 27 additions & 0 deletions backend/onedrive/onedrive.go
Expand Up @@ -1088,6 +1088,32 @@ func (f *Fs) Hashes() hash.Set {
return hash.Set(hash.QuickXorHash)
}

// PublicLink returns a link for downloading without accout.
func (f *Fs) PublicLink(remote string) (link string, err error) {
info, _, err := f.readMetaDataForPath(f.Root())
if err != nil {
return "", err
}
opts := newOptsCall(info.ID, "POST", "/createLink")

share := api.CreateShareLinkRequest{
Type: "view",
Scope: "anonymous",
}

var resp *http.Response
var result api.CreateShareLinkResponse
err = f.pacer.Call(func() (bool, error) {
resp, err = f.srv.CallJSON(&opts, &share, &result)
return shouldRetry(resp, err)
})
if err != nil {
fmt.Println(err)
return "", err
}
return result.Link.WebURL, nil
}

// ------------------------------------------------------------

// Fs returns the parent Fs
Expand Down Expand Up @@ -1540,6 +1566,7 @@ var (
_ fs.DirMover = (*Fs)(nil)
_ fs.DirCacheFlusher = (*Fs)(nil)
_ fs.Abouter = (*Fs)(nil)
_ fs.PublicLinker = (*Fs)(nil)
_ fs.Object = (*Object)(nil)
_ fs.MimeTyper = &Object{}
_ fs.IDer = &Object{}
Expand Down
2 changes: 1 addition & 1 deletion docs/content/overview.md
Expand Up @@ -141,7 +141,7 @@ operations more efficient.
| Jottacloud | Yes | Yes | Yes | Yes | No | Yes | No | Yes | Yes |
| Mega | Yes | No | Yes | Yes | No | No | No | No [#2178](https://github.com/ncw/rclone/issues/2178) | Yes |
| Microsoft Azure Blob Storage | Yes | Yes | No | No | No | Yes | No | No [#2178](https://github.com/ncw/rclone/issues/2178) | No |
| Microsoft OneDrive | Yes | Yes | Yes | Yes | No [#575](https://github.com/ncw/rclone/issues/575) | No | No | No [#2178](https://github.com/ncw/rclone/issues/2178) | Yes |
| Microsoft OneDrive | Yes | Yes | Yes | Yes | No [#575](https://github.com/ncw/rclone/issues/575) | No | No | Yes | Yes |
| OpenDrive | Yes | Yes | Yes | Yes | No | No | No | No | No |
| Openstack Swift | Yes † | Yes | No | No | No | Yes | Yes | No [#2178](https://github.com/ncw/rclone/issues/2178) | Yes |
| pCloud | Yes | Yes | Yes | Yes | Yes | No | No | No [#2178](https://github.com/ncw/rclone/issues/2178) | Yes |
Expand Down

0 comments on commit 411a6cc

Please sign in to comment.