InteropParameters
* name: "language" class: String
*
name: "identification" class: SessionIdentification
*
name: "lUserIdentification" class: UserIdentification[]
* @return InteropResponse
* Session
* @throws SerializationException
*/
public InteropResponse startSession(InteropParameters parameters) throws SerializationException
{
String language = (String)parameters.getParameterValue("language");
try
{
createRootUserIfExistsInParameters(parameters);
InteropResponse response = createSessionAndAddUsersIntoIt(parameters);
return response;
}
catch (SerializationException exception)
{
exception.printStackTrace();
String errorMessage = exception.getMessage();
if ((errorMessage.equals("invalid user")) || (errorMessage.equals("invalid password")))
{
throw new SerializationException(Shared.getMessage(language, "The provided user or password are not valid"));
}
else
{
throw new SerializationException(Shared.getMessage(language, exception.getMessage()));
}
}
catch (Exception exception)
{
exception.printStackTrace();
throw new SerializationException(Shared.getMessage(language, exception.getMessage()));
}
}
private void createRootUserIfExistsInParameters(InteropParameters parameters) throws Exception
{
UserIdentification[] luserIdentification = (UserIdentification[]) parameters.getBodyContentValue(UserIdentification[].class);
//IF EXIST ROOT IDENTIFICATION UPDATE ROOT USER
int indexRootIdentification = Arrays.binarySearch(luserIdentification, new UserIdentification("Administrator", Licence.encrypt("root"), ""),
(UserIdentification o1, UserIdentification o2) -> (o1.username.compareTo(o2.username)));
if (indexRootIdentification >= 0)
{
Shared.getModel().initializeRootUser();
}
}
private InteropResponse createSessionAndAddUsersIntoIt(InteropParameters parameters) throws SerializationException
{
Session session = new Session();
session.identification =(parameters.hasParameter("identification") == true) ? (SessionIdentification) parameters.getParameterValue("identification"): new SessionIdentification();
parameters.addParameter("session", session);
InteropResponse response = addUsersSession(parameters);
return response;
}
/**
* @param parameters InteropParameters
*
name: "language" class: String
*
name: "session" class: Session
*
name: "lUserIdentification" class: UserIdentification[]
* @return InteropResponse
* Session
* @throws SerializationException
*/
@SuppressWarnings("unchecked")
public InteropResponse addUsersSession(InteropParameters parameters) throws SerializationException
{
String language = (String)parameters.getParameterValue("language");
try
{
String computerAction = parameters.getParameterValue("computer");
Session session = (Session) parameters.getParameterValue("session");
UserIdentification[] luserIdentification = (UserIdentification[]) parameters.getBodyContentValue(UserIdentification[].class);
String usernameAction = luserIdentification[0].username;
boolean secureUser = (parameters.hasParameter("secureUser")) ? Boolean.valueOf((String) parameters.getParameterValue("secureUser")) : true;
session = checkSessionAndAddAllowedUsers(session, luserIdentification, secureUser, usernameAction, computerAction);
updateSessionConfiguration(session);
session.token = Long.toHexString(Double.doubleToLongBits(Math.random())) + Long.toHexString(Double.doubleToLongBits(Math.random()));
if (!secureUser)
{
for (UserIdentification userIdentification : session.identification.luser)
{
userIdentification.username = Licence.decrypt(userIdentification.username);
}
}
return new InteropResponse(session);
} catch (SerializationException e)
{
e.printStackTrace();
throw new SerializationException(e.getMessage());
} catch (Exception e)
{
e.printStackTrace();
throw new SerializationException(e.getMessage());
}
}
/**
* @param parameters InteropParameters
*
name: "language" class: String
*
name: "session" class: Session
*
name: "lusername" class: String[]
* @return InteropResponse
* Session
* @throws SerializationException
*/
@SuppressWarnings("unchecked")
public InteropResponse removeUsersSession(InteropParameters parameters) throws SerializationException
{
String language = (String)parameters.getParameterValue("language");
try
{
String usernameAction = parameters.getParameterValue("username");
String computerAction = parameters.getParameterValue("computer");
Session session = (Session) parameters.getParameterValue("session");
String bodyContent = (String) parameters.getParameterValue("body-content");
String[] lusername = (String[]) Serialization.deserialize(String[].class, bodyContent);
//REMOVE USERS
for (String username : lusername)
{
//CREATE AND SAVE ACCTION
User userAction = new User();
userAction.information = new UserInformation();
try
{
userAction.information.setIdentifier(Licence.decrypt(username));
} catch (Exception e)
{
userAction.information.setIdentifier(username);
}
Session sessionAction = new Session();
sessionAction.identification = session.identification;
sessionAction.token = session.token;
sessionAction.role = session.role;
DeviceAction action = new DeviceAction(userAction, parameters);
DeviceActionResult actionResult = new DeviceActionResult(DeviceActionResult.RESULT_CORRECT, Shared.getMessage("log out"));
action.setResult(actionResult);
Shared.model.addAction(action);
session.removeUserIdentification(username);
}
//UPDATE SESSION PERMISSIONS
updateSessionConfiguration(session);
return new InteropResponse(session);
} catch (SerializationException e)
{
throw new SerializationException(e.getMessage());
}
}
/**
* @param parameters InteropParameters
*
name: "language" class: String
*
name: "identification" class: SessionIdentification
* @return InteropResponse
* Boolean
* @throws SerializationException
*/
public InteropResponse endSession(InteropParameters parameters) throws SerializationException
{
String language = (String)parameters.getParameterValue("language");
SessionIdentification identification = (SessionIdentification)parameters.getParameterValue("identification");
String[] lusername;
//FOR ARTIC WEB
if (identification == null)
{
lusername = (String[]) Serialization.deserialize(String[].class, (String) parameters.getParameterValue("body-content"));
identification = new SessionIdentification();
} else
{
lusername = new String[identification.luser.size()];
for (int i = 0; i < lusername.length; i++)
{
try
{
lusername[i] = Licence.decrypt(identification.luser.get(i).username);
} catch (Exception ex)
{
lusername[i] = identification.luser.get(i).username;
Logger.getLogger(ModelSessions.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
identification.timestampEnd = System.currentTimeMillis();
String usernameAction = parameters.getParameterValue("username")!=null?parameters.getParameterValue("username"):lusername[0];
String computerAction = parameters.getParameterValue("computer");
Session session = new Session();
for (String username : lusername)
{
//CREATE AND SAVE ACCTION
User userAction = new User();
userAction.information = new UserInformation();
try
{
userAction.information.setIdentifier(Licence.decrypt(username));
} catch (Exception e)
{
userAction.information.setIdentifier(username);
}
Session sessionAction = new Session();
sessionAction.identification = session.identification;
sessionAction.token = session.token;
sessionAction.role = session.role;
DeviceAction action = new DeviceAction(userAction, parameters);
DeviceActionResult actionResult = new DeviceActionResult(DeviceActionResult.RESULT_CORRECT, Shared.getMessage("log out"));
action.setResult(actionResult);
Shared.model.addAction(action);
}
return new InteropResponse(true);
}
public boolean updateSessionConfiguration(Session session) throws SerializationException
{
boolean updated = false;
if (session.identification.luser.size() > 0)
{
if (session.configuration == null)
{
session.configuration = new SessionConfiguration();
updated = true;
}
updated = updateSessionPermissions(session, updated);
updateSessionRole(session);
updateSessionWebProperties(session);
updateSessionAlarms(session);
}
return updated;
}
private boolean updateSessionPermissions(Session session, boolean updated) throws SerializationException
{
try
{
InteropParameters parametersGetUserPermission = new InteropParameters();
parametersGetUserPermission.addParameter(new InteropParameter("language", Shared.configuration.general.language));
parametersGetUserPermission.addBodycontent(session.getUsernames());
parametersGetUserPermission.addParameter(new InteropParameter("timestamp", String.valueOf(session.configuration.timestamp)));
InteropResponse response = Shared.getModel().modelPermissions.getUserPermission(parametersGetUserPermission);
UserPermission newPermissions = (UserPermission) response.getValue()[0];
if (!Serialization.equals(session.configuration.permissions, newPermissions))
{
session.configuration.permissions = newPermissions;
session.configuration.timestamp = System.currentTimeMillis();
updated = true;
}
} catch (Exception ex)
{
Logger.getLogger(ModelSessions.class.getName()).log(Level.INFO, "", ex);
}
return updated;
}
private void updateSessionRole(Session session) throws SerializationException
{
String role = "";
for (UserIdentification userIdentification : session.identification.luser)
{
if (userIdentification.role != null)
{
if (userIdentification.role.equals("Administrator"))
{
role = userIdentification.role;
} else if (userIdentification.equals("Write") && !role.equals("Administrator"))
{
role = userIdentification.role;
} else if (userIdentification.role.equals("Read") && !role.equals("Administrator") && !role.equals("Write"))
{
role = userIdentification.role;
}
}
}
session.role = role;
}
private void updateSessionAlarms(Session session) throws SerializationException
{
try
{
InteropParameters parametersGetUserPermission = new InteropParameters();
parametersGetUserPermission.addParameter(new InteropParameter("language", Shared.configuration.general.language));
parametersGetUserPermission.addBodycontent(session.getUsernames());
parametersGetUserPermission.addParameter(new InteropParameter("timestamp", String.valueOf(session.configuration.timestamp)));
InteropResponse response = Shared.getModel().modelAlarms.getAlarmsUserConfiguration(
parametersGetUserPermission);
session.configuration.lalarmConfiguration = Arrays.asList(Arrays.copyOf(response.getValue(), response.getValue().length, UserAlarmConfiguration[].class));
} catch (Exception e)
{
e.printStackTrace();
}
}
//