/* * Copyright 2011 Cloud.com, 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 com.cloud.bridge.service.core.s3; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class S3PolicyAction { public enum PolicyActions { UnknownAction, AllActions, GetObject, GetObjectVersion, PutObject, GetObjectAcl, GetObjectVersionAcl, PutObjectAcl, PutObjectAclVersion, DeleteObject, DeleteObjectVersion, ListMultipartUploadParts, AbortMultipartUpload, CreateBucket, DeleteBucket, ListBucket, ListBucketVersions, ListAllMyBuckets, ListBucketMultipartUploads, GetBucketAcl, PutBucketAcl, GetBucketVersioning, PutBucketVersioning, GetBucketLocation, PutBucketPolicy, GetBucketPolicy } // -> map a string name into a policy action constant private Map<String,PolicyActions> actionNames = new HashMap<String,PolicyActions>(); private List<PolicyActions> actionList = new ArrayList<PolicyActions>(); public S3PolicyAction() { actionNames.put("s3:GetObject", PolicyActions.GetObject); actionNames.put("s3:GetObjectVersion", PolicyActions.GetObjectVersion); actionNames.put("s3:PutObject", PolicyActions.PutObject); actionNames.put("s3:GetObjectAcl", PolicyActions.GetObjectAcl); actionNames.put("s3:GetObjectVersionAcl", PolicyActions.GetObjectVersionAcl); actionNames.put("s3:PutObjectAcl", PolicyActions.PutObjectAcl); actionNames.put("s3:PutObjectAclVersion", PolicyActions.PutObjectAclVersion); actionNames.put("s3:DeleteObject", PolicyActions.DeleteObject); actionNames.put("s3:DeleteObjectVersion", PolicyActions.DeleteObjectVersion); actionNames.put("s3:ListMultipartUploadParts", PolicyActions.ListMultipartUploadParts); actionNames.put("s3:AbortMultipartUpload", PolicyActions.AbortMultipartUpload); actionNames.put("s3:CreateBucket", PolicyActions.CreateBucket); actionNames.put("s3:DeleteBucket", PolicyActions.DeleteBucket); actionNames.put("s3:ListBucket", PolicyActions.ListBucket); actionNames.put("s3:ListBucketVersions", PolicyActions.ListBucketVersions); actionNames.put("s3:ListAllMyBuckets", PolicyActions.ListAllMyBuckets); actionNames.put("s3:ListBucketMultipartUploads", PolicyActions.ListBucketMultipartUploads); actionNames.put("s3:GetBucketAcl", PolicyActions.GetBucketAcl); actionNames.put("s3:PutBucketAcl", PolicyActions.PutBucketAcl); actionNames.put("s3:GetBucketVersioning", PolicyActions.GetBucketVersioning); actionNames.put("s3:PutBucketVersioning", PolicyActions.PutBucketVersioning); actionNames.put("s3:GetBucketLocation", PolicyActions.GetBucketLocation); actionNames.put("s3:PutBucketPolicy", PolicyActions.PutBucketPolicy); actionNames.put("s3:GetBucketPolicy", PolicyActions.GetBucketPolicy); } public PolicyActions[] getActions() { return actionList.toArray(new PolicyActions[0]); } public void addAction(PolicyActions param) { actionList.add( param ); } public PolicyActions toPolicyActions(String operation) { if (operation.equalsIgnoreCase("s3:*")) return PolicyActions.AllActions; Object value = actionNames.get( operation ); if ( null == value ) return PolicyActions.UnknownAction; else return (PolicyActions)value; } public boolean contains(PolicyActions operationRequested) { Iterator<PolicyActions> itr = actionList.iterator(); while( itr.hasNext()) { PolicyActions oneAction = itr.next(); if (PolicyActions.AllActions == oneAction) return true; if (oneAction == operationRequested) return true; } return false; } public String toString() { StringBuffer value = new StringBuffer(); Iterator<PolicyActions> itr = actionList.iterator(); value.append( "Actions: \n" ); while( itr.hasNext()) { PolicyActions oneAction = itr.next(); value.append( oneAction ); value.append( "\n" ); } return value.toString(); } }