Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1️⃣⬇️🔗 One-time download links #6841

Closed
5 tasks done
Tracked by #54
jospoortvliet opened this issue Oct 16, 2017 · 29 comments
Closed
5 tasks done
Tracked by #54

1️⃣⬇️🔗 One-time download links #6841

jospoortvliet opened this issue Oct 16, 2017 · 29 comments
Assignees
Milestone

Comments

@jospoortvliet
Copy link
Member

jospoortvliet commented Oct 16, 2017

Sometimes you want to offer a download to a recipient, but have it work only once. An expiration date then doesn't do the trick.

Why would you want this?

  • Let the recipient download the file/folder but remove the share after they got it. Expiration date only works if you know when they will get the file. This way you don't have to clean up share link.
  • Make sure the recipient and ONLY the recipient can download: sent link, check if person downloaded, link has disappeared already. Safe!
@rullzer
Copy link
Member

rullzer commented Oct 16, 2017

First of all.

It is not so simple. Because a link is accessed via webdav as well. So just opening the link is already the first access. Then downloading it is the second access. Or if they navigate in the structure it is all access. Or what hapens when they have a client that previews the page or something? It is all access.

Make sure the recipient and ONLY the recipient can download: sent link, check if person downloaded, link has disappeared already. Safe!

This is really a bogus argument. Because there are only 2 scenarios here:

  1. The recipient shared the link with somebody. Which means they intend to have the file. If the download link would only work once they would just share it via other means.
  2. You are afraid somebody guesses you share token. However, I would say if somebody has the time to guess a few septillion share tokens they can also just guess your password.

@supremesyntax
Copy link

Thought about that some time ago...

You are running into several problems here:

  1. Check if the user downloading the file is really the user you sent the link to.
    This would need some kind of authentication (e.g. pgp key validation)

  2. You need to be sure the whole file got downloaded and no error occured on client side or the user gets locked out and you would have to re-submit the link. (Timeout, poor connection, browser crash)
    Dunno if this would be possible with javascript to look at every aspect of file transfer
    I remember mega(dot)nz does some kind of browser file caching, maybe hashing is possible to verify file integrity there

@LawnSounds
Copy link

Have a look at how Firefox Send works maybe? Open source. Would be great to see this feature!

@jospoortvliet
Copy link
Member Author

Well, the use case I think is clear: you create a public link and want it to go away once the recipient has downloaded the file, without having to go and check up with that person.

Some thoughts:

  • We show an Activities thing when a file is downloaded. This doesn't trigger on preview generation does it? Perhaps the same thing that triggers the Activity can trigger the removal of the shared link.
  • a grace period makes sense in case a download went wrong. So once download is initiated, give it 10 minutes at least (and until the next Cron run, hehe).

I personally frequently share files by public link for a one-time use case: a screenshot you want to show and other stuff. Automatic cleanup of those links would be nice...

@MorrisJobke MorrisJobke changed the title Feature request: offer one-time download links Offer one-time download links Jan 26, 2018
@MorrisJobke MorrisJobke changed the title Offer one-time download links One-time download links Jan 26, 2018
@nextcloud-bot nextcloud-bot added the stale Ticket or PR with no recent activity label Jun 20, 2018
@skjnldsv skjnldsv added the 1. to develop Accepted and waiting to be taken care of label Jun 12, 2019
@ghost ghost removed the stale Ticket or PR with no recent activity label Jun 12, 2019
@jpfleury
Copy link

Someone mentioned Firefox Send as offering one-time download links. There are also some other open source projects to look at with this feature. Examples:

@grumpybozo
Copy link

This feature and the simpler feature requested in #17934 would be useful and I'd like to see them both. Currently it is not even clear when expiration actually happens, i.e. is it 00:00 UTC? 00:00 in the user's local time zone when setting the expiration? Some other arbitrary time?

My context for this is that we use shared links to communicate initial passwords to users. We'd like these to die when they are no longer needed but no sooner. That is obviously not determinable programmatically, so at least knowing precisely when a link expires (with a fixed time or after a certain number of accesses or something more complex but deterministic) would help.

@armijnhemel
Copy link

I would be interested in such functionality. For me it would be enough to drop the guarantee that the client has actually received the data: as soon as the server has sent the data, it should be considered to have been downloaded and the data should be removed after 1 or N downloads. If the client didn't get it: tough luck, wait for a complaint and resend. I think that this would make it less difficult to implement.

@mrizvic
Copy link

mrizvic commented May 10, 2020

I vote for that feature too.
In mission impossible style it would be like: this nextcloud share will self destruct after one download :)

@Eviepayne
Copy link

Just adding my two cents to this. I think this feature is severely needed.
Currently running a nextcloud for my team to quickly send files around while send.firefox.com is down and this would solve my issue now.

@Woefdram
Copy link

Agree, this is a very useful feature, to say the least.

@IIPoliII
Copy link

IIPoliII commented Jul 29, 2020

Same here would be interested

@RealKelsar
Copy link

Would be nice to share Passwords and Certificates

@sirKitKat
Copy link

Maybe, an expiration period after the first download? a default of 24 hours seems reasonable I think to cover errors during download and gives the users some time to retry.

@johnstoneinoue
Copy link

I also agree, this feature is a very useful.

@matthewmummert5
Copy link

matthewmummert5 commented Mar 20, 2023

I'm not trying to beat a dead horse, but I think about this suggested feature every year, once per year: U.S. Tax season.

Tax documents have serious identity theft risk for Americans due to the fact that America's financial system lets you impersonate anyone if you have their social security number. I'd like to share my tax documents with my tax accountant with a share link over email, and have that link clean itself up after they download it. Currently, I rely on them writing to me to tell me that they've downloaded it, and me having to manually disable it.

This feature would give me a little more peace of mind.

@Moini
Copy link

Moini commented Aug 7, 2023

Same, this would be super useful for sharing sensitive documents without having to also share a password by the same route.

@szaimen
Copy link
Contributor

szaimen commented Aug 15, 2023

We have this app available since a while: https://apps.nextcloud.com/apps/files_downloadlimit if you just put in 1 allowed download, you basically achieve the functionality that was requested here?

@szaimen
Copy link
Contributor

szaimen commented Aug 15, 2023

However we should decide if we want to ship the app and/or merge it into core so that it is easier to discover...

@Moini
Copy link

Moini commented Aug 15, 2023

@szaimen I've seen that app, however, as for many useful apps, it said it wasn't available for my version when I looked (now it is, and I'll install it).

And to find it... well, it cannot be found from the search field, nor is there a separate app search - and apps also aren't strictly ordered by alphabet. You need to know the category to find something... UX is making it so difficult...

@wickning1
Copy link

The app @szaimen pointed out looks good, but I am going to add to the argument for it becoming a core feature.

The problem it solves is this: someone has asked you to email a sensitive document. Example: an apartment rental application. Email is not always encrypted in transit, and you or the recipient could be compromised and have your inbox/sentbox exposed. This feature limits the damage.

Limiting the download window to the absolute minimum amount of time is key. It’s still possible that an attacker might access the link before the recipient. This is the worst case, but because of this feature, the recipient can infer that their denial means there was a compromise and the sender can be notified. That’s a further win for this feature that an expiration date cannot provide.

@sunjam
Copy link

sunjam commented Jan 17, 2024

@szaimen What would you consider a strong reason to not make it core?

@matthewmummert5
Copy link

It's a new year, which means U.S. tax season is coming up again. I'd like to be able to email my tax documents to my tax accountant using this feature. For the exact reasons that @wickning1 pointed out, it would be much safer than an email attachment.

@Moini
Copy link

Moini commented Jan 18, 2024

@matthewmummert5 For that specific purpose, I'd probably share a password by phone or letter and use password protection. I do agree that a one-time / limited times download would be very useful for less sensitive data.

@szaimen
Copy link
Contributor

szaimen commented Jan 22, 2024

@jancborchardt since you have put this on the Design Phase list, why not simply integrating https://github.com/nextcloud/files_downloadlimit into core then? Not sure what we need to design then here?

@szaimen szaimen self-assigned this Jan 22, 2024
@jancborchardt
Copy link
Member

@jancborchardt since you have put this on the Design Phase list, why not simply integrating https://github.com/nextcloud/files_downloadlimit into core then? Not sure what we need to design then here?

@sorbaugh @AndyScherzinger Do you already have an idea regarding that? Would indeed make sense to just integrate that.
(We did discuss this issue in Files planning, it's just not on the board yet, right? :)

@AndyScherzinger
Copy link
Member

We did discuss this issue in Files planning, it's just not on the board yet, right?

Yes, right, added this issue now.

And I would agree with @szaimen that download_limit would work for this while I can't say if we need some kind of UI improvements for a "one-time download" scenario when creating shares or if you would consider it "fine as is" (fance for "good enough") and we integrate it, while the cheapest solution would just be to bundle the app. Alternatively we can of course also thing about integration it into the core code base.

@AndyScherzinger AndyScherzinger changed the title One-time download links 1️⃣⬇️🔗 One-time download links Jan 22, 2024
@szaimen
Copy link
Contributor

szaimen commented Feb 2, 2024

So I had a look at this again and my recommendation would be to bundle the files_downloadlimit app with server.


After that is done, the UX could be improved by moving the setting to the advanced sharing settings for link shares, since the current placement is suboptimal:

Remove it from here Move it here
image image

As a second follow-up, it would be great to add an admin setting so that the admin can set a default to 1 for example.

@sorbaugh
Copy link
Contributor

Edited original comment to split this issue into individual subtasks.

@szaimen
Copy link
Contributor

szaimen commented Mar 8, 2024

🎉🎉🎉🎉🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Archived in project
Archived in project
Development

No branches or pull requests