コード例 #1
0
ファイル: file_service.go プロジェクト: scharsey/nafue
func (self *FileService) GetFile(fileDisplay *display.FileDisplay) error {

	// make model from display
	file := models.File{
		ShortUrl: fileDisplay.ShortUrl,
	}

	// get file from db
	err := self.fileRepository.GetFile(&file)
	if err != nil {
		return err
	}

	// now that we have file delete it from db
	self.fileRepository.DeleteFile(&file)

	// verify that file isn't to old
	elapsed := int(time.Now().Sub(file.Created).Seconds())
	if elapsed > file.TTL {
		// to old delete file
		fmt.Println("file to old, delete from s3!")
		_, err := GetS3Service().DeleteObject(&s3.DeleteObjectInput{
			Bucket: aws.String(config.S3Bucket),
			Key:    aws.String(config.S3Key + "/" + file.S3Path),
		})
		if err != nil {
			fmt.Println("---ERROR---", err.Error())
		}
		return errors.New("File has expired")
	}

	// create get request
	req, _ := GetS3Service().GetObjectRequest(&s3.GetObjectInput{
		Bucket: aws.String(config.S3Bucket),
		Key:    aws.String(config.S3Key + "/" + file.S3Path),
	})

	url, err := req.Presign(15 * time.Minute)
	if err != nil {
		log.Println("--ERROR---", err.Error())
		return err
	}

	// add needed data to display
	fileDisplay.DownloadUrl = url
	fileDisplay.Salt = file.Salt
	fileDisplay.IV = file.IV
	fileDisplay.AData = file.AData

	return nil
}