All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.org.jets3t.service.utils.gatekeeper.SignatureRequest Maven / Gradle / Ivy

/*
 * jets3t : Java Extra-Tasty S3 Toolkit (for Amazon S3 online storage service)
 * This is a java.net project, see https://jets3t.dev.java.net/
 * 
 * Copyright 2006 James Murty
 * 
 * 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 org.jets3t.service.utils.gatekeeper;

import java.util.HashMap;
import java.util.Map;

import org.jets3t.service.model.S3Object;

/**
 * Represents a signature request - that is, a request that a Gatekeeper allow a specific operation
 * (signature type) on a specific object in S3. The operations that may be requested are: get, head, put.
 * 
 * @author James Murty
 *
 */
public class SignatureRequest {
    public static final String SIGNATURE_TYPE_GET = "get";
    public static final String SIGNATURE_TYPE_HEAD = "head";
    public static final String SIGNATURE_TYPE_PUT = "put";
    public static final String SIGNATURE_TYPE_DELETE = "delete";
    public static final String SIGNATURE_TYPE_ACL_LOOKUP = "acl-lookup";
    public static final String SIGNATURE_TYPE_ACL_UPDATE = "acl-update";
    
    private String signatureType = null;
    private String objectKey = null;
    private String bucketName = null;
    private Map objectMetadata = new HashMap();
    private String signedUrl = null;
    private String declineReason = null;
    
    /**
     * Constructs an empty signature request.
     */
    public SignatureRequest() {    
    }

    /**
     * Constructs a signature request for an operation on a specific object key.
     * 
     * @param signatureType
     * @param objectKey
     */
    public SignatureRequest(String signatureType, String objectKey) {
        setSignatureType(signatureType);
        this.objectKey = objectKey;
    }

    /**
     * @return
     * the name of the bucket in which an object is stored, may be null.
     */
    public String getBucketName() {
        return bucketName;
    }

    /**
     * Sets the name of the bucket in which an object is stored - this is not generally required.
     * 
     * @param bucketName
     */
    public void setBucketName(String bucketName) {
        this.bucketName = bucketName;
    }

    /**
     * @return
     * the key name of the object on which the operation will be performed. 
     */
    public String getObjectKey() {
        return objectKey;
    }

    /**
     * Sets the key name of the object on which the operation will be performed.
     * 
     * @param objectKey
     */
    public void setObjectKey(String objectKey) {
        this.objectKey = objectKey;
    }

    /**
     * @return
     * the object's metadata as included in the Gatekeeer message.
     */
    public Map getObjectMetadata() {
        return objectMetadata;
    }

    /**
     * Sets the object's metadata, that will be included in the Gatekeeer message.
     * 
     * @param objectMetadata
     */
    public void setObjectMetadata(Map objectMetadata) {
        this.objectMetadata.putAll(objectMetadata);
    }
    
    /**
     * Adds to the object's metadata, that will be included in the Gatekeeer message.
     * 
     * @param metadataName
     * @param metadataValue
     */
    public void addObjectMetadata(String metadataName, String metadataValue) {
        this.objectMetadata.put(metadataName, metadataValue);
    }
    
    /**
     * @return
     * the operation being requested.
     */
    public String getSignatureType() {
        return signatureType;
    }
    
    /**
     * Sets the signature type (operation) being requested for the object in this request.
     * 
     * @param signatureType
     * the operation being requested, must match one of the SIGNATURE_TYPE_xyz constants
     * in this class.
     */
    public void setSignatureType(String signatureType) {
        if (!SIGNATURE_TYPE_GET.equals(signatureType)
            && !SIGNATURE_TYPE_HEAD.equals(signatureType)
            && !SIGNATURE_TYPE_PUT.equals(signatureType)
            && !SIGNATURE_TYPE_DELETE.equals(signatureType)
            && !SIGNATURE_TYPE_ACL_LOOKUP.equals(signatureType)
            && !SIGNATURE_TYPE_ACL_UPDATE.equals(signatureType)) 
        {            
            throw new IllegalArgumentException("Illegal signature type: " + signatureType);
        }
        this.signatureType = signatureType;
    }
     
    /**
     * Approve the request by setting the signed URL for this request - performed by a 
     * Gatekeeper service when a request has been allowed.
     * 
     * @param signedUrl
     * a URL signed to allow the requested operation on the S3 object.
     */
    public void signRequest(String signedUrl) {
        this.signedUrl = signedUrl;
    }
    
    /**
     * @return
     * the signed URL for this request, if available. If this method is called before a 
     * Gatekeeper service has provided a signed URL, or the the Gatekeeper has refused to provide
     * a signed URL, this method will return null.
     */
    public String getSignedUrl() {
        return this.signedUrl;
    }

    /**
     * Decline the request by setting the decline reason for this request - performed by a 
     * Gatekeeper service when a request has been disallowed.
     * 
     * @param reason
     * a short explanation for why the request was not allowed, such as "Unrecognised user".
     */
    public void declineRequest(String reason) {
        this.declineReason = reason;
    }
    
    /**
     * @return
     * the reason this request was declined. 
     */
    public String getDeclineReason() {
        return this.declineReason;
    }
    
    /**
     * Returns true if this request has been allowed and includes a signed URL, false otherwise. 
     */
    public boolean isSigned() {
        return getSignedUrl() != null;
    }    
    
    public S3Object buildObject() {
    	S3Object object = new S3Object(getObjectKey());
    	object.addAllMetadata(getObjectMetadata());
    	return object;
    }
    
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy