1// Code generated by smithy-go-codegen DO NOT EDIT.
2
3package s3
4
5import (
6	"context"
7	awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
8	"github.com/aws/aws-sdk-go-v2/aws/signer/v4"
9	s3cust "github.com/aws/aws-sdk-go-v2/service/s3/internal/customizations"
10	"github.com/aws/aws-sdk-go-v2/service/s3/types"
11	"github.com/aws/smithy-go/middleware"
12	smithyhttp "github.com/aws/smithy-go/transport/http"
13)
14
15// Returns the access control list (ACL) of an object. To use this operation, you
16// must have READ_ACP access to the object. This action is not supported by Amazon
17// S3 on Outposts. Versioning By default, GET returns ACL information about the
18// current version of an object. To return ACL information about a different
19// version, use the versionId subresource. The following operations are related to
20// GetObjectAcl:
21//
22// * GetObject
23// (https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)
24//
25// *
26// DeleteObject
27// (https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html)
28//
29// *
30// PutObject (https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
31func (c *Client) GetObjectAcl(ctx context.Context, params *GetObjectAclInput, optFns ...func(*Options)) (*GetObjectAclOutput, error) {
32	if params == nil {
33		params = &GetObjectAclInput{}
34	}
35
36	result, metadata, err := c.invokeOperation(ctx, "GetObjectAcl", params, optFns, addOperationGetObjectAclMiddlewares)
37	if err != nil {
38		return nil, err
39	}
40
41	out := result.(*GetObjectAclOutput)
42	out.ResultMetadata = metadata
43	return out, nil
44}
45
46type GetObjectAclInput struct {
47
48	// The bucket name that contains the object for which to get the ACL information.
49	// When using this action with an access point, you must direct requests to the
50	// access point hostname. The access point hostname takes the form
51	// AccessPointName-AccountId.s3-accesspoint.Region.amazonaws.com. When using this
52	// action with an access point through the AWS SDKs, you provide the access point
53	// ARN in place of the bucket name. For more information about access point ARNs,
54	// see Using Access Points
55	// (https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
56	// in the Amazon S3 User Guide.
57	//
58	// This member is required.
59	Bucket *string
60
61	// The key of the object for which to get the ACL information.
62	//
63	// This member is required.
64	Key *string
65
66	// The account ID of the expected bucket owner. If the bucket is owned by a
67	// different account, the request will fail with an HTTP 403 (Access Denied) error.
68	ExpectedBucketOwner *string
69
70	// Confirms that the requester knows that they will be charged for the request.
71	// Bucket owners need not specify this parameter in their requests. For information
72	// about downloading objects from requester pays buckets, see Downloading Objects
73	// in Requestor Pays Buckets
74	// (https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html)
75	// in the Amazon S3 Developer Guide.
76	RequestPayer types.RequestPayer
77
78	// VersionId used to reference a specific version of the object.
79	VersionId *string
80}
81
82type GetObjectAclOutput struct {
83
84	// A list of grants.
85	Grants []types.Grant
86
87	// Container for the bucket owner's display name and ID.
88	Owner *types.Owner
89
90	// If present, indicates that the requester was successfully charged for the
91	// request.
92	RequestCharged types.RequestCharged
93
94	// Metadata pertaining to the operation's result.
95	ResultMetadata middleware.Metadata
96}
97
98func addOperationGetObjectAclMiddlewares(stack *middleware.Stack, options Options) (err error) {
99	err = stack.Serialize.Add(&awsRestxml_serializeOpGetObjectAcl{}, middleware.After)
100	if err != nil {
101		return err
102	}
103	err = stack.Deserialize.Add(&awsRestxml_deserializeOpGetObjectAcl{}, middleware.After)
104	if err != nil {
105		return err
106	}
107	if err = addSetLoggerMiddleware(stack, options); err != nil {
108		return err
109	}
110	if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
111		return err
112	}
113	if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
114		return err
115	}
116	if err = addResolveEndpointMiddleware(stack, options); err != nil {
117		return err
118	}
119	if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
120		return err
121	}
122	if err = addRetryMiddlewares(stack, options); err != nil {
123		return err
124	}
125	if err = addHTTPSignerV4Middleware(stack, options); err != nil {
126		return err
127	}
128	if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
129		return err
130	}
131	if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
132		return err
133	}
134	if err = addClientUserAgent(stack); err != nil {
135		return err
136	}
137	if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
138		return err
139	}
140	if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
141		return err
142	}
143	if err = addOpGetObjectAclValidationMiddleware(stack); err != nil {
144		return err
145	}
146	if err = stack.Initialize.Add(newServiceMetadataMiddleware_opGetObjectAcl(options.Region), middleware.Before); err != nil {
147		return err
148	}
149	if err = addMetadataRetrieverMiddleware(stack); err != nil {
150		return err
151	}
152	if err = addGetObjectAclUpdateEndpoint(stack, options); err != nil {
153		return err
154	}
155	if err = addResponseErrorMiddleware(stack); err != nil {
156		return err
157	}
158	if err = v4.AddContentSHA256HeaderMiddleware(stack); err != nil {
159		return err
160	}
161	if err = disableAcceptEncodingGzip(stack); err != nil {
162		return err
163	}
164	if err = addRequestResponseLogging(stack, options); err != nil {
165		return err
166	}
167	return nil
168}
169
170func newServiceMetadataMiddleware_opGetObjectAcl(region string) *awsmiddleware.RegisterServiceMetadata {
171	return &awsmiddleware.RegisterServiceMetadata{
172		Region:        region,
173		ServiceID:     ServiceID,
174		SigningName:   "s3",
175		OperationName: "GetObjectAcl",
176	}
177}
178
179// getGetObjectAclBucketMember returns a pointer to string denoting a provided
180// bucket member valueand a boolean indicating if the input has a modeled bucket
181// name,
182func getGetObjectAclBucketMember(input interface{}) (*string, bool) {
183	in := input.(*GetObjectAclInput)
184	if in.Bucket == nil {
185		return nil, false
186	}
187	return in.Bucket, true
188}
189func addGetObjectAclUpdateEndpoint(stack *middleware.Stack, options Options) error {
190	return s3cust.UpdateEndpoint(stack, s3cust.UpdateEndpointOptions{
191		Accessor: s3cust.UpdateEndpointParameterAccessor{
192			GetBucketFromInput: getGetObjectAclBucketMember,
193		},
194		UsePathStyle:            options.UsePathStyle,
195		UseAccelerate:           options.UseAccelerate,
196		SupportsAccelerate:      true,
197		TargetS3ObjectLambda:    false,
198		EndpointResolver:        options.EndpointResolver,
199		EndpointResolverOptions: options.EndpointOptions,
200		UseDualstack:            options.UseDualstack,
201		UseARNRegion:            options.UseARNRegion,
202	})
203}
204