package org.openiot.lsm.http;
/**
* 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
*/
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.openiot.lsm.beans.Sensor;
import org.openiot.lsm.manager.SensorManager;
import org.openiot.lsm.utils.ConstantsUtil;
/**
*
* @author Hoan Nguyen Mau Quoc
*
*/
import org.openiot.lsm.utils.SecurityUtil;
import org.openiot.security.client.PermissionsUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Servlet implementation class ServletAPI
*/
@WebServlet("/TriplesServlet")
public class TriplesServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
final static Logger logger = LoggerFactory.getLogger(TriplesServlet.class);
/**
* @see HttpServlet#HttpServlet()
*/
public TriplesServlet() {
super();
// TODO Auto-generated constructor stub
}
public void init(ServletConfig config) throws ServletException {
super.init(config);
ConstantsUtil.realPath = this.getServletContext().getRealPath("WEB-INF");
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
ObjectInputStream inputFromClient = new ObjectInputStream(request.getInputStream());
// deserialize the object, note the cast
Object object;
try {
object = inputFromClient.readObject();
String graphURL = request.getHeader("graphURL");
String api = request.getHeader("api");
String apiType = request.getHeader("apiType");
String token = request.getHeader("token");
String clientId = request.getHeader("clientId");
if(!apiType.equals("get")){
String infos = (String) object;
String result = processRequestImpl(api,infos,graphURL,clientId,token);
response.setContentType("text/xml");
response.setHeader("Pragma", "no-cache"); // HTTP 1.0
response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1
response.getWriter().print(result);
}else{
Sensor sensor = processObjectRequestImpl(api,(String)object,graphURL,clientId,token);
response.setContentType("application/x-java-serialized-object");
OutputStream outputStream = response.getOutputStream();
ObjectOutputStream objOutStr = new ObjectOutputStream(outputStream);
try {
objOutStr.writeObject(sensor);
objOutStr.flush();
objOutStr.close();
// response.getWriter().print("Your request processed successfully");
}catch (Exception ex) {
ex.printStackTrace();
objOutStr.close();
response.getWriter().print(ex.toString());
}
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private Sensor processObjectRequestImpl(String api, String sensorInfo, String graphURL,String clientId,String token) {
// TODO Auto-generated method stub
Sensor sensor = null;
try {
SensorManager sensorManager = new SensorManager();
sensorManager.setMetaGraph(graphURL);
switch(api){
case "5":
String permissionString = "";
if(PermissionsUtil.getUserType(graphURL)==PermissionsUtil.GUESS_USER)
permissionString = PermissionsUtil.GET_SENSOR_GUESS;
else if(PermissionsUtil.getUserType(graphURL)==PermissionsUtil.DEMO_USER)
permissionString = PermissionsUtil.GET_SENSOR_DEMO;
else permissionString = PermissionsUtil.GET_SENSOR_MAIN;
if(SecurityUtil.hasPermission(PermissionsUtil.LSM_ALL, getServletContext(), token, clientId)
||SecurityUtil.hasPermission(permissionString, getServletContext(), token, clientId)){
sensor = sensorManager.getSpecificSensorWithSensorId(sensorInfo);
logger.info(sensor.getId());
}else
logger.info("You don't have permmison to operate this funtion");
break;
default:
break;
}
} catch (Exception e) {
e.printStackTrace();
}
return sensor;
}
private String processRequestImpl(String api,String infos,String graphURL,String clientId,String token){
String result="Your request processed successfully";
try {
SensorManager sensorManager = new SensorManager();
switch(api){
case "3":
String permissionString = "";
if(PermissionsUtil.getUserType(graphURL)==PermissionsUtil.GUESS_USER)
permissionString = PermissionsUtil.DEL_SENSOR_GUESS;
else if(PermissionsUtil.getUserType(graphURL)==PermissionsUtil.DEMO_USER)
permissionString = PermissionsUtil.DEL_SENSOR_DEMO;
else permissionString = PermissionsUtil.DEL_SENSOR_MAIN;
if(SecurityUtil.hasPermission(PermissionsUtil.LSM_ALL, getServletContext(), token, clientId)
||SecurityUtil.hasPermission(permissionString, getServletContext(), token, clientId)){
sensorManager.sensorDelete(graphURL,infos);
}else{
result ="You don't have permmison to operate this funtion";
logger.info(result);
}
break;
case "4":
permissionString = "";
if(PermissionsUtil.getUserType(graphURL)==PermissionsUtil.GUESS_USER)
permissionString = PermissionsUtil.DEL_READING_GUESS;
else if(PermissionsUtil.getUserType(graphURL)==PermissionsUtil.DEMO_USER)
permissionString = PermissionsUtil.DEL_READING_DEMO;
else permissionString = PermissionsUtil.DEL_READING_MAIN;
if(SecurityUtil.hasPermission(PermissionsUtil.LSM_ALL, getServletContext(), token, clientId)
||SecurityUtil.hasPermission(permissionString, getServletContext(), token, clientId)){
sensorManager.deleteAllReadings(graphURL,infos);
}else{
result ="You don't have permmison to operate this funtion";
logger.info(result);
}
break;
default:
break;
}
} catch (Exception e) {
e.printStackTrace();
result = e.toString();
}
return result;
}
}