/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0
 */

package detectors.avoid_reset_exception_rule;

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import lombok.extern.slf4j.Slf4j;
import java.io.InputStream;

@Slf4j
public class AvoidResetExceptionRule {

    // {fact rule=avoid-reset-exception-rule@v1.0 defects=1}
    public void s3PutObjectNoncompliant(String bucket, String key, InputStream content,
                                        ObjectMetadata metadata, AmazonS3 s3Client, String owner) {
        log.info("Putting content into bucket {} and key {}", bucket, key);
        // Noncompliant: readLimit not set.
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, key, content, metadata);
        putObjectRequest.setExpectedBucketOwner(owner);
        s3Client.putObject(putObjectRequest);
    }
    // {/fact}

    // {fact rule=avoid-reset-exception-rule@v1.0 defects=0}
    public void s3PutObjectCompliant(String bucket, String key, InputStream content,
                                     ObjectMetadata metadata, AmazonS3 s3Client, String owner) {
        log.info("Putting content into bucket {} and key {}", bucket, key);
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, key, content, metadata);
        putObjectRequest.setExpectedBucketOwner(owner);
        // Compliant: readLimit is set.
        putObjectRequest.getRequestClientOptions().setReadLimit(100);
        s3Client.putObject(putObjectRequest);
    }
    // {/fact}
}