github.com/Files-com/files-sdk-go/v2@v2.1.2/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  }