1
package com.eucalyptus.auth.policy.key;
3
import net.sf.json.JSONException;
4
import com.eucalyptus.auth.AuthException;
5
import com.eucalyptus.auth.policy.PolicySpec;
6
import com.eucalyptus.auth.principal.AccountFullName;
7
import com.eucalyptus.auth.principal.UserFullName;
8
import com.eucalyptus.cloud.ImageMetadata;
9
import com.eucalyptus.component.id.Euare;
10
import com.eucalyptus.util.RestrictedTypes;
13
* GRZE:NOTE: this class is a {@link Euare} specific type and needs to move as well as not
14
* referring to private implementation types. {@link ImageMetadata} should be considered a public
15
* type while {@code ImageInfo} is implementation specific and will change as needed by the
18
@PolicyKey( Keys.EC2_QUOTA_IMAGE_NUMBER )
19
public class ImageNumberQuotaKey extends QuotaKey {
21
private static final String KEY = Keys.EC2_QUOTA_IMAGE_NUMBER;
24
public void validateValueType( final String value ) throws JSONException {
25
KeyUtils.validateIntegerValue( value, KEY );
29
public boolean canApply( final String action, final String resourceType ) {
30
if ( PolicySpec.qualifiedName( PolicySpec.VENDOR_EC2, PolicySpec.EC2_REGISTERIMAGE ).equals( action ) &&
31
PolicySpec.qualifiedName( PolicySpec.VENDOR_EC2, PolicySpec.EC2_RESOURCE_IMAGE ).equals( resourceType ) ) {
38
public String value( final Scope scope, final String id, final String resource, final Long quantity ) throws AuthException {
41
return Long.toString( RestrictedTypes.quantityMetricFunction( ImageMetadata.class ).apply( AccountFullName.getInstance( id ) ) + 1 );
45
return Long.toString( RestrictedTypes.quantityMetricFunction( ImageMetadata.class ).apply( UserFullName.getInstance( id ) ) + 1 );
47
throw new AuthException( "Invalid scope" );