/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * 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 *******************************************************************************/ package org.ebayopensource.turmeric.policy.adminui.client.model; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.AttributeValueImpl; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.GenericPolicy; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.GenericPolicyImpl; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.Operation; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.OperationImpl; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.OperationKey; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyKey; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.QueryCondition; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.Resource; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.ResourceImpl; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.ResourceKey; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.Subject; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectAttributeDesignatorImpl; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectGroup; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectGroupImpl; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectGroupKey; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectGroupQuery; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectImpl; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectKey; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectMatchType; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectMatchTypeImpl; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectQuery; import com.google.gwt.user.client.rpc.AsyncCallback; /** * The Class DummyPolicyQueryServiceImpl. */ public class DummyPolicyQueryServiceImpl implements PolicyQueryService { private static long subjectGroupIdCounter = 0; public static Collection<GenericPolicyImpl> tmpPolicies; public static Collection<Resource> tmpResources; public static Collection<Subject> tmpSubjects; static { tmpPolicies = new ArrayList<GenericPolicyImpl>(); GenericPolicyImpl policy = null; for (int i = 0; i < 12; i++) { policy = new GenericPolicyImpl(); policy.setId(new Long(i)); policy.setName("Policy_" + i); policy.setDescription("A description"); policy.setCreatedBy("jose"); policy.setType("BlackList"); policy.setLastModifiedBy("jose"); policy.setCreationDate(new Date(System.currentTimeMillis())); policy.setLastModified(new Date(System.currentTimeMillis())); policy.setEnabled(true); if (i == 0 || i == 3 || i == 4 || i == 10 || i == 11) { List<SubjectGroup> subjectGroups = new ArrayList<SubjectGroup>(); SubjectGroupImpl sg = null; for (int j = 0; j < 2; j++) { sg = new SubjectGroupImpl(); sg.setName("SG_" + i); subjectGroups.add(sg); } policy.setSubjectGroups(subjectGroups); } if (i == 2 || i == 5 || i == 6 || i == 8 || i == 10) { policy.setEnabled(false); } tmpPolicies.add(policy); } /* * Subjects */ tmpSubjects = new ArrayList<Subject>(); SubjectImpl subject = null; for (int i = 0; i < 3; i++) { subject = new SubjectImpl(); subject.setType("USER"); subject.setName("user_" + i); SubjectMatchTypeImpl smt = new SubjectMatchTypeImpl(); AttributeValueImpl attr = new AttributeValueImpl(); SubjectAttributeDesignatorImpl designator = new SubjectAttributeDesignatorImpl(); smt.setMatchId("urn:oasis:names:tc:xacml:1.0:function:integer-equal"); attr.setDataType("http://www.w3.org/2001/XMLSchema#integer"); attr.setValue(String.valueOf(i )); designator .setAttributeId("urn:oasis:names:tc:xacml:1.0:subject:subject-id"); designator .setDataType("http://www.w3.org/2001/XMLSchema#integer"); smt.setAttributeValue(attr); smt.setSubjectAttributeDesignator(designator); subject.setSubjectMatch(new ArrayList<SubjectMatchType>(Collections .singletonList(smt))); tmpSubjects.add(subject); } for (int i = 3; i < 6; i++) { subject = new SubjectImpl(); subject.setType("IP"); subject.setName("192.168.1." + i); SubjectMatchTypeImpl smt = new SubjectMatchTypeImpl(); AttributeValueImpl attr = new AttributeValueImpl(); SubjectAttributeDesignatorImpl designator = new SubjectAttributeDesignatorImpl(); smt.setMatchId("urn:oasis:names:tc:xacml:1.0:function:integer-equal"); attr.setDataType("http://www.w3.org/2001/XMLSchema#integer"); attr.setValue(String.valueOf(i + 3)); designator .setAttributeId("urn:oasis:names:tc:xacml:1.0:subject:subject-id"); designator .setDataType("http://www.w3.org/2001/XMLSchema#integer"); smt.setAttributeValue(attr); smt.setSubjectAttributeDesignator(designator); subject.setSubjectMatch(new ArrayList<SubjectMatchType>(Collections .singletonList(smt))); tmpSubjects.add(subject); } /* * Resources */ tmpResources = new ArrayList<Resource>(); for (int iter = 0; iter < 6; iter++) { ResourceImpl resource = new ResourceImpl(); resource.setId((long) iter); resource.setResourceName("Resource" + "SERVICE" + iter); resource.setDescription("Description" + iter); resource.setResourceType("SERVICE"); List<Operation> opList = new ArrayList<Operation>(); OperationImpl op = new OperationImpl(); op.setOperationName("Operation_1"); opList.add(op); OperationImpl op2 = new OperationImpl(); op2.setOperationName("Operation_2"); opList.add(op2); OperationImpl op3 = new OperationImpl(); op3.setOperationName("Operation_3"); opList.add(op3); resource.setOpList(opList); tmpResources.add(resource); } for (int iter = 6; iter < 11; iter++) { ResourceImpl resource = new ResourceImpl(); resource.setId((long) iter); resource.setResourceName("Resource" + "URL" + iter); resource.setDescription("Description" + iter); resource.setResourceType("URL"); List<Operation> opList = new ArrayList<Operation>(); OperationImpl op = new OperationImpl(); op.setOperationName("Operation_1"); opList.add(op); OperationImpl op2 = new OperationImpl(); op2.setOperationName("Operation_2"); opList.add(op2); OperationImpl op3 = new OperationImpl(); op3.setOperationName("Operation_3"); opList.add(op3); resource.setOpList(opList); tmpResources.add(resource); } for (int iter = 11; iter < 16; iter++) { ResourceImpl resource = new ResourceImpl(); resource.setId((long) iter); resource.setResourceName("Resource" + "OBJECT" + iter); resource.setDescription("Description" + iter); resource.setResourceType("OBJECT"); List<Operation> opList = new ArrayList<Operation>(); OperationImpl op = new OperationImpl(); op.setOperationName("Operation_1"); opList.add(op); OperationImpl op2 = new OperationImpl(); op2.setOperationName("Operation_2"); opList.add(op2); OperationImpl op3 = new OperationImpl(); op3.setOperationName("Operation_3"); opList.add(op3); resource.setOpList(opList); tmpResources.add(resource); } } /** * The Class CreateSubjectGroupsResponseImpl. */ public class CreateSubjectGroupsResponseImpl implements CreateSubjectGroupsResponse { private List<Long> ids; /** * Sets the subject group ids. * * @param ids * the new subject group ids */ public void setSubjectGroupIds(List<Long> ids) { this.ids = ids; } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.CreateSubjectGroupsResponse#getSubjectGroupIds() */ @Override public List<Long> getSubjectGroupIds() { return this.ids; } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.CreateSubjectGroupsResponse#getErrorMessage() */ @Override public String getErrorMessage() { return null; } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.CreateSubjectGroupsResponse#isErrored() */ @Override public boolean isErrored() { return false; } } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#getResources(java.util.List, com.google.gwt.user.client.rpc.AsyncCallback) */ public void getResources(List<ResourceKey> keys, AsyncCallback<GetResourcesResponse> callback) { final Collection<Resource> result = new ArrayList<Resource>(); if (keys == null) { result.addAll(tmpResources); } else { for (ResourceKey key:keys) { for (Resource resource : tmpResources) { if (key.getType().equals(resource.getResourceType())) { result.add(resource); } } } } GetResourcesResponse response = new GetResourcesResponse() { public Collection<Resource> getResources() { return result; } public String getErrorMessage() { return null; } public boolean isErrored() { return false; } }; callback.onSuccess(response); return; } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#deleteResources(java.util.List, com.google.gwt.user.client.rpc.AsyncCallback) */ public void deleteResources(List<ResourceKey> keys, AsyncCallback<DeleteResourceResponse> callback) { DeleteResourceResponse response = new DeleteResourceResponse() { @Override public String getErrorMessage() { return null; } @Override public boolean isErrored() { return false; } }; callback.onSuccess(response); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#enablePolicy(org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyKey, com.google.gwt.user.client.rpc.AsyncCallback) */ public void enablePolicy(PolicyKey key, AsyncCallback<EnablePolicyResponse> callback) { EnablePolicyResponse response = new EnablePolicyResponse() { @Override public String getErrorMessage() { return null; } @Override public boolean isErrored() { return false; } }; callback.onSuccess(response); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#disablePolicy(org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyKey, com.google.gwt.user.client.rpc.AsyncCallback) */ public void disablePolicy(PolicyKey key, AsyncCallback<DisablePolicyResponse> callback) { DisablePolicyResponse response = new DisablePolicyResponse() { @Override public String getErrorMessage() { return null; } @Override public boolean isErrored() { return false; } }; callback.onSuccess(response); } /* public void submitTicketTraceForPolicy( SubmitTicketTraceForPolicyRequest request, AsyncCallback<SubmitTicketTraceForPolicyResponse> callback) { SubmitTicketTraceForPolicyResponse response = new SubmitTicketTraceForPolicyResponse(); response.setResult(Boolean.TRUE); callback.onSuccess(response); } */ /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#deletePolicy(org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyKey, com.google.gwt.user.client.rpc.AsyncCallback) */ public void deletePolicy(PolicyKey key, AsyncCallback<DeletePolicyResponse> callback) { DeletePolicyResponse response = new DeletePolicyResponse() { @Override public Boolean isSuccess() { return Boolean.TRUE; } @Override public String getErrorMessage() { return null; } @Override public boolean isErrored() { return false; } }; callback.onSuccess(response); } /* public void deployPolicy(SubmitTicketTraceForPolicyRequest request, AsyncCallback<SubmitTicketTraceForPolicyResponse> callback) { SubmitTicketTraceForPolicyResponse response = new SubmitTicketTraceForPolicyResponse(); response.setResult(Boolean.TRUE); callback.onSuccess(response); } */ /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#findPolicies(java.lang.Long, java.util.List, java.util.List, java.util.List, java.util.List, java.util.List, org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.PolicyOutputSelector, org.ebayopensource.turmeric.policy.adminui.client.model.policy.QueryCondition, com.google.gwt.user.client.rpc.AsyncCallback) */ @Override public void findPolicies(Long sinceLastModifiedTime, List<PolicyKey> keys, List<ResourceKey> resKeys, List<OperationKey> opKeys, List<SubjectKey> subjectKeys, List<SubjectGroupKey> subjectGroupKeys, PolicyOutputSelector outputSelector, QueryCondition condition, AsyncCallback<GetPoliciesResponse> callback) { if (keys == null) return; //Only honour a single key for each list //get by matching subjectgroup if (subjectGroupKeys != null) { final Collection<GenericPolicy> policies = new ArrayList<GenericPolicy>(); //search by name & type if (subjectGroupKeys.get(0).getName() != null) { //crappy pattern match - assume wildcards at head and tail String name = subjectGroupKeys.get(0).getName().replace('%', ' ').trim(); for (GenericPolicyImpl genericPolicy : tmpPolicies) { List<SubjectGroup> subjectGroups = genericPolicy.getSubjectGroups(); if (subjectGroups != null) { for (SubjectGroup subjectGroup : subjectGroups) { if (subjectGroup.getName().toLowerCase().contains(name.toLowerCase()) && subjectGroup.getType().equalsIgnoreCase(subjectGroupKeys.get(0).getType())) { policies.add(genericPolicy); break; } } } } } else { //search by exact id for (GenericPolicyImpl genericPolicy : tmpPolicies) { if (genericPolicy.getId().longValue()==keys.get(0).getId()) policies.add(genericPolicy); } } GetPoliciesResponse response = new GetPoliciesResponse() { @Override public String getErrorMessage() { return null; } @Override public boolean isErrored() { return false; } @Override public Collection<GenericPolicy> getPolicies() { return policies; } }; callback.onSuccess(response); return; } //get by matching policy info final Collection<GenericPolicy> policies = new ArrayList<GenericPolicy>(); if (keys.get(0).getName() != null) { //really rubbish pattern match - just get rid of leading/trailing wildcard String name = keys.get(0).getName().replace('%', ' ').trim(); for (GenericPolicyImpl genericPolicy : tmpPolicies) { if (genericPolicy.getName().toLowerCase().equals(name.toLowerCase())){ policies.add(genericPolicy); } } } else if (keys.get(0).getId() !=null ) { for (GenericPolicyImpl genericPolicy : tmpPolicies) { if (genericPolicy.getId().longValue() == keys.get(0).getId()) policies.add(genericPolicy); } } GetPoliciesResponse response = new GetPoliciesResponse() { @Override public String getErrorMessage() { return null; } @Override public boolean isErrored() { return false; } @Override public Collection<GenericPolicy> getPolicies() { return policies; } }; callback.onSuccess(response); return; } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#deleteSubjectGroups(java.util.List, com.google.gwt.user.client.rpc.AsyncCallback) */ @Override public void deleteSubjectGroups(List<SubjectGroupKey> keys, AsyncCallback<DeleteSubjectGroupResponse> callback) { DeleteSubjectGroupResponse response = new DeleteSubjectGroupResponse() { @Override public String getErrorMessage() { return null; } @Override public boolean isErrored() { return false; } }; callback.onSuccess(response); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#createSubjectGroups(java.util.List, com.google.gwt.user.client.rpc.AsyncCallback) */ @Override public void createSubjectGroups(List<SubjectGroup> groups, AsyncCallback<CreateSubjectGroupsResponse> callback) { List<Long> ids = new ArrayList<Long>(); CreateSubjectGroupsResponseImpl impl = new CreateSubjectGroupsResponseImpl(); if (groups != null) { for (SubjectGroup g:groups) { ids.add(new Long(subjectGroupIdCounter++)); } } impl.setSubjectGroupIds(ids); callback.onSuccess(impl); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#createPolicy(org.ebayopensource.turmeric.policy.adminui.client.model.policy.GenericPolicy, com.google.gwt.user.client.rpc.AsyncCallback) */ @Override public void createPolicy(GenericPolicy policy, AsyncCallback<CreatePolicyResponse> callback) { } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#findSubjectGroups(org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectGroupQuery, com.google.gwt.user.client.rpc.AsyncCallback) */ @Override public void findSubjectGroups( SubjectGroupQuery query, AsyncCallback<FindSubjectGroupsResponse> callback) { } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#findSubjects(org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectQuery, com.google.gwt.user.client.rpc.AsyncCallback) */ @Override public void findSubjects(SubjectQuery query, AsyncCallback<FindSubjectsResponse> callback) { // get by name, type or id final List<Subject> subjects = new ArrayList<Subject>(); for (SubjectKey subjectKey : query.getSubjectKeys()) { if (subjectKey.getType() != null) { String type = subjectKey.getType(); for (Subject subject : tmpSubjects) { if (subject.getType().toLowerCase().equals(type.toLowerCase())) { subjects.add(subject); } } } else if (subjectKey.getName() != null) { String name = subjectKey.getName(); for (Subject subject : tmpSubjects) { if (subject.getName().toLowerCase().equals(name.toLowerCase())) { subjects.add(subject); } } } else if (subjectKey.getId() != null) { Long id = subjectKey.getId(); for (Subject subject : tmpSubjects) { if (subject.getSubjectMatchTypes().get(0).getAttributeValue().getValue().equals(id.toString())){ subjects.add(subject); } } } } FindSubjectsResponse response = new FindSubjectsResponse () { @Override public String getErrorMessage() { return null; } @Override public boolean isErrored() { return false; } @Override public List<Subject> getSubjects() { return subjects; } }; callback.onSuccess(response); return; } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#getMetaData(org.ebayopensource.turmeric.policy.adminui.client.model.policy.QueryCondition, com.google.gwt.user.client.rpc.AsyncCallback) */ @Override public void getMetaData(final QueryCondition condition, AsyncCallback<GetMetaDataResponse> callback) { GetMetaDataResponse response = new GetMetaDataResponse(){ @Override public Map<String, String> getValues() { Map<String,String> map = new HashMap<String,String>(); if(condition.getQueries().get(0).getType().equals("POLICY_TYPE")){ map.put("BL", "BL"); map.put("WL", "WL"); map.put("RL", "RL"); map.put("AUTHZ", "AUTHZ"); }else if(condition.getQueries().get(0).getType().equals("RESOURCE_TYPE")){ map.put("OBJECT", "OBJECT"); map.put("SERVICE", "SERVICE"); map.put("URL", "URL"); }else if(condition.getQueries().get(0).getType().equals("SUBJECT_TYPE")){ map.put("USER", "USER"); map.put("APP", "APP"); map.put("DEV", "DEV"); map.put("IP", "IP"); } return map; } @Override public boolean isErrored() { return false; } @Override public String getErrorMessage() { return null; } }; callback.onSuccess(response); return; } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#updateSubjectGroups(java.util.List, org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.UpdateMode, com.google.gwt.user.client.rpc.AsyncCallback) */ @Override public void updateSubjectGroups( List<SubjectGroup> groups, UpdateMode mode, AsyncCallback<UpdateSubjectGroupsResponse> callback) { } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#updatePolicy(org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.UpdateMode, org.ebayopensource.turmeric.policy.adminui.client.model.GenericPolicy, com.google.gwt.user.client.rpc.AsyncCallback) */ @Override public void updatePolicy(UpdateMode mode, GenericPolicy policy, AsyncCallback<UpdatePolicyResponse> callback) { } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#getEntityHistory(java.lang.Long, java.lang.Long, java.util.List, java.util.List, java.util.List, java.util.List, java.util.List, com.google.gwt.user.client.rpc.AsyncCallback) */ @Override public void getEntityHistory(Long startDate, Long endDate, List<PolicyKey> polKeys, List<ResourceKey> resKeys, List<OperationKey> opKeys, List<SubjectKey> subjectKeys, List<SubjectGroupKey> subjectGroupKeys, AsyncCallback<GetEntityHistoryResponse> callback) { } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#findExternalSubjects(org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectQuery, com.google.gwt.user.client.rpc.AsyncCallback) */ public void findExternalSubjects(SubjectQuery query, AsyncCallback<FindExternalSubjectsResponse> callback) { } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#createSubjects(java.util.List, com.google.gwt.user.client.rpc.AsyncCallback) */ @Override public void createSubjects(List<Subject> subject, AsyncCallback<CreateSubjectsResponse> callback) { } }