| 1408 |
pharsh |
1 |
/*
|
|
|
2 |
* To change this template, choose Tools | Templates
|
|
|
3 |
* and open the template in the editor.
|
|
|
4 |
*/
|
|
|
5 |
package vep;
|
|
|
6 |
import java.security.cert.X509Certificate;
|
|
|
7 |
import java.sql.ResultSet;
|
|
|
8 |
import java.util.LinkedList;
|
|
|
9 |
import java.util.List;
|
| 3040 |
pharsh |
10 |
import org.apache.commons.lang3.StringEscapeUtils;
|
| 1408 |
pharsh |
11 |
import org.apache.log4j.Logger;
|
|
|
12 |
import org.json.simple.JSONObject;
|
|
|
13 |
import org.restlet.data.Form;
|
|
|
14 |
import org.restlet.data.MediaType;
|
|
|
15 |
import org.restlet.data.Status;
|
|
|
16 |
import org.restlet.representation.Representation;
|
|
|
17 |
import org.restlet.representation.StringRepresentation;
|
| 3040 |
pharsh |
18 |
import org.restlet.resource.Get;
|
| 1408 |
pharsh |
19 |
import org.restlet.resource.ResourceException;
|
|
|
20 |
import org.restlet.resource.ServerResource;
|
|
|
21 |
/**
|
|
|
22 |
*
|
|
|
23 |
* @author piyush
|
|
|
24 |
*/
|
|
|
25 |
public class restServerTemplateDetails extends ServerResource
|
|
|
26 |
{
|
|
|
27 |
private dbHandler db;
|
|
|
28 |
private Logger logger;
|
|
|
29 |
private String dbType;
|
|
|
30 |
private String oneuser;
|
|
|
31 |
private String onepass;
|
|
|
32 |
private String oneip;
|
|
|
33 |
private String oneport;
|
| 1893 |
pharsh |
34 |
private String vepProperties;
|
| 1408 |
pharsh |
35 |
|
|
|
36 |
public restServerTemplateDetails()
|
|
|
37 |
{
|
| 1893 |
pharsh |
38 |
vepProperties = VEPHelperMethods.getPropertyFile();
|
| 1408 |
pharsh |
39 |
logger = Logger.getLogger("VEP.restTemplateDetails");
|
| 1893 |
pharsh |
40 |
dbType = VEPHelperMethods.getProperty("vepdb.choice", logger, vepProperties);
|
| 1408 |
pharsh |
41 |
db = new dbHandler("restServerTemplateDetails", dbType);
|
| 1893 |
pharsh |
42 |
oneip = VEPHelperMethods.getProperty("one.ip", logger, vepProperties);
|
|
|
43 |
oneport = VEPHelperMethods.getProperty("one.port", logger, vepProperties);
|
| 1408 |
pharsh |
44 |
}
|
|
|
45 |
|
| 3040 |
pharsh |
46 |
@Get("json")
|
|
|
47 |
public Representation toValue()
|
| 1408 |
pharsh |
48 |
{
|
|
|
49 |
Form requestHeaders = (Form) getRequest().getAttributes().get("org.restlet.http.headers");
|
|
|
50 |
String contentType = requestHeaders.getFirstValue("Content-Type");
|
| 3040 |
pharsh |
51 |
String acceptType = requestHeaders.getFirstValue("Accept");
|
| 1408 |
pharsh |
52 |
Representation response = null;
|
| 3040 |
pharsh |
53 |
|
|
|
54 |
String templateID = ((String) getRequest().getAttributes().get("id"));
|
| 1408 |
pharsh |
55 |
String username = requestHeaders.getFirstValue("X-Username");
|
| 3040 |
pharsh |
56 |
|
| 1408 |
pharsh |
57 |
//username contained in the certificate overrides username in header
|
|
|
58 |
List<X509Certificate> certs = (List)getRequest().getAttributes().get("org.restlet.https.clientCertificates");
|
|
|
59 |
for(int i=0; certs != null && i < certs.size(); i++)
|
|
|
60 |
{
|
|
|
61 |
X509Certificate Cert = certs.get(i);
|
|
|
62 |
String certName = Cert.getSubjectX500Principal().getName();
|
|
|
63 |
logger.info("Received certificate with name: " + certName);
|
|
|
64 |
String[] certParts = certName.split(",");
|
|
|
65 |
for(int j=0; j<certParts.length; j++)
|
|
|
66 |
{
|
|
|
67 |
if(certParts[j].startsWith("CN="))
|
|
|
68 |
{
|
|
|
69 |
username = certParts[j].split("=")[1];
|
|
|
70 |
break;
|
|
|
71 |
}
|
|
|
72 |
}
|
|
|
73 |
logger.info("REST request came from: " + username);
|
|
|
74 |
}
|
|
|
75 |
if(certs == null)
|
|
|
76 |
{
|
|
|
77 |
logger.warn("Client certificates list is empty. Unauthenticated client.");
|
|
|
78 |
}
|
|
|
79 |
else if(certs.isEmpty())
|
|
|
80 |
{
|
|
|
81 |
logger.warn("Client certificates list is empty. Unauthenticated client. Size = 0.");
|
|
|
82 |
}
|
|
|
83 |
|
| 3040 |
pharsh |
84 |
if(acceptType != null)
|
|
|
85 |
{
|
|
|
86 |
if(acceptType.contains("html"))
|
|
|
87 |
response = toHtml(templateID, username);
|
|
|
88 |
}
|
|
|
89 |
else
|
|
|
90 |
{
|
|
|
91 |
//default rendering ...
|
|
|
92 |
response = toHtml(templateID, username);
|
|
|
93 |
}
|
|
|
94 |
//System.out.println(contentType);
|
|
|
95 |
return response;
|
|
|
96 |
}
|
|
|
97 |
|
|
|
98 |
public Representation toHtml(String templateID, String username) throws ResourceException
|
|
|
99 |
{
|
|
|
100 |
StringBuilder stringBuilder = new StringBuilder();
|
|
|
101 |
stringBuilder.append(VEPHelperMethods.getRESTwebHeader(false));
|
|
|
102 |
stringBuilder.append("Template <i>").append(templateID).append("</i> description is shown below<br><br>");
|
|
|
103 |
stringBuilder.append("<table style='width:1014px;hspace:5px;background:silver;border:0px;cellspacing:2px;padding:2px;font-family:Courier;font-size:10pt;color:black;'>");
|
|
|
104 |
stringBuilder.append("<tr>");
|
|
|
105 |
stringBuilder.append("<td valign='top' style='width:128px;background:white;'><img src='https://www.cise.ufl.edu/~pharsh/public/template.png'>");
|
|
|
106 |
stringBuilder.append("<td valign='top' align='left' bgcolor='white' width='*'>");
|
|
|
107 |
|
| 1408 |
pharsh |
108 |
String[] groups;
|
|
|
109 |
boolean isAdmin = false;
|
|
|
110 |
|
|
|
111 |
if(username == null)
|
|
|
112 |
{
|
|
|
113 |
this.setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
|
| 3040 |
pharsh |
114 |
stringBuilder.append("<b>User credentials missing ... can not display template details.</b><br><br>");
|
| 1408 |
pharsh |
115 |
}
|
|
|
116 |
else
|
|
|
117 |
{
|
|
|
118 |
try
|
|
|
119 |
{
|
|
|
120 |
ResultSet rs = db.query("select", "*", "user", "where username='" + username + "'");
|
|
|
121 |
if(rs.next())
|
|
|
122 |
{
|
|
|
123 |
int uid = rs.getInt("uid");
|
|
|
124 |
rs.close();
|
|
|
125 |
rs = db.query("select", "*", "ugroup", "where uid=" + uid + "");
|
|
|
126 |
String groupList = "";
|
|
|
127 |
while(rs.next())
|
|
|
128 |
{
|
|
|
129 |
groupList += rs.getString("gname") + ",";
|
|
|
130 |
}
|
|
|
131 |
groups = groupList.split(","); //the last index will be empty because of the trailing ,
|
|
|
132 |
logger.trace("GroupsList for user: " + username + " is: " + groupList);
|
|
|
133 |
for(int i=0; i<groups.length; i++)
|
|
|
134 |
{
|
| 2538 |
pharsh |
135 |
if(groups[i].equalsIgnoreCase("admin") || groups[i].equalsIgnoreCase("cloudadministrator"))
|
| 1408 |
pharsh |
136 |
{
|
|
|
137 |
isAdmin = true;
|
|
|
138 |
logger.trace("Setting isAdmin to true.");
|
|
|
139 |
break;
|
|
|
140 |
}
|
|
|
141 |
}
|
|
|
142 |
rs.close();
|
| 3040 |
pharsh |
143 |
if(isAdmin)
|
| 1408 |
pharsh |
144 |
{
|
| 3040 |
pharsh |
145 |
rs = db.query("select", "*", "vmachinetemplate", "where vmid=" + templateID);
|
| 1408 |
pharsh |
146 |
if(rs.next())
|
|
|
147 |
{
|
| 3040 |
pharsh |
148 |
// read the result set
|
|
|
149 |
stringBuilder.append("<div style='background:#CED1D6;font-weight:bold;'>");
|
|
|
150 |
stringBuilder.append("Group: ").append(rs.getString("gname")).append("<br>");
|
|
|
151 |
stringBuilder.append("Permission Bits: ").append(rs.getString("perm")).append("<br>");
|
|
|
152 |
stringBuilder.append("Application Name: ").append(rs.getString("appname")).append("<br>");
|
|
|
153 |
stringBuilder.append("State: ").append(rs.getString("state")).append("<br>");
|
|
|
154 |
stringBuilder.append("OVF Serial: ").append(rs.getInt("ovfsno")).append("<br>");
|
|
|
155 |
stringBuilder.append("OVF Element ID: ").append(rs.getString("ovfid")).append("<br>");
|
|
|
156 |
stringBuilder.append("</div><br>");
|
|
|
157 |
|
|
|
158 |
stringBuilder.append("<div style='white-space:normal;word-wrap:normal;background:#ECFCF3;overflow:auto;font-weight:bold;word-wrap:break-word;width:880px;font-family:Console;font-size:8pt;'>");
|
|
|
159 |
String content = rs.getString("descp");
|
|
|
160 |
content = StringEscapeUtils.escapeXml(content);
|
|
|
161 |
stringBuilder.append("<pre>").append(content).append("</pre>");
|
|
|
162 |
stringBuilder.append("</div>");
|
| 2521 |
pharsh |
163 |
}
|
| 3040 |
pharsh |
164 |
else
|
| 2521 |
pharsh |
165 |
{
|
| 3040 |
pharsh |
166 |
stringBuilder.append("<div style='background:#99CCCC;'>");
|
|
|
167 |
stringBuilder.append("No details found ...");
|
|
|
168 |
stringBuilder.append("</div>");
|
|
|
169 |
}
|
|
|
170 |
rs.close();
|
|
|
171 |
}
|
|
|
172 |
else
|
|
|
173 |
{
|
|
|
174 |
rs = db.query("select", "*", "vmachinetemplate", "where vmid=" + templateID);
|
|
|
175 |
if(rs.next())
|
|
|
176 |
{
|
|
|
177 |
// read the result set
|
|
|
178 |
if(uid == rs.getInt("uid"))
|
| 1408 |
pharsh |
179 |
{
|
| 3040 |
pharsh |
180 |
stringBuilder.append("<div style='background:#CED1D6;font-weight:bold;'>");
|
|
|
181 |
stringBuilder.append("Group: ").append(rs.getString("gname")).append("<br>");
|
|
|
182 |
stringBuilder.append("Permission Bits: ").append(rs.getString("perm")).append("<br>");
|
|
|
183 |
stringBuilder.append("Application Name: ").append(rs.getString("appname")).append("<br>");
|
|
|
184 |
stringBuilder.append("State: ").append(rs.getString("state")).append("<br>");
|
|
|
185 |
stringBuilder.append("OVF Serial: ").append(rs.getInt("ovfsno")).append("<br>");
|
|
|
186 |
stringBuilder.append("OVF Element ID: ").append(rs.getString("ovfid")).append("<br>");
|
|
|
187 |
stringBuilder.append("</div><br>");
|
|
|
188 |
|
|
|
189 |
stringBuilder.append("<div style='white-space:normal;word-wrap:normal;background:#ECFCF3;overflow:auto;font-weight:bold;word-wrap:break-word;width:880px;font-family:Console;font-size:8pt;'>");
|
|
|
190 |
String content = rs.getString("descp");
|
|
|
191 |
content = StringEscapeUtils.escapeXml(content);
|
|
|
192 |
stringBuilder.append("<pre>").append(content).append("</pre>");
|
|
|
193 |
stringBuilder.append("</div>");
|
| 1408 |
pharsh |
194 |
}
|
|
|
195 |
else
|
|
|
196 |
{
|
| 3040 |
pharsh |
197 |
stringBuilder.append("<div style='background:#99CCCC;'>");
|
|
|
198 |
stringBuilder.append("You are not the owner of the resource, access blocked ...");
|
|
|
199 |
stringBuilder.append("</div>");
|
| 1408 |
pharsh |
200 |
}
|
|
|
201 |
}
|
|
|
202 |
else
|
|
|
203 |
{
|
| 3040 |
pharsh |
204 |
stringBuilder.append("<div style='background:#99CCCC;'>");
|
|
|
205 |
stringBuilder.append("No details found ...");
|
|
|
206 |
stringBuilder.append("</div>");
|
| 1408 |
pharsh |
207 |
}
|
| 3040 |
pharsh |
208 |
rs.close();
|
| 1408 |
pharsh |
209 |
}
|
|
|
210 |
}
|
|
|
211 |
else
|
|
|
212 |
{
|
|
|
213 |
this.setStatus(Status.CLIENT_ERROR_PRECONDITION_FAILED);
|
| 3040 |
pharsh |
214 |
stringBuilder.append("<b>User not found ... can not display the template details.</b><br><br>");
|
| 1408 |
pharsh |
215 |
}
|
|
|
216 |
}
|
|
|
217 |
catch(Exception ex)
|
|
|
218 |
{
|
| 3040 |
pharsh |
219 |
stringBuilder.append("<B>SQL Query Error!! Details of exception follows ...</B>");
|
|
|
220 |
stringBuilder.append("<div style='border:1px;background:red;color:black;font-family:Times;font-size:9pt;'>");
|
|
|
221 |
stringBuilder.append(ex.getMessage());
|
| 1408 |
pharsh |
222 |
logger.debug("Exception caught: " + ex.getMessage());
|
| 3040 |
pharsh |
223 |
stringBuilder.append("</div>");
|
| 1408 |
pharsh |
224 |
}
|
|
|
225 |
}
|
| 3040 |
pharsh |
226 |
stringBuilder.append("</table><br>");
|
|
|
227 |
stringBuilder.append("Click on the banner image to go up one level<br>");
|
|
|
228 |
stringBuilder.append(VEPHelperMethods.getRESTwebFooter());
|
|
|
229 |
StringRepresentation value = new StringRepresentation(stringBuilder.toString(), MediaType.TEXT_HTML);
|
|
|
230 |
return value;
|
| 1408 |
pharsh |
231 |
}
|
|
|
232 |
}
|