github.com/Files-com/files-sdk-go/v3@v3.1.81/file/downloaduri.go (about) 1 package file 2 3 import ( 4 "net/url" 5 "time" 6 7 "github.com/itchyny/timefmt-go" 8 ) 9 10 type DownloadUri string 11 12 type DownloadUriValid struct { 13 *url.URL 14 time.Time 15 Remaining time.Duration 16 } 17 18 func (d DownloadUri) ToUrl() (u *url.URL, err error) { 19 u, err = url.Parse(string(d)) 20 return 21 } 22 23 func (d DownloadUri) ToTime() (t time.Time, err error) { 24 var u *url.URL 25 u, err = d.ToUrl() 26 if err != nil { 27 return t, err 28 } 29 expires := u.Query().Get("X-Amz-Date") 30 t, err = timefmt.Parse(expires, "%Y%m%dT%H%M%SZ") 31 if err == nil { 32 return t, err 33 } 34 expires = u.Query().Get("X-Files-Date") 35 t, err = timefmt.Parse(expires, "%Y%m%dT%H%M%SZ") 36 if err == nil { 37 return t, err 38 } 39 expires = u.Query().Get("X-Goog-Date") 40 t, err = timefmt.Parse(expires, "%Y%m%dT%H%M%SZ") 41 return 42 } 43 44 func (d DownloadUri) Valid(within time.Duration) (s DownloadUriValid, valid bool, err error) { 45 s.URL, err = d.ToUrl() 46 s.Time, err = d.ToTime() 47 if err != nil { 48 return 49 } 50 s.Remaining = s.Time.Sub(time.Now()) 51 return s, s.Remaining < within, err 52 }