Submit validates and performs a S3 filesystem connection test.
()
| 41 | |
| 42 | // Submit validates and performs a S3 filesystem connection test. |
| 43 | func (form *TestS3Filesystem) Submit() error { |
| 44 | if err := form.Validate(); err != nil { |
| 45 | return err |
| 46 | } |
| 47 | |
| 48 | var s3Config core.S3Config |
| 49 | |
| 50 | if form.Filesystem == s3FilesystemBackups { |
| 51 | s3Config = form.app.Settings().Backups.S3 |
| 52 | } else { |
| 53 | s3Config = form.app.Settings().S3 |
| 54 | } |
| 55 | |
| 56 | if !s3Config.Enabled { |
| 57 | return errors.New("S3 storage filesystem is not enabled") |
| 58 | } |
| 59 | |
| 60 | fsys, err := filesystem.NewS3( |
| 61 | s3Config.Bucket, |
| 62 | s3Config.Region, |
| 63 | s3Config.Endpoint, |
| 64 | s3Config.AccessKey, |
| 65 | s3Config.Secret, |
| 66 | s3Config.ForcePathStyle, |
| 67 | ) |
| 68 | if err != nil { |
| 69 | return fmt.Errorf("failed to initialize the S3 filesystem: %w", err) |
| 70 | } |
| 71 | defer fsys.Close() |
| 72 | |
| 73 | testPrefix := "pb_settings_test_" + security.PseudorandomString(5) |
| 74 | testFileKey := testPrefix + "/test.txt" |
| 75 | |
| 76 | // try to upload a test file |
| 77 | if err := fsys.Upload([]byte("test"), testFileKey); err != nil { |
| 78 | return fmt.Errorf("failed to upload a test file: %w", err) |
| 79 | } |
| 80 | |
| 81 | // test prefix deletion (ensures that both bucket list and delete works) |
| 82 | if errs := fsys.DeletePrefix(testPrefix); len(errs) > 0 { |
| 83 | return fmt.Errorf("failed to delete a test file: %w", errs[0]) |
| 84 | } |
| 85 | |
| 86 | return nil |
| 87 | } |