func (r GetPolicy) MakeRequest(baseUrl string, mac *digest.Mac) (privateUrl string) { expires := r.Expires if expires == 0 { expires = 3600 } deadline := time.Now().Unix() + int64(expires) if strings.Contains(baseUrl, "?") { baseUrl += "&e=" } else { baseUrl += "?e=" } baseUrl += strconv.FormatInt(deadline, 10) token := digest.Sign(mac, []byte(baseUrl)) return baseUrl + "&token=" + token }
func downloadFile(downConfig DownloadConfig, fileKey string) { localFilePath := filepath.Join(downConfig.DestDir, fileKey) ldx := strings.LastIndex(localFilePath, string(os.PathSeparator)) if ldx != -1 { localFileDir := localFilePath[:ldx] err := os.MkdirAll(localFileDir, 0775) if err != nil { log.Error("MkdirAll failed for", localFileDir) return } } fmt.Println("Downloading", fileKey, "=>", localFilePath, "...") downUrl := strings.Join([]string{downConfig.Domain, fileKey}, "/") if downConfig.IsPrivate { now := time.Now().Add(time.Second * 3600 * 24) downUrl = fmt.Sprintf("%s?e=%d", downUrl, now.Unix()) mac := digest.Mac{downConfig.AccessKey, []byte(downConfig.SecretKey)} token := digest.Sign(&mac, []byte(downUrl)) downUrl = fmt.Sprintf("%s&token=%s", downUrl, token) } resp, respErr := rpc.DefaultClient.Get(nil, downUrl) if respErr != nil { log.Error("Download", fileKey, "failed by url", downUrl) return } defer resp.Body.Close() if resp.StatusCode == 200 { localFp, openErr := os.OpenFile(localFilePath, os.O_CREATE|os.O_WRONLY, 0666) if openErr != nil { log.Error("Open local file", localFilePath, "failed") return } defer localFp.Close() _, err := io.Copy(localFp, resp.Body) if err != nil { log.Error("Download", fileKey, "failed", err) } } else { log.Error("Download", fileKey, "failed by url", downUrl) } }