| 365 | } |
| 366 | |
| 367 | func (d *Crypt) Put(ctx context.Context, dstDir model.Obj, streamer model.FileStreamer, up driver.UpdateProgress) error { |
| 368 | dstDirActualPath, err := d.getActualPathForRemote(dstDir.GetPath(), true) |
| 369 | if err != nil { |
| 370 | return fmt.Errorf("failed to convert path to remote path: %w", err) |
| 371 | } |
| 372 | |
| 373 | // Encrypt the data into wrappedIn |
| 374 | wrappedIn, err := d.cipher.EncryptData(streamer) |
| 375 | if err != nil { |
| 376 | return fmt.Errorf("failed to EncryptData: %w", err) |
| 377 | } |
| 378 | |
| 379 | // doesn't support seekableStream, since rapid-upload is not working for encrypted data |
| 380 | streamOut := &stream.FileStream{ |
| 381 | Obj: &model.Object{ |
| 382 | ID: streamer.GetID(), |
| 383 | Path: streamer.GetPath(), |
| 384 | Name: d.cipher.EncryptFileName(streamer.GetName()), |
| 385 | Size: d.cipher.EncryptedSize(streamer.GetSize()), |
| 386 | Modified: streamer.ModTime(), |
| 387 | IsFolder: streamer.IsDir(), |
| 388 | }, |
| 389 | Reader: wrappedIn, |
| 390 | Mimetype: "application/octet-stream", |
| 391 | WebPutAsTask: streamer.NeedStore(), |
| 392 | ForceStreamUpload: true, |
| 393 | Exist: streamer.GetExist(), |
| 394 | } |
| 395 | err = op.Put(ctx, d.remoteStorage, dstDirActualPath, streamOut, up, false) |
| 396 | if err != nil { |
| 397 | return err |
| 398 | } |
| 399 | return nil |
| 400 | } |
| 401 | |
| 402 | //func (d *Safe) Other(ctx context.Context, args model.OtherArgs) (interface{}, error) { |
| 403 | // return nil, errs.NotSupport |