package org.openstack.atlas.api.resources;
import org.openstack.atlas.cfg.PublicApiServiceConfigurationKeys;
import org.openstack.atlas.docs.loadbalancers.api.v1.Created;
import org.openstack.atlas.docs.loadbalancers.api.v1.SourceAddresses;
import java.util.Calendar;
import org.openstack.atlas.docs.loadbalancers.api.v1.LoadBalancerUsage;
import org.openstack.atlas.docs.loadbalancers.api.v1.LoadBalancers;
import org.openstack.atlas.docs.loadbalancers.api.v1.NetworkItem;
import org.openstack.atlas.docs.loadbalancers.api.v1.AccessList;
import java.util.ArrayList;
import org.openstack.atlas.docs.loadbalancers.api.v1.Cluster;
import org.openstack.atlas.docs.loadbalancers.api.v1.LoadBalancer;
import org.openstack.atlas.docs.loadbalancers.api.v1.VirtualIps;
import org.openstack.atlas.docs.loadbalancers.api.v1.Nodes;
import org.openstack.atlas.docs.loadbalancers.api.v1.ConnectionLogging;
import org.openstack.atlas.docs.loadbalancers.api.v1.SessionPersistence;
import org.openstack.atlas.docs.loadbalancers.api.v1.HealthMonitor;
import org.openstack.atlas.docs.loadbalancers.api.v1.Node;
import org.openstack.atlas.docs.loadbalancers.api.v1.ConnectionThrottle;
import org.openstack.atlas.docs.loadbalancers.api.v1.HealthMonitorType;
import org.openstack.atlas.docs.loadbalancers.api.v1.IpVersion;
import org.openstack.atlas.docs.loadbalancers.api.v1.LoadBalancerUsageRecord;
import org.openstack.atlas.docs.loadbalancers.api.v1.NetworkItemType;
import org.openstack.atlas.docs.loadbalancers.api.v1.NodeCondition;
import org.openstack.atlas.docs.loadbalancers.api.v1.NodeStatus;
import org.openstack.atlas.docs.loadbalancers.api.v1.PersistenceType;
import org.openstack.atlas.docs.loadbalancers.api.v1.Updated;
import org.openstack.atlas.docs.loadbalancers.api.v1.VirtualIp;
import org.openstack.atlas.docs.loadbalancers.api.v1.VipType;
import org.openstack.atlas.api.resources.providers.CommonDependencyProvider;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import org.openstack.atlas.api.helpers.ConfigurationHelper;
import org.openstack.atlas.docs.loadbalancers.api.v1.Errorpage;
import org.openstack.atlas.docs.loadbalancers.api.v1.SslTermination;
import org.w3.atom.Link;
public class StubResource extends CommonDependencyProvider {
@GET
@Path("loadbalancers")
public Response stubLoadBalancers() {
LoadBalancers loadbalancers = new LoadBalancers();
loadbalancers.getLoadBalancers().add(newLoadBalancer(1, "LB1"));
loadbalancers.getLoadBalancers().add(newLoadBalancer(2, "LB2"));
List<Link> links = loadbalancers.getLinks();
Link link = new Link();
link.setHref("someHref");
link.setRel("someRel");
links.add(link);
link = new Link();
link.setHref("anotherHref");
link.setRel("someOtherRel");
links.add(link);
return Response.status(200).entity(loadbalancers).build();
}
@GET
@Path("loadbalancer")
public Response stubLoadBalancer() {
LoadBalancer lb = newLoadBalancer(1, "LB1");
return Response.status(200).entity(lb).build();
}
@GET
@Path("virtualip")
public Response stubVirtualIp() {
VirtualIp virtualIp = newVip(1, "127.0.0.1");
return Response.status(200).entity(virtualIp).build();
}
@GET
@Path("virtualips")
public Response stubVirtualIps() {
VirtualIps vips = new VirtualIps();
vips.getVirtualIps().add(newVip(1, "127.0.0.1"));
vips.getVirtualIps().add(newVip(2, "127.0.0.2"));
return Response.status(200).entity(vips).build();
}
@GET
@Path("connectionthrottle")
public Response stubConnectionThrottle() {
ConnectionThrottle ct;
ct = new org.openstack.atlas.docs.loadbalancers.api.v1.ConnectionThrottle();
ct.setMaxConnectionRate(100);
ct.setMaxConnections(200);
ct.setMinConnections(300);
ct.setRateInterval(60);
return Response.status(200).entity(ct).build();
}
@GET
@Path("node")
public Response stubNode() {
Node node;
node = newNode(64, 80, "127.0.0.1");
return Response.status(200).entity(node).build();
}
@GET
@Path("uri")
public Response uriInfo() {
String uri = getRequestStateContainer().getUriInfo().getAbsolutePath().toString();
SourceAddresses sa = new SourceAddresses();
sa.setIpv4Public(uri);
return Response.status(200).entity(sa).build();
}
@GET
@Path("healthmonitor")
public Response stubHealthMonitor() {
HealthMonitor hm;
hm = new HealthMonitor();
hm.setAttemptsBeforeDeactivation(10);
hm.setBodyRegex(".*");
hm.setDelay(60);
hm.setId(64);
hm.setPath("/");
hm.setStatusRegex(".*");
hm.setTimeout(100);
hm.setType(HealthMonitorType.HTTP);
return Response.status(200).entity(hm).build();
}
@GET
@Path("sessionpersistence")
public Response stubSessionPersistence() {
SessionPersistence sp;
sp = new SessionPersistence();
sp.setPersistenceType(PersistenceType.HTTP_COOKIE);
return Response.status(200).entity(sp).build();
}
@GET
@Path("connectionlogging")
public Response stubConnectionLogging() {
ConnectionLogging cl;
cl = new ConnectionLogging();
cl.setEnabled(Boolean.TRUE);
return Response.status(200).entity(cl).build();
}
@GET
@Path("nodes")
public Response stubNodes() {
List<Node> nodeList;
Nodes nodes;
Node node;
nodes = new Nodes();
nodeList = nodes.getNodes();
nodeList.add(newNode(64, 80, "127.0.0.1"));
nodeList.add(newNode(64, 443, "127.0.0.2"));
return Response.status(200).entity(nodes).build();
}
@GET
@Path("accesslist")
public Response stubAccessList() {
AccessList al = new AccessList();
al.getNetworkItems().add(newNetworkItem(1, "10.0.0.0/8"));
al.getNetworkItems().add(newNetworkItem(2, "192.168.0.0/24"));
return Response.status(200).entity(al).build();
}
@GET
@Path("updated")
public Response stubUpdated() {
Calendar now = Calendar.getInstance();
Updated updated = new Updated();
updated.setTime(now);
return Response.status(200).entity(updated).build();
}
@GET
@Path("errorpage")
public Response stubErrorPage() {
String format = "<html><big><big><big><big><big><big>%s</big></big></big></big></big></big></html>";
String msg = String.format(format, "<b>Error or something happened</b>");
Errorpage errorpage = new Errorpage();
errorpage.setContent(msg);
return Response.status(200).entity(errorpage).build();
}
@GET()
@Path("ssltermination")
public Response stubSslTerm() {
if (!ConfigurationHelper.isAllowed(restApiConfiguration, PublicApiServiceConfigurationKeys.ssl_termination)) {
return Response.status(Response.Status.BAD_REQUEST).build();
}
String key = ""
+ "-----BEGIN RSA PRIVATE KEY-----\n"
+ "MIIEpAIBAAKCAQEAwIudSMpRZx7TS0/AtDVX3DgXwLD9g+XrNaoazlhwhpYALgzJ\n"
+ "LAbAnOxT6OT0gTpkPus/B7QhW6y6Auf2cdBeW31XoIwPsSoyNhxgErGBxzNARRB9\n"
+ "lI1HCa1ojFrcULluj4W6rpaOycI5soDBJiJHin/hbZBPZq6vhPCuNP7Ya48Zd/2X\n"
+ "CQ9ft3XKfmbs1SdrdROIhigse/SGRbMrCorn/vhNIuohr7yOlHG3GcVcUI9k6ZSZ\n"
+ "BbqF+ZA4ApSF/Q6/cumieEgofhkYbx5fg02s9Jwr4IWnIR2bSHs7UQ6sVgKYzjs7\n"
+ "Pd3Unpa74jFw6/H6shABoO2CIYLotGmQbFgnpwIDAQABAoIBAQCBCQ+PCIclJHNV\n"
+ "tUzfeCA5ZR4F9JbxHdRTUnxEbOB8UWotckQfTScoAvj4yvdQ42DrCZxj/UOdvFOs\n"
+ "PufZvlp91bIz1alugWjE+p8n5+2hIaegoTyHoWZKBfxak0myj5KYfHZvKlbmv1ML\n"
+ "XV4TwEVRfAIG+v87QTY/UUxuF5vR+BpKIbgUJLfPUFFvJUdl84qsJ44pToxaYUd/\n"
+ "h5YAGC00U4ay1KVSAUnTkkPNZ0lPG/rWU6w6WcTvNRLMd8DzFLTKLOgQfHhbExAF\n"
+ "+sXPWjWSzbBRP1O7fHqq96QQh4VFiY/7w9W+sDKQyV6Ul17OSXs6aZ4f+lq4rJTI\n"
+ "1FG96YiBAoGBAO1tiH0h1oWDBYfJB3KJJ6CQQsDGwtHo/DEgznFVP4XwEVbZ98Ha\n"
+ "BfBCn3sAybbaikyCV1Hwj7kfHMZPDHbrcUSFX7quu/2zPK+wO3lZKXSyu4YsguSa\n"
+ "RedInN33PpdnlPhLyQdWSuD5sVHJDF6xn22vlyxeILH3ooLg2WOFMPmVAoGBAM+b\n"
+ "UG/a7iyfpAQKYyuFAsXz6SeFaDY+ZYeX45L112H8Pu+Ie/qzon+bzLB9FIH8GP6+\n"
+ "QpQgmm/p37U2gD1zChUv7iW6OfQBKk9rWvMpfRF6d7YHquElejhizfTZ+ntBV/VY\n"
+ "dOYEczxhrdW7keLpatYaaWUy/VboRZmlz/9JGqVLAoGAHfqNmFc0cgk4IowEj7a3\n"
+ "tTNh6ltub/i+FynwRykfazcDyXaeLPDtfQe8gVh5H8h6W+y9P9BjJVnDVVrX1RAn\n"
+ "biJ1EupLPF5sVDapW8ohTOXgfbGTGXBNUUW+4Nv+IDno+mz/RhjkPYHpnM0I7c/5\n"
+ "tGzOZsC/2hjNgT8I0+MWav0CgYEAuULdJeQVlKalI6HtW2Gn1uRRVJ49H+LQkY6e\n"
+ "W3+cw2jo9LI0CMWSphNvNrN3wIMp/vHj0fHCP0pSApDvIWbuQXfzKaGko7UCf7rK\n"
+ "f6GvZRCHkV4IREBAb97j8bMvThxClMNqFfU0rFZyXP+0MOyhFQyertswrgQ6T+Fi\n"
+ "2mnvKD8CgYAmJHP3NTDRMoMRyAzonJ6nEaGUbAgNmivTaUWMe0+leCvAdwD89gzC\n"
+ "TKbm3eDUg/6Va3X6ANh3wsfIOe4RXXxcbcFDk9R4zO2M5gfLSjYm5Q87EBZ2hrdj\n"
+ "M2gLI7dt6thx0J8lR8xRHBEMrVBdgwp0g1gQzo5dAV88/kpkZVps8Q==\n"
+ "-----END RSA PRIVATE KEY-----\n";
String crt = "-----BEGIN CERTIFICATE-----\n"
+ "MIIEXTCCA0WgAwIBAgIGATTEAjK3MA0GCSqGSIb3DQEBBQUAMIGDMRkwFwYDVQQD\n"
+ "ExBUZXN0IENBIFNUdWIgS2V5MRcwFQYDVQQLEw5QbGF0Zm9ybSBMYmFhczEaMBgG\n"
+ "A1UEChMRUmFja3NwYWNlIEhvc3RpbmcxFDASBgNVBAcTC1NhbiBBbnRvbmlvMQ4w\n"
+ "DAYDVQQIEwVUZXhhczELMAkGA1UEBhMCVVMwHhcNMTIwMTA5MTk0NjQ1WhcNMTQw\n"
+ "MTA4MTk0NjQ1WjCBgjELMAkGA1UEBhMCVVMxDjAMBgNVBAgTBVRleGFzMRQwEgYD\n"
+ "VQQHEwtTYW4gQW50b25pbzEaMBgGA1UEChMRUmFja3NwYWNlIEhvc3RpbmcxFzAV\n"
+ "BgNVBAsTDlBsYXRmb3JtIExiYWFzMRgwFgYDVQQDEw9UZXN0IENsaWVudCBLZXkw\n"
+ "ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAi51IylFnHtNLT8C0NVfc\n"
+ "OBfAsP2D5es1qhrOWHCGlgAuDMksBsCc7FPo5PSBOmQ+6z8HtCFbrLoC5/Zx0F5b\n"
+ "fVegjA+xKjI2HGASsYHHM0BFEH2UjUcJrWiMWtxQuW6Phbqulo7JwjmygMEmIkeK\n"
+ "f+FtkE9mrq+E8K40/thrjxl3/ZcJD1+3dcp+ZuzVJ2t1E4iGKCx79IZFsysKiuf+\n"
+ "+E0i6iGvvI6UcbcZxVxQj2TplJkFuoX5kDgClIX9Dr9y6aJ4SCh+GRhvHl+DTaz0\n"
+ "nCvghachHZtIeztRDqxWApjOOzs93dSelrviMXDr8fqyEAGg7YIhgui0aZBsWCen\n"
+ "AgMBAAGjgdUwgdIwgbAGA1UdIwSBqDCBpYAUNpx1Pc6cGA7KqEwHMmHBTZMA7lSh\n"
+ "gYmkgYYwgYMxGTAXBgNVBAMTEFRlc3QgQ0EgU1R1YiBLZXkxFzAVBgNVBAsTDlBs\n"
+ "YXRmb3JtIExiYWFzMRowGAYDVQQKExFSYWNrc3BhY2UgSG9zdGluZzEUMBIGA1UE\n"
+ "BxMLU2FuIEFudG9uaW8xDjAMBgNVBAgTBVRleGFzMQswCQYDVQQGEwJVU4IBATAd\n"
+ "BgNVHQ4EFgQULueOfsjZZOHwJHZwBy6u0swnpccwDQYJKoZIhvcNAQEFBQADggEB\n"
+ "AFNuqSVUaotUJoWDv4z7Kbi6JFpTjDht5ORw4BdVYlRD4h9DACAFzPrPV2ym/Osp\n"
+ "hNMdZq6msZku7MdOSQVhdeGWrSNk3M8O9Hg7cVzPNXOF3iNoo3irQ5tURut44xs4\n"
+ "Ww5YWQqS9WyUY5snD8tm7Y1rQTPfhg+678xIq/zWCv/u+FSnfVv1nlhLVQkEeG/Y\n"
+ "gh1uMaTIpUKTGEjIAGtpGP7wwIcXptR/HyfzhTUSTaWc1Ef7zoKT9LL5z3IV1hC2\n"
+ "jVWz+RwYs98LjMuksJFoHqRfWyYhCIym0jb6GTwaEmpxAjc+d7OLNQdnoEGoUYGP\n"
+ "YjtfkRYg265ESMA+Kww4Xy8=\n"
+ "-----END CERTIFICATE-----\n";
String imd = "-----BEGIN CERTIFICATE-----\n"
+ "MIIDtTCCAp2gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzEZMBcGA1UEAxMQVGVz\n"
+ "dCBDQSBTVHViIEtleTEXMBUGA1UECxMOUGxhdGZvcm0gTGJhYXMxGjAYBgNVBAoT\n"
+ "EVJhY2tzcGFjZSBIb3N0aW5nMRQwEgYDVQQHEwtTYW4gQW50b25pbzEOMAwGA1UE\n"
+ "CBMFVGV4YXMxCzAJBgNVBAYTAlVTMB4XDTEyMDEwOTE5NDU0OVoXDTE0MDEwODE5\n"
+ "NDU0OVowgYMxGTAXBgNVBAMTEFRlc3QgQ0EgU1R1YiBLZXkxFzAVBgNVBAsTDlBs\n"
+ "YXRmb3JtIExiYWFzMRowGAYDVQQKExFSYWNrc3BhY2UgSG9zdGluZzEUMBIGA1UE\n"
+ "BxMLU2FuIEFudG9uaW8xDjAMBgNVBAgTBVRleGFzMQswCQYDVQQGEwJVUzCCASIw\n"
+ "DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANNh55lwTVwQvNoEZjq1zGdYz9jA\n"
+ "XXdjizn8AJhjHLOAallfPtvCfTEgKanhdoyz5FnhQE8HbDAop/KNS1lN2UMvdl5f\n"
+ "ZNLTSjJrNtedqxQwxN/i3bpyBxNVejUH2NjV1mmyj+5CJYwCzWalvI/gLPq/A3as\n"
+ "O2EQqtf3U8unRgn0zXLRdYxV9MrUzNAmdipPNvNrsVdrCgA42rgF/8KsyRVQfJCX\n"
+ "fN7PGCfrsC3YaUvhymraWxNnXIzMYTNa9wEeBZLUw8SlEtpa1Zsvui+TPXu3USNZ\n"
+ "VnWH8Lb6ENlnoX0VBwo62fjOG3JzhNKoJawi3bRqyDdINOvafr7iPrrs/T8CAwEA\n"
+ "AaMyMDAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUNpx1Pc6cGA7KqEwHMmHB\n"
+ "TZMA7lQwDQYJKoZIhvcNAQEFBQADggEBAMoRgH3iTG3t317viLKoY+lNMHUgHuR7\n"
+ "b3mn9MidJKyYVewe6hCDIN6WY4fUojmMW9wFJWJIo0hRMNHL3n3tq8HP2j20Mxy8\n"
+ "acPdfGZJa+jiBw72CrIGdobKaFduIlIEDBA1pNdZIJ+EulrtqrMesnIt92WaypIS\n"
+ "8JycbIgDMCiyC0ENHEk8UWlC6429c7OZAsplMTbHME/1R4btxjkdfrYZJjdJ2yL2\n"
+ "8cjZDUDMCPTdW/ycP07Gkq30RB5tACB5aZdaCn2YaKC8FsEdhff4X7xEOfOEHWEq\n"
+ "SRxADDj8Lx1MT6QpR07hCiDyHfTCtbqzI0iGjX63Oh7xXSa0f+JVTa8=\n"
+ "-----END CERTIFICATE-----\n";
SslTermination sslTermination = new SslTermination();
sslTermination.setCertificate(crt);
sslTermination.setPrivatekey(key);
sslTermination.setIntermediateCertificate(imd);
sslTermination.setEnabled(true);
sslTermination.setSecurePort(443);
sslTermination.setSecureTrafficOnly(false);
return Response.status(Response.Status.OK).entity(sslTermination).build();
}
private Node newNode(Integer id, Integer port, String address) {
Node node;
node = new Node();
node.setAddress(address);
node.setCondition(NodeCondition.ENABLED);
node.setId(id);
node.setPort(port);
node.setStatus(NodeStatus.ONLINE);
node.setWeight(1);
return node;
}
private VirtualIp newVip(Integer id, String address) {
VirtualIp vip;
vip = new VirtualIp();
vip.setId(id);
vip.setAddress(address);
vip.setIpVersion(IpVersion.IPV4);
vip.setType(VipType.PUBLIC);
return vip;
}
private NetworkItem newNetworkItem(Integer id, String address) {
NetworkItem n = new NetworkItem();
n.setId(id);
n.setAddress(address);
n.setIpVersion(IpVersion.IPV4);
n.setType(NetworkItemType.DENY);
return n;
}
private LoadBalancer newLoadBalancer(Integer id, String name) {
List<Node> nodes = new ArrayList<Node>();
List<VirtualIp> vips = new ArrayList<VirtualIp>();
List<NetworkItem> accessList = new ArrayList<NetworkItem>();
LoadBalancer lb = new LoadBalancer();
Created created = new Created();
Updated updated = new Updated();
created.setTime(Calendar.getInstance());
updated.setTime(Calendar.getInstance());
ConnectionThrottle ct = new ConnectionThrottle();
Cluster cl = new Cluster();
ConnectionLogging cnl = new ConnectionLogging();
cnl.setEnabled(Boolean.TRUE);
ct.setMaxConnectionRate(100);
ct.setMaxConnections(200);
ct.setMinConnections(300);
ct.setRateInterval(60);
cl.setName("TestCluster");
lb.setName(name);
lb.setAlgorithm("RANDOM");
lb.setCluster(cl);
lb.setConnectionLogging(cnl);
lb.setConnectionThrottle(ct);
lb.setPort(80);
lb.setProtocol("HTTP");
lb.setStatus("BUILD");
lb.setCreated(created);
lb.setUpdated(updated);
nodes.add(newNode(1, 80, "127.0.0.10"));
nodes.add(newNode(1, 443, "127.0.0.20"));
vips.add(newVip(1, "127.0.0.1"));
vips.add(newVip(2, "127.0.0.2"));
lb.setVirtualIps(vips);
lb.setNodes(nodes);
SessionPersistence sp = new SessionPersistence();
sp.setPersistenceType(PersistenceType.HTTP_COOKIE);
lb.setSessionPersistence(sp);
accessList.add(newNetworkItem(1, "10.0.0.0/8"));
accessList.add(newNetworkItem(2, "192.168.0.0/24"));
lb.setAccessList(accessList);
LoadBalancerUsage lu = new LoadBalancerUsage();
lu.setLoadBalancerId(id);
lu.setLoadBalancerName(name);
lu.getLoadBalancerUsageRecords().add(newLoadBalancerUsageRecord(1));
lu.getLoadBalancerUsageRecords().add(newLoadBalancerUsageRecord(2));
lb.setLoadBalancerUsage(lu);
return lb;
}
private LoadBalancerUsageRecord newLoadBalancerUsageRecord(Integer id) {
LoadBalancerUsageRecord ur = new LoadBalancerUsageRecord();
ur.setAverageNumConnections(3.0);
ur.setId(id);
ur.setEventType("EmptyEvent");
ur.setIncomingTransfer(new Long(20));
ur.setNumPolls(50);
ur.setNumVips(30);
ur.setOutgoingTransfer(new Long(30));
ur.setEndTime(Calendar.getInstance());
return ur;
}
}