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 }