summaryrefslogtreecommitdiff
path: root/vendor/github.com/minio/minio-go/v7/api-inventory-ext.go
diff options
context:
space:
mode:
authorLibravatar kim <grufwub@gmail.com>2025-11-05 21:58:38 +0100
committerLibravatar tobi <tobi.smethurst@protonmail.com>2025-11-17 14:12:41 +0100
commitd0c551acb5ab79efafd325f5b19c76a3de835356 (patch)
treeba9462cdc5081015fbd6bf5d98d9f39334d13207 /vendor/github.com/minio/minio-go/v7/api-inventory-ext.go
parent[performance] when transforming media, perform read operations of large files... (diff)
downloadgotosocial-d0c551acb5ab79efafd325f5b19c76a3de835356.tar.xz
[chore] update dependencies (#4542)
- github.com/minio/minio-go/v7: v7.0.95 -> v7.0.97 - github.com/ncruces/go-sqlite3: v0.29.1 -> v0.30.0 - github.com/tdewolff/minify/v2: v2.24.5 -> v2.24.6 - codeberg.org/gruf/go-mmap: fixes build for BSD platforms Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4542 Co-authored-by: kim <grufwub@gmail.com> Co-committed-by: kim <grufwub@gmail.com>
Diffstat (limited to 'vendor/github.com/minio/minio-go/v7/api-inventory-ext.go')
-rw-r--r--vendor/github.com/minio/minio-go/v7/api-inventory-ext.go332
1 files changed, 332 insertions, 0 deletions
diff --git a/vendor/github.com/minio/minio-go/v7/api-inventory-ext.go b/vendor/github.com/minio/minio-go/v7/api-inventory-ext.go
new file mode 100644
index 000000000..498300785
--- /dev/null
+++ b/vendor/github.com/minio/minio-go/v7/api-inventory-ext.go
@@ -0,0 +1,332 @@
+/*
+ * MinIO Go Library for Amazon S3 Compatible Cloud Storage
+ * Copyright 2015-2025 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package minio
+
+import (
+ "context"
+ "encoding/json"
+ "io"
+ "iter"
+ "net/http"
+ "net/url"
+ "strings"
+ "time"
+
+ "github.com/minio/minio-go/v7/pkg/s3utils"
+)
+
+// This file contains the inventory API extension for MinIO server. It is not
+// compatible with AWS S3.
+
+func makeInventoryReqMetadata(bucket string, urlParams ...string) requestMetadata {
+ urlValues := make(url.Values)
+ urlValues.Set("minio-inventory", "")
+
+ // If an odd number of parameters is given, we skip the last pair to avoid
+ // an out of bounds access.
+ for i := 0; i+1 < len(urlParams); i += 2 {
+ urlValues.Set(urlParams[i], urlParams[i+1])
+ }
+
+ return requestMetadata{
+ bucketName: bucket,
+ queryValues: urlValues,
+ }
+}
+
+// GenerateInventoryConfigYAML generates a YAML template for an inventory configuration.
+// This is a MinIO-specific API and is not compatible with AWS S3.
+//
+// Parameters:
+// - ctx: Context for request cancellation and timeout
+// - bucket: Name of the bucket
+// - id: Unique identifier for the inventory configuration
+//
+// Returns a YAML template string that can be customized and used with PutBucketInventoryConfiguration.
+func (c *Client) GenerateInventoryConfigYAML(ctx context.Context, bucket, id string) (string, error) {
+ if err := s3utils.CheckValidBucketName(bucket); err != nil {
+ return "", err
+ }
+ if id == "" {
+ return "", errInvalidArgument("inventory ID cannot be empty")
+ }
+ reqMeta := makeInventoryReqMetadata(bucket, "generate", "", "id", id)
+ resp, err := c.executeMethod(ctx, http.MethodGet, reqMeta)
+ defer closeResponse(resp)
+ if err != nil {
+ return "", err
+ }
+ if resp.StatusCode != http.StatusOK {
+ return "", httpRespToErrorResponse(resp, bucket, "")
+ }
+ buf := new(strings.Builder)
+ _, err = io.Copy(buf, resp.Body)
+ return buf.String(), err
+}
+
+// inventoryPutConfigOpts is a placeholder for future options that may be added.
+type inventoryPutConfigOpts struct{}
+
+// InventoryPutConfigOption is to allow for functional options for
+// PutBucketInventoryConfiguration. It may be used in the future to customize
+// the PutBucketInventoryConfiguration request, but currently does not do
+// anything.
+type InventoryPutConfigOption func(*inventoryPutConfigOpts)
+
+// PutBucketInventoryConfiguration creates or updates an inventory configuration for a bucket.
+// This is a MinIO-specific API and is not compatible with AWS S3.
+//
+// Parameters:
+// - ctx: Context for request cancellation and timeout
+// - bucket: Name of the bucket
+// - id: Unique identifier for the inventory configuration
+// - yamlDef: YAML definition of the inventory configuration
+//
+// Returns an error if the operation fails, or if bucket name, id, or yamlDef is empty.
+func (c *Client) PutBucketInventoryConfiguration(ctx context.Context, bucket string, id string, yamlDef string, _ ...InventoryPutConfigOption) error {
+ if err := s3utils.CheckValidBucketName(bucket); err != nil {
+ return err
+ }
+ if id == "" {
+ return errInvalidArgument("inventory ID cannot be empty")
+ }
+ if yamlDef == "" {
+ return errInvalidArgument("YAML definition cannot be empty")
+ }
+ reqMeta := makeInventoryReqMetadata(bucket, "id", id)
+ reqMeta.contentBody = strings.NewReader(yamlDef)
+ reqMeta.contentLength = int64(len(yamlDef))
+ reqMeta.contentMD5Base64 = sumMD5Base64([]byte(yamlDef))
+
+ resp, err := c.executeMethod(ctx, http.MethodPut, reqMeta)
+ defer closeResponse(resp)
+ if err != nil {
+ return err
+ }
+ if resp.StatusCode != http.StatusOK {
+ return httpRespToErrorResponse(resp, bucket, "")
+ }
+ return nil
+}
+
+// GetBucketInventoryConfiguration retrieves the inventory configuration for a bucket.
+// This is a MinIO-specific API and is not compatible with AWS S3.
+//
+// Parameters:
+// - ctx: Context for request cancellation and timeout
+// - bucket: Name of the bucket
+// - id: Unique identifier for the inventory configuration
+//
+// Returns the inventory configuration or an error if the operation fails or if the configuration doesn't exist.
+func (c *Client) GetBucketInventoryConfiguration(ctx context.Context, bucket, id string) (*InventoryConfiguration, error) {
+ if err := s3utils.CheckValidBucketName(bucket); err != nil {
+ return nil, err
+ }
+ if id == "" {
+ return nil, errInvalidArgument("inventory ID cannot be empty")
+ }
+ reqMeta := makeInventoryReqMetadata(bucket, "id", id)
+ resp, err := c.executeMethod(ctx, http.MethodGet, reqMeta)
+ defer closeResponse(resp)
+ if err != nil {
+ return nil, err
+ }
+ if resp.StatusCode != http.StatusOK {
+ return nil, httpRespToErrorResponse(resp, bucket, "")
+ }
+ decoder := json.NewDecoder(resp.Body)
+ var ic InventoryConfiguration
+ err = decoder.Decode(&ic)
+ if err != nil {
+ return nil, err
+ }
+ return &ic, nil
+}
+
+// DeleteBucketInventoryConfiguration deletes an inventory configuration from a bucket.
+// This is a MinIO-specific API and is not compatible with AWS S3.
+//
+// Parameters:
+// - ctx: Context for request cancellation and timeout
+// - bucket: Name of the bucket
+// - id: Unique identifier for the inventory configuration to delete
+//
+// Returns an error if the operation fails or if the configuration doesn't exist.
+func (c *Client) DeleteBucketInventoryConfiguration(ctx context.Context, bucket, id string) error {
+ if err := s3utils.CheckValidBucketName(bucket); err != nil {
+ return err
+ }
+ if id == "" {
+ return errInvalidArgument("inventory ID cannot be empty")
+ }
+ reqMeta := makeInventoryReqMetadata(bucket, "id", id)
+ resp, err := c.executeMethod(ctx, http.MethodDelete, reqMeta)
+ defer closeResponse(resp)
+ if err != nil {
+ return err
+ }
+ if resp.StatusCode != http.StatusOK {
+ return httpRespToErrorResponse(resp, bucket, "")
+ }
+ return nil
+}
+
+// InventoryConfiguration represents the inventory configuration
+type InventoryConfiguration struct {
+ Bucket string `json:"bucket"`
+ ID string `json:"id"`
+ User string `json:"user"`
+ YamlDef string `json:"yamlDef,omitempty"`
+}
+
+// InventoryListResult represents the result of listing inventory
+// configurations.
+type InventoryListResult struct {
+ Items []InventoryConfiguration `json:"items"`
+ NextContinuationToken string `json:"nextContinuationToken,omitempty"`
+}
+
+// ListBucketInventoryConfigurations lists up to 100 inventory configurations for a bucket.
+// This is a MinIO-specific API and is not compatible with AWS S3.
+//
+// Parameters:
+// - ctx: Context for request cancellation and timeout
+// - bucket: Name of the bucket
+// - continuationToken: Token for pagination (empty string for first request)
+//
+// Returns a list result with configurations and a continuation token for the next page, or an error.
+func (c *Client) ListBucketInventoryConfigurations(ctx context.Context, bucket, continuationToken string) (lr *InventoryListResult, err error) {
+ if err := s3utils.CheckValidBucketName(bucket); err != nil {
+ return nil, err
+ }
+ reqMeta := makeInventoryReqMetadata(bucket, "continuation-token", continuationToken)
+ resp, err := c.executeMethod(ctx, http.MethodGet, reqMeta)
+ defer closeResponse(resp)
+ if err != nil {
+ return nil, err
+ }
+ if resp.StatusCode != http.StatusOK {
+ return nil, httpRespToErrorResponse(resp, bucket, "")
+ }
+
+ decoder := json.NewDecoder(resp.Body)
+ err = decoder.Decode(&lr)
+ if err != nil {
+ return nil, err
+ }
+ return lr, nil
+}
+
+// ListBucketInventoryConfigurationsIterator returns an iterator that lists all inventory configurations
+// for a bucket. This is a MinIO-specific API and is not compatible with AWS S3.
+//
+// Parameters:
+// - ctx: Context for request cancellation and timeout
+// - bucket: Name of the bucket
+//
+// Returns an iterator that yields InventoryConfiguration values and errors. The iterator automatically
+// handles pagination and fetches all configurations.
+func (c *Client) ListBucketInventoryConfigurationsIterator(ctx context.Context, bucket string) iter.Seq2[InventoryConfiguration, error] {
+ return func(yield func(InventoryConfiguration, error) bool) {
+ if err := s3utils.CheckValidBucketName(bucket); err != nil {
+ yield(InventoryConfiguration{}, err)
+ return
+ }
+ var continuationToken string
+ for {
+ listResult, err := c.ListBucketInventoryConfigurations(ctx, bucket, continuationToken)
+ if err != nil {
+ yield(InventoryConfiguration{}, err)
+ return
+ }
+
+ for _, item := range listResult.Items {
+ if !yield(item, nil) {
+ return
+ }
+ }
+
+ if listResult.NextContinuationToken == "" {
+ return
+ }
+ continuationToken = listResult.NextContinuationToken
+ }
+ }
+}
+
+// InventoryJobStatus represents the status of an inventory job.
+type InventoryJobStatus struct {
+ Bucket string `json:"bucket"`
+ ID string `json:"id"`
+ User string `json:"user"`
+ AccessKey string `json:"accessKey"`
+ Schedule string `json:"schedule"`
+ State string `json:"state"`
+ NextScheduledTime time.Time `json:"nextScheduledTime,omitempty"`
+ StartTime time.Time `json:"startTime,omitempty"`
+ EndTime time.Time `json:"endTime,omitempty"`
+ LastUpdate time.Time `json:"lastUpdate,omitempty"`
+ Scanned string `json:"scanned,omitempty"`
+ Matched string `json:"matched,omitempty"`
+ ScannedCount uint64 `json:"scannedCount,omitempty"`
+ MatchedCount uint64 `json:"matchedCount,omitempty"`
+ RecordsWritten uint64 `json:"recordsWritten,omitempty"`
+ OutputFilesCount uint64 `json:"outputFilesCount,omitempty"`
+ ExecutionTime string `json:"executionTime,omitempty"`
+ NumStarts uint64 `json:"numStarts,omitempty"`
+ NumErrors uint64 `json:"numErrors,omitempty"`
+ NumLockLosses uint64 `json:"numLockLosses,omitempty"`
+ ManifestPath string `json:"manifestPath,omitempty"`
+ RetryAttempts uint64 `json:"retryAttempts,omitempty"`
+ LastFailTime time.Time `json:"lastFailTime,omitempty"`
+ LastFailErrors []string `json:"lastFailErrors,omitempty"`
+}
+
+// GetBucketInventoryJobStatus retrieves the status of an inventory job for a bucket.
+// This is a MinIO-specific API and is not compatible with AWS S3.
+//
+// Parameters:
+// - ctx: Context for request cancellation and timeout
+// - bucket: Name of the bucket
+// - id: Unique identifier for the inventory job
+//
+// Returns the inventory job status including execution state, progress, and error information, or an error if the operation fails.
+func (c *Client) GetBucketInventoryJobStatus(ctx context.Context, bucket, id string) (*InventoryJobStatus, error) {
+ if err := s3utils.CheckValidBucketName(bucket); err != nil {
+ return nil, err
+ }
+ if id == "" {
+ return nil, errInvalidArgument("inventory ID cannot be empty")
+ }
+ reqMeta := makeInventoryReqMetadata(bucket, "id", id, "status", "")
+ resp, err := c.executeMethod(ctx, http.MethodGet, reqMeta)
+ defer closeResponse(resp)
+ if err != nil {
+ return nil, err
+ }
+ if resp.StatusCode != http.StatusOK {
+ return nil, httpRespToErrorResponse(resp, bucket, "")
+ }
+ decoder := json.NewDecoder(resp.Body)
+ var jStatus InventoryJobStatus
+ err = decoder.Decode(&jStatus)
+ if err != nil {
+ return nil, err
+ }
+ return &jStatus, nil
+}