/*
* (c) 2015 CenturyLink. 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
*
* 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.
*/
package com.centurylink.cloud.sdk.policy.services.client;
import com.centurylink.cloud.sdk.core.auth.services.BearerAuthentication;
import com.centurylink.cloud.sdk.core.client.AuthenticatedSdkHttpClient;
import com.centurylink.cloud.sdk.core.config.SdkConfiguration;
import com.centurylink.cloud.sdk.policy.services.client.domain.firewall.FirewallPolicyRequest;
import com.centurylink.cloud.sdk.policy.services.client.domain.firewall.FirewallPolicyMetadata;
import javax.ws.rs.core.GenericType;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static javax.ws.rs.client.Entity.entity;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;
public class FirewallPolicyClient extends AuthenticatedSdkHttpClient {
private static final String DATACENTER_ID = "dataCenterId";
private static final String POLICY_ID = "firewallPolicyId";
private static final String POLICY_URL = "/firewallPolicies/{accountAlias}/{dataCenterId}";
private static final String POLICY_WITH_ID_URL = POLICY_URL + "/{firewallPolicyId}";
public FirewallPolicyClient(BearerAuthentication authFilter, SdkConfiguration config) {
super(authFilter, config);
}
public List<FirewallPolicyMetadata> getFirewallPolicies(String dataCenterId, String destinationAccountAlias) {
List<FirewallPolicyMetadata> metadataList =
experimentalClient(POLICY_URL)
.resolveTemplate(DATACENTER_ID, dataCenterId)
.queryParam("destinationAccountAlias", destinationAccountAlias)
.request()
.get(new GenericType<List<FirewallPolicyMetadata>>() {
});
metadataList.forEach(metadata -> addAdditionalParams(metadata, dataCenterId));
return metadataList;
}
public FirewallPolicyMetadata getFirewallPolicy(String dataCenterId, String firewallPolicyId) {
FirewallPolicyMetadata metadata =
experimentalClient(POLICY_WITH_ID_URL)
.resolveTemplate(DATACENTER_ID, dataCenterId)
.resolveTemplate(POLICY_ID, firewallPolicyId)
.request()
.get(FirewallPolicyMetadata.class);
addAdditionalParams(metadata, dataCenterId);
return metadata;
}
public FirewallPolicyMetadata create(String dataCenterId, FirewallPolicyRequest request) {
FirewallPolicyMetadata metadata =
experimentalClient(POLICY_URL)
.resolveTemplate(DATACENTER_ID, dataCenterId)
.request()
.post(entity(request, APPLICATION_JSON_TYPE))
.readEntity(FirewallPolicyMetadata.class);
addAdditionalParams(metadata, dataCenterId);
return metadata;
}
public void update(String dataCenterId, String firewallPolicyId, FirewallPolicyRequest request) {
experimentalClient(POLICY_WITH_ID_URL)
.resolveTemplate(DATACENTER_ID, dataCenterId)
.resolveTemplate(POLICY_ID, firewallPolicyId)
.request()
.put(entity(request, APPLICATION_JSON_TYPE));
}
public void delete(String dataCenterId, String firewallPolicyId) {
experimentalClient(POLICY_WITH_ID_URL)
.resolveTemplate(DATACENTER_ID, dataCenterId)
.resolveTemplate(POLICY_ID, firewallPolicyId)
.request()
.delete();
}
private void addAdditionalParams(FirewallPolicyMetadata metadata, String dataCenterId) {
metadata.setDataCenterId(dataCenterId);
if (metadata.getId() == null && metadata.getLinks().size() != 0) {
String href = metadata.getLinks().get(0).getHref();
/* extract id from href */
Matcher matcher = Pattern
.compile(".*/([0-9a-f]*)")
.matcher(href);
if (matcher.find()) {
metadata.setId(matcher.group(1));
}
}
}
}