11import { RuntimeError } from '../errors'
2- import { HttpError } from '@ownclouders/web-client'
32import { ClientService } from '../services'
43import { urlJoin } from '@ownclouders/web-client'
5- import { triggerDownloadWithFilename } from '../helpers/download'
64
75import { Ref , ref , computed , unref } from 'vue'
86import { ArchiverCapability } from '@ownclouders/web-client/ocs'
97import { UserStore } from '../composables'
10- import { AxiosResponseHeaders , RawAxiosResponseHeaders } from 'axios'
118
129interface TriggerDownloadOptions {
1310 dir ?: string
@@ -16,6 +13,7 @@ interface TriggerDownloadOptions {
1613 downloadSecret ?: string
1714 publicToken ?: string
1815 publicLinkPassword ?: string
16+ publicLinkShareOwner ?: string
1917}
2018
2119function sortArchivers ( a : ArchiverCapability , b : ArchiverCapability ) : number {
@@ -85,42 +83,23 @@ export class ArchiverService {
8583 throw new RuntimeError ( 'download url could not be built' )
8684 }
8785
88- if ( options . publicToken && options . publicLinkPassword ) {
89- try {
90- const response = await this . clientService . httpUnAuthenticated . get < Blob > ( downloadUrl , {
91- headers : {
92- ...( ! ! options . publicLinkPassword && {
93- Authorization :
94- 'Basic ' +
95- Buffer . from ( [ 'public' , options . publicLinkPassword ] . join ( ':' ) ) . toString ( 'base64' )
96- } )
97- } ,
98- responseType : 'blob'
99- } )
100-
101- const objectUrl = URL . createObjectURL ( response . data )
102- const fileName = this . getFileNameFromResponseHeaders ( response . headers )
103- triggerDownloadWithFilename ( objectUrl , fileName )
104- return downloadUrl
105- } catch ( e ) {
106- throw new HttpError ( 'archive could not be fetched' , e . response )
107- }
108- }
109-
110- const url = options . publicToken
111- ? downloadUrl
112- : await this . clientService . ocs . signUrl (
113- downloadUrl ,
114- this . userStore . user ?. onPremisesSamAccountName
115- )
86+ const url =
87+ options . publicToken && ! options . publicLinkPassword
88+ ? downloadUrl
89+ : await this . clientService . ocs . signUrl ( {
90+ url : downloadUrl ,
91+ username : options . publicLinkShareOwner || this . userStore . user ?. onPremisesSamAccountName ,
92+ publicToken : options . publicToken ,
93+ publicLinkPassword : options . publicLinkPassword
94+ } )
11695
11796 window . open ( url , '_blank' )
11897 return downloadUrl
11998 }
12099
121100 private buildDownloadUrl ( options : TriggerDownloadOptions ) : string {
122101 const queryParams = [ ]
123- if ( options . publicToken ) {
102+ if ( options . publicToken && ! options . publicLinkPassword ) {
124103 queryParams . push ( `public-token=${ options . publicToken } ` )
125104 }
126105
@@ -138,9 +117,4 @@ export class ArchiverService {
138117 }
139118 return urlJoin ( this . serverUrl , capability . archiver_url )
140119 }
141-
142- private getFileNameFromResponseHeaders ( headers : RawAxiosResponseHeaders | AxiosResponseHeaders ) {
143- const fileName = headers [ 'content-disposition' ] ?. split ( '"' ) [ 1 ]
144- return decodeURI ( fileName )
145- }
146120}
0 commit comments