/** * 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.util.Vector; /** * Created by IntelliJ IDEA. * User: Behnaz Bostanipour * Date: Apr 25, 2010 * Time: 10:48:39 AM * To change this template use File | Settings | File Templates. */ public class MyOwnerWaitingListServlet extends HttpServlet { /****************************************** Servlet Methods*******************************************/ /****************************************************************************************************/ private static transient Logger logger = Logger.getLogger( MyOwnerWaitingListServlet.class ); 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(); ConnectToDB ctdb = null; User user = (User) session.getAttribute("user"); if (user == null) { this.redirectToLogin(req,res); } else { this.checkSessionScheme(req,res); //ConnectToDB ctdb = new ConnectToDB(); this.printHeader(out); this.printLayoutMastHead(out, user ); this.printLayoutContent(out); try { ctdb = new ConnectToDB(); Vector datasourceNames=ctdb.getDataSourceNamesListForThisOwner(user); if(datasourceNames.size()==0) { out.println("<p>There is no virtual sensor entry in the owner waiting list ! </p>"); } else { int sizeOfPastusers=0; for(int i=0;i<datasourceNames.size();i++) { Vector users = ctdb.completeUsersList( ctdb.getUsersWaitingForThisOwnerDecision((String)(datasourceNames.get(i)))); if(users.size()!=0) { sizeOfPastusers=users.size(); } for(int j=0;j<users.size();j++) { this.printNewEntry(out,(User)users.get(j)); } if(users.size()==0 && (i+1)==datasourceNames.size() && sizeOfPastusers==0) { out.println("<p> There is no user entry in the owner waiting list ! </p>"); } } } } catch(Exception e) { out.println("Exception caught : "+e.getMessage()); } finally { if(ctdb!=null) { ctdb.closeStatement(); ctdb.closeConnection(); } } } this.printLayoutFooter(out); } public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { handleForm(req, res); 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>Owner Waiting List</TITLE>"); out.println(" <link rel=\"stylesheet\" media=\"screen\" type=\"text/css\" href=\"/style/acstyle.css\"/>"); //printStyle(out); out.println("</HEAD>"); //out.println("<body>"); out.println("<body onload=\"loadScroll()\" onunload=\"saveScroll()\" >"); out.println("<div id=\"container\">"); out.println("<div class=box>"); } 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>Owner Waiting List </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) { out.println("<div id=\"content\">"); } private void printLayoutFooter(PrintWriter out) { out.println("</div>"); out.println("<div id=\"footer\">"); 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("</body>"); out.println("</html>"); } private void printNewEntry(PrintWriter out,User user) throws ServletException { out.println("<h2>New Entry In Waiting List</h2>"); out.println("<div class=\"image_float\">"); this.printUserInformation(out,user); out.println("</div>"); this.printForms(out,user); out.println("<div class=\"spacer\"></div>"); } private void printLinks(PrintWriter out) { //out.println("<a class=linkclass href=\"/gsn/MyLoginHandlerServlet\">login</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/MyLogoutHandlerServlet\">logout</a>"); //out.println("<a class=linkclass href=\"/\">GSN home</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 printForms(PrintWriter out,User user) throws ServletException { out.println("<B>  Do you agree that this candidate register for this virtual sensor? </B><br><br>"); out.println("<table class=\"transparenttable\">"); printForm(out, user); //printNoForm(out, user); out.println("</table>"); } private void printForm(PrintWriter out, User user) { String username=user.getUserName(); String datasourcename= user.getDataSource().getDataSourceName(); out.println("<FORM METHOD=POST>"); out.println("Time limitation (Month/Day/Year): <INPUT TYPE=\"date\" name=\"deadline\">"); out.println("<INPUT TYPE=\"checkbox\" name=\"unlimited\" >Unlimited Access"); out.println("<p>For Mozilla, please specify: Year/Month/Day</p>"); out.println("<INPUT TYPE=HIDDEN NAME=username VALUE="+username+">"); out.println("<INPUT TYPE=HIDDEN NAME=datasourcename VALUE="+datasourcename+">"); //out.println("<INPUT TYPE=HIDDEN NAME=register VALUE= Yes>"); out.println("<tr><td><INPUT TYPE=SUBMIT class= buttonstyle NAME=register VALUE=Yes></td>"); out.println("<td><INPUT TYPE=SUBMIT class= buttonstyle NAME=register VALUE=No></td></tr>"); out.println("</FORM>"); } private void printNoForm(PrintWriter out, User user) { String username=user.getUserName(); String datasourcename= user.getDataSource().getDataSourceName(); out.println("<FORM METHOD=POST>"); out.println("<INPUT TYPE=HIDDEN NAME=username VALUE="+username+">"); out.println("<INPUT TYPE=HIDDEN NAME=datasourcename VALUE="+datasourcename+">"); out.println("<INPUT TYPE=HIDDEN NAME=register VALUE= No>"); out.println("<td><INPUT TYPE=SUBMIT class= buttonstyle VALUE=\"No\"></td></tr>"); out.println("</FORM>"); } private void printUserInformation(PrintWriter out,User user) { out.println("<table>"); out.println("<tr>"); out.println("<th>first name</th>"); out.println("<td>"+ user.getFirstName() +"</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<th>last name</th>"); out.println("<td>"+ user.getLastName() +"</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<th>E-mail</th>"); out.println("<td>"+ user.getEmail() +"</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<th>virtual sensor name</th>"); out.println("<td>"+ user.getDataSource().getDataSourceName() +"</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<th>access right</th>"); out.println("<td>"+ setLabel(user.getDataSource()) +"</td>"); out.println("</tr>"); out.println("</table>"); } private String setLabel(DataSource ds) { String label=null; if(ds.getDataSourceType().charAt(1)=='1') { label="read"; } else if(ds.getDataSourceType().charAt(1)=='2') { label="write"; } else if(ds.getDataSourceType().charAt(1)=='3') { label="read/write"; } return label; } /****************************************** AC Related Methods*******************************************/ /***********************************************************************************************************/ void handleForm(HttpServletRequest req, HttpServletResponse res) { HttpSession session = req.getSession(); User user = (User) session.getAttribute("user"); //////// PrintWriter out = (PrintWriter) session.getAttribute("out"); ParameterSet pm = new ParameterSet(req); ConnectToDB ctdb =null; try { String decision = null; /////////////// ctdb= new ConnectToDB(); if(pm.valueForName("register")==null) { return; } else if(pm.valueForName("register").equals("Yes")) { //pm.valueForName("unlimited") // if the user has not specified a date and not unlimited access is set if (( pm.valueForName("unlimited") == null) && pm.valueForName("deadline").length() < 2) { // The user should have defined a limitation date this.manageUserAlert(out, "Please, specify the Time limitations!"); // print an error message } else { if ( pm.valueForName("unlimited") == null) { // if the user has provided a time limitation ctdb.insertThreeColumnsValuesStrings(pm.valueForName("username"), pm.valueForName("datasourcename"), pm.valueForName("deadline"), "ACACCESS_DURATION"); } ctdb.updateOwnerDecision("has accepted the registration",pm.valueForName("username"), pm.valueForName("datasourcename") ); decision = "has been accepted by its owner.\n"; //////////////// } } else if(pm.valueForName("register").equals("No")) { ctdb.updateOwnerDecision("has refused the registration",pm.valueForName("username"), pm.valueForName("datasourcename") ); decision = "has been refused by its owner.\n"; /////////////// } if (decision != null) { Emailer email = new Emailer(); User userFromBD = ctdb.getUserForUserName("Admin"); // get the details for the Admin account String msgHead = "Dear "+userFromBD.getFirstName() +", "+"\n"+"\n"; String msgTail = "Best Regards,"+"\n"+"GSN Team"; String msgBody = "A request for a Virtual Sensor " + decision +"The Virtual Sensor is: " + pm.valueForName("datasourcename")+ "\nThe details of its owner are as follows: \n" + "First name: " + user.getFirstName() + "\n"+ "Last name: " + user.getLastName() + "\n"+ "Email address: " + user.getEmail() + "\n\n"+ "You can manage this change by choosing the following options in GSN:\n"+ "Access Rights Management -> Admin Only -> Users Updates Waiting List\n"+ "or via the URL: "+req.getServerName()+":"+req.getServerPort()+"/gsn/MyUserUpdateWaitingListServlet\n\n"; // first change Emailer class params to use sendEmail email.sendEmail( "GSN ACCESS ", "GSN USER",userFromBD.getEmail(),"Update for a Virtual Sensor access", msgHead, msgBody, msgTail); } } catch(Exception e) { out.println("Exception caught : "+e.getMessage()); } finally { if(ctdb!=null) { ctdb.closeStatement(); ctdb.closeConnection(); } } } private void manageUserAlert(PrintWriter out, String alertMessage) { this.createAlertBox(out, alertMessage); this.callAlertBox(out); } private void createAlertBox(PrintWriter out, String alertMessage) { out.println("<div id=\"AlertBox\" class=\"alert\">"); out.println("<p>"); out.println(alertMessage ); out.println("</p>"); out.println("<form style=\"text-align:right\">"); out.println("<input"); out.println("type=\"button\""); out.println("class= alertbuttonstyle"); out.println("value=\"OK\""); out.println("style=\"width:75px;\""); out.println("onclick=\"document.getElementById('AlertBox').style.display='none'\">"); out.println("</form>"); out.println("</div>"); } private void callAlertBox(PrintWriter out) { out.println("<SCRIPT LANGUAGE=\"JavaScript\" TYPE=\"TEXT/JAVASCRIPT\">"); out.println("function DisplayAlert(id,left,top) {"); out.println("document.getElementById(id).style.left=left+'px';"); out.println("document.getElementById(id).style.top=top+'px';"); out.println("document.getElementById(id).style.display='block';"); out.println("}"); out.println("DisplayAlert('AlertBox',500,200);"); out.println("</SCRIPT>"); } /****************************************** 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/MyOwnerWaitingListServlet"); } } private void redirectToLogin(HttpServletRequest req, HttpServletResponse res)throws IOException { req.getSession().setAttribute("login.target", HttpUtils.getRequestURL(req).toString()); res.sendRedirect("/gsn/MyLoginHandlerServlet"); } }