Distributing documents



  • Looking for recommendations on software that would allow me to distribute pdf and other electronic documents to external users via a web portal by either providing them a password or secure one-time download link. Requirements would be to track if they have viewed the document and downloaded it and also possibly limiting the number of views or downloads to a certain number. A plus but not a requirement would be to tie some sort of payment capture mechanism that would automate the release of the document once payment has been received. Open source would be great, but also considering hosted services.



  • I know Nextcloud documents can be password protected, you could fire up a VM and install Nextcloud.
    https://nextcloud.com/



  • We do this with OneDrive/Sharepoint and Office 365. We upload the document to OneDrive and then create a unique link and send that to whoever needs to access the file. Then I have email notifications setup whenever someone accesses the link, downloads the file, and what IP address it was accessed from.

    This would not accomplish the payment capture portion. I would think this would need to be tied to whatever payment system you're using.



  • Nothing does this out of the box.

    THis would be a web application more than a file share. THere is too much logic required.

    Potentially, you could create a Nextcloud app for this, but that is a lot of work.

    If there is a payoff, then it could still be worth the development costs.



  • I see two different solutions here. Nextcloud and eccommerce website to sell downloads. I'm assuming of course that you aren't selling hundreds of files. You can make a line item for each one using woo commerce.





  • Yeah, sounds like WordPress + Plugin... like IRJ pointed out with woocomerce.



  • @IRJ said in Distributing documents:

    I see two different solutions here. Nextcloud and eccommerce website to sell downloads. I'm assuming of course that you aren't selling hundreds of files. You can make a line item for each one using woo commerce.

    Right and you would have a script on the backend call the Nextcloud API to create the unique share.
    https://docs.nextcloud.com/server/9/developer_manual/core/ocs-share-api.html



  • Example of creating a share:
    On my NC server, I have a folder Public containing the file fireball.png
    Running this command

    curl -u username:password -X POST 'https://nc.daerma.com/ocs/v2.php/apps/files_sharing/api/v1/shares' -H "OCS-APIRequest: true" --data 'path=/Public/fireball.png&shareType=3'
    

    Resulted in this output

    <?xml version="1.0"?>
    <ocs>
     <meta>
      <status>ok</status>
      <statuscode>200</statuscode>
      <message>OK</message>
     </meta>
     <data>
      <id>8</id>
      <share_type>3</share_type>
      <uid_owner>sorvani</uid_owner>
      <displayname_owner>Jared Busch</displayname_owner>
      <permissions>1</permissions>
      <stime>1541652264</stime>
      <parent/>
      <expiration/>
      <token>krgNxFsrkp7PL2M</token>
      <uid_file_owner>sorvani</uid_file_owner>
      <note></note>
      <displayname_file_owner>Jared Busch</displayname_file_owner>
      <path>/Public/fireball.png</path>
      <item_type>file</item_type>
      <mimetype>image/png</mimetype>
      <storage_id>home::sorvani</storage_id>
      <storage>1</storage>
      <item_source>270897</item_source>
      <file_source>270897</file_source>
      <file_parent>51270</file_parent>
      <file_target>/fireball.png</file_target>
      <share_with/>
      <share_with_displayname/>
      <url>https://nc.daerma.com/s/krgNxFsrkp7PL2M</url>
      <mail_send>1</mail_send>
     </data>
    </ocs>
    

    Note the URL...: <url>https://nc.daerma.com/s/krgNxFsrkp7PL2M</url>

    That is the newly created share link. https://nc.daerma.com/s/krgNxFsrkp7PL2M



  • It can output json instead of XML. You just have to append ?format=json to the end of the GET/POST URL.

    curl -u username:password -X POST 'https://nc.daerma.com/ocs/v2.php/apps/files_sharing/api/v1/shares?format=json' -H "OCS-APIRequest: true" --data 'path=/Public/fireball.png&shareType=3'
    
    {"ocs":{"meta":{"status":"ok","statuscode":200,"message":"OK"},"data":{"id":"8","share_type":3,"uid_owner":"sorvani","displayname_owner":"Jared Busch","permissions":1,"stime":1541652264,"parent":null,"expiration":null,"token":"krgNxFsrkp7PL2M","uid_file_owner":"sorvani","note":"","displayname_file_owner":"Jared Busch","path":"\/Public\/fireball.png","item_type":"file","mimetype":"image\/png","storage_id":"home::sorvani","storage":1,"item_source":270897,"file_source":270897,"file_parent":51270,"file_target":"\/fireball.png","share_with":null,"share_with_displayname":null,"url":"https:\/\/nc.daerma.com\/s\/krgNxFsrkp7PL2M","mail_send":0}}}
    


  • A shared document downloaded publicly does log it.
    0_1541691181199_d005c509-43c5-4a7c-b408-a9d9b72cea8a-image.png

    I have no idea if the backend logs have more details.



  • @StuartJordan said in Distributing documents:

    I know Nextcloud documents can be password protected, you could fire up a VM and install Nextcloud.
    https://nextcloud.com/

    This is what we use for this.



  • @scottalanmiller said in Distributing documents:

    @StuartJordan said in Distributing documents:

    I know Nextcloud documents can be password protected, you could fire up a VM and install Nextcloud.
    https://nextcloud.com/

    This is what we use for this.

    Except the OP wants more than a basic sharing system. Hence my posts about how to create automation.



  • @JaredBusch @scottalanmiller Is there a good tutorial on how to use NC to do this if you dont have the payment requirements? This sounds like what I have wanted for a while, but I just need the basic sharing system. Can you set time limits on the sharing?



  • @Donahue said in Distributing documents:

    @JaredBusch @scottalanmiller Is there a good tutorial on how to use NC to do this if you dont have the payment requirements? This sounds like what I have wanted for a while, but I just need the basic sharing system. Can you set time limits on the sharing?

    I've never looked at the API in detail.

    But I know you can set a global link expiration time. That should be applied, by default, even to API created links.

    I would assume the API can also do it.



  • In the admin settings.
    0_1542146906216_9a5da61c-fe54-4629-a892-e0bd3b02031c-image.png



  • ok, I really need to get a NC demo going.



  • @Donahue said in Distributing documents:

    ok, I really need to get a NC demo going.

    0_1542147295956_NCExpiration.gif


Log in to reply