blob: 936a760df16059e0452bd7d4d8ff0283d815e4ea [file] [log] [blame]
/*******************************************************************************
* Copyright 2017 General Electric Company
*
* 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.
*
* SPDX-License-Identifier: Apache-2.0
*******************************************************************************/
package com.ge.predix.test.utils;
import static com.ge.predix.test.utils.ACSTestUtil.ACS_VERSION;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.security.oauth2.client.OAuth2RestTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import com.ge.predix.acs.model.Attribute;
import com.ge.predix.acs.rest.BaseResource;
import com.ge.predix.acs.rest.BaseSubject;
@Component
public class PrivilegeHelper {
private static final String ALTERNATE_ATTRIBUTE_VALUE = "sanfrancisco";
private static final String DEFAULT_ATTRIBUTE_VALUE = "sanramon";
private static final String DEFAULT_ATTRIBUTE_NAME = "site";
private static final String DEFAULT_ORG_ATTRIBUTE_NAME = "org";
private static final String DEFAULT_ORG_ATTRIBUTE_VALUE = "alliance";
private static final String ALTERNATE_ORG_ATTRIBUTE_VALUE = "syndicate";
public static final String ACS_SUBJECT_API_PATH = ACS_VERSION + "/subject/";
public static final String ACS_RESOURCE_API_PATH = ACS_VERSION + "/resource/";
public static final String DEFAULT_SUBJECT_ID = "any";
public static final String DEFAULT_SUBJECT_IDENTIFIER = "any";
public static final String DEFAULT_RESOURCE_IDENTIFIER = "any";
public static final String DEFAULT_ATTRIBUTE_ISSUER = "https://acs.attributes.int";
@Autowired
private ZoneFactory zoneFactory;
public BaseSubject putSubject(final OAuth2RestTemplate acsTemplate, final BaseSubject subject,
final String endpoint, final HttpHeaders headers, final Attribute... attributes)
throws UnsupportedEncodingException {
subject.setAttributes(new HashSet<>(Arrays.asList(attributes)));
URI subjectUri = URI
.create(endpoint + ACS_SUBJECT_API_PATH + URLEncoder.encode(subject.getSubjectIdentifier(), "UTF-8"));
acsTemplate.put(subjectUri, new HttpEntity<>(subject, headers));
return subject;
}
public void putSubject(final OAuth2RestTemplate restTemplate, final String subjectIdentifier,
final HttpHeaders headers, final Attribute... attributes) throws UnsupportedEncodingException {
BaseSubject subject = new BaseSubject(subjectIdentifier);
// no header needed, because it uses zone specific url
putSubject(restTemplate, subject, this.zoneFactory.getAcsBaseURL(), headers, attributes);
}
public ResponseEntity<Object> postMultipleSubjects(final OAuth2RestTemplate acsTemplate, final String endpoint,
final HttpHeaders headers, final BaseSubject... subjects) {
Attribute site = getDefaultAttribute();
Set<Attribute> attributes = new HashSet<>();
attributes.add(site);
List<BaseSubject> subjectsArray = new ArrayList<>();
for (BaseSubject s : subjects) {
s.setAttributes(attributes);
subjectsArray.add(s);
}
URI subjectUri = URI.create(endpoint + ACS_SUBJECT_API_PATH);
ResponseEntity<Object> responseEntity = acsTemplate.postForEntity(subjectUri,
new HttpEntity<>(subjectsArray, headers), Object.class);
return responseEntity;
}
public ResponseEntity<Object> postSubjectsWithDefaultAttributes(final OAuth2RestTemplate acsTemplate,
final String endpoint, final HttpHeaders headers, final BaseSubject... subjects) {
Attribute site = getDefaultAttribute();
Set<Attribute> attributes = new HashSet<>();
attributes.add(site);
for (BaseSubject s : subjects) {
s.setAttributes(attributes);
}
return postSubjects(acsTemplate, endpoint, headers, subjects);
}
public ResponseEntity<Object> postSubjects(final OAuth2RestTemplate acsTemplate, final String endpoint,
final HttpHeaders headers, final BaseSubject... subjects) {
List<BaseSubject> subjectsArray = new ArrayList<>();
for (BaseSubject s : subjects) {
subjectsArray.add(s);
}
URI subjectUri = URI.create(endpoint + ACS_SUBJECT_API_PATH);
ResponseEntity<Object> responseEntity = acsTemplate.postForEntity(subjectUri,
new HttpEntity<>(subjectsArray, headers), Object.class);
return responseEntity;
}
public BaseResource putResource(final OAuth2RestTemplate acsTemplate, final BaseResource resource,
final String endpoint, final HttpHeaders headers, final Attribute... attributes) throws Exception {
resource.setAttributes(new HashSet<>(Arrays.asList(attributes)));
String value = URLEncoder.encode(resource.getResourceIdentifier(), "UTF-8");
URI uri = new URI(endpoint + ACS_RESOURCE_API_PATH + value);
acsTemplate.put(uri, new HttpEntity<>(resource, headers));
return resource;
}
public ResponseEntity<Object> postResources(final OAuth2RestTemplate acsTemplate, final String endpoint,
final BaseResource... resources) {
Attribute site = getDefaultAttribute();
Set<Attribute> attributes = new HashSet<>();
attributes.add(site);
List<BaseResource> resourcesArray = new ArrayList<>();
for (BaseResource r : resources) {
r.setAttributes(attributes);
resourcesArray.add(r);
}
URI resourceUri = URI.create(endpoint + ACS_RESOURCE_API_PATH);
ResponseEntity<Object> responseEntity = acsTemplate.postForEntity(resourceUri, resourcesArray, Object.class);
return responseEntity;
}
public ResponseEntity<Object> postResourcesWithDefaultSiteAttribute(final OAuth2RestTemplate acsTemplate,
final String endpoint, final HttpHeaders headers, final BaseResource... resources) {
Attribute site = getDefaultAttribute();
Set<Attribute> attributes = new HashSet<>();
attributes.add(site);
for (BaseResource r : resources) {
r.setAttributes(attributes);
}
return postResources(acsTemplate, endpoint, headers, resources);
}
public ResponseEntity<Object> postResources(final OAuth2RestTemplate acsTemplate, final String endpoint,
final HttpHeaders headers, final BaseResource... resources) {
List<BaseResource> resourcesArray = new ArrayList<>();
for (BaseResource r : resources) {
resourcesArray.add(r);
}
URI resourceUri = URI.create(endpoint + ACS_RESOURCE_API_PATH);
ResponseEntity<Object> responseEntity = acsTemplate.postForEntity(resourceUri,
new HttpEntity<>(resourcesArray, headers), Object.class);
return responseEntity;
}
public void deleteSubject(final RestTemplate restTemplate, final String acsUrl, final String subjectId)
throws Exception {
deleteSubject(restTemplate, acsUrl, subjectId, null);
}
public void deleteSubject(final RestTemplate restTemplate, final String acsUrl, final String subjectId,
final HttpHeaders headers) throws Exception {
if (subjectId != null) {
URI subjectUri = URI.create(acsUrl + ACS_SUBJECT_API_PATH + URLEncoder.encode(subjectId, "UTF-8"));
restTemplate.exchange(subjectUri, HttpMethod.DELETE, new HttpEntity<>(headers), String.class);
}
}
public void deleteResource(final RestTemplate restTemplate, final String acsUrl, final String resourceId)
throws Exception {
deleteResource(restTemplate, acsUrl, resourceId, null);
}
public void deleteResource(final RestTemplate restTemplate, final String acsUrl, final String resourceId,
final HttpHeaders headers) throws Exception {
if (resourceId != null) {
URI resourceUri = URI.create(acsUrl + ACS_RESOURCE_API_PATH + URLEncoder.encode(resourceId, "UTF-8"));
restTemplate.exchange(resourceUri, HttpMethod.DELETE, new HttpEntity<>(headers), String.class);
}
}
public BaseSubject createSubject(final String subjectIdentifier) {
BaseSubject subject = new BaseSubject();
subject.setSubjectIdentifier(subjectIdentifier);
Set<Attribute> attributes = new HashSet<>();
attributes.add(getDefaultAttribute());
subject.setAttributes(attributes);
return subject;
}
public BaseResource createResource(final String resourceIdentifier) {
BaseResource resource = new BaseResource();
resource.setResourceIdentifier(resourceIdentifier);
Set<Attribute> attributes = new HashSet<>();
attributes.add(getDefaultAttribute());
resource.setAttributes(attributes);
return resource;
}
public Attribute getDefaultAttribute() {
Attribute site = new Attribute();
site.setIssuer(DEFAULT_ATTRIBUTE_ISSUER);
site.setName(DEFAULT_ATTRIBUTE_NAME);
site.setValue(DEFAULT_ATTRIBUTE_VALUE);
return site;
}
public Attribute getAlternateAttribute() {
Attribute site = new Attribute();
site.setIssuer(DEFAULT_ATTRIBUTE_ISSUER);
site.setName(DEFAULT_ATTRIBUTE_NAME);
site.setValue(ALTERNATE_ATTRIBUTE_VALUE);
return site;
}
public Attribute getDefaultOrgAttribute() {
Attribute site = new Attribute();
site.setIssuer(DEFAULT_ATTRIBUTE_ISSUER);
site.setName(DEFAULT_ORG_ATTRIBUTE_NAME);
site.setValue(DEFAULT_ORG_ATTRIBUTE_VALUE);
return site;
}
public Attribute getAlternateOrgAttribute() {
Attribute site = new Attribute();
site.setIssuer(DEFAULT_ATTRIBUTE_ISSUER);
site.setName(DEFAULT_ORG_ATTRIBUTE_NAME);
site.setValue(ALTERNATE_ORG_ATTRIBUTE_VALUE);
return site;
}
public void deleteSubjects(final RestTemplate restTemplate, final String acsUrl, final HttpHeaders headers)
throws Exception {
BaseSubject[] subjects = listSubjects(restTemplate, acsUrl, headers);
for (BaseSubject subject : subjects) {
deleteSubject(restTemplate, acsUrl, subject.getSubjectIdentifier(), headers);
}
}
public BaseSubject[] listSubjects(final RestTemplate restTemplate, final String acsUrl, final HttpHeaders headers) {
URI uri = URI.create(acsUrl + ACS_SUBJECT_API_PATH);
ResponseEntity<BaseSubject[]> response = restTemplate.exchange(uri, HttpMethod.GET, new HttpEntity<>(headers),
BaseSubject[].class);
return response.getBody();
}
public void deleteResources(final RestTemplate restTemplate, final String acsUrl, final HttpHeaders headers)
throws Exception {
BaseResource[] resources = listResources(restTemplate, acsUrl, headers);
for (BaseResource resource : resources) {
deleteResource(restTemplate, acsUrl, resource.getResourceIdentifier(), headers);
}
}
public BaseResource[] listResources(final RestTemplate restTemplate, final String acsEndpoint,
final HttpHeaders headers) {
URI uri = URI.create(acsEndpoint + ACS_RESOURCE_API_PATH);
ResponseEntity<BaseResource[]> response = restTemplate.exchange(uri, HttpMethod.GET, new HttpEntity<>(headers),
BaseResource[].class);
return response.getBody();
}
}