/** * Copyright (c) 2011-2014, OpenIoT * * This file is part of OpenIoT. * * OpenIoT is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, version 3 of the License. * * OpenIoT is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with OpenIoT. If not, see <http://www.gnu.org/licenses/>. * * Contact: OpenIoT mailto: info@openiot.eu * @author Behnaz Bostanipour * @author Timotee Maret * @author Julien Eberle */ package org.openiot.gsn.http.ac; import org.openiot.gsn.Main; import org.apache.log4j.Logger; import javax.servlet.ServletException; import javax.servlet.http.*; import java.io.IOException; import java.io.PrintWriter; import java.sql.SQLException; import java.util.Vector; /** * Created by IntelliJ IDEA. * User: Behnaz Bostanipour * Date: Apr 22, 2010 * Time: 1:03:07 PM * To change this template use File | Settings | File Templates. */ public class MyUserUpdateServlet extends HttpServlet { private static transient Logger logger = Logger.getLogger( MyUserUpdateServlet.class ); /****************************************** Servlet Methods*******************************************/ /****************************************************************************************************/ public void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); // Get the session HttpSession session = req.getSession(); User user = (User) session.getAttribute("user"); if (user == null) { this.redirectToLogin(req, res); } else { this.checkSessionScheme(req,res); this.printHeader(out); this.printForm(out,user); } } public void doPost(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException { doGet(req,res); } /****************************************** HTML Printing Methods*******************************************/ /***********************************************************************************************************/ private void printHeader(PrintWriter out) { out.println("<HTML>"); out.println("<HEAD>"); //For Java Script!! //this.printEmbeddedJS(out); out.println("<script type=\"text/javascript\" src=\"/js/acjavascript.js\"></script>"); out.println("<TITLE>User Update</TITLE>"); out.println(" <link rel=\"stylesheet\" media=\"screen\" type=\"text/css\" href=\"/style/acstyle.css\"/>"); //printStyle(out); out.println("</HEAD>"); out.println("<body onload=\"loadScroll()\" onunload=\"saveScroll()\" >"); out.println("<div id=\"container\">"); out.println("<div class=box>"); } ///gsn/MyLogoutHandlerServlet private void printForm(PrintWriter out,User user) { ConnectToDB ctdb = null; try { ctdb = new ConnectToDB(); this.printLayoutMastHead(out,user); this.printLayoutContent(out,user,ctdb); this.printLayoutSideBar(out,user,ctdb); this.printLayoutFooter(out); } catch(Exception e) { logger.error("ERROR IN printForm"); logger.error(e.getMessage(),e); } finally { if(ctdb!=null) { ctdb.closeStatement(); ctdb.closeConnection(); } } } private void printLayoutMastHead(PrintWriter out, User user) { out.println("<div id=\"masthead\">"); out.println("<div class=\"image_float\"><img src=\"/style/gsn-mark.png\" alt=\"GSN logo\" /></div><br>"); out.println("<h1>Update Access Rights Form </h1>"); out.println("<div class=\"spacer\"></div>"); out.println("</div>"); out.println("<div id=\"mastheadborder\">"); this.printLinks(out); this.printUserName(out, user); out.println("<br><br>"); out.println("</div>"); } private void printLayoutContent(PrintWriter out, User user, ConnectToDB ctdb)throws SQLException { //out.println("<div id=\"content\">"); out.println("<div id=\"twocolumnscontent\">"); this.printGroupSection(out, user, ctdb); out.println("</div>"); } private void printLayoutSideBar(PrintWriter out, User user, ConnectToDB ctdb)throws SQLException { out.println("<div id=\"sidebar\">"); this.printDataSourceSection(out, user, ctdb); out.println("</div>"); } private void printLayoutFooter(PrintWriter out) { out.println("<div id=\"twocolumnsfooter\">"); out.println("<p align=center><FONT COLOR=#000000>Powered by <a class=nonedecolink href=\"http://globalsn.sourceforge.net/\">GSN</a>, Distributed Information Systems Lab, EPFL 2010</p>"); out.println("</div>");//footer out.println("</div>");//box out.println("</div>");//container out.println("<BR>"); //out.println("<HR>"); out.println("</BODY>"); out.println("</html>"); } private void printDataSourceSection(PrintWriter out, User user, ConnectToDB ctdb) throws SQLException { out.println("<h2>"); out.println("You have access to these virtual sensors : "); out.println("</h2>"); out.println("<p>"); this.printUserDataSourceList(out,user,ctdb); out.println("</p>"); out.println("<h2>"); out.println("Other virtual sensors in the system :"); out.println("</h2>"); out.println("<p>"); this.printRemainingDataSourcesList(out,user,ctdb); out.println("</p>"); } private void printGroupSection(PrintWriter out, User user, ConnectToDB ctdb) throws SQLException { out.println("<h2>"); out.println("You have access to these groups :"); out.println("</h2>"); out.println("<p>"); this.printUserGroupList(out,user,ctdb); out.println("</p>"); out.println("<h2>"); out.println("Other groups in the system :"); out.println("</h2>"); out.println("<p>"); this.printRemainingGroupsList(out,user,ctdb); out.println("</p>"); } private void printLinks(PrintWriter out) { //out.println("<a class=linkclass href=\"/\">GSN home</a>"); //out.println("<a class=linkclass href=/gsn/MyAccessRightsManagementServlet>access rights management</a>"); out.println("<a class=linkclass href=\"/gsn/MyUserAccountManagementServlet\">User account</a>"); //out.println("<a class=linkclass href=\"/gsn/MyLoginHandlerServlet\">login</a>"); out.println("<a class=linkclass href=\"/gsn/MyLogoutHandlerServlet\">logout</a>"); } private void printUserName(PrintWriter out, User user) { //String username=user.getUserName(); out.println("<p id=\"login\">logged in as : "+user.getUserName()+"</p>"); } private void printUserGroupList(PrintWriter out,User user,ConnectToDB ctdb)throws SQLException { Group group=null; String groupName=null; String userName=user.getUserName(); if(user.getGroupList().size()==0) { out.println("<table class=transparenttable>"); out.println("<tr><td><FONT COLOR=#000000>No group is available.</td></tr>"); out.println("</table>"); } else { out.println("<table>"); out.println("<tr>"); out.println("<th>group name</th>"); out.println("<th>group structure</th>"); out.println("<th>updates</th>"); out.println("</tr>"); for(int i=0; i<user.getGroupList().size();i++) { out.println("<tr>"); group=(Group)(user.getGroupList().get(i)); groupName=group.getGroupName(); out.println("<td>"+ groupName +"</td>"); this.printGroupStructureLink(out, groupName); if(ctdb.valueExistsForThisColumnUnderTwoConditions(new Column("ISUSERWAITING","yes"),new Column("GROUPNAME",groupName),new Column("USERNAME",userName),"ACUSER_ACGROUP")==false) { out.println("<FORM ACTION=/gsn/MyUpdateUserWaitingForGroupServlet METHOD=POST>"); out.println("<INPUT TYPE=HIDDEN NAME=groupname VALUE="+groupName+">"); out.println("<INPUT TYPE=HIDDEN NAME=deletegroup VALUE=Yes>"); out.println("<td style=text-align:center><INPUT TYPE=SUBMIT class= buttonstyle VALUE=\"delete\"></td>"); out.println("</FORM>"); } else { out.println("<td>"+"<FONT COLOR=#0000FF>in updates waiting list!</td>"); } out.println("</tr>"); } out.println("</table>"); } } private void printGroupStructureLink(PrintWriter out, String groupname) { String groupurl="/gsn/MyGroupHtmlResultSetServlet?groupname="+groupname; /*out.println("<td><a href="+groupurl+" onClick=\"poptastic(this.href); return false;\">display</a></td>");*/ out.println("<ul class=displaylinkul >"); out.println("<td style=text-align:center><LI class=displaylinkli><a href="+groupurl+" onClick=\"poptastic(this.href); return false;\">    view    </a></LI>"); out.println("</td>"); out.println("</ul>"); } private void printRemainingGroupsList(PrintWriter out,User user,ConnectToDB ctdb)throws SQLException { Vector remainingGroupList =ctdb.getGroupListsDifference(ctdb.getGroupList(),user.getGroupList()); Group group=null; String groupName=null; String userName=user.getUserName(); if(remainingGroupList.size()==0) { out.println("<table class =transparenttable>"); out.println("<tr><td><FONT COLOR=#000000>No group is available.</td></tr>"); out.println("</table>"); } else { out.println("<table>"); out.println("<tr>"); out.println("<th>group name</th>"); out.println("<th>group structure</th>"); out.println("<th>updates</th>"); out.println("</tr>"); for(int i=0; i<remainingGroupList.size();i++) { group=(Group)(remainingGroupList.get(i)); groupName=group.getGroupName(); out.println("<tr>"); out.println("<td>"+ groupName +"</td>"); this.printGroupStructureLink(out, groupName); if(ctdb.valueExistsForThisColumnUnderTwoConditions(new Column("ISUSERWAITING","yes"),new Column("GROUPNAME",groupName),new Column("USERNAME",userName),"ACUSER_ACGROUP")==false) { out.println("<FORM ACTION=/gsn/MyUpdateUserWaitingForGroupServlet METHOD=POST>"); out.println("<INPUT TYPE=HIDDEN NAME=groupname VALUE="+groupName+">"); out.println("<INPUT TYPE=HIDDEN NAME=addgroup VALUE=Yes>"); out.println("<td style=text-align:center><INPUT TYPE=SUBMIT class= buttonstyle VALUE=\"add\"></td>"); out.println("</FORM>"); } else { out.println("<td>"+"<FONT COLOR=#0000FF>in updates waiting list!</td>"); } out.println("</tr>"); } out.println("</table>"); } } private void printUserDataSourceList(PrintWriter out,User user,ConnectToDB ctdb)throws SQLException { DataSource dataSource=null; String dataSourceName=null; String dataSourceType=null; if(user.getDataSourceList().size()==0) { out.println("<table class =transparenttable>"); out.println("<tr><td><FONT COLOR=#000000>No virtaul sensor is available.</td></tr>"); out.println("</table>"); } else { out.println("<table>"); out.println("<tr><th> virtual sensor name </th>"); out.println("<th> access right</th><th> time limitation</th></tr>"); for(int j=0;j<user.getDataSourceList().size();j++) { dataSource=(DataSource)user.getDataSourceList().get(j); dataSourceName=dataSource.getDataSourceName(); dataSourceType=dataSource.getDataSourceType(); if(dataSourceType.equals("4")) { out.println("<tr><td>" + dataSourceName + " </td>"); out.println("<td>own</td><td> unlimited </td></tr>"); } else { if(ctdb.valueExistsForThisColumnUnderTwoConditions(new Column("ISUSERWAITING","yes"),new Column("USERNAME",user.getUserName()),new Column("DATASOURCENAME",dataSourceName), "ACUSER_ACDATASOURCE")) { out.println("<tr><td>" + dataSourceName + " </td>"); } else { out.println("<FORM ACTION=/gsn/MyUpdateUserWaitingForDataSourceServlet METHOD=POST>"); out.println("<tr><td>" + dataSourceName + " </td>"); if(dataSourceType.charAt(0)=='1') { out.println("<td><INPUT CHECKED TYPE=RADIO NAME="+dataSourceName+" VALUE= 1>read"); out.println("<INPUT TYPE=RADIO NAME="+dataSourceName+" VALUE= 2>write "); out.println("<INPUT TYPE=RADIO NAME="+dataSourceName+" VALUE=3>read/write"); out.println("<INPUT TYPE=RADIO NAME="+dataSourceName+" VALUE=0>delete "); } if(dataSourceType.charAt(0)=='2') { out.println("<td><INPUT TYPE=RADIO NAME="+dataSourceName+" VALUE= 1> read "); out.println("<INPUT CHECKED TYPE=RADIO NAME="+dataSourceName+" VALUE= 2> write "); out.println("<INPUT TYPE=RADIO NAME="+dataSourceName+" VALUE=3> read/write "); out.println("<INPUT TYPE=RADIO NAME="+dataSourceName+" VALUE=0> delete "); } if(dataSourceType.charAt(0)=='3') { out.println("<td><INPUT TYPE=RADIO NAME="+dataSourceName+" VALUE= 1> read "); out.println("<INPUT TYPE=RADIO NAME="+dataSourceName+" VALUE= 2> write "); out.println("<INPUT CHECKED TYPE=RADIO NAME="+dataSourceName+" VALUE=3> read/write "); out.println("<INPUT TYPE=RADIO NAME="+dataSourceName+" VALUE=0> delete "); } } if(ctdb.valueExistsForThisColumnUnderTwoConditions(new Column("ISUSERWAITING","yes"),new Column("USERNAME",user.getUserName()),new Column("DATASOURCENAME",dataSourceName), "ACUSER_ACDATASOURCE")) { out.println("<td>"+"<FONT COLOR=#0000FF>in updates waiting list!</td></tr>"); } else { out.println("   <INPUT TYPE=SUBMIT class= buttonstyle VALUE=\"update\"></td>"); out.println("</FORM>"); } // get the time limitation for this datasource String time = ctdb.getValueForOneColumnUnderTwoConditions(new Column("DEADLINE"), new Column("USERNAME", user.getUserName()), new Column("DATASOURCENAME", dataSourceName), "ACACCESS_DURATION"); if (time == null) time = "unlimited"; out.println("<td>" +time+"</tr></td>"); } } out.println("</table>"); } } private void printRemainingDataSourcesList(PrintWriter out,User user,ConnectToDB ctdb)throws SQLException { DataSource dataSource=null; String dataSourceName=null; Vector remainingDataSourcesList=ctdb.getDataSourceListsDifference(this.dataSourceVectorForDataSourceNames(ctdb.getValuesVectorForOneColumnUnderOneCondition(new Column("DATASOURCENAME"),new Column("ISCANDIDATE","no"),"ACDATASOURCE")),user.getDataSourceList()); if(remainingDataSourcesList.size()==0) { out.println("<table class=transparenttable>"); out.println("<tr><td><FONT COLOR=#000000>No virtaul sensor is available.</td></tr>"); out.println("</table>"); } else { out.println("<table>"); out.println("<tr><th> virtual sensor name </th>"); out.println("<th> access right</th></tr>"); for(int i=0; i<remainingDataSourcesList.size();i++) { dataSource=(DataSource)(remainingDataSourcesList.get(i)); dataSourceName=dataSource.getDataSourceName() ; if(ctdb.valueExistsForThisColumnUnderTwoConditions(new Column("ISUSERWAITING","yes"),new Column("USERNAME",user.getUserName()),new Column("DATASOURCENAME",dataSource.getDataSourceName()), "ACUSER_ACDATASOURCE")) { out.println("<tr><td>" + dataSourceName + " </td>"); } else { out.println("<FORM ACTION=/gsn/MyUpdateUserWaitingForDataSourceServlet METHOD=POST>"); out.println("<tr><td>" + dataSourceName + " </td>"); out.println("<td><INPUT TYPE=RADIO NAME="+dataSourceName+" VALUE= 1> read "); out.println("<INPUT TYPE=RADIO NAME="+dataSourceName+" VALUE= 2> write "); out.println("<INPUT TYPE=RADIO NAME="+dataSourceName+" VALUE=3> read/write "); } if(ctdb.valueExistsForThisColumnUnderTwoConditions(new Column("ISUSERWAITING","yes"),new Column("USERNAME",user.getUserName()),new Column("DATASOURCENAME",dataSource.getDataSourceName()), "ACUSER_ACDATASOURCE")) { out.println("<td>"+"<FONT COLOR=#0000FF>in updates waiting list!</td></tr>"); } else { out.println("   <INPUT TYPE=SUBMIT TYPE=SUBMIT class= buttonstyle VALUE=\"add\"></td></tr>"); out.println("</FORM>"); } } out.println("</table>"); } } /****************************************** Client Session related Methods*******************************************/ /********************************************************************************************************************/ private void checkSessionScheme(HttpServletRequest req, HttpServletResponse res)throws IOException { if(req.getScheme().equals("https")== true) { if((req.getSession().getAttribute("scheme")==null)) { req.getSession().setAttribute("scheme","https"); } } else if(req.getScheme().equals("http")== true ) { if((req.getSession().getAttribute("scheme")==null)) { req.getSession().setAttribute("scheme","http"); } res.sendRedirect("https://"+req.getServerName()+":"+ Main.getContainerConfig().getSSLPort()+"/gsn/MyUserUpdateServlet"); } } private void redirectToLogin(HttpServletRequest req, HttpServletResponse res)throws IOException { req.getSession().setAttribute("login.target", HttpUtils.getRequestURL(req).toString()); res.sendRedirect("/gsn/MyLoginHandlerServlet"); } private Vector dataSourceVectorForDataSourceNames(Vector dataSourceNames) { Vector dataSourceVector = new Vector(); for(int i=0;i<dataSourceNames.size();i++) { dataSourceVector.add(new DataSource((String)dataSourceNames.get(i))); } return dataSourceVector; } }