Search in sources :

Example 1 with ECSBucketACL

use of com.emc.storageos.ecs.api.ECSBucketACL in project coprhd-controller by CoprHD.

the class ECSObjectStorageDevice method doSyncBucketACL.

/*
     * (non-Javadoc)
     * 
     * @see com.emc.storageos.volumecontroller.ObjectStorageDevice#doSyncBucketACL(com.emc.storageos.db.client.model.StorageSystem,
     * com.emc.storageos.db.client.model.Bucket, com.emc.storageos.volumecontroller.ObjectDeviceInputOutput, java.lang.String)
     * 
     * Gets the ACl for the bucket from ECS and persist in coprhd DB.
     */
@Override
public BiosCommandResult doSyncBucketACL(StorageSystem storageObj, Bucket bucket, ObjectDeviceInputOutput objectArgs, String taskId) throws ControllerException {
    ECSApi objectAPI = getAPI(storageObj);
    try {
        String aclResponse = objectAPI.getBucketAclFromECS(objectArgs.getName(), objectArgs.getNamespace());
        _log.info("aclResponse {} " + aclResponse);
        ECSBucketACL bucketACl = new Gson().fromJson(SecurityUtils.sanitizeJsonString(aclResponse), ECSBucketACL.class);
        ECSBucketACL.Acl acl = bucketACl.getAcl();
        List<ECSBucketACL.UserAcl> user_acl = acl.getUseAcl();
        List<ECSBucketACL.GroupAcl> group_acl = acl.getGroupAcl();
        List<ECSBucketACL.CustomGroupAcl> customgroup_acl = acl.getCustomgroupAcl();
        List<BucketACE> aclToAdd = Lists.newArrayList();
        final String _VERSION = "acl_supported";
        final String DELIMETER = "@";
        for (ECSBucketACL.UserAcl userAce : user_acl) {
            String userWithDomain = userAce.getUser();
            String[] usrDomain = userWithDomain.split(DELIMETER);
            BucketACE bucketAce = new BucketACE();
            if (usrDomain.length > 1) {
                bucketAce.setDomain(usrDomain[1]);
                bucketAce.setUser(usrDomain[0]);
            } else if (usrDomain.length == 1) {
                // username without domain
                bucketAce.setUser(usrDomain[0]);
            }
            String[] permArray = userAce.getPermission();
            String permissions = formatPermissions(permArray);
            bucketAce.setPermissions(permissions);
            aclToAdd.add(bucketAce);
        }
        for (ECSBucketACL.GroupAcl groupAce : group_acl) {
            String groupWithDomain = groupAce.getGroup();
            String[] grpDomain = groupWithDomain.split(DELIMETER);
            BucketACE bucketAce = new BucketACE();
            if (grpDomain.length > 1) {
                bucketAce.setDomain(grpDomain[1]);
                bucketAce.setGroup(grpDomain[0]);
            } else if (grpDomain.length == 1) {
                // group without domain
                bucketAce.setGroup(grpDomain[0]);
            }
            String[] permArray = groupAce.getPermission();
            String permissions = formatPermissions(permArray);
            bucketAce.setPermissions(permissions);
            aclToAdd.add(bucketAce);
        }
        for (ECSBucketACL.CustomGroupAcl customGroupAce : customgroup_acl) {
            String customGroupWithDomain = customGroupAce.getCustomgroup();
            String[] grpDomain = customGroupWithDomain.split(DELIMETER);
            BucketACE bucketAce = new BucketACE();
            if (grpDomain.length > 1) {
                bucketAce.setDomain(grpDomain[1]);
                bucketAce.setCustomGroup(grpDomain[0]);
            } else if (grpDomain.length == 1) {
                // custom group without domain
                bucketAce.setCustomGroup(grpDomain[0]);
            }
            String[] permArray = customGroupAce.getPermission();
            String permissions = formatPermissions(permArray);
            bucketAce.setPermissions(permissions);
            aclToAdd.add(bucketAce);
        }
        BucketACLUpdateParams param = new BucketACLUpdateParams();
        BucketACL aclForAddition = new BucketACL();
        aclForAddition.setBucketACL(aclToAdd);
        param.setAclToAdd(aclForAddition);
        updateBucketACLInDB(param, objectArgs, bucket);
        bucket.setVersion(_VERSION);
        _dbClient.updateObject(bucket);
    } catch (ECSException e) {
        _log.error("Sync ACL for Bucket : {} failed.", objectArgs.getName(), e);
        completeTask(bucket.getId(), taskId, e);
        return BiosCommandResult.createErrorResult(e);
    }
    completeTask(bucket.getId(), taskId, "Bucket ACL Sync Successful.");
    return BiosCommandResult.createSuccessfulResult();
}
Also used : Gson(com.google.gson.Gson) BucketACE(com.emc.storageos.model.object.BucketACE) ECSApi(com.emc.storageos.ecs.api.ECSApi) BucketACLUpdateParams(com.emc.storageos.model.object.BucketACLUpdateParams) ObjectBucketACL(com.emc.storageos.db.client.model.ObjectBucketACL) ECSBucketACL(com.emc.storageos.ecs.api.ECSBucketACL) BucketACL(com.emc.storageos.model.object.BucketACL) ECSBucketACL(com.emc.storageos.ecs.api.ECSBucketACL) ECSException(com.emc.storageos.ecs.api.ECSException)

Example 2 with ECSBucketACL

use of com.emc.storageos.ecs.api.ECSBucketACL in project coprhd-controller by CoprHD.

the class ECSObjectStorageDevice method toJsonString.

private String toJsonString(ObjectDeviceInputOutput objectArgs, List<BucketACE> aclsToProcess) {
    ECSBucketACL ecsBucketAcl = new ECSBucketACL();
    List<ECSBucketACL.UserAcl> user_acl = Lists.newArrayList();
    List<ECSBucketACL.GroupAcl> group_acl = Lists.newArrayList();
    List<ECSBucketACL.CustomGroupAcl> customgroup_acl = Lists.newArrayList();
    String PERMISSION_DELEMITER = "\\|";
    for (BucketACE aceToAdd : aclsToProcess) {
        ECSBucketACL.UserAcl userAcl = ecsBucketAcl.new UserAcl();
        ECSBucketACL.GroupAcl groupAcl = ecsBucketAcl.new GroupAcl();
        ECSBucketACL.CustomGroupAcl customgroupAcl = ecsBucketAcl.new CustomGroupAcl();
        String type = "user";
        String userOrGroupOrCustomgroup = aceToAdd.getUser();
        if (userOrGroupOrCustomgroup == null) {
            userOrGroupOrCustomgroup = aceToAdd.getGroup() != null ? aceToAdd.getGroup() : aceToAdd.getCustomGroup();
            type = aceToAdd.getGroup() != null ? "group" : "customgroup";
        }
        if (aceToAdd.getDomain() != null && !aceToAdd.getDomain().isEmpty()) {
            // ECS accepts username@domain format.
            userOrGroupOrCustomgroup = userOrGroupOrCustomgroup + "@" + aceToAdd.getDomain();
        }
        switch(type) {
            case "user":
                userAcl.setUser(userOrGroupOrCustomgroup);
                if (aceToAdd.getPermissions() != null) {
                    userAcl.setPermission(aceToAdd.getPermissions().split(PERMISSION_DELEMITER));
                }
                user_acl.add(userAcl);
                break;
            case "group":
                groupAcl.setGroup(userOrGroupOrCustomgroup);
                if (aceToAdd.getPermissions() != null) {
                    groupAcl.setPermission(aceToAdd.getPermissions().split(PERMISSION_DELEMITER));
                }
                group_acl.add(groupAcl);
                break;
            case "customgroup":
                customgroupAcl.setCustomgroup(userOrGroupOrCustomgroup);
                if (aceToAdd.getPermissions() != null) {
                    customgroupAcl.setPermission(aceToAdd.getPermissions().split(PERMISSION_DELEMITER));
                }
                customgroup_acl.add(customgroupAcl);
                break;
        }
    }
    ecsBucketAcl.setBucket(objectArgs.getName());
    ecsBucketAcl.setNamespace(objectArgs.getNamespace());
    ECSBucketACL.Acl acl = ecsBucketAcl.new Acl();
    if (!user_acl.isEmpty()) {
        acl.setUserAcl(user_acl);
    }
    if (!group_acl.isEmpty()) {
        acl.setGroupAcl(group_acl);
    }
    if (!customgroup_acl.isEmpty()) {
        acl.setCustomgroupAcl(customgroup_acl);
    }
    ecsBucketAcl.setAcl(acl);
    return new Gson().toJson(ecsBucketAcl);
}
Also used : Gson(com.google.gson.Gson) BucketACE(com.emc.storageos.model.object.BucketACE) ECSBucketACL(com.emc.storageos.ecs.api.ECSBucketACL)

Aggregations

ECSBucketACL (com.emc.storageos.ecs.api.ECSBucketACL)2 BucketACE (com.emc.storageos.model.object.BucketACE)2 Gson (com.google.gson.Gson)2 ObjectBucketACL (com.emc.storageos.db.client.model.ObjectBucketACL)1 ECSApi (com.emc.storageos.ecs.api.ECSApi)1 ECSException (com.emc.storageos.ecs.api.ECSException)1 BucketACL (com.emc.storageos.model.object.BucketACL)1 BucketACLUpdateParams (com.emc.storageos.model.object.BucketACLUpdateParams)1