OW2 Consortium contrail

Rev

Rev 2538 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
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
}