Example #1
0
public class WalrusProperties {
  private static Logger LOG = Logger.getLogger(WalrusProperties.class);

  public static final String SERVICE_NAME = "Walrus";
  public static String NAME = "Walrus";
  public static final String DB_NAME = "eucalyptus_walrus";
  public static final String VIRTUAL_SUBDOMAIN = "I_R_Bukkit";
  public static final long G = 1024 * 1024 * 1024;
  public static final long M = 1024 * 1024;
  public static final long K = 1024;
  public static String WALRUS_SUBDOMAIN = "walrus";

  public static final String bucketRootDirectory = BaseDirectory.VAR.toString() + "/bukkits";
  public static int MAX_BUCKETS_PER_ACCOUNT = 5;
  public static long MAX_BUCKET_SIZE = 5 * G;
  public static long IMAGE_CACHE_SIZE = 30 * G;
  public static String WALRUS_URL;
  public static int MAX_TOTAL_SNAPSHOT_SIZE = 50;
  public static int MAX_KEYS = 1000;

  public static int IO_CHUNK_SIZE = 102400;
  public static boolean shouldEnforceUsageLimits = true;
  public static boolean trackUsageStatistics = false;
  public static boolean enableTorrents = false;
  public static boolean enableVirtualHosting = true;
  public static long CACHE_PROGRESS_TIMEOUT = 600000L; // ten minutes
  public static long IMAGE_CACHE_RETRY_TIMEOUT = 1000L;
  public static int IMAGE_CACHE_RETRY_LIMIT = 3;
  public static long MAX_INLINE_DATA_SIZE = 10 * M;
  public static final String walrusServicePath = "/services/Walrus";
  public static int WALRUS_PORT = 8773;
  public static final String NAMESPACE_VERSION = "2006-03-01";
  public static final String CONTENT_LEN = "Content-Length";
  public static final String CONTENT_TYPE = "Content-Type";
  public static final String CONTENT_DISPOSITION = "Content-Disposition";
  public static final String CONTENT_MD5 = "Content-MD5";
  public static final String MULTIFORM_DATA_TYPE = "multipart/form-data";

  public static final String URL_PROPERTY = "euca.walrus.url";
  public static final String WALRUS_HOST_PROPERTY = "euca.walrus.host";
  public static final String USAGE_LIMITS_PROPERTY = "euca.walrus.usageLimits";
  public static final String WALRUS_OPERATION = "WalrusOperation";
  public static final String AMZ_META_HEADER_PREFIX = "x-amz-meta-";
  public static final String STREAMING_HTTP_GET = "STREAMING_HTTP_GET";
  public static final String STREAMING_HTTP_PUT = "STREAMING_HTTP_PUT";
  public static final String AMZ_ACL = "x-amz-acl";

  public static final String ALL_USERS_GROUP = "http://acs.amazonaws.com/groups/global/AllUsers";
  public static final String AUTHENTICATED_USERS_GROUP =
      "http://acs.amazonaws.com/groups/global/AuthenticatedUsers";
  public static final String LOGGING_GROUP = "http://acs.amazonaws.com/groups/s3/LogDelivery";

  public static final String IGNORE_PREFIX = "x-ignore-";
  public static final String COPY_SOURCE = "x-amz-copy-source";
  public static final String METADATA_DIRECTIVE = "x-amz-metadata-directive";
  public static final String ADMIN = "admin";

  public static final String X_AMZ_VERSION_ID = "x-amz-version-id";
  public static final String NULL_VERSION_ID = "null";

  public static final String X_AMZ_SECURITY_TOKEN = "x-amz-security-token";

  public static final String TRACKER_BINARY = "bttrack";
  public static final String TORRENT_CREATOR_BINARY = "btmakemetafile";
  public static final String TORRENT_CLIENT_BINARY = "btdownloadheadless";
  public static String TRACKER_DIR = BaseDirectory.VAR.toString() + "/bt";
  public static String TRACKER_URL = "http://localhost:6969/announce";
  public static String TRACKER_PORT = "6969";
  public static final String EUCA_ROOT_WRAPPER =
      BaseDirectory.LIBEXEC.toString() + "/euca_rootwrap";
  public static final String EUCA_MOUNT_WRAPPER =
      BaseDirectory.LIBEXEC.toString() + "/euca_mountwrap";
  public static final String EUCA_USER = System.getProperty("euca.user");
  public static final Integer DEFAULT_INITIAL_CAPACITY = 10; // 10 GB initial total capacity.

  // 15 minutes
  public static final long EXPIRATION_LIMIT = 900000;

  static {
    Groovyness.loadConfig("walrusprops.groovy");
  }

  public enum CannedACL {
    private_only {
      public String toString() {
        return "private";
      }
    },
    public_read {
      public String toString() {
        return "public-read";
      }
    },
    public_read_write {
      public String toString() {
        return "public-read-write";
      }
    },
    authenticated_read {
      public String toString() {
        return "authenticated-read";
      }
    },
    bucket_owner_read {
      public String toString() {
        return "bucket-owner-read";
      }
    },
    bucket_owner_full_control {
      public String toString() {
        return "bucket-owner-full-control";
      }
    },
    log_delivery_write {
      public String toString() {
        return "log-delivery-write";
      }
    },
    aws_exec_read {
      public String toString() {
        return "aws-exec-read";
      }
    }
  }

  public enum Permission {
    READ,
    WRITE,
    READ_ACP,
    WRITE_ACP,
    FULL_CONTROL
  }

  public enum VersioningStatus {
    Enabled,
    Disabled,
    Suspended
  }

  public enum Headers {
    Bucket,
    Key,
    RandomKey,
    VolumeId,
    S3UploadPolicy,
    S3UploadPolicySignature
  }

  public enum ExtendedGetHeaders {
    IfModifiedSince,
    IfUnmodifiedSince,
    IfMatch,
    IfNoneMatch,
    Range
  }

  public enum ExtendedHeaderDateTypes {
    IfModifiedSince,
    IfUnmodifiedSince,
    CopySourceIfModifiedSince,
    CopySourceIfUnmodifiedSince;

    public static boolean contains(String value) {
      for (ExtendedHeaderDateTypes type : values()) {
        if (type.toString().equals(value)) {
          return true;
        }
      }
      return false;
    }
  }

  public enum ExtendedHeaderRangeTypes {
    ByteRangeStart,
    ByteRangeEnd
  }

  public enum WalrusInternalOperations {
    GetDecryptedImage,
    ValidateImage
  }

  public enum GetOptionalParameters {
    IsCompressed
  }

  public enum StorageOperations {
    StoreSnapshot,
    DeleteWalrusSnapshot,
    GetWalrusSnapshot,
    GetWalrusSnapshotSize
  }

  public enum InfoOperations {
    GetSnapshotInfo
  }

  public enum StorageParameters {
    SnapshotVgName,
    SnapshotLvName
  }

  public enum FormField {
    FormUploadPolicyData,
    AWSAccessKeyId,
    key,
    bucket,
    acl,
    policy,
    redirect,
    success_action_redirect,
    success_action_status,
    signature,
    file
  }

  public enum IgnoredFields {
    AWSAccessKeyId,
    signature,
    file,
    policy,
    submit
  }

  public enum PolicyHeaders {
    expiration,
    conditions
  }

  public enum CopyHeaders {
    CopySourceIfMatch,
    CopySourceIfNoneMatch,
    CopySourceIfUnmodifiedSince,
    CopySourceIfModifiedSince
  }

  public enum SubResource {
    // Per the S3 Dev guide, these must be included in the canonicalized resource:
    // acl, lifecycle, location, logging, notification, partNumber, policy, requestPayment, torrent,
    // uploadId, uploads, versionId, versioning, versions and website
    acl,
    location,
    logging,
    torrent,
    versioning,
    versions,
    versionId
  }

  public enum HTTPVerb {
    GET,
    PUT,
    DELETE,
    POST,
    HEAD;
  }

  public enum ServiceParameter {}

  public enum BucketParameter {
    acl,
    location,
    prefix,
    maxkeys,
    delimiter,
    marker,
    torrent,
    logging,
    versioning,
    versions,
    versionidmarker,
    keymarker;
  }

  public enum ObjectParameter {
    acl,
    torrent,
    versionId;
  }

  public enum RequiredQueryParams {
    Date
  }

  public enum RequiredSOAPTags {
    AWSAccessKeyId,
    Timestamp,
    Signature
  }

  /*
   * Simply determines if the userId is a member of the groupId, very simplistic only for ALL_USERS and AUTHENTICATED_USERS, not arbitrary groups.
   * Arbitrary groups are not yet supported in Walrus bucket policies/IAM policies.
   */
  public static boolean isUserMember(String userId, String groupId) {
    if (groupId == null) {
      return false;
    }

    if (groupId.equals(WalrusProperties.ALL_USERS_GROUP)) {
      return true;
    }

    if (groupId.equals(WalrusProperties.AUTHENTICATED_USERS_GROUP)
        && userId != null
        && !"".equals(userId)
        && !userId.equals(Principals.nobodyUser().getUserId())) {
      return true;
    }

    return false;
  }

  public static String getTrackerUrl() {
    try {
      String walrusUrl = SystemConfiguration.getWalrusUrl();
      TRACKER_URL = "http://" + new URI(walrusUrl).getHost() + ":" + TRACKER_PORT + "/announce";
    } catch (EucalyptusCloudException e) {
      LOG.error(e);
    } catch (URISyntaxException e) {
      LOG.error(e);
    }
    return TRACKER_URL;
  }

  public static InetAddress getWalrusAddress() throws EucalyptusCloudException {
    if (Topology.isEnabled(Walrus.class)) {
      return Topology.lookup(Walrus.class).getInetAddress();
    } else {
      throw new EucalyptusCloudException("Walrus not ENABLED");
    }
  }
}