From 7d71fa0d4db080c142ee0d105099b88868581d19 Mon Sep 17 00:00:00 2001 From: Salvatore La Manna Date: Wed, 16 Jun 2021 11:03:58 +0200 Subject: [PATCH] Fase login --- .../sicilia-sue-connector-portlet-service.jar | Bin 65546 -> 71676 bytes .../docroot/WEB-INF/service.xml | 21 +- .../sicilia/sue/ExpiredTokenException.java | 40 ++ .../sue/InactiveSportelloException.java | 40 ++ .../sicilia/sue/InvalidTokenException.java | 40 ++ .../it/mwg/sicilia/sue/model/Sportello.java | 7 + .../mwg/sicilia/sue/model/SportelloClp.java | 487 +++++++++++++++--- .../mwg/sicilia/sue/model/SportelloModel.java | 216 ++++++-- .../mwg/sicilia/sue/model/SportelloSoap.java | 112 +++- .../sicilia/sue/model/SportelloWrapper.java | 370 ++++++++++--- .../sicilia/sue/service/ClpSerializer.java | 12 + .../sue/service/SportelloLocalService.java | 5 + .../sue/service/SportelloLocalServiceClp.java | 41 ++ .../service/SportelloLocalServiceUtil.java | 7 + .../service/SportelloLocalServiceWrapper.java | 8 + .../sicilia/sue/service/SportelloService.java | 2 + .../sue/service/SportelloServiceClp.java | 29 ++ .../sue/service/SportelloServiceUtil.java | 4 + .../sue/service/SportelloServiceWrapper.java | 5 + .../persistence/SportelloPersistence.java | 58 +++ .../service/persistence/SportelloUtil.java | 68 +++ .../docroot/WEB-INF/sql/indexes.properties | 3 +- .../docroot/WEB-INF/sql/indexes.sql | 3 +- .../docroot/WEB-INF/sql/tables.sql | 14 +- .../WEB-INF/src/META-INF/portlet-hbm.xml | 12 +- .../src/META-INF/portlet-model-hints.xml | 16 +- .../WEB-INF/src/META-INF/portlet-orm.xml | 20 +- .../WEB-INF/src/content/Language.properties | 3 +- .../mwg/sicilia/sue/api/v1/AccessToken.java | 99 ++++ .../it/mwg/sicilia/sue/api/v1/ApiServlet.java | 46 +- .../it/mwg/sicilia/sue/api/v1/ApiUtil.java | 7 - .../it/mwg/sicilia/sue/api/v1/Command.java | 56 +- .../it/mwg/sicilia/sue/api/v1/Commands.java | 3 + .../it/mwg/sicilia/sue/api/v1/Parameters.java | 10 +- .../it/mwg/sicilia/sue/api/v1/Response.java | 2 +- .../src/it/mwg/sicilia/sue/api/v1/Status.java | 13 +- .../sue/api/v1/command/CommandLogin.java | 56 ++ .../sue/api/v1/command/CommandNop.java | 22 +- .../sue/model/impl/SportelloCacheModel.java | 142 +++-- .../sicilia/sue/model/impl/SportelloImpl.java | 42 ++ .../sue/model/impl/SportelloModelImpl.java | 460 +++++++++++++---- .../sue/portlet/SueAdministrationPortlet.java | 27 +- .../base/SportelloLocalServiceClpInvoker.java | 11 + .../base/SportelloServiceClpInvoker.java | 11 + .../service/http/SportelloServiceSoap.java | 22 + .../impl/ApiSettingLocalServiceImpl.java | 3 + .../impl/SportelloLocalServiceImpl.java | 21 +- .../service/impl/SportelloServiceImpl.java | 43 +- .../persistence/SportelloPersistenceImpl.java | 297 ++++++++++- .../it/mwg/sicilia/sue/startup/Startup.java | 2 +- .../docroot/WEB-INF/src/service.properties | 4 +- .../html/administration/edit_sportello.jsp | 37 +- .../docroot/html/administration/view.jsp | 25 +- 53 files changed, 2612 insertions(+), 492 deletions(-) create mode 100644 liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/ExpiredTokenException.java create mode 100644 liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/InactiveSportelloException.java create mode 100644 liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/InvalidTokenException.java create mode 100644 liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/AccessToken.java create mode 100644 liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/command/CommandLogin.java diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/lib/sicilia-sue-connector-portlet-service.jar b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/lib/sicilia-sue-connector-portlet-service.jar index e1968be5228098e2538711af8117f01a8bf99955..1f0d9a1b9943283c07340f7f18bc1d6ee06397e1 100644 GIT binary patch delta 39731 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 F{s-?SVtxPs delta 33934 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 diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service.xml b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service.xml index 393d2f60..daa57a57 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service.xml +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service.xml @@ -10,20 +10,30 @@ - - + + + + + - + + + + + + + + @@ -35,4 +45,9 @@ + + ExpiredToken + InactiveSportello + InvalidToken + \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/ExpiredTokenException.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/ExpiredTokenException.java new file mode 100644 index 00000000..934acce0 --- /dev/null +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/ExpiredTokenException.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. + * + * This library 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; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library 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. + */ + +package it.mwg.sicilia.sue; + +import com.liferay.portal.kernel.exception.PortalException; + +/** + * @author Manifattura Web Group Srl + */ +public class ExpiredTokenException extends PortalException { + + public ExpiredTokenException() { + super(); + } + + public ExpiredTokenException(String msg) { + super(msg); + } + + public ExpiredTokenException(String msg, Throwable cause) { + super(msg, cause); + } + + public ExpiredTokenException(Throwable cause) { + super(cause); + } + +} \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/InactiveSportelloException.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/InactiveSportelloException.java new file mode 100644 index 00000000..ce3a97c0 --- /dev/null +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/InactiveSportelloException.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. + * + * This library 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; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library 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. + */ + +package it.mwg.sicilia.sue; + +import com.liferay.portal.kernel.exception.PortalException; + +/** + * @author Manifattura Web Group Srl + */ +public class InactiveSportelloException extends PortalException { + + public InactiveSportelloException() { + super(); + } + + public InactiveSportelloException(String msg) { + super(msg); + } + + public InactiveSportelloException(String msg, Throwable cause) { + super(msg, cause); + } + + public InactiveSportelloException(Throwable cause) { + super(cause); + } + +} \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/InvalidTokenException.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/InvalidTokenException.java new file mode 100644 index 00000000..5bc738f3 --- /dev/null +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/InvalidTokenException.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. + * + * This library 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; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library 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. + */ + +package it.mwg.sicilia.sue; + +import com.liferay.portal.kernel.exception.PortalException; + +/** + * @author Manifattura Web Group Srl + */ +public class InvalidTokenException extends PortalException { + + public InvalidTokenException() { + super(); + } + + public InvalidTokenException(String msg) { + super(msg); + } + + public InvalidTokenException(String msg, Throwable cause) { + super(msg, cause); + } + + public InvalidTokenException(Throwable cause) { + super(cause); + } + +} \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/Sportello.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/Sportello.java index 898c8f84..36771fc1 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/Sportello.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/Sportello.java @@ -31,6 +31,13 @@ public interface Sportello extends SportelloModel, PersistedModel { * * Never modify this interface directly. Add methods to {@link it.mwg.sicilia.sue.model.impl.SportelloImpl} and rerun ServiceBuilder to automatically copy the method declarations to this interface. */ + public java.lang.String encryptPassword(java.lang.String password); + + public boolean checkPassword(java.lang.String password); + + public void setEncryptedPassword(java.lang.String password, + com.liferay.portal.model.User user); + public java.lang.String getCodiceProvincia() throws com.liferay.portal.kernel.exception.PortalException, com.liferay.portal.kernel.exception.SystemException; diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloClp.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloClp.java index 597e5b92..ba601ab2 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloClp.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloClp.java @@ -77,14 +77,20 @@ public class SportelloClp extends BaseModelImpl implements Sportello attributes.put("sportelloId", getSportelloId()); attributes.put("groupId", getGroupId()); attributes.put("companyId", getCompanyId()); - attributes.put("userId", getUserId()); - attributes.put("userName", getUserName()); attributes.put("createDate", getCreateDate()); + attributes.put("createUserId", getCreateUserId()); + attributes.put("createUserName", getCreateUserName()); attributes.put("modifiedDate", getModifiedDate()); + attributes.put("modifiedUserId", getModifiedUserId()); + attributes.put("modifiedUserName", getModifiedUserName()); + attributes.put("userName", getUserName()); attributes.put("email", getEmail()); attributes.put("comuneId", getComuneId()); - attributes.put("apiKey", getApiKey()); attributes.put("attivo", getAttivo()); + attributes.put("password", getPassword()); + attributes.put("passwordModifiedDate", getPasswordModifiedDate()); + attributes.put("passwordModifiedUserId", getPasswordModifiedUserId()); + attributes.put("passwordModifiedUserName", getPasswordModifiedUserName()); return attributes; } @@ -109,22 +115,22 @@ public class SportelloClp extends BaseModelImpl implements Sportello setCompanyId(companyId); } - Long userId = (Long)attributes.get("userId"); + Date createDate = (Date)attributes.get("createDate"); - if (userId != null) { - setUserId(userId); + if (createDate != null) { + setCreateDate(createDate); } - String userName = (String)attributes.get("userName"); + Long createUserId = (Long)attributes.get("createUserId"); - if (userName != null) { - setUserName(userName); + if (createUserId != null) { + setCreateUserId(createUserId); } - Date createDate = (Date)attributes.get("createDate"); + String createUserName = (String)attributes.get("createUserName"); - if (createDate != null) { - setCreateDate(createDate); + if (createUserName != null) { + setCreateUserName(createUserName); } Date modifiedDate = (Date)attributes.get("modifiedDate"); @@ -133,6 +139,24 @@ public class SportelloClp extends BaseModelImpl implements Sportello setModifiedDate(modifiedDate); } + Long modifiedUserId = (Long)attributes.get("modifiedUserId"); + + if (modifiedUserId != null) { + setModifiedUserId(modifiedUserId); + } + + String modifiedUserName = (String)attributes.get("modifiedUserName"); + + if (modifiedUserName != null) { + setModifiedUserName(modifiedUserName); + } + + String userName = (String)attributes.get("userName"); + + if (userName != null) { + setUserName(userName); + } + String email = (String)attributes.get("email"); if (email != null) { @@ -145,17 +169,37 @@ public class SportelloClp extends BaseModelImpl implements Sportello setComuneId(comuneId); } - String apiKey = (String)attributes.get("apiKey"); - - if (apiKey != null) { - setApiKey(apiKey); - } - Boolean attivo = (Boolean)attributes.get("attivo"); if (attivo != null) { setAttivo(attivo); } + + String password = (String)attributes.get("password"); + + if (password != null) { + setPassword(password); + } + + Date passwordModifiedDate = (Date)attributes.get("passwordModifiedDate"); + + if (passwordModifiedDate != null) { + setPasswordModifiedDate(passwordModifiedDate); + } + + Long passwordModifiedUserId = (Long)attributes.get( + "passwordModifiedUserId"); + + if (passwordModifiedUserId != null) { + setPasswordModifiedUserId(passwordModifiedUserId); + } + + String passwordModifiedUserName = (String)attributes.get( + "passwordModifiedUserName"); + + if (passwordModifiedUserName != null) { + setPasswordModifiedUserName(passwordModifiedUserName); + } } @Override @@ -228,21 +272,21 @@ public class SportelloClp extends BaseModelImpl implements Sportello } @Override - public long getUserId() { - return _userId; + public Date getCreateDate() { + return _createDate; } @Override - public void setUserId(long userId) { - _userId = userId; + public void setCreateDate(Date createDate) { + _createDate = createDate; if (_sportelloRemoteModel != null) { try { Class clazz = _sportelloRemoteModel.getClass(); - Method method = clazz.getMethod("setUserId", long.class); + Method method = clazz.getMethod("setCreateDate", Date.class); - method.invoke(_sportelloRemoteModel, userId); + method.invoke(_sportelloRemoteModel, createDate); } catch (Exception e) { throw new UnsupportedOperationException(e); @@ -251,31 +295,21 @@ public class SportelloClp extends BaseModelImpl implements Sportello } @Override - public String getUserUuid() throws SystemException { - return PortalUtil.getUserValue(getUserId(), "uuid", _userUuid); - } - - @Override - public void setUserUuid(String userUuid) { - _userUuid = userUuid; - } - - @Override - public String getUserName() { - return _userName; + public long getCreateUserId() { + return _createUserId; } @Override - public void setUserName(String userName) { - _userName = userName; + public void setCreateUserId(long createUserId) { + _createUserId = createUserId; if (_sportelloRemoteModel != null) { try { Class clazz = _sportelloRemoteModel.getClass(); - Method method = clazz.getMethod("setUserName", String.class); + Method method = clazz.getMethod("setCreateUserId", long.class); - method.invoke(_sportelloRemoteModel, userName); + method.invoke(_sportelloRemoteModel, createUserId); } catch (Exception e) { throw new UnsupportedOperationException(e); @@ -284,21 +318,33 @@ public class SportelloClp extends BaseModelImpl implements Sportello } @Override - public Date getCreateDate() { - return _createDate; + public String getCreateUserUuid() throws SystemException { + return PortalUtil.getUserValue(getCreateUserId(), "uuid", + _createUserUuid); } @Override - public void setCreateDate(Date createDate) { - _createDate = createDate; + public void setCreateUserUuid(String createUserUuid) { + _createUserUuid = createUserUuid; + } + + @Override + public String getCreateUserName() { + return _createUserName; + } + + @Override + public void setCreateUserName(String createUserName) { + _createUserName = createUserName; if (_sportelloRemoteModel != null) { try { Class clazz = _sportelloRemoteModel.getClass(); - Method method = clazz.getMethod("setCreateDate", Date.class); + Method method = clazz.getMethod("setCreateUserName", + String.class); - method.invoke(_sportelloRemoteModel, createDate); + method.invoke(_sportelloRemoteModel, createUserName); } catch (Exception e) { throw new UnsupportedOperationException(e); @@ -329,6 +375,87 @@ public class SportelloClp extends BaseModelImpl implements Sportello } } + @Override + public long getModifiedUserId() { + return _modifiedUserId; + } + + @Override + public void setModifiedUserId(long modifiedUserId) { + _modifiedUserId = modifiedUserId; + + if (_sportelloRemoteModel != null) { + try { + Class clazz = _sportelloRemoteModel.getClass(); + + Method method = clazz.getMethod("setModifiedUserId", long.class); + + method.invoke(_sportelloRemoteModel, modifiedUserId); + } + catch (Exception e) { + throw new UnsupportedOperationException(e); + } + } + } + + @Override + public String getModifiedUserUuid() throws SystemException { + return PortalUtil.getUserValue(getModifiedUserId(), "uuid", + _modifiedUserUuid); + } + + @Override + public void setModifiedUserUuid(String modifiedUserUuid) { + _modifiedUserUuid = modifiedUserUuid; + } + + @Override + public String getModifiedUserName() { + return _modifiedUserName; + } + + @Override + public void setModifiedUserName(String modifiedUserName) { + _modifiedUserName = modifiedUserName; + + if (_sportelloRemoteModel != null) { + try { + Class clazz = _sportelloRemoteModel.getClass(); + + Method method = clazz.getMethod("setModifiedUserName", + String.class); + + method.invoke(_sportelloRemoteModel, modifiedUserName); + } + catch (Exception e) { + throw new UnsupportedOperationException(e); + } + } + } + + @Override + public String getUserName() { + return _userName; + } + + @Override + public void setUserName(String userName) { + _userName = userName; + + if (_sportelloRemoteModel != null) { + try { + Class clazz = _sportelloRemoteModel.getClass(); + + Method method = clazz.getMethod("setUserName", String.class); + + method.invoke(_sportelloRemoteModel, userName); + } + catch (Exception e) { + throw new UnsupportedOperationException(e); + } + } + } + @Override public String getEmail() { return _email; @@ -376,21 +503,49 @@ public class SportelloClp extends BaseModelImpl implements Sportello } @Override - public String getApiKey() { - return _apiKey; + public boolean getAttivo() { + return _attivo; + } + + @Override + public boolean isAttivo() { + return _attivo; + } + + @Override + public void setAttivo(boolean attivo) { + _attivo = attivo; + + if (_sportelloRemoteModel != null) { + try { + Class clazz = _sportelloRemoteModel.getClass(); + + Method method = clazz.getMethod("setAttivo", boolean.class); + + method.invoke(_sportelloRemoteModel, attivo); + } + catch (Exception e) { + throw new UnsupportedOperationException(e); + } + } + } + + @Override + public String getPassword() { + return _password; } @Override - public void setApiKey(String apiKey) { - _apiKey = apiKey; + public void setPassword(String password) { + _password = password; if (_sportelloRemoteModel != null) { try { Class clazz = _sportelloRemoteModel.getClass(); - Method method = clazz.getMethod("setApiKey", String.class); + Method method = clazz.getMethod("setPassword", String.class); - method.invoke(_sportelloRemoteModel, apiKey); + method.invoke(_sportelloRemoteModel, password); } catch (Exception e) { throw new UnsupportedOperationException(e); @@ -399,26 +554,81 @@ public class SportelloClp extends BaseModelImpl implements Sportello } @Override - public boolean getAttivo() { - return _attivo; + public Date getPasswordModifiedDate() { + return _passwordModifiedDate; } @Override - public boolean isAttivo() { - return _attivo; + public void setPasswordModifiedDate(Date passwordModifiedDate) { + _passwordModifiedDate = passwordModifiedDate; + + if (_sportelloRemoteModel != null) { + try { + Class clazz = _sportelloRemoteModel.getClass(); + + Method method = clazz.getMethod("setPasswordModifiedDate", + Date.class); + + method.invoke(_sportelloRemoteModel, passwordModifiedDate); + } + catch (Exception e) { + throw new UnsupportedOperationException(e); + } + } } @Override - public void setAttivo(boolean attivo) { - _attivo = attivo; + public long getPasswordModifiedUserId() { + return _passwordModifiedUserId; + } + + @Override + public void setPasswordModifiedUserId(long passwordModifiedUserId) { + _passwordModifiedUserId = passwordModifiedUserId; if (_sportelloRemoteModel != null) { try { Class clazz = _sportelloRemoteModel.getClass(); - Method method = clazz.getMethod("setAttivo", boolean.class); + Method method = clazz.getMethod("setPasswordModifiedUserId", + long.class); - method.invoke(_sportelloRemoteModel, attivo); + method.invoke(_sportelloRemoteModel, passwordModifiedUserId); + } + catch (Exception e) { + throw new UnsupportedOperationException(e); + } + } + } + + @Override + public String getPasswordModifiedUserUuid() throws SystemException { + return PortalUtil.getUserValue(getPasswordModifiedUserId(), "uuid", + _passwordModifiedUserUuid); + } + + @Override + public void setPasswordModifiedUserUuid(String passwordModifiedUserUuid) { + _passwordModifiedUserUuid = passwordModifiedUserUuid; + } + + @Override + public String getPasswordModifiedUserName() { + return _passwordModifiedUserName; + } + + @Override + public void setPasswordModifiedUserName(String passwordModifiedUserName) { + _passwordModifiedUserName = passwordModifiedUserName; + + if (_sportelloRemoteModel != null) { + try { + Class clazz = _sportelloRemoteModel.getClass(); + + Method method = clazz.getMethod("setPasswordModifiedUserName", + String.class); + + method.invoke(_sportelloRemoteModel, passwordModifiedUserName); } catch (Exception e) { throw new UnsupportedOperationException(e); @@ -426,6 +636,25 @@ public class SportelloClp extends BaseModelImpl implements Sportello } } + @Override + public java.lang.String encryptPassword(java.lang.String password) { + try { + String methodName = "encryptPassword"; + + Class[] parameterTypes = new Class[] { java.lang.String.class }; + + Object[] parameterValues = new Object[] { password }; + + java.lang.String returnObj = (java.lang.String)invokeOnRemoteModel(methodName, + parameterTypes, parameterValues); + + return returnObj; + } + catch (Exception e) { + throw new UnsupportedOperationException(e); + } + } + @Override public java.lang.String getNomeComune() { try { @@ -483,6 +712,44 @@ public class SportelloClp extends BaseModelImpl implements Sportello } } + @Override + public boolean checkPassword(java.lang.String password) { + try { + String methodName = "checkPassword"; + + Class[] parameterTypes = new Class[] { java.lang.String.class }; + + Object[] parameterValues = new Object[] { password }; + + Boolean returnObj = (Boolean)invokeOnRemoteModel(methodName, + parameterTypes, parameterValues); + + return returnObj; + } + catch (Exception e) { + throw new UnsupportedOperationException(e); + } + } + + @Override + public void setEncryptedPassword(java.lang.String password, + com.liferay.portal.model.User user) { + try { + String methodName = "setEncryptedPassword"; + + Class[] parameterTypes = new Class[] { + java.lang.String.class, com.liferay.portal.model.User.class + }; + + Object[] parameterValues = new Object[] { password, user }; + + invokeOnRemoteModel(methodName, parameterTypes, parameterValues); + } + catch (Exception e) { + throw new UnsupportedOperationException(e); + } + } + public BaseModel getSportelloRemoteModel() { return _sportelloRemoteModel; } @@ -555,14 +822,20 @@ public class SportelloClp extends BaseModelImpl implements Sportello clone.setSportelloId(getSportelloId()); clone.setGroupId(getGroupId()); clone.setCompanyId(getCompanyId()); - clone.setUserId(getUserId()); - clone.setUserName(getUserName()); clone.setCreateDate(getCreateDate()); + clone.setCreateUserId(getCreateUserId()); + clone.setCreateUserName(getCreateUserName()); clone.setModifiedDate(getModifiedDate()); + clone.setModifiedUserId(getModifiedUserId()); + clone.setModifiedUserName(getModifiedUserName()); + clone.setUserName(getUserName()); clone.setEmail(getEmail()); clone.setComuneId(getComuneId()); - clone.setApiKey(getApiKey()); clone.setAttivo(getAttivo()); + clone.setPassword(getPassword()); + clone.setPasswordModifiedDate(getPasswordModifiedDate()); + clone.setPasswordModifiedUserId(getPasswordModifiedUserId()); + clone.setPasswordModifiedUserName(getPasswordModifiedUserName()); return clone; } @@ -615,7 +888,7 @@ public class SportelloClp extends BaseModelImpl implements Sportello @Override public String toString() { - StringBundler sb = new StringBundler(23); + StringBundler sb = new StringBundler(35); sb.append("{sportelloId="); sb.append(getSportelloId()); @@ -623,22 +896,34 @@ public class SportelloClp extends BaseModelImpl implements Sportello sb.append(getGroupId()); sb.append(", companyId="); sb.append(getCompanyId()); - sb.append(", userId="); - sb.append(getUserId()); - sb.append(", userName="); - sb.append(getUserName()); sb.append(", createDate="); sb.append(getCreateDate()); + sb.append(", createUserId="); + sb.append(getCreateUserId()); + sb.append(", createUserName="); + sb.append(getCreateUserName()); sb.append(", modifiedDate="); sb.append(getModifiedDate()); + sb.append(", modifiedUserId="); + sb.append(getModifiedUserId()); + sb.append(", modifiedUserName="); + sb.append(getModifiedUserName()); + sb.append(", userName="); + sb.append(getUserName()); sb.append(", email="); sb.append(getEmail()); sb.append(", comuneId="); sb.append(getComuneId()); - sb.append(", apiKey="); - sb.append(getApiKey()); sb.append(", attivo="); sb.append(getAttivo()); + sb.append(", password="); + sb.append(getPassword()); + sb.append(", passwordModifiedDate="); + sb.append(getPasswordModifiedDate()); + sb.append(", passwordModifiedUserId="); + sb.append(getPasswordModifiedUserId()); + sb.append(", passwordModifiedUserName="); + sb.append(getPasswordModifiedUserName()); sb.append("}"); return sb.toString(); @@ -646,7 +931,7 @@ public class SportelloClp extends BaseModelImpl implements Sportello @Override public String toXmlString() { - StringBundler sb = new StringBundler(37); + StringBundler sb = new StringBundler(55); sb.append(""); sb.append("it.mwg.sicilia.sue.model.Sportello"); @@ -665,21 +950,33 @@ public class SportelloClp extends BaseModelImpl implements Sportello sb.append(getCompanyId()); sb.append("]]>"); sb.append( - "userIdcreateDate"); sb.append( - "userNamecreateUserId"); sb.append( - "createDatecreateUserName"); sb.append( "modifiedDate"); + sb.append( + "modifiedUserId"); + sb.append( + "modifiedUserName"); + sb.append( + "userName"); sb.append( "email implements Sportello "comuneId"); - sb.append( - "apiKey"); sb.append( "attivo"); + sb.append( + "password"); + sb.append( + "passwordModifiedDate"); + sb.append( + "passwordModifiedUserId"); + sb.append( + "passwordModifiedUserName"); sb.append(""); @@ -705,15 +1014,23 @@ public class SportelloClp extends BaseModelImpl implements Sportello private long _sportelloId; private long _groupId; private long _companyId; - private long _userId; - private String _userUuid; - private String _userName; private Date _createDate; + private long _createUserId; + private String _createUserUuid; + private String _createUserName; private Date _modifiedDate; + private long _modifiedUserId; + private String _modifiedUserUuid; + private String _modifiedUserName; + private String _userName; private String _email; private long _comuneId; - private String _apiKey; private boolean _attivo; + private String _password; + private Date _passwordModifiedDate; + private long _passwordModifiedUserId; + private String _passwordModifiedUserUuid; + private String _passwordModifiedUserName; private BaseModel _sportelloRemoteModel; private Class _clpSerializerClass = it.mwg.sicilia.sue.service.ClpSerializer.class; } \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloModel.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloModel.java index 3bdf8ef4..10b102b7 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloModel.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloModel.java @@ -18,7 +18,6 @@ import com.liferay.portal.kernel.bean.AutoEscape; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.model.BaseModel; import com.liferay.portal.model.CacheModel; -import com.liferay.portal.model.GroupedModel; import com.liferay.portal.service.ServiceContext; import com.liferay.portlet.expando.model.ExpandoBridge; @@ -40,7 +39,7 @@ import java.util.Date; * @see it.mwg.sicilia.sue.model.impl.SportelloModelImpl * @generated */ -public interface SportelloModel extends BaseModel, GroupedModel { +public interface SportelloModel extends BaseModel { /* * NOTE FOR DEVELOPERS: * @@ -80,7 +79,6 @@ public interface SportelloModel extends BaseModel, GroupedModel { * * @return the group ID of this sportello */ - @Override public long getGroupId(); /** @@ -88,7 +86,6 @@ public interface SportelloModel extends BaseModel, GroupedModel { * * @param groupId the group ID of this sportello */ - @Override public void setGroupId(long groupId); /** @@ -96,7 +93,6 @@ public interface SportelloModel extends BaseModel, GroupedModel { * * @return the company ID of this sportello */ - @Override public long getCompanyId(); /** @@ -104,81 +100,71 @@ public interface SportelloModel extends BaseModel, GroupedModel { * * @param companyId the company ID of this sportello */ - @Override public void setCompanyId(long companyId); /** - * Returns the user ID of this sportello. + * Returns the create date of this sportello. * - * @return the user ID of this sportello + * @return the create date of this sportello */ - @Override - public long getUserId(); + public Date getCreateDate(); /** - * Sets the user ID of this sportello. + * Sets the create date of this sportello. * - * @param userId the user ID of this sportello + * @param createDate the create date of this sportello */ - @Override - public void setUserId(long userId); + public void setCreateDate(Date createDate); /** - * Returns the user uuid of this sportello. + * Returns the create user ID of this sportello. * - * @return the user uuid of this sportello - * @throws SystemException if a system exception occurred + * @return the create user ID of this sportello */ - @Override - public String getUserUuid() throws SystemException; + public long getCreateUserId(); /** - * Sets the user uuid of this sportello. + * Sets the create user ID of this sportello. * - * @param userUuid the user uuid of this sportello + * @param createUserId the create user ID of this sportello */ - @Override - public void setUserUuid(String userUuid); + public void setCreateUserId(long createUserId); /** - * Returns the user name of this sportello. + * Returns the create user uuid of this sportello. * - * @return the user name of this sportello + * @return the create user uuid of this sportello + * @throws SystemException if a system exception occurred */ - @AutoEscape - @Override - public String getUserName(); + public String getCreateUserUuid() throws SystemException; /** - * Sets the user name of this sportello. + * Sets the create user uuid of this sportello. * - * @param userName the user name of this sportello + * @param createUserUuid the create user uuid of this sportello */ - @Override - public void setUserName(String userName); + public void setCreateUserUuid(String createUserUuid); /** - * Returns the create date of this sportello. + * Returns the create user name of this sportello. * - * @return the create date of this sportello + * @return the create user name of this sportello */ - @Override - public Date getCreateDate(); + @AutoEscape + public String getCreateUserName(); /** - * Sets the create date of this sportello. + * Sets the create user name of this sportello. * - * @param createDate the create date of this sportello + * @param createUserName the create user name of this sportello */ - @Override - public void setCreateDate(Date createDate); + public void setCreateUserName(String createUserName); /** * Returns the modified date of this sportello. * * @return the modified date of this sportello */ - @Override public Date getModifiedDate(); /** @@ -186,9 +172,67 @@ public interface SportelloModel extends BaseModel, GroupedModel { * * @param modifiedDate the modified date of this sportello */ - @Override public void setModifiedDate(Date modifiedDate); + /** + * Returns the modified user ID of this sportello. + * + * @return the modified user ID of this sportello + */ + public long getModifiedUserId(); + + /** + * Sets the modified user ID of this sportello. + * + * @param modifiedUserId the modified user ID of this sportello + */ + public void setModifiedUserId(long modifiedUserId); + + /** + * Returns the modified user uuid of this sportello. + * + * @return the modified user uuid of this sportello + * @throws SystemException if a system exception occurred + */ + public String getModifiedUserUuid() throws SystemException; + + /** + * Sets the modified user uuid of this sportello. + * + * @param modifiedUserUuid the modified user uuid of this sportello + */ + public void setModifiedUserUuid(String modifiedUserUuid); + + /** + * Returns the modified user name of this sportello. + * + * @return the modified user name of this sportello + */ + @AutoEscape + public String getModifiedUserName(); + + /** + * Sets the modified user name of this sportello. + * + * @param modifiedUserName the modified user name of this sportello + */ + public void setModifiedUserName(String modifiedUserName); + + /** + * Returns the user name of this sportello. + * + * @return the user name of this sportello + */ + @AutoEscape + public String getUserName(); + + /** + * Sets the user name of this sportello. + * + * @param userName the user name of this sportello + */ + public void setUserName(String userName); + /** * Returns the email of this sportello. * @@ -218,21 +262,6 @@ public interface SportelloModel extends BaseModel, GroupedModel { */ public void setComuneId(long comuneId); - /** - * Returns the api key of this sportello. - * - * @return the api key of this sportello - */ - @AutoEscape - public String getApiKey(); - - /** - * Sets the api key of this sportello. - * - * @param apiKey the api key of this sportello - */ - public void setApiKey(String apiKey); - /** * Returns the attivo of this sportello. * @@ -254,6 +283,79 @@ public interface SportelloModel extends BaseModel, GroupedModel { */ public void setAttivo(boolean attivo); + /** + * Returns the password of this sportello. + * + * @return the password of this sportello + */ + @AutoEscape + public String getPassword(); + + /** + * Sets the password of this sportello. + * + * @param password the password of this sportello + */ + public void setPassword(String password); + + /** + * Returns the password modified date of this sportello. + * + * @return the password modified date of this sportello + */ + public Date getPasswordModifiedDate(); + + /** + * Sets the password modified date of this sportello. + * + * @param passwordModifiedDate the password modified date of this sportello + */ + public void setPasswordModifiedDate(Date passwordModifiedDate); + + /** + * Returns the password modified user ID of this sportello. + * + * @return the password modified user ID of this sportello + */ + public long getPasswordModifiedUserId(); + + /** + * Sets the password modified user ID of this sportello. + * + * @param passwordModifiedUserId the password modified user ID of this sportello + */ + public void setPasswordModifiedUserId(long passwordModifiedUserId); + + /** + * Returns the password modified user uuid of this sportello. + * + * @return the password modified user uuid of this sportello + * @throws SystemException if a system exception occurred + */ + public String getPasswordModifiedUserUuid() throws SystemException; + + /** + * Sets the password modified user uuid of this sportello. + * + * @param passwordModifiedUserUuid the password modified user uuid of this sportello + */ + public void setPasswordModifiedUserUuid(String passwordModifiedUserUuid); + + /** + * Returns the password modified user name of this sportello. + * + * @return the password modified user name of this sportello + */ + @AutoEscape + public String getPasswordModifiedUserName(); + + /** + * Sets the password modified user name of this sportello. + * + * @param passwordModifiedUserName the password modified user name of this sportello + */ + public void setPasswordModifiedUserName(String passwordModifiedUserName); + @Override public boolean isNew(); diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloSoap.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloSoap.java index 7ec35dff..9ba70b01 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloSoap.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloSoap.java @@ -34,14 +34,20 @@ public class SportelloSoap implements Serializable { soapModel.setSportelloId(model.getSportelloId()); soapModel.setGroupId(model.getGroupId()); soapModel.setCompanyId(model.getCompanyId()); - soapModel.setUserId(model.getUserId()); - soapModel.setUserName(model.getUserName()); soapModel.setCreateDate(model.getCreateDate()); + soapModel.setCreateUserId(model.getCreateUserId()); + soapModel.setCreateUserName(model.getCreateUserName()); soapModel.setModifiedDate(model.getModifiedDate()); + soapModel.setModifiedUserId(model.getModifiedUserId()); + soapModel.setModifiedUserName(model.getModifiedUserName()); + soapModel.setUserName(model.getUserName()); soapModel.setEmail(model.getEmail()); soapModel.setComuneId(model.getComuneId()); - soapModel.setApiKey(model.getApiKey()); soapModel.setAttivo(model.getAttivo()); + soapModel.setPassword(model.getPassword()); + soapModel.setPasswordModifiedDate(model.getPasswordModifiedDate()); + soapModel.setPasswordModifiedUserId(model.getPasswordModifiedUserId()); + soapModel.setPasswordModifiedUserName(model.getPasswordModifiedUserName()); return soapModel; } @@ -118,28 +124,28 @@ public class SportelloSoap implements Serializable { _companyId = companyId; } - public long getUserId() { - return _userId; + public Date getCreateDate() { + return _createDate; } - public void setUserId(long userId) { - _userId = userId; + public void setCreateDate(Date createDate) { + _createDate = createDate; } - public String getUserName() { - return _userName; + public long getCreateUserId() { + return _createUserId; } - public void setUserName(String userName) { - _userName = userName; + public void setCreateUserId(long createUserId) { + _createUserId = createUserId; } - public Date getCreateDate() { - return _createDate; + public String getCreateUserName() { + return _createUserName; } - public void setCreateDate(Date createDate) { - _createDate = createDate; + public void setCreateUserName(String createUserName) { + _createUserName = createUserName; } public Date getModifiedDate() { @@ -150,6 +156,30 @@ public class SportelloSoap implements Serializable { _modifiedDate = modifiedDate; } + public long getModifiedUserId() { + return _modifiedUserId; + } + + public void setModifiedUserId(long modifiedUserId) { + _modifiedUserId = modifiedUserId; + } + + public String getModifiedUserName() { + return _modifiedUserName; + } + + public void setModifiedUserName(String modifiedUserName) { + _modifiedUserName = modifiedUserName; + } + + public String getUserName() { + return _userName; + } + + public void setUserName(String userName) { + _userName = userName; + } + public String getEmail() { return _email; } @@ -166,14 +196,6 @@ public class SportelloSoap implements Serializable { _comuneId = comuneId; } - public String getApiKey() { - return _apiKey; - } - - public void setApiKey(String apiKey) { - _apiKey = apiKey; - } - public boolean getAttivo() { return _attivo; } @@ -186,15 +208,53 @@ public class SportelloSoap implements Serializable { _attivo = attivo; } + public String getPassword() { + return _password; + } + + public void setPassword(String password) { + _password = password; + } + + public Date getPasswordModifiedDate() { + return _passwordModifiedDate; + } + + public void setPasswordModifiedDate(Date passwordModifiedDate) { + _passwordModifiedDate = passwordModifiedDate; + } + + public long getPasswordModifiedUserId() { + return _passwordModifiedUserId; + } + + public void setPasswordModifiedUserId(long passwordModifiedUserId) { + _passwordModifiedUserId = passwordModifiedUserId; + } + + public String getPasswordModifiedUserName() { + return _passwordModifiedUserName; + } + + public void setPasswordModifiedUserName(String passwordModifiedUserName) { + _passwordModifiedUserName = passwordModifiedUserName; + } + private long _sportelloId; private long _groupId; private long _companyId; - private long _userId; - private String _userName; private Date _createDate; + private long _createUserId; + private String _createUserName; private Date _modifiedDate; + private long _modifiedUserId; + private String _modifiedUserName; + private String _userName; private String _email; private long _comuneId; - private String _apiKey; private boolean _attivo; + private String _password; + private Date _passwordModifiedDate; + private long _passwordModifiedUserId; + private String _passwordModifiedUserName; } \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloWrapper.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloWrapper.java index 3c13c9de..01ba294e 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloWrapper.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/model/SportelloWrapper.java @@ -52,14 +52,20 @@ public class SportelloWrapper implements Sportello, ModelWrapper { attributes.put("sportelloId", getSportelloId()); attributes.put("groupId", getGroupId()); attributes.put("companyId", getCompanyId()); - attributes.put("userId", getUserId()); - attributes.put("userName", getUserName()); attributes.put("createDate", getCreateDate()); + attributes.put("createUserId", getCreateUserId()); + attributes.put("createUserName", getCreateUserName()); attributes.put("modifiedDate", getModifiedDate()); + attributes.put("modifiedUserId", getModifiedUserId()); + attributes.put("modifiedUserName", getModifiedUserName()); + attributes.put("userName", getUserName()); attributes.put("email", getEmail()); attributes.put("comuneId", getComuneId()); - attributes.put("apiKey", getApiKey()); attributes.put("attivo", getAttivo()); + attributes.put("password", getPassword()); + attributes.put("passwordModifiedDate", getPasswordModifiedDate()); + attributes.put("passwordModifiedUserId", getPasswordModifiedUserId()); + attributes.put("passwordModifiedUserName", getPasswordModifiedUserName()); return attributes; } @@ -84,22 +90,22 @@ public class SportelloWrapper implements Sportello, ModelWrapper { setCompanyId(companyId); } - Long userId = (Long)attributes.get("userId"); + Date createDate = (Date)attributes.get("createDate"); - if (userId != null) { - setUserId(userId); + if (createDate != null) { + setCreateDate(createDate); } - String userName = (String)attributes.get("userName"); + Long createUserId = (Long)attributes.get("createUserId"); - if (userName != null) { - setUserName(userName); + if (createUserId != null) { + setCreateUserId(createUserId); } - Date createDate = (Date)attributes.get("createDate"); + String createUserName = (String)attributes.get("createUserName"); - if (createDate != null) { - setCreateDate(createDate); + if (createUserName != null) { + setCreateUserName(createUserName); } Date modifiedDate = (Date)attributes.get("modifiedDate"); @@ -108,6 +114,24 @@ public class SportelloWrapper implements Sportello, ModelWrapper { setModifiedDate(modifiedDate); } + Long modifiedUserId = (Long)attributes.get("modifiedUserId"); + + if (modifiedUserId != null) { + setModifiedUserId(modifiedUserId); + } + + String modifiedUserName = (String)attributes.get("modifiedUserName"); + + if (modifiedUserName != null) { + setModifiedUserName(modifiedUserName); + } + + String userName = (String)attributes.get("userName"); + + if (userName != null) { + setUserName(userName); + } + String email = (String)attributes.get("email"); if (email != null) { @@ -120,17 +144,37 @@ public class SportelloWrapper implements Sportello, ModelWrapper { setComuneId(comuneId); } - String apiKey = (String)attributes.get("apiKey"); - - if (apiKey != null) { - setApiKey(apiKey); - } - Boolean attivo = (Boolean)attributes.get("attivo"); if (attivo != null) { setAttivo(attivo); } + + String password = (String)attributes.get("password"); + + if (password != null) { + setPassword(password); + } + + Date passwordModifiedDate = (Date)attributes.get("passwordModifiedDate"); + + if (passwordModifiedDate != null) { + setPasswordModifiedDate(passwordModifiedDate); + } + + Long passwordModifiedUserId = (Long)attributes.get( + "passwordModifiedUserId"); + + if (passwordModifiedUserId != null) { + setPasswordModifiedUserId(passwordModifiedUserId); + } + + String passwordModifiedUserName = (String)attributes.get( + "passwordModifiedUserName"); + + if (passwordModifiedUserName != null) { + setPasswordModifiedUserName(passwordModifiedUserName); + } } /** @@ -214,85 +258,85 @@ public class SportelloWrapper implements Sportello, ModelWrapper { } /** - * Returns the user ID of this sportello. + * Returns the create date of this sportello. * - * @return the user ID of this sportello + * @return the create date of this sportello */ @Override - public long getUserId() { - return _sportello.getUserId(); + public java.util.Date getCreateDate() { + return _sportello.getCreateDate(); } /** - * Sets the user ID of this sportello. + * Sets the create date of this sportello. * - * @param userId the user ID of this sportello + * @param createDate the create date of this sportello */ @Override - public void setUserId(long userId) { - _sportello.setUserId(userId); + public void setCreateDate(java.util.Date createDate) { + _sportello.setCreateDate(createDate); } /** - * Returns the user uuid of this sportello. + * Returns the create user ID of this sportello. * - * @return the user uuid of this sportello - * @throws SystemException if a system exception occurred + * @return the create user ID of this sportello */ @Override - public java.lang.String getUserUuid() - throws com.liferay.portal.kernel.exception.SystemException { - return _sportello.getUserUuid(); + public long getCreateUserId() { + return _sportello.getCreateUserId(); } /** - * Sets the user uuid of this sportello. + * Sets the create user ID of this sportello. * - * @param userUuid the user uuid of this sportello + * @param createUserId the create user ID of this sportello */ @Override - public void setUserUuid(java.lang.String userUuid) { - _sportello.setUserUuid(userUuid); + public void setCreateUserId(long createUserId) { + _sportello.setCreateUserId(createUserId); } /** - * Returns the user name of this sportello. + * Returns the create user uuid of this sportello. * - * @return the user name of this sportello + * @return the create user uuid of this sportello + * @throws SystemException if a system exception occurred */ @Override - public java.lang.String getUserName() { - return _sportello.getUserName(); + public java.lang.String getCreateUserUuid() + throws com.liferay.portal.kernel.exception.SystemException { + return _sportello.getCreateUserUuid(); } /** - * Sets the user name of this sportello. + * Sets the create user uuid of this sportello. * - * @param userName the user name of this sportello + * @param createUserUuid the create user uuid of this sportello */ @Override - public void setUserName(java.lang.String userName) { - _sportello.setUserName(userName); + public void setCreateUserUuid(java.lang.String createUserUuid) { + _sportello.setCreateUserUuid(createUserUuid); } /** - * Returns the create date of this sportello. + * Returns the create user name of this sportello. * - * @return the create date of this sportello + * @return the create user name of this sportello */ @Override - public java.util.Date getCreateDate() { - return _sportello.getCreateDate(); + public java.lang.String getCreateUserName() { + return _sportello.getCreateUserName(); } /** - * Sets the create date of this sportello. + * Sets the create user name of this sportello. * - * @param createDate the create date of this sportello + * @param createUserName the create user name of this sportello */ @Override - public void setCreateDate(java.util.Date createDate) { - _sportello.setCreateDate(createDate); + public void setCreateUserName(java.lang.String createUserName) { + _sportello.setCreateUserName(createUserName); } /** @@ -315,6 +359,88 @@ public class SportelloWrapper implements Sportello, ModelWrapper { _sportello.setModifiedDate(modifiedDate); } + /** + * Returns the modified user ID of this sportello. + * + * @return the modified user ID of this sportello + */ + @Override + public long getModifiedUserId() { + return _sportello.getModifiedUserId(); + } + + /** + * Sets the modified user ID of this sportello. + * + * @param modifiedUserId the modified user ID of this sportello + */ + @Override + public void setModifiedUserId(long modifiedUserId) { + _sportello.setModifiedUserId(modifiedUserId); + } + + /** + * Returns the modified user uuid of this sportello. + * + * @return the modified user uuid of this sportello + * @throws SystemException if a system exception occurred + */ + @Override + public java.lang.String getModifiedUserUuid() + throws com.liferay.portal.kernel.exception.SystemException { + return _sportello.getModifiedUserUuid(); + } + + /** + * Sets the modified user uuid of this sportello. + * + * @param modifiedUserUuid the modified user uuid of this sportello + */ + @Override + public void setModifiedUserUuid(java.lang.String modifiedUserUuid) { + _sportello.setModifiedUserUuid(modifiedUserUuid); + } + + /** + * Returns the modified user name of this sportello. + * + * @return the modified user name of this sportello + */ + @Override + public java.lang.String getModifiedUserName() { + return _sportello.getModifiedUserName(); + } + + /** + * Sets the modified user name of this sportello. + * + * @param modifiedUserName the modified user name of this sportello + */ + @Override + public void setModifiedUserName(java.lang.String modifiedUserName) { + _sportello.setModifiedUserName(modifiedUserName); + } + + /** + * Returns the user name of this sportello. + * + * @return the user name of this sportello + */ + @Override + public java.lang.String getUserName() { + return _sportello.getUserName(); + } + + /** + * Sets the user name of this sportello. + * + * @param userName the user name of this sportello + */ + @Override + public void setUserName(java.lang.String userName) { + _sportello.setUserName(userName); + } + /** * Returns the email of this sportello. * @@ -355,26 +481,6 @@ public class SportelloWrapper implements Sportello, ModelWrapper { _sportello.setComuneId(comuneId); } - /** - * Returns the api key of this sportello. - * - * @return the api key of this sportello - */ - @Override - public java.lang.String getApiKey() { - return _sportello.getApiKey(); - } - - /** - * Sets the api key of this sportello. - * - * @param apiKey the api key of this sportello - */ - @Override - public void setApiKey(java.lang.String apiKey) { - _sportello.setApiKey(apiKey); - } - /** * Returns the attivo of this sportello. * @@ -405,6 +511,110 @@ public class SportelloWrapper implements Sportello, ModelWrapper { _sportello.setAttivo(attivo); } + /** + * Returns the password of this sportello. + * + * @return the password of this sportello + */ + @Override + public java.lang.String getPassword() { + return _sportello.getPassword(); + } + + /** + * Sets the password of this sportello. + * + * @param password the password of this sportello + */ + @Override + public void setPassword(java.lang.String password) { + _sportello.setPassword(password); + } + + /** + * Returns the password modified date of this sportello. + * + * @return the password modified date of this sportello + */ + @Override + public java.util.Date getPasswordModifiedDate() { + return _sportello.getPasswordModifiedDate(); + } + + /** + * Sets the password modified date of this sportello. + * + * @param passwordModifiedDate the password modified date of this sportello + */ + @Override + public void setPasswordModifiedDate(java.util.Date passwordModifiedDate) { + _sportello.setPasswordModifiedDate(passwordModifiedDate); + } + + /** + * Returns the password modified user ID of this sportello. + * + * @return the password modified user ID of this sportello + */ + @Override + public long getPasswordModifiedUserId() { + return _sportello.getPasswordModifiedUserId(); + } + + /** + * Sets the password modified user ID of this sportello. + * + * @param passwordModifiedUserId the password modified user ID of this sportello + */ + @Override + public void setPasswordModifiedUserId(long passwordModifiedUserId) { + _sportello.setPasswordModifiedUserId(passwordModifiedUserId); + } + + /** + * Returns the password modified user uuid of this sportello. + * + * @return the password modified user uuid of this sportello + * @throws SystemException if a system exception occurred + */ + @Override + public java.lang.String getPasswordModifiedUserUuid() + throws com.liferay.portal.kernel.exception.SystemException { + return _sportello.getPasswordModifiedUserUuid(); + } + + /** + * Sets the password modified user uuid of this sportello. + * + * @param passwordModifiedUserUuid the password modified user uuid of this sportello + */ + @Override + public void setPasswordModifiedUserUuid( + java.lang.String passwordModifiedUserUuid) { + _sportello.setPasswordModifiedUserUuid(passwordModifiedUserUuid); + } + + /** + * Returns the password modified user name of this sportello. + * + * @return the password modified user name of this sportello + */ + @Override + public java.lang.String getPasswordModifiedUserName() { + return _sportello.getPasswordModifiedUserName(); + } + + /** + * Sets the password modified user name of this sportello. + * + * @param passwordModifiedUserName the password modified user name of this sportello + */ + @Override + public void setPasswordModifiedUserName( + java.lang.String passwordModifiedUserName) { + _sportello.setPasswordModifiedUserName(passwordModifiedUserName); + } + @Override public boolean isNew() { return _sportello.isNew(); @@ -509,6 +719,22 @@ public class SportelloWrapper implements Sportello, ModelWrapper { _sportello.persist(); } + @Override + public java.lang.String encryptPassword(java.lang.String password) { + return _sportello.encryptPassword(password); + } + + @Override + public boolean checkPassword(java.lang.String password) { + return _sportello.checkPassword(password); + } + + @Override + public void setEncryptedPassword(java.lang.String password, + com.liferay.portal.model.User user) { + _sportello.setEncryptedPassword(password, user); + } + @Override public java.lang.String getCodiceProvincia() throws com.liferay.portal.kernel.exception.PortalException, diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/ClpSerializer.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/ClpSerializer.java index 64bec69d..e92200c8 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/ClpSerializer.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/ClpSerializer.java @@ -317,6 +317,18 @@ public class ClpSerializer { return new SystemException(); } + if (className.equals("it.mwg.sicilia.sue.ExpiredTokenException")) { + return new it.mwg.sicilia.sue.ExpiredTokenException(); + } + + if (className.equals("it.mwg.sicilia.sue.InactiveSportelloException")) { + return new it.mwg.sicilia.sue.InactiveSportelloException(); + } + + if (className.equals("it.mwg.sicilia.sue.InvalidTokenException")) { + return new it.mwg.sicilia.sue.InvalidTokenException(); + } + if (className.equals("it.mwg.sicilia.sue.NoSuchApiSettingException")) { return new it.mwg.sicilia.sue.NoSuchApiSettingException(); } diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalService.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalService.java index 39793741..303dd528 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalService.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalService.java @@ -249,4 +249,9 @@ public interface SportelloLocalService extends BaseLocalService, public java.lang.Object invokeMethod(java.lang.String name, java.lang.String[] parameterTypes, java.lang.Object[] arguments) throws java.lang.Throwable; + + public it.mwg.sicilia.sue.model.Sportello findByUserName( + java.lang.String userName) + throws com.liferay.portal.kernel.exception.SystemException, + it.mwg.sicilia.sue.NoSuchSportelloException; } \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalServiceClp.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalServiceClp.java index 0ef97d83..052975a2 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalServiceClp.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalServiceClp.java @@ -113,6 +113,10 @@ public class SportelloLocalServiceClp implements SportelloLocalService { _methodName17 = "setBeanIdentifier"; _methodParameterTypes17 = new String[] { "java.lang.String" }; + + _methodName19 = "findByUserName"; + + _methodParameterTypes19 = new String[] { "java.lang.String" }; } @Override @@ -661,6 +665,41 @@ public class SportelloLocalServiceClp implements SportelloLocalService { throw new UnsupportedOperationException(); } + @Override + public it.mwg.sicilia.sue.model.Sportello findByUserName( + java.lang.String userName) + throws com.liferay.portal.kernel.exception.SystemException, + it.mwg.sicilia.sue.NoSuchSportelloException { + Object returnObj = null; + + try { + returnObj = _invokableLocalService.invokeMethod(_methodName19, + _methodParameterTypes19, + new Object[] { ClpSerializer.translateInput(userName) }); + } + catch (Throwable t) { + t = ClpSerializer.translateThrowable(t); + + if (t instanceof com.liferay.portal.kernel.exception.SystemException) { + throw (com.liferay.portal.kernel.exception.SystemException)t; + } + + if (t instanceof it.mwg.sicilia.sue.NoSuchSportelloException) { + throw (it.mwg.sicilia.sue.NoSuchSportelloException)t; + } + + if (t instanceof RuntimeException) { + throw (RuntimeException)t; + } + else { + throw new RuntimeException(t.getClass().getName() + + " is not a valid exception"); + } + } + + return (it.mwg.sicilia.sue.model.Sportello)ClpSerializer.translateOutput(returnObj); + } + private InvokableLocalService _invokableLocalService; private String _methodName0; private String[] _methodParameterTypes0; @@ -698,4 +737,6 @@ public class SportelloLocalServiceClp implements SportelloLocalService { private String[] _methodParameterTypes16; private String _methodName17; private String[] _methodParameterTypes17; + private String _methodName19; + private String[] _methodParameterTypes19; } \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalServiceUtil.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalServiceUtil.java index c2e5e6bb..ecb4c20c 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalServiceUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalServiceUtil.java @@ -275,6 +275,13 @@ public class SportelloLocalServiceUtil { return getService().invokeMethod(name, parameterTypes, arguments); } + public static it.mwg.sicilia.sue.model.Sportello findByUserName( + java.lang.String userName) + throws com.liferay.portal.kernel.exception.SystemException, + it.mwg.sicilia.sue.NoSuchSportelloException { + return getService().findByUserName(userName); + } + public static void clearService() { _service = null; } diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalServiceWrapper.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalServiceWrapper.java index de7ea4a3..bc6a5cbf 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalServiceWrapper.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloLocalServiceWrapper.java @@ -282,6 +282,14 @@ public class SportelloLocalServiceWrapper implements SportelloLocalService, arguments); } + @Override + public it.mwg.sicilia.sue.model.Sportello findByUserName( + java.lang.String userName) + throws com.liferay.portal.kernel.exception.SystemException, + it.mwg.sicilia.sue.NoSuchSportelloException { + return _sportelloLocalService.findByUserName(userName); + } + /** * @deprecated As of 6.1.0, replaced by {@link #getWrappedService} */ diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloService.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloService.java index 69076277..43edace5 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloService.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloService.java @@ -63,4 +63,6 @@ public interface SportelloService extends BaseService, InvokableService { public java.lang.Object invokeMethod(java.lang.String name, java.lang.String[] parameterTypes, java.lang.Object[] arguments) throws java.lang.Throwable; + + public java.lang.String generaPassword(int lunghezza); } \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloServiceClp.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloServiceClp.java index ac2bdf86..3ca575ff 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloServiceClp.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloServiceClp.java @@ -31,6 +31,10 @@ public class SportelloServiceClp implements SportelloService { _methodName1 = "setBeanIdentifier"; _methodParameterTypes1 = new String[] { "java.lang.String" }; + + _methodName3 = "generaPassword"; + + _methodParameterTypes3 = new String[] { "int" }; } @Override @@ -83,9 +87,34 @@ public class SportelloServiceClp implements SportelloService { throw new UnsupportedOperationException(); } + @Override + public java.lang.String generaPassword(int lunghezza) { + Object returnObj = null; + + try { + returnObj = _invokableService.invokeMethod(_methodName3, + _methodParameterTypes3, new Object[] { lunghezza }); + } + catch (Throwable t) { + t = ClpSerializer.translateThrowable(t); + + if (t instanceof RuntimeException) { + throw (RuntimeException)t; + } + else { + throw new RuntimeException(t.getClass().getName() + + " is not a valid exception"); + } + } + + return (java.lang.String)ClpSerializer.translateOutput(returnObj); + } + private InvokableService _invokableService; private String _methodName0; private String[] _methodParameterTypes0; private String _methodName1; private String[] _methodParameterTypes1; + private String _methodName3; + private String[] _methodParameterTypes3; } \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloServiceUtil.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloServiceUtil.java index 695cdb78..d262f4df 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloServiceUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloServiceUtil.java @@ -63,6 +63,10 @@ public class SportelloServiceUtil { return getService().invokeMethod(name, parameterTypes, arguments); } + public static java.lang.String generaPassword(int lunghezza) { + return getService().generaPassword(lunghezza); + } + public static void clearService() { _service = null; } diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloServiceWrapper.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloServiceWrapper.java index 1c487d54..4a07e390 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloServiceWrapper.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/SportelloServiceWrapper.java @@ -56,6 +56,11 @@ public class SportelloServiceWrapper implements SportelloService, return _sportelloService.invokeMethod(name, parameterTypes, arguments); } + @Override + public java.lang.String generaPassword(int lunghezza) { + return _sportelloService.generaPassword(lunghezza); + } + /** * @deprecated As of 6.1.0, replaced by {@link #getWrappedService} */ diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/persistence/SportelloPersistence.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/persistence/SportelloPersistence.java index f5fbc933..69282a64 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/persistence/SportelloPersistence.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/persistence/SportelloPersistence.java @@ -92,6 +92,64 @@ public interface SportelloPersistence extends BasePersistence { public int countByComuneId(long comuneId) throws com.liferay.portal.kernel.exception.SystemException; + /** + * Returns the sportello where userName = ? or throws a {@link it.mwg.sicilia.sue.NoSuchSportelloException} if it could not be found. + * + * @param userName the user name + * @return the matching sportello + * @throws it.mwg.sicilia.sue.NoSuchSportelloException if a matching sportello could not be found + * @throws SystemException if a system exception occurred + */ + public it.mwg.sicilia.sue.model.Sportello findByUserName( + java.lang.String userName) + throws com.liferay.portal.kernel.exception.SystemException, + it.mwg.sicilia.sue.NoSuchSportelloException; + + /** + * Returns the sportello where userName = ? or returns null if it could not be found. Uses the finder cache. + * + * @param userName the user name + * @return the matching sportello, or null if a matching sportello could not be found + * @throws SystemException if a system exception occurred + */ + public it.mwg.sicilia.sue.model.Sportello fetchByUserName( + java.lang.String userName) + throws com.liferay.portal.kernel.exception.SystemException; + + /** + * Returns the sportello where userName = ? or returns null if it could not be found, optionally using the finder cache. + * + * @param userName the user name + * @param retrieveFromCache whether to use the finder cache + * @return the matching sportello, or null if a matching sportello could not be found + * @throws SystemException if a system exception occurred + */ + public it.mwg.sicilia.sue.model.Sportello fetchByUserName( + java.lang.String userName, boolean retrieveFromCache) + throws com.liferay.portal.kernel.exception.SystemException; + + /** + * Removes the sportello where userName = ? from the database. + * + * @param userName the user name + * @return the sportello that was removed + * @throws SystemException if a system exception occurred + */ + public it.mwg.sicilia.sue.model.Sportello removeByUserName( + java.lang.String userName) + throws com.liferay.portal.kernel.exception.SystemException, + it.mwg.sicilia.sue.NoSuchSportelloException; + + /** + * Returns the number of sportellos where userName = ?. + * + * @param userName the user name + * @return the number of matching sportellos + * @throws SystemException if a system exception occurred + */ + public int countByUserName(java.lang.String userName) + throws com.liferay.portal.kernel.exception.SystemException; + /** * Caches the sportello in the entity cache if it is enabled. * diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/persistence/SportelloUtil.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/persistence/SportelloUtil.java index 344db9c0..2d2afe73 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/persistence/SportelloUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/service/it/mwg/sicilia/sue/service/persistence/SportelloUtil.java @@ -178,6 +178,74 @@ public class SportelloUtil { return getPersistence().countByComuneId(comuneId); } + /** + * Returns the sportello where userName = ? or throws a {@link it.mwg.sicilia.sue.NoSuchSportelloException} if it could not be found. + * + * @param userName the user name + * @return the matching sportello + * @throws it.mwg.sicilia.sue.NoSuchSportelloException if a matching sportello could not be found + * @throws SystemException if a system exception occurred + */ + public static it.mwg.sicilia.sue.model.Sportello findByUserName( + java.lang.String userName) + throws com.liferay.portal.kernel.exception.SystemException, + it.mwg.sicilia.sue.NoSuchSportelloException { + return getPersistence().findByUserName(userName); + } + + /** + * Returns the sportello where userName = ? or returns null if it could not be found. Uses the finder cache. + * + * @param userName the user name + * @return the matching sportello, or null if a matching sportello could not be found + * @throws SystemException if a system exception occurred + */ + public static it.mwg.sicilia.sue.model.Sportello fetchByUserName( + java.lang.String userName) + throws com.liferay.portal.kernel.exception.SystemException { + return getPersistence().fetchByUserName(userName); + } + + /** + * Returns the sportello where userName = ? or returns null if it could not be found, optionally using the finder cache. + * + * @param userName the user name + * @param retrieveFromCache whether to use the finder cache + * @return the matching sportello, or null if a matching sportello could not be found + * @throws SystemException if a system exception occurred + */ + public static it.mwg.sicilia.sue.model.Sportello fetchByUserName( + java.lang.String userName, boolean retrieveFromCache) + throws com.liferay.portal.kernel.exception.SystemException { + return getPersistence().fetchByUserName(userName, retrieveFromCache); + } + + /** + * Removes the sportello where userName = ? from the database. + * + * @param userName the user name + * @return the sportello that was removed + * @throws SystemException if a system exception occurred + */ + public static it.mwg.sicilia.sue.model.Sportello removeByUserName( + java.lang.String userName) + throws com.liferay.portal.kernel.exception.SystemException, + it.mwg.sicilia.sue.NoSuchSportelloException { + return getPersistence().removeByUserName(userName); + } + + /** + * Returns the number of sportellos where userName = ?. + * + * @param userName the user name + * @return the number of matching sportellos + * @throws SystemException if a system exception occurred + */ + public static int countByUserName(java.lang.String userName) + throws com.liferay.portal.kernel.exception.SystemException { + return getPersistence().countByUserName(userName); + } + /** * Caches the sportello in the entity cache if it is enabled. * diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/sql/indexes.properties b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/sql/indexes.properties index 7f94ec66..6d9c3855 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/sql/indexes.properties +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/sql/indexes.properties @@ -1,3 +1,4 @@ IX_7B780A8D=sicilia_sue_ApiSetting.CompanyIdKey -IX_8B2AB20B=sicilia_sue_Sportello.ComuneId \ No newline at end of file +IX_8B2AB20B=sicilia_sue_Sportello.ComuneId +IX_F4E738BB=sicilia_sue_Sportello.UserName \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/sql/indexes.sql b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/sql/indexes.sql index c1afa6ba..125d6c6c 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/sql/indexes.sql +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/sql/indexes.sql @@ -1,3 +1,4 @@ create unique index IX_7B780A8D on sicilia_sue_ApiSetting (companyId, key_); -create unique index IX_8B2AB20B on sicilia_sue_Sportello (comuneId); \ No newline at end of file +create unique index IX_8B2AB20B on sicilia_sue_Sportello (comuneId); +create unique index IX_F4E738BB on sicilia_sue_Sportello (userName); \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/sql/tables.sql b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/sql/tables.sql index b98c487c..4dd0bee4 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/sql/tables.sql +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/sql/tables.sql @@ -9,12 +9,18 @@ create table sicilia_sue_Sportello ( sportelloId LONG not null primary key, groupId LONG, companyId LONG, - userId LONG, - userName VARCHAR(240) null, createDate DATE null, + createUserId LONG, + createUserName VARCHAR(75) null, modifiedDate DATE null, + modifiedUserId LONG, + modifiedUserName VARCHAR(75) null, + userName VARCHAR(75) null, email VARCHAR(240) null, comuneId LONG, - apiKey VARCHAR(240) null, - attivo BOOLEAN + attivo BOOLEAN, + password_ VARCHAR(75) null, + passwordModifiedDate DATE null, + passwordModifiedUserId LONG, + passwordModifiedUserName VARCHAR(240) null ); \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/META-INF/portlet-hbm.xml b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/META-INF/portlet-hbm.xml index c568aa50..f3590625 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/META-INF/portlet-hbm.xml +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/META-INF/portlet-hbm.xml @@ -20,13 +20,19 @@ - - + + + + + - + + + + \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/META-INF/portlet-model-hints.xml b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/META-INF/portlet-model-hints.xml index b69ced79..87e5cf33 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/META-INF/portlet-model-hints.xml +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/META-INF/portlet-model-hints.xml @@ -13,19 +13,23 @@ - - - 240 - + + + + + 240 - + + + + + 240 - \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/META-INF/portlet-orm.xml b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/META-INF/portlet-orm.xml index 94ff9bfe..3864ca2a 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/META-INF/portlet-orm.xml +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/META-INF/portlet-orm.xml @@ -27,22 +27,34 @@ - - TIMESTAMP + + TIMESTAMP + + + - + + + + + TIMESTAMP + + + + + + - diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/content/Language.properties b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/content/Language.properties index ff9528b9..8e710091 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/content/Language.properties +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/content/Language.properties @@ -1,3 +1,4 @@ email = Email nomeComune = Comune -nomeProvincia = Provincia \ No newline at end of file +nomeProvincia = Provincia +userName = Login diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/AccessToken.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/AccessToken.java new file mode 100644 index 00000000..8dcf7dd2 --- /dev/null +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/AccessToken.java @@ -0,0 +1,99 @@ +package it.mwg.sicilia.sue.api.v1; + +import it.mwg.sicilia.sue.ExpiredTokenException; +import it.mwg.sicilia.sue.InactiveSportelloException; +import it.mwg.sicilia.sue.InvalidTokenException; +import it.mwg.sicilia.sue.model.Sportello; +import it.mwg.sicilia.sue.service.ApiSettingLocalServiceUtil; +import it.mwg.sicilia.sue.service.SportelloLocalServiceUtil; + +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Date; + +import javax.crypto.Cipher; + +import com.liferay.portal.kernel.json.JSONFactoryUtil; +import com.liferay.portal.kernel.json.JSONObject; +import com.liferay.portal.kernel.security.SecureRandom; +import com.liferay.portal.kernel.util.Validator; +import com.sun.org.apache.xml.internal.security.utils.Base64; + +public class AccessToken { + + private long timestamp; + private long sportelloId; + private String token; + + private static final long MAX_AGE = 15 * 60 * 1000; + + private static final String TIMESTAMP = "timestamp"; + private static final String SPORTELLO_ID = "sportelloId"; + private static final String SALT = "salt"; + private static final String SECRET = "secret"; + + public AccessToken(Sportello sportello) throws Exception { + + timestamp = new Date().getTime(); + sportelloId = sportello.getSportelloId(); + JSONObject payload = JSONFactoryUtil.createJSONObject(); + payload.put(TIMESTAMP, timestamp); + payload.put(SPORTELLO_ID, sportelloId); + SecureRandom rnd = new SecureRandom(); + payload.put(SALT, rnd.nextLong()); + payload.put(SECRET, ApiSettingLocalServiceUtil.get(sportello.getCompanyId(), ApiConstants.API_SECRET)); + String key = ApiSettingLocalServiceUtil.get(sportello.getCompanyId(), ApiConstants.API_PUBLIC_KEY); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(Base64.decode(key)); + PublicKey publicKey = keyFactory.generatePublic(pubKeySpec); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + token = Base64.encode(cipher.doFinal(payload.toString().getBytes())); + } + + public AccessToken(String token) throws Exception { + + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + String key = ApiSettingLocalServiceUtil.get(20155, ApiConstants.API_PRIVATE_KEY); + PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(Base64.decode(key)); + PrivateKey privateKey = keyFactory.generatePrivate(privKeySpec); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + String json; + JSONObject payload; + try { + json = new String(cipher.doFinal(Base64.decode(token))); + payload = JSONFactoryUtil.createJSONObject(json); + } catch (Exception e) { + throw new InvalidTokenException(); + } + if (!ApiSettingLocalServiceUtil.get(20155, ApiConstants.API_SECRET).equals(payload.getString(SECRET))) { + throw new InvalidTokenException(); + } + timestamp = payload.getLong(TIMESTAMP); + long current = new Date().getTime(); + if ((current < timestamp) || (current - timestamp > MAX_AGE)) { + System.out.println("**** current = " + current + ", timestamp = " + timestamp); + throw new ExpiredTokenException(); + } + sportelloId = payload.getLong(SPORTELLO_ID); + Sportello sportello = SportelloLocalServiceUtil.getSportello(sportelloId); + if (Validator.isNull(sportello) || !sportello.isAttivo()) { + throw new InactiveSportelloException(); + } + this.token = token; + } + + public long getSportelloId() { + + return sportelloId; + } + + public String getToken() { + + return token; + } +} diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/ApiServlet.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/ApiServlet.java index 2eb22b51..f2668f58 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/ApiServlet.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/ApiServlet.java @@ -1,19 +1,12 @@ package it.mwg.sicilia.sue.api.v1; -import it.mwg.sicilia.sue.model.Sportello; - import java.io.IOException; -import java.io.InputStreamReader; -import java.io.Serializable; -import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.liferay.portal.kernel.json.JSONDeserializer; -import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.util.StringPool; @@ -26,8 +19,6 @@ import com.liferay.portal.kernel.util.Validator; public class ApiServlet extends HttpServlet { private static final Log _log = LogFactoryUtil.getLog(ApiServlet.class); - private static final JSONDeserializer> deserializer = JSONFactoryUtil - .createJSONDeserializer(); @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { @@ -50,42 +41,23 @@ public class ApiServlet extends HttpServlet { private void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String info = request.getPathInfo(); - if (Validator.isNull(info)) { - info = StringPool.BLANK; + String pathInfo = request.getPathInfo(); + if (Validator.isNull(pathInfo)) { + pathInfo = StringPool.BLANK; } else { - info = request.getPathInfo().substring(1); + pathInfo = request.getPathInfo().substring(1); } - Command command = Commands.get(info); + Command command = Commands.get(pathInfo); if (Validator.isNull(command)) { response.sendError(HttpServletResponse.SC_NOT_FOUND); + } else if (!command.getMethods().contains(request.getMethod())) { + response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED); } else { - Map parameters = deserializer.deserialize(new InputStreamReader(request - .getInputStream())); - long timestamp = 0; - String uuid = null; - String signature = null; try { - timestamp = (Long) parameters.get(Parameters.AUTH_TIMESTAMP); - uuid = (String) parameters.get(Parameters.AUTH_USER_ID); - signature = (String) parameters.get(Parameters.AUTH_SIGNATURE); - } catch (ClassCastException e) { - } - if ((0 == timestamp) || Validator.isNull(uuid) || Validator.isNull(signature)) { - response.sendError(HttpServletResponse.SC_BAD_REQUEST); - } else if (!verifySignature(timestamp, signature)) { - response.sendError(HttpServletResponse.SC_FORBIDDEN); - } else if (!command.getMethods().contains(request.getMethod())) { - response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED); - } else { command.run(request, response); + } catch (Exception e) { + _log.error(e.getMessage(), e); } } } - - private boolean verifySignature(long timestamp, String signature) { - - Sportello sportello; - return false; - } } diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/ApiUtil.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/ApiUtil.java index 98e01bd2..8eae6aae 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/ApiUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/ApiUtil.java @@ -18,7 +18,6 @@ import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.security.SecureRandom; import com.liferay.portal.kernel.util.StringPool; -import com.liferay.portal.security.auth.CompanyThreadLocal; import com.sun.org.apache.xml.internal.security.utils.Base64; public class ApiUtil { @@ -57,10 +56,4 @@ public class ApiUtil { String check = DigestUtils.sha256Hex(hash + secret); return hash + StringPool.PERIOD + check; } - - public static String getToken(long sportelloId) throws Exception { - - long companyId = CompanyThreadLocal.getCompanyId(); - return getToken(companyId, sportelloId); - } } diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Command.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Command.java index f93ab401..ae2e6f6f 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Command.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Command.java @@ -1,18 +1,37 @@ package it.mwg.sicilia.sue.api.v1; +import it.mwg.sicilia.sue.ExpiredTokenException; +import it.mwg.sicilia.sue.InactiveSportelloException; +import it.mwg.sicilia.sue.InvalidTokenException; + import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Serializable; import java.util.Arrays; import java.util.List; +import java.util.Map; -import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.liferay.portal.kernel.json.JSONDeserializer; +import com.liferay.portal.kernel.json.JSONFactoryUtil; +import com.liferay.portal.kernel.log.Log; +import com.liferay.portal.kernel.log.LogFactoryUtil; +import com.liferay.portal.kernel.servlet.ServletResponseUtil; +import com.liferay.portal.kernel.util.ContentTypes; +import com.liferay.portal.kernel.util.StringPool; + public abstract class Command { + protected static final Log _log = LogFactoryUtil.getLog(Command.class); + protected Map parameters = null; + private String verb; private List methods; private String description; + private static final JSONDeserializer> deserializer = JSONFactoryUtil + .createJSONDeserializer(); public Command(String verb, String description, String... methods) { @@ -36,6 +55,37 @@ public abstract class Command { return description; } - public abstract void run(HttpServletRequest request, HttpServletResponse response) throws ServletException, - IOException; + public abstract void run(HttpServletRequest request, HttpServletResponse response) throws Exception; + + protected Map readParameters(HttpServletRequest request) throws IOException { + + parameters = deserializer.deserialize(new InputStreamReader(request.getInputStream())); + return parameters; + } + + protected void setJson(HttpServletResponse response) { + + response.setContentType(ContentTypes.APPLICATION_JSON); + response.setCharacterEncoding(StringPool.UTF8); + } + + protected boolean verifyAccessToken(HttpServletResponse response, String encodedToken) { + + try { + try { + new AccessToken(encodedToken); + } catch (InvalidTokenException e) { + ServletResponseUtil.write(response, Response.get(Status.INVALID_TOKEN)); + } catch (ExpiredTokenException e) { + ServletResponseUtil.write(response, Response.get(Status.EXPIRED_TOKEN)); + } catch (InactiveSportelloException e) { + ServletResponseUtil.write(response, Response.get(Status.INACTIVE_USER)); + } catch (Exception e) { + ServletResponseUtil.write(response, Response.get(Status.SERVER_ERROR)); + } + return true; + } catch (IOException e) { + return false; + } + } } diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Commands.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Commands.java index 73bacee6..4d5e1719 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Commands.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Commands.java @@ -1,5 +1,6 @@ package it.mwg.sicilia.sue.api.v1; +import it.mwg.sicilia.sue.api.v1.command.CommandLogin; import it.mwg.sicilia.sue.api.v1.command.CommandNop; import java.util.LinkedHashMap; @@ -14,6 +15,8 @@ public class Commands { static { addCommand(new CommandNop(StringPool.BLANK, "NOP verifica la connettività senza eseguire operazioni", HttpMethods.GET, HttpMethods.POST)); + addCommand(new CommandLogin("login", + "Esegue l'accesso con nome email e password e restituisce un token di accesso", HttpMethods.POST)); } private static void addCommand(Command command) { diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Parameters.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Parameters.java index bca814a7..0d14be04 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Parameters.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Parameters.java @@ -2,9 +2,9 @@ package it.mwg.sicilia.sue.api.v1; public class Parameters { - public static final String AUTH_TIMESTAMP = "timestamp"; - public static final String AUTH_USER_ID = "userId"; - public static final String AUTH_SIGNATURE = "signature"; - public static final String STATUS_CODE = "status"; - public static final String STATUS_DESCRIPTION = "description"; + public static final String PASSWORD = "password"; + public static final String STATUS_CODE = "statusCode"; + public static final String STATUS_MESSAGE = "statusMessage"; + public static final String TOKEN = "token"; + public static final String USER_NAME = "userName"; } diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Response.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Response.java index 8ab5294a..2cd31c72 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Response.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Response.java @@ -22,7 +22,7 @@ public class Response { Map map = new LinkedHashMap<>(); map.put(Parameters.STATUS_CODE, statusCode); - map.put(Parameters.STATUS_DESCRIPTION, Status.getStatusDescription(statusCode)); + map.put(Parameters.STATUS_MESSAGE, Status.getStatusDescription(statusCode)); if (Validator.isNotNull(extraData)) { map.putAll(extraData); } diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Status.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Status.java index e6435a06..dac16f84 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Status.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/Status.java @@ -6,17 +6,28 @@ import java.util.Map; public class Status { public static final int OK = 0; - public static final int MALFORMED_REQUEST = 1; + public static final int EXPIRED_TOKEN = 1; + public static final int INACTIVE_USER = 2; + public static final int INVALID_TOKEN = 3; + public static final int MALFORMED_REQUEST = 4; + public static final int SERVER_ERROR = 5; + public static final int WRONG_USER_NAME_OR_PASSWORD = 6; @SuppressWarnings("serial") private static final Map messages = new HashMap() { { put(OK, "OK"); + put(EXPIRED_TOKEN, "This token has expired"); + put(INACTIVE_USER, "Inactive user"); + put(INVALID_TOKEN, "Invalid token"); put(MALFORMED_REQUEST, "Malformed request"); + put(SERVER_ERROR, "Internal server error"); + put(WRONG_USER_NAME_OR_PASSWORD, "Wrong user name or password"); } }; public static String getStatusDescription(int statusCode) { + return messages.get(statusCode); } } diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/command/CommandLogin.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/command/CommandLogin.java new file mode 100644 index 00000000..5954e5e6 --- /dev/null +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/command/CommandLogin.java @@ -0,0 +1,56 @@ +package it.mwg.sicilia.sue.api.v1.command; + +import it.mwg.sicilia.sue.NoSuchSportelloException; +import it.mwg.sicilia.sue.api.v1.AccessToken; +import it.mwg.sicilia.sue.api.v1.Command; +import it.mwg.sicilia.sue.api.v1.Parameters; +import it.mwg.sicilia.sue.api.v1.Response; +import it.mwg.sicilia.sue.api.v1.Status; +import it.mwg.sicilia.sue.model.Sportello; +import it.mwg.sicilia.sue.service.SportelloLocalServiceUtil; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.liferay.portal.kernel.exception.SystemException; +import com.liferay.portal.kernel.servlet.ServletResponseUtil; +import com.liferay.portal.kernel.util.Validator; + +public class CommandLogin extends Command { + + public CommandLogin(String verb, String description, String... methods) { + + super(verb, description, methods); + } + + @Override + public void run(HttpServletRequest request, HttpServletResponse response) throws Exception { + + setJson(response); + readParameters(request); + String userName = (String) parameters.get(Parameters.USER_NAME); + String password = (String) parameters.get(Parameters.PASSWORD); + if (Validator.isNull(userName) || Validator.isNull(password)) { + response.sendError(HttpServletResponse.SC_BAD_REQUEST); + } else { + Sportello sportello = null; + try { + sportello = SportelloLocalServiceUtil.findByUserName(userName); + } catch (NoSuchSportelloException | SystemException e) { + } + if (Validator.isNull(sportello) || !sportello.checkPassword(password)) { + ServletResponseUtil.write(response, Response.get(Status.WRONG_USER_NAME_OR_PASSWORD)); + } else if (!sportello.isAttivo()) { + ServletResponseUtil.write(response, Response.get(Status.INACTIVE_USER)); + } else { + Map extraData = new HashMap<>(); + extraData.put(Parameters.TOKEN, new AccessToken(sportello).getToken()); + ServletResponseUtil.write(response, Response.get(Status.OK, extraData)); + } + } + } +} diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/command/CommandNop.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/command/CommandNop.java index 8535142f..378cf20b 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/command/CommandNop.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/api/v1/command/CommandNop.java @@ -1,18 +1,15 @@ package it.mwg.sicilia.sue.api.v1.command; import it.mwg.sicilia.sue.api.v1.Command; +import it.mwg.sicilia.sue.api.v1.Parameters; import it.mwg.sicilia.sue.api.v1.Response; import it.mwg.sicilia.sue.api.v1.Status; -import java.io.IOException; - -import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.liferay.portal.kernel.servlet.ServletResponseUtil; -import com.liferay.portal.kernel.util.ContentTypes; -import com.liferay.portal.kernel.util.StringPool; +import com.liferay.portal.kernel.util.Validator; public class CommandNop extends Command { @@ -22,10 +19,15 @@ public class CommandNop extends Command { } @Override - public void run(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - - response.setContentType(ContentTypes.APPLICATION_JSON); - response.setCharacterEncoding(StringPool.UTF8); - ServletResponseUtil.write(response, Response.get(Status.OK)); + public void run(HttpServletRequest request, HttpServletResponse response) throws Exception { + + setJson(response); + readParameters(request); + String token = (String) parameters.get(Parameters.TOKEN); + if (Validator.isNull(token)) { + response.sendError(HttpServletResponse.SC_BAD_REQUEST); + } else if (verifyAccessToken(response, token)) { + ServletResponseUtil.write(response, Response.get(Status.OK)); + } } } diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/model/impl/SportelloCacheModel.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/model/impl/SportelloCacheModel.java index e8fcf146..f6b7deba 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/model/impl/SportelloCacheModel.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/model/impl/SportelloCacheModel.java @@ -38,7 +38,7 @@ public class SportelloCacheModel implements CacheModel, Externalizable { @Override public String toString() { - StringBundler sb = new StringBundler(23); + StringBundler sb = new StringBundler(35); sb.append("{sportelloId="); sb.append(sportelloId); @@ -46,22 +46,34 @@ public class SportelloCacheModel implements CacheModel, sb.append(groupId); sb.append(", companyId="); sb.append(companyId); - sb.append(", userId="); - sb.append(userId); - sb.append(", userName="); - sb.append(userName); sb.append(", createDate="); sb.append(createDate); + sb.append(", createUserId="); + sb.append(createUserId); + sb.append(", createUserName="); + sb.append(createUserName); sb.append(", modifiedDate="); sb.append(modifiedDate); + sb.append(", modifiedUserId="); + sb.append(modifiedUserId); + sb.append(", modifiedUserName="); + sb.append(modifiedUserName); + sb.append(", userName="); + sb.append(userName); sb.append(", email="); sb.append(email); sb.append(", comuneId="); sb.append(comuneId); - sb.append(", apiKey="); - sb.append(apiKey); sb.append(", attivo="); sb.append(attivo); + sb.append(", password="); + sb.append(password); + sb.append(", passwordModifiedDate="); + sb.append(passwordModifiedDate); + sb.append(", passwordModifiedUserId="); + sb.append(passwordModifiedUserId); + sb.append(", passwordModifiedUserName="); + sb.append(passwordModifiedUserName); sb.append("}"); return sb.toString(); @@ -74,20 +86,21 @@ public class SportelloCacheModel implements CacheModel, sportelloImpl.setSportelloId(sportelloId); sportelloImpl.setGroupId(groupId); sportelloImpl.setCompanyId(companyId); - sportelloImpl.setUserId(userId); - if (userName == null) { - sportelloImpl.setUserName(StringPool.BLANK); + if (createDate == Long.MIN_VALUE) { + sportelloImpl.setCreateDate(null); } else { - sportelloImpl.setUserName(userName); + sportelloImpl.setCreateDate(new Date(createDate)); } - if (createDate == Long.MIN_VALUE) { - sportelloImpl.setCreateDate(null); + sportelloImpl.setCreateUserId(createUserId); + + if (createUserName == null) { + sportelloImpl.setCreateUserName(StringPool.BLANK); } else { - sportelloImpl.setCreateDate(new Date(createDate)); + sportelloImpl.setCreateUserName(createUserName); } if (modifiedDate == Long.MIN_VALUE) { @@ -97,6 +110,22 @@ public class SportelloCacheModel implements CacheModel, sportelloImpl.setModifiedDate(new Date(modifiedDate)); } + sportelloImpl.setModifiedUserId(modifiedUserId); + + if (modifiedUserName == null) { + sportelloImpl.setModifiedUserName(StringPool.BLANK); + } + else { + sportelloImpl.setModifiedUserName(modifiedUserName); + } + + if (userName == null) { + sportelloImpl.setUserName(StringPool.BLANK); + } + else { + sportelloImpl.setUserName(userName); + } + if (email == null) { sportelloImpl.setEmail(StringPool.BLANK); } @@ -105,15 +134,30 @@ public class SportelloCacheModel implements CacheModel, } sportelloImpl.setComuneId(comuneId); + sportelloImpl.setAttivo(attivo); - if (apiKey == null) { - sportelloImpl.setApiKey(StringPool.BLANK); + if (password == null) { + sportelloImpl.setPassword(StringPool.BLANK); } else { - sportelloImpl.setApiKey(apiKey); + sportelloImpl.setPassword(password); } - sportelloImpl.setAttivo(attivo); + if (passwordModifiedDate == Long.MIN_VALUE) { + sportelloImpl.setPasswordModifiedDate(null); + } + else { + sportelloImpl.setPasswordModifiedDate(new Date(passwordModifiedDate)); + } + + sportelloImpl.setPasswordModifiedUserId(passwordModifiedUserId); + + if (passwordModifiedUserName == null) { + sportelloImpl.setPasswordModifiedUserName(StringPool.BLANK); + } + else { + sportelloImpl.setPasswordModifiedUserName(passwordModifiedUserName); + } sportelloImpl.resetOriginalValues(); @@ -125,14 +169,20 @@ public class SportelloCacheModel implements CacheModel, sportelloId = objectInput.readLong(); groupId = objectInput.readLong(); companyId = objectInput.readLong(); - userId = objectInput.readLong(); - userName = objectInput.readUTF(); createDate = objectInput.readLong(); + createUserId = objectInput.readLong(); + createUserName = objectInput.readUTF(); modifiedDate = objectInput.readLong(); + modifiedUserId = objectInput.readLong(); + modifiedUserName = objectInput.readUTF(); + userName = objectInput.readUTF(); email = objectInput.readUTF(); comuneId = objectInput.readLong(); - apiKey = objectInput.readUTF(); attivo = objectInput.readBoolean(); + password = objectInput.readUTF(); + passwordModifiedDate = objectInput.readLong(); + passwordModifiedUserId = objectInput.readLong(); + passwordModifiedUserName = objectInput.readUTF(); } @Override @@ -141,17 +191,32 @@ public class SportelloCacheModel implements CacheModel, objectOutput.writeLong(sportelloId); objectOutput.writeLong(groupId); objectOutput.writeLong(companyId); - objectOutput.writeLong(userId); + objectOutput.writeLong(createDate); + objectOutput.writeLong(createUserId); - if (userName == null) { + if (createUserName == null) { objectOutput.writeUTF(StringPool.BLANK); } else { - objectOutput.writeUTF(userName); + objectOutput.writeUTF(createUserName); } - objectOutput.writeLong(createDate); objectOutput.writeLong(modifiedDate); + objectOutput.writeLong(modifiedUserId); + + if (modifiedUserName == null) { + objectOutput.writeUTF(StringPool.BLANK); + } + else { + objectOutput.writeUTF(modifiedUserName); + } + + if (userName == null) { + objectOutput.writeUTF(StringPool.BLANK); + } + else { + objectOutput.writeUTF(userName); + } if (email == null) { objectOutput.writeUTF(StringPool.BLANK); @@ -161,26 +226,41 @@ public class SportelloCacheModel implements CacheModel, } objectOutput.writeLong(comuneId); + objectOutput.writeBoolean(attivo); - if (apiKey == null) { + if (password == null) { objectOutput.writeUTF(StringPool.BLANK); } else { - objectOutput.writeUTF(apiKey); + objectOutput.writeUTF(password); } - objectOutput.writeBoolean(attivo); + objectOutput.writeLong(passwordModifiedDate); + objectOutput.writeLong(passwordModifiedUserId); + + if (passwordModifiedUserName == null) { + objectOutput.writeUTF(StringPool.BLANK); + } + else { + objectOutput.writeUTF(passwordModifiedUserName); + } } public long sportelloId; public long groupId; public long companyId; - public long userId; - public String userName; public long createDate; + public long createUserId; + public String createUserName; public long modifiedDate; + public long modifiedUserId; + public String modifiedUserName; + public String userName; public String email; public long comuneId; - public String apiKey; public boolean attivo; + public String password; + public long passwordModifiedDate; + public long passwordModifiedUserId; + public String passwordModifiedUserName; } \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/model/impl/SportelloImpl.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/model/impl/SportelloImpl.java index df7f8716..69fc9d1a 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/model/impl/SportelloImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/model/impl/SportelloImpl.java @@ -14,14 +14,24 @@ package it.mwg.sicilia.sue.model.impl; +import it.mwg.sicilia.sue.api.v1.ApiConstants; +import it.mwg.sicilia.sue.service.ApiSettingLocalServiceUtil; import it.tref.liferay.portos.bo.model.Comune; import it.tref.liferay.portos.bo.model.Provincia; import it.tref.liferay.portos.bo.service.ComuneLocalServiceUtil; import it.tref.liferay.portos.bo.service.ProvinciaLocalServiceUtil; +import java.util.Date; + +import org.apache.commons.codec.digest.DigestUtils; + import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; +import com.liferay.portal.kernel.log.Log; +import com.liferay.portal.kernel.log.LogFactoryUtil; +import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.Validator; +import com.liferay.portal.model.User; /** * The extended model implementation for the Sportello service. Represents a row in the @@ -43,9 +53,41 @@ public class SportelloImpl extends SportelloBaseImpl { private Comune comune = null; private Provincia provincia = null; + private static final Log _log = LogFactoryUtil.getLog(SportelloImpl.class); + public SportelloImpl() { } + @Override + public String encryptPassword(String password) { + + String encrypted = StringPool.BLANK; + try { + encrypted = DigestUtils.sha256Hex(getSportelloId() + + ApiSettingLocalServiceUtil.get(getCompanyId(), ApiConstants.API_SECRET) + password); + } catch (SystemException e) { + } + return encrypted; + } + + @Override + public boolean checkPassword(String password) { + + return encryptPassword(password).equals(getPassword()); + } + + @Override + public void setEncryptedPassword(String password, User user) { + + String encrypted = encryptPassword(password); + if (!encrypted.equals(getPassword())) { + setPassword(encrypted); + setPasswordModifiedDate(new Date()); + setPasswordModifiedUserId(user.getUserId()); + setPasswordModifiedUserName(user.getFullName()); + } + }; + @Override public String getCodiceProvincia() throws PortalException, SystemException { diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/model/impl/SportelloModelImpl.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/model/impl/SportelloModelImpl.java index 0d5ba76c..704d901b 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/model/impl/SportelloModelImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/model/impl/SportelloModelImpl.java @@ -69,16 +69,22 @@ public class SportelloModelImpl extends BaseModelImpl { "sportelloId", Types.BIGINT }, { "groupId", Types.BIGINT }, { "companyId", Types.BIGINT }, - { "userId", Types.BIGINT }, - { "userName", Types.VARCHAR }, { "createDate", Types.TIMESTAMP }, + { "createUserId", Types.BIGINT }, + { "createUserName", Types.VARCHAR }, { "modifiedDate", Types.TIMESTAMP }, + { "modifiedUserId", Types.BIGINT }, + { "modifiedUserName", Types.VARCHAR }, + { "userName", Types.VARCHAR }, { "email", Types.VARCHAR }, { "comuneId", Types.BIGINT }, - { "apiKey", Types.VARCHAR }, - { "attivo", Types.BOOLEAN } + { "attivo", Types.BOOLEAN }, + { "password_", Types.VARCHAR }, + { "passwordModifiedDate", Types.TIMESTAMP }, + { "passwordModifiedUserId", Types.BIGINT }, + { "passwordModifiedUserName", Types.VARCHAR } }; - public static final String TABLE_SQL_CREATE = "create table sicilia_sue_Sportello (sportelloId LONG not null primary key,groupId LONG,companyId LONG,userId LONG,userName VARCHAR(240) null,createDate DATE null,modifiedDate DATE null,email VARCHAR(240) null,comuneId LONG,apiKey VARCHAR(240) null,attivo BOOLEAN)"; + public static final String TABLE_SQL_CREATE = "create table sicilia_sue_Sportello (sportelloId LONG not null primary key,groupId LONG,companyId LONG,createDate DATE null,createUserId LONG,createUserName VARCHAR(75) null,modifiedDate DATE null,modifiedUserId LONG,modifiedUserName VARCHAR(75) null,userName VARCHAR(75) null,email VARCHAR(240) null,comuneId LONG,attivo BOOLEAN,password_ VARCHAR(75) null,passwordModifiedDate DATE null,passwordModifiedUserId LONG,passwordModifiedUserName VARCHAR(240) null)"; public static final String TABLE_SQL_DROP = "drop table sicilia_sue_Sportello"; public static final String ORDER_BY_JPQL = " ORDER BY sportello.sportelloId ASC"; public static final String ORDER_BY_SQL = " ORDER BY sicilia_sue_Sportello.sportelloId ASC"; @@ -95,7 +101,8 @@ public class SportelloModelImpl extends BaseModelImpl "value.object.column.bitmask.enabled.it.mwg.sicilia.sue.model.Sportello"), true); public static long COMUNEID_COLUMN_BITMASK = 1L; - public static long SPORTELLOID_COLUMN_BITMASK = 2L; + public static long USERNAME_COLUMN_BITMASK = 2L; + public static long SPORTELLOID_COLUMN_BITMASK = 4L; /** * Converts the soap model instance into a normal model instance. @@ -113,14 +120,20 @@ public class SportelloModelImpl extends BaseModelImpl model.setSportelloId(soapModel.getSportelloId()); model.setGroupId(soapModel.getGroupId()); model.setCompanyId(soapModel.getCompanyId()); - model.setUserId(soapModel.getUserId()); - model.setUserName(soapModel.getUserName()); model.setCreateDate(soapModel.getCreateDate()); + model.setCreateUserId(soapModel.getCreateUserId()); + model.setCreateUserName(soapModel.getCreateUserName()); model.setModifiedDate(soapModel.getModifiedDate()); + model.setModifiedUserId(soapModel.getModifiedUserId()); + model.setModifiedUserName(soapModel.getModifiedUserName()); + model.setUserName(soapModel.getUserName()); model.setEmail(soapModel.getEmail()); model.setComuneId(soapModel.getComuneId()); - model.setApiKey(soapModel.getApiKey()); model.setAttivo(soapModel.getAttivo()); + model.setPassword(soapModel.getPassword()); + model.setPasswordModifiedDate(soapModel.getPasswordModifiedDate()); + model.setPasswordModifiedUserId(soapModel.getPasswordModifiedUserId()); + model.setPasswordModifiedUserName(soapModel.getPasswordModifiedUserName()); return model; } @@ -188,14 +201,20 @@ public class SportelloModelImpl extends BaseModelImpl attributes.put("sportelloId", getSportelloId()); attributes.put("groupId", getGroupId()); attributes.put("companyId", getCompanyId()); - attributes.put("userId", getUserId()); - attributes.put("userName", getUserName()); attributes.put("createDate", getCreateDate()); + attributes.put("createUserId", getCreateUserId()); + attributes.put("createUserName", getCreateUserName()); attributes.put("modifiedDate", getModifiedDate()); + attributes.put("modifiedUserId", getModifiedUserId()); + attributes.put("modifiedUserName", getModifiedUserName()); + attributes.put("userName", getUserName()); attributes.put("email", getEmail()); attributes.put("comuneId", getComuneId()); - attributes.put("apiKey", getApiKey()); attributes.put("attivo", getAttivo()); + attributes.put("password", getPassword()); + attributes.put("passwordModifiedDate", getPasswordModifiedDate()); + attributes.put("passwordModifiedUserId", getPasswordModifiedUserId()); + attributes.put("passwordModifiedUserName", getPasswordModifiedUserName()); return attributes; } @@ -220,22 +239,22 @@ public class SportelloModelImpl extends BaseModelImpl setCompanyId(companyId); } - Long userId = (Long)attributes.get("userId"); + Date createDate = (Date)attributes.get("createDate"); - if (userId != null) { - setUserId(userId); + if (createDate != null) { + setCreateDate(createDate); } - String userName = (String)attributes.get("userName"); + Long createUserId = (Long)attributes.get("createUserId"); - if (userName != null) { - setUserName(userName); + if (createUserId != null) { + setCreateUserId(createUserId); } - Date createDate = (Date)attributes.get("createDate"); + String createUserName = (String)attributes.get("createUserName"); - if (createDate != null) { - setCreateDate(createDate); + if (createUserName != null) { + setCreateUserName(createUserName); } Date modifiedDate = (Date)attributes.get("modifiedDate"); @@ -244,6 +263,24 @@ public class SportelloModelImpl extends BaseModelImpl setModifiedDate(modifiedDate); } + Long modifiedUserId = (Long)attributes.get("modifiedUserId"); + + if (modifiedUserId != null) { + setModifiedUserId(modifiedUserId); + } + + String modifiedUserName = (String)attributes.get("modifiedUserName"); + + if (modifiedUserName != null) { + setModifiedUserName(modifiedUserName); + } + + String userName = (String)attributes.get("userName"); + + if (userName != null) { + setUserName(userName); + } + String email = (String)attributes.get("email"); if (email != null) { @@ -256,17 +293,37 @@ public class SportelloModelImpl extends BaseModelImpl setComuneId(comuneId); } - String apiKey = (String)attributes.get("apiKey"); - - if (apiKey != null) { - setApiKey(apiKey); - } - Boolean attivo = (Boolean)attributes.get("attivo"); if (attivo != null) { setAttivo(attivo); } + + String password = (String)attributes.get("password"); + + if (password != null) { + setPassword(password); + } + + Date passwordModifiedDate = (Date)attributes.get("passwordModifiedDate"); + + if (passwordModifiedDate != null) { + setPasswordModifiedDate(passwordModifiedDate); + } + + Long passwordModifiedUserId = (Long)attributes.get( + "passwordModifiedUserId"); + + if (passwordModifiedUserId != null) { + setPasswordModifiedUserId(passwordModifiedUserId); + } + + String passwordModifiedUserName = (String)attributes.get( + "passwordModifiedUserName"); + + if (passwordModifiedUserName != null) { + setPasswordModifiedUserName(passwordModifiedUserName); + } } @JSON @@ -304,61 +361,126 @@ public class SportelloModelImpl extends BaseModelImpl @JSON @Override - public long getUserId() { - return _userId; + public Date getCreateDate() { + return _createDate; + } + + @Override + public void setCreateDate(Date createDate) { + _createDate = createDate; + } + + @JSON + @Override + public long getCreateUserId() { + return _createUserId; } @Override - public void setUserId(long userId) { - _userId = userId; + public void setCreateUserId(long createUserId) { + _createUserId = createUserId; } @Override - public String getUserUuid() throws SystemException { - return PortalUtil.getUserValue(getUserId(), "uuid", _userUuid); + public String getCreateUserUuid() throws SystemException { + return PortalUtil.getUserValue(getCreateUserId(), "uuid", + _createUserUuid); } @Override - public void setUserUuid(String userUuid) { - _userUuid = userUuid; + public void setCreateUserUuid(String createUserUuid) { + _createUserUuid = createUserUuid; } @JSON @Override - public String getUserName() { - if (_userName == null) { + public String getCreateUserName() { + if (_createUserName == null) { return StringPool.BLANK; } else { - return _userName; + return _createUserName; } } @Override - public void setUserName(String userName) { - _userName = userName; + public void setCreateUserName(String createUserName) { + _createUserName = createUserName; } @JSON @Override - public Date getCreateDate() { - return _createDate; + public Date getModifiedDate() { + return _modifiedDate; } @Override - public void setCreateDate(Date createDate) { - _createDate = createDate; + public void setModifiedDate(Date modifiedDate) { + _modifiedDate = modifiedDate; } @JSON @Override - public Date getModifiedDate() { - return _modifiedDate; + public long getModifiedUserId() { + return _modifiedUserId; } @Override - public void setModifiedDate(Date modifiedDate) { - _modifiedDate = modifiedDate; + public void setModifiedUserId(long modifiedUserId) { + _modifiedUserId = modifiedUserId; + } + + @Override + public String getModifiedUserUuid() throws SystemException { + return PortalUtil.getUserValue(getModifiedUserId(), "uuid", + _modifiedUserUuid); + } + + @Override + public void setModifiedUserUuid(String modifiedUserUuid) { + _modifiedUserUuid = modifiedUserUuid; + } + + @JSON + @Override + public String getModifiedUserName() { + if (_modifiedUserName == null) { + return StringPool.BLANK; + } + else { + return _modifiedUserName; + } + } + + @Override + public void setModifiedUserName(String modifiedUserName) { + _modifiedUserName = modifiedUserName; + } + + @JSON + @Override + public String getUserName() { + if (_userName == null) { + return StringPool.BLANK; + } + else { + return _userName; + } + } + + @Override + public void setUserName(String userName) { + _columnBitmask |= USERNAME_COLUMN_BITMASK; + + if (_originalUserName == null) { + _originalUserName = _userName; + } + + _userName = userName; + } + + public String getOriginalUserName() { + return GetterUtil.getString(_originalUserName); } @JSON @@ -402,34 +524,83 @@ public class SportelloModelImpl extends BaseModelImpl @JSON @Override - public String getApiKey() { - if (_apiKey == null) { + public boolean getAttivo() { + return _attivo; + } + + @Override + public boolean isAttivo() { + return _attivo; + } + + @Override + public void setAttivo(boolean attivo) { + _attivo = attivo; + } + + @JSON + @Override + public String getPassword() { + if (_password == null) { return StringPool.BLANK; } else { - return _apiKey; + return _password; } } @Override - public void setApiKey(String apiKey) { - _apiKey = apiKey; + public void setPassword(String password) { + _password = password; } @JSON @Override - public boolean getAttivo() { - return _attivo; + public Date getPasswordModifiedDate() { + return _passwordModifiedDate; } @Override - public boolean isAttivo() { - return _attivo; + public void setPasswordModifiedDate(Date passwordModifiedDate) { + _passwordModifiedDate = passwordModifiedDate; } + @JSON @Override - public void setAttivo(boolean attivo) { - _attivo = attivo; + public long getPasswordModifiedUserId() { + return _passwordModifiedUserId; + } + + @Override + public void setPasswordModifiedUserId(long passwordModifiedUserId) { + _passwordModifiedUserId = passwordModifiedUserId; + } + + @Override + public String getPasswordModifiedUserUuid() throws SystemException { + return PortalUtil.getUserValue(getPasswordModifiedUserId(), "uuid", + _passwordModifiedUserUuid); + } + + @Override + public void setPasswordModifiedUserUuid(String passwordModifiedUserUuid) { + _passwordModifiedUserUuid = passwordModifiedUserUuid; + } + + @JSON + @Override + public String getPasswordModifiedUserName() { + if (_passwordModifiedUserName == null) { + return StringPool.BLANK; + } + else { + return _passwordModifiedUserName; + } + } + + @Override + public void setPasswordModifiedUserName(String passwordModifiedUserName) { + _passwordModifiedUserName = passwordModifiedUserName; } public long getColumnBitmask() { @@ -466,14 +637,20 @@ public class SportelloModelImpl extends BaseModelImpl sportelloImpl.setSportelloId(getSportelloId()); sportelloImpl.setGroupId(getGroupId()); sportelloImpl.setCompanyId(getCompanyId()); - sportelloImpl.setUserId(getUserId()); - sportelloImpl.setUserName(getUserName()); sportelloImpl.setCreateDate(getCreateDate()); + sportelloImpl.setCreateUserId(getCreateUserId()); + sportelloImpl.setCreateUserName(getCreateUserName()); sportelloImpl.setModifiedDate(getModifiedDate()); + sportelloImpl.setModifiedUserId(getModifiedUserId()); + sportelloImpl.setModifiedUserName(getModifiedUserName()); + sportelloImpl.setUserName(getUserName()); sportelloImpl.setEmail(getEmail()); sportelloImpl.setComuneId(getComuneId()); - sportelloImpl.setApiKey(getApiKey()); sportelloImpl.setAttivo(getAttivo()); + sportelloImpl.setPassword(getPassword()); + sportelloImpl.setPasswordModifiedDate(getPasswordModifiedDate()); + sportelloImpl.setPasswordModifiedUserId(getPasswordModifiedUserId()); + sportelloImpl.setPasswordModifiedUserName(getPasswordModifiedUserName()); sportelloImpl.resetOriginalValues(); @@ -526,6 +703,8 @@ public class SportelloModelImpl extends BaseModelImpl public void resetOriginalValues() { SportelloModelImpl sportelloModelImpl = this; + sportelloModelImpl._originalUserName = sportelloModelImpl._userName; + sportelloModelImpl._originalComuneId = sportelloModelImpl._comuneId; sportelloModelImpl._setOriginalComuneId = false; @@ -543,16 +722,6 @@ public class SportelloModelImpl extends BaseModelImpl sportelloCacheModel.companyId = getCompanyId(); - sportelloCacheModel.userId = getUserId(); - - sportelloCacheModel.userName = getUserName(); - - String userName = sportelloCacheModel.userName; - - if ((userName != null) && (userName.length() == 0)) { - sportelloCacheModel.userName = null; - } - Date createDate = getCreateDate(); if (createDate != null) { @@ -562,6 +731,16 @@ public class SportelloModelImpl extends BaseModelImpl sportelloCacheModel.createDate = Long.MIN_VALUE; } + sportelloCacheModel.createUserId = getCreateUserId(); + + sportelloCacheModel.createUserName = getCreateUserName(); + + String createUserName = sportelloCacheModel.createUserName; + + if ((createUserName != null) && (createUserName.length() == 0)) { + sportelloCacheModel.createUserName = null; + } + Date modifiedDate = getModifiedDate(); if (modifiedDate != null) { @@ -571,6 +750,24 @@ public class SportelloModelImpl extends BaseModelImpl sportelloCacheModel.modifiedDate = Long.MIN_VALUE; } + sportelloCacheModel.modifiedUserId = getModifiedUserId(); + + sportelloCacheModel.modifiedUserName = getModifiedUserName(); + + String modifiedUserName = sportelloCacheModel.modifiedUserName; + + if ((modifiedUserName != null) && (modifiedUserName.length() == 0)) { + sportelloCacheModel.modifiedUserName = null; + } + + sportelloCacheModel.userName = getUserName(); + + String userName = sportelloCacheModel.userName; + + if ((userName != null) && (userName.length() == 0)) { + sportelloCacheModel.userName = null; + } + sportelloCacheModel.email = getEmail(); String email = sportelloCacheModel.email; @@ -581,22 +778,42 @@ public class SportelloModelImpl extends BaseModelImpl sportelloCacheModel.comuneId = getComuneId(); - sportelloCacheModel.apiKey = getApiKey(); + sportelloCacheModel.attivo = getAttivo(); + + sportelloCacheModel.password = getPassword(); - String apiKey = sportelloCacheModel.apiKey; + String password = sportelloCacheModel.password; - if ((apiKey != null) && (apiKey.length() == 0)) { - sportelloCacheModel.apiKey = null; + if ((password != null) && (password.length() == 0)) { + sportelloCacheModel.password = null; } - sportelloCacheModel.attivo = getAttivo(); + Date passwordModifiedDate = getPasswordModifiedDate(); + + if (passwordModifiedDate != null) { + sportelloCacheModel.passwordModifiedDate = passwordModifiedDate.getTime(); + } + else { + sportelloCacheModel.passwordModifiedDate = Long.MIN_VALUE; + } + + sportelloCacheModel.passwordModifiedUserId = getPasswordModifiedUserId(); + + sportelloCacheModel.passwordModifiedUserName = getPasswordModifiedUserName(); + + String passwordModifiedUserName = sportelloCacheModel.passwordModifiedUserName; + + if ((passwordModifiedUserName != null) && + (passwordModifiedUserName.length() == 0)) { + sportelloCacheModel.passwordModifiedUserName = null; + } return sportelloCacheModel; } @Override public String toString() { - StringBundler sb = new StringBundler(23); + StringBundler sb = new StringBundler(35); sb.append("{sportelloId="); sb.append(getSportelloId()); @@ -604,22 +821,34 @@ public class SportelloModelImpl extends BaseModelImpl sb.append(getGroupId()); sb.append(", companyId="); sb.append(getCompanyId()); - sb.append(", userId="); - sb.append(getUserId()); - sb.append(", userName="); - sb.append(getUserName()); sb.append(", createDate="); sb.append(getCreateDate()); + sb.append(", createUserId="); + sb.append(getCreateUserId()); + sb.append(", createUserName="); + sb.append(getCreateUserName()); sb.append(", modifiedDate="); sb.append(getModifiedDate()); + sb.append(", modifiedUserId="); + sb.append(getModifiedUserId()); + sb.append(", modifiedUserName="); + sb.append(getModifiedUserName()); + sb.append(", userName="); + sb.append(getUserName()); sb.append(", email="); sb.append(getEmail()); sb.append(", comuneId="); sb.append(getComuneId()); - sb.append(", apiKey="); - sb.append(getApiKey()); sb.append(", attivo="); sb.append(getAttivo()); + sb.append(", password="); + sb.append(getPassword()); + sb.append(", passwordModifiedDate="); + sb.append(getPasswordModifiedDate()); + sb.append(", passwordModifiedUserId="); + sb.append(getPasswordModifiedUserId()); + sb.append(", passwordModifiedUserName="); + sb.append(getPasswordModifiedUserName()); sb.append("}"); return sb.toString(); @@ -627,7 +856,7 @@ public class SportelloModelImpl extends BaseModelImpl @Override public String toXmlString() { - StringBundler sb = new StringBundler(37); + StringBundler sb = new StringBundler(55); sb.append(""); sb.append("it.mwg.sicilia.sue.model.Sportello"); @@ -646,21 +875,33 @@ public class SportelloModelImpl extends BaseModelImpl sb.append(getCompanyId()); sb.append("]]>"); sb.append( - "userIdcreateDate"); sb.append( - "userNamecreateUserId"); sb.append( - "createDatecreateUserName"); sb.append( "modifiedDate"); + sb.append( + "modifiedUserId"); + sb.append( + "modifiedUserName"); + sb.append( + "userName"); sb.append( "email "comuneId"); - sb.append( - "apiKey"); sb.append( "attivo"); + sb.append( + "password"); + sb.append( + "passwordModifiedDate"); + sb.append( + "passwordModifiedUserId"); + sb.append( + "passwordModifiedUserName"); sb.append(""); @@ -690,17 +943,26 @@ public class SportelloModelImpl extends BaseModelImpl private long _sportelloId; private long _groupId; private long _companyId; - private long _userId; - private String _userUuid; - private String _userName; private Date _createDate; + private long _createUserId; + private String _createUserUuid; + private String _createUserName; private Date _modifiedDate; + private long _modifiedUserId; + private String _modifiedUserUuid; + private String _modifiedUserName; + private String _userName; + private String _originalUserName; private String _email; private long _comuneId; private long _originalComuneId; private boolean _setOriginalComuneId; - private String _apiKey; private boolean _attivo; + private String _password; + private Date _passwordModifiedDate; + private long _passwordModifiedUserId; + private String _passwordModifiedUserUuid; + private String _passwordModifiedUserName; private long _columnBitmask; private Sportello _escapedModel; } \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/portlet/SueAdministrationPortlet.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/portlet/SueAdministrationPortlet.java index ed19e566..eaa2f12d 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/portlet/SueAdministrationPortlet.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/portlet/SueAdministrationPortlet.java @@ -53,9 +53,10 @@ public class SueAdministrationPortlet extends MVCPortlet { long sportelloId = ParamUtil.getLong(actionRequest, "sportelloId", 0); long comuneId = ParamUtil.getLong(actionRequest, "comune", 0); Territorio territorio = TerritorioLocalServiceUtil.findByComuneId(comuneId, 0, 1).get(0); + String userName = ParamUtil.getString(actionRequest, "userName"); String email = ParamUtil.getString(actionRequest, "email"); - String apiKey = ParamUtil.getString(actionRequest, "apiKey"); - _log.info("apiKey = " + apiKey); + String password = ParamUtil.getString(actionRequest, "password"); + boolean attivo = ParamUtil.getBoolean(actionRequest, "attivo", false); Sportello sportello = null; if (sportelloId != 0) { try { @@ -70,13 +71,29 @@ public class SueAdministrationPortlet extends MVCPortlet { sportello.setGroupId(territorio.getGroupId()); sportello.setCompanyId(territorio.getCompanyId()); sportello.setCreateDate(data); + sportello.setCreateUserId(user.getUserId()); + sportello.setCreateUserName(user.getFullName()); } - sportello.setUserId(user.getUserId()); - sportello.setUserName(user.getFullName()); + sportello.setUserName(userName); sportello.setModifiedDate(data); + sportello.setModifiedUserId(user.getUserId()); + sportello.setModifiedUserName(user.getFullName()); sportello.setComuneId(comuneId); sportello.setEmail(email); - sportello.setApiKey(apiKey); + sportello.setAttivo(attivo); + if (Validator.isNotNull(password)) { + sportello.setEncryptedPassword(password, user); + } + SportelloLocalServiceUtil.updateSportello(sportello); + } + + public void attivaSportello(ActionRequest actionRequest, ActionResponse actionResponse) throws PortalException, + SystemException { + + long sportelloId = ParamUtil.get(actionRequest, "sportelloId", 0L); + boolean attivo = ParamUtil.get(actionRequest, "attivo", false); + Sportello sportello = SportelloLocalServiceUtil.getSportello(sportelloId); + sportello.setAttivo(attivo); SportelloLocalServiceUtil.updateSportello(sportello); } diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/base/SportelloLocalServiceClpInvoker.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/base/SportelloLocalServiceClpInvoker.java index 250f23c4..60188a09 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/base/SportelloLocalServiceClpInvoker.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/base/SportelloLocalServiceClpInvoker.java @@ -113,6 +113,10 @@ public class SportelloLocalServiceClpInvoker { _methodName41 = "setBeanIdentifier"; _methodParameterTypes41 = new String[] { "java.lang.String" }; + + _methodName46 = "findByUserName"; + + _methodParameterTypes46 = new String[] { "java.lang.String" }; } public Object invokeMethod(String name, String[] parameterTypes, @@ -216,6 +220,11 @@ public class SportelloLocalServiceClpInvoker { return null; } + if (_methodName46.equals(name) && + Arrays.deepEquals(_methodParameterTypes46, parameterTypes)) { + return SportelloLocalServiceUtil.findByUserName((java.lang.String)arguments[0]); + } + throw new UnsupportedOperationException(); } @@ -255,4 +264,6 @@ public class SportelloLocalServiceClpInvoker { private String[] _methodParameterTypes40; private String _methodName41; private String[] _methodParameterTypes41; + private String _methodName46; + private String[] _methodParameterTypes46; } \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/base/SportelloServiceClpInvoker.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/base/SportelloServiceClpInvoker.java index 4b49ae20..178a4ae3 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/base/SportelloServiceClpInvoker.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/base/SportelloServiceClpInvoker.java @@ -31,6 +31,10 @@ public class SportelloServiceClpInvoker { _methodName25 = "setBeanIdentifier"; _methodParameterTypes25 = new String[] { "java.lang.String" }; + + _methodName30 = "generaPassword"; + + _methodParameterTypes30 = new String[] { "int" }; } public Object invokeMethod(String name, String[] parameterTypes, @@ -47,6 +51,11 @@ public class SportelloServiceClpInvoker { return null; } + if (_methodName30.equals(name) && + Arrays.deepEquals(_methodParameterTypes30, parameterTypes)) { + return SportelloServiceUtil.generaPassword(((Integer)arguments[0]).intValue()); + } + throw new UnsupportedOperationException(); } @@ -54,4 +63,6 @@ public class SportelloServiceClpInvoker { private String[] _methodParameterTypes24; private String _methodName25; private String[] _methodParameterTypes25; + private String _methodName30; + private String[] _methodParameterTypes30; } \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/http/SportelloServiceSoap.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/http/SportelloServiceSoap.java index adc3fec7..fcd7a131 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/http/SportelloServiceSoap.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/http/SportelloServiceSoap.java @@ -14,6 +14,13 @@ package it.mwg.sicilia.sue.service.http; +import com.liferay.portal.kernel.log.Log; +import com.liferay.portal.kernel.log.LogFactoryUtil; + +import it.mwg.sicilia.sue.service.SportelloServiceUtil; + +import java.rmi.RemoteException; + /** * Provides the SOAP utility for the * {@link it.mwg.sicilia.sue.service.SportelloServiceUtil} service utility. The @@ -55,4 +62,19 @@ package it.mwg.sicilia.sue.service.http; * @generated */ public class SportelloServiceSoap { + public static java.lang.String generaPassword(int lunghezza) + throws RemoteException { + try { + java.lang.String returnValue = SportelloServiceUtil.generaPassword(lunghezza); + + return returnValue; + } + catch (Exception e) { + _log.error(e, e); + + throw new RemoteException(e.getMessage()); + } + } + + private static Log _log = LogFactoryUtil.getLog(SportelloServiceSoap.class); } \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/impl/ApiSettingLocalServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/impl/ApiSettingLocalServiceImpl.java index 44a98b5a..74f41c1a 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/impl/ApiSettingLocalServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/impl/ApiSettingLocalServiceImpl.java @@ -19,6 +19,8 @@ import it.mwg.sicilia.sue.service.base.ApiSettingLocalServiceBaseImpl; import com.liferay.counter.service.CounterLocalServiceUtil; import com.liferay.portal.kernel.exception.SystemException; +import com.liferay.portal.kernel.log.Log; +import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.util.Validator; /** @@ -42,6 +44,7 @@ public class ApiSettingLocalServiceImpl extends ApiSettingLocalServiceBaseImpl { * NOTE FOR DEVELOPERS: Never reference this interface directly. Always use {@link * it.mwg.sicilia.sue.service.ApiSettingLocalServiceUtil} to access the api setting local service. */ + private static final Log _log = LogFactoryUtil.getLog(ApiSettingLocalServiceImpl.class); @Override public String get(long companyId, long key) throws SystemException { diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/impl/SportelloLocalServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/impl/SportelloLocalServiceImpl.java index 995af4d1..ccb02f69 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/impl/SportelloLocalServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/impl/SportelloLocalServiceImpl.java @@ -14,16 +14,22 @@ package it.mwg.sicilia.sue.service.impl; +import it.mwg.sicilia.sue.NoSuchSportelloException; +import it.mwg.sicilia.sue.model.Sportello; import it.mwg.sicilia.sue.service.base.SportelloLocalServiceBaseImpl; +import com.liferay.portal.kernel.exception.SystemException; + /** * The implementation of the sportello local service. * *

- * All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy their definitions into the {@link it.mwg.sicilia.sue.service.SportelloLocalService} interface. + * All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy + * their definitions into the {@link it.mwg.sicilia.sue.service.SportelloLocalService} interface. * *

- * This is a local service. Methods of this service will not have security checks based on the propagated JAAS credentials because this service can only be accessed from within the same VM. + * This is a local service. Methods of this service will not have security checks based on the propagated JAAS + * credentials because this service can only be accessed from within the same VM. *

* * @author Manifattura Web Group Srl @@ -32,8 +38,13 @@ import it.mwg.sicilia.sue.service.base.SportelloLocalServiceBaseImpl; */ public class SportelloLocalServiceImpl extends SportelloLocalServiceBaseImpl { /* - * NOTE FOR DEVELOPERS: - * - * Never reference this interface directly. Always use {@link it.mwg.sicilia.sue.service.SportelloLocalServiceUtil} to access the sportello local service. + * NOTE FOR DEVELOPERS: Never reference this interface directly. Always use {@link + * it.mwg.sicilia.sue.service.SportelloLocalServiceUtil} to access the sportello local service. */ + + @Override + public Sportello findByUserName(String userName) throws NoSuchSportelloException, SystemException { + + return sportelloPersistence.findByUserName(userName); + } } \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/impl/SportelloServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/impl/SportelloServiceImpl.java index 7fa2d07a..5bb51a9d 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/impl/SportelloServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/impl/SportelloServiceImpl.java @@ -16,14 +16,18 @@ package it.mwg.sicilia.sue.service.impl; import it.mwg.sicilia.sue.service.base.SportelloServiceBaseImpl; +import java.security.SecureRandom; + /** * The implementation of the sportello remote service. * *

- * All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy their definitions into the {@link it.mwg.sicilia.sue.service.SportelloService} interface. + * All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy + * their definitions into the {@link it.mwg.sicilia.sue.service.SportelloService} interface. * *

- * This is a remote service. Methods of this service are expected to have security checks based on the propagated JAAS credentials because this service can be accessed remotely. + * This is a remote service. Methods of this service are expected to have security checks based on the propagated JAAS + * credentials because this service can be accessed remotely. *

* * @author Manifattura Web Group Srl @@ -32,8 +36,37 @@ import it.mwg.sicilia.sue.service.base.SportelloServiceBaseImpl; */ public class SportelloServiceImpl extends SportelloServiceBaseImpl { /* - * NOTE FOR DEVELOPERS: - * - * Never reference this interface directly. Always use {@link it.mwg.sicilia.sue.service.SportelloServiceUtil} to access the sportello remote service. + * NOTE FOR DEVELOPERS: Never reference this interface directly. Always use {@link + * it.mwg.sicilia.sue.service.SportelloServiceUtil} to access the sportello remote service. */ + + private static final char[] consonanti = { 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'r', 's', + 't', 'v', 'w', 'x', 'y', 'z' }; + private static final char[] vocali = { 'a', 'e', 'i', 'o', 'u' }; + private static final char[] speciali = { '!', '@', '#', '$', '%', '^', '*', '&', '*', '-', '+', '?' }; + + @Override + public String generaPassword(int lunghezza) { + + if (lunghezza < 8) { + lunghezza = 8; + } else if (1 == lunghezza % 2) { + lunghezza++; + } + int max = (lunghezza - 4) / 2; + StringBuilder password = new StringBuilder(); + SecureRandom rnd = new SecureRandom(); + if (rnd.nextInt(2) == 1) { + password.append(consonanti[rnd.nextInt(consonanti.length)]); + } else { + password.append(Character.toUpperCase(consonanti[rnd.nextInt(consonanti.length)])); + } + for (int i = 0; i < max; i++) { + password.append(vocali[rnd.nextInt(vocali.length)]); + password.append(consonanti[rnd.nextInt(consonanti.length)]); + } + password.append(speciali[rnd.nextInt(speciali.length)]); + password.append(rnd.nextInt(90) + 10); + return password.toString(); + } } \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/persistence/SportelloPersistenceImpl.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/persistence/SportelloPersistenceImpl.java index bf65e96e..5d8bbd46 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/persistence/SportelloPersistenceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/service/persistence/SportelloPersistenceImpl.java @@ -30,10 +30,12 @@ import com.liferay.portal.kernel.util.InstanceFactory; import com.liferay.portal.kernel.util.OrderByComparator; import com.liferay.portal.kernel.util.PropsKeys; import com.liferay.portal.kernel.util.PropsUtil; +import com.liferay.portal.kernel.util.SetUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.UnmodifiableList; +import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.model.CacheModel; import com.liferay.portal.model.ModelListener; import com.liferay.portal.service.persistence.impl.BasePersistenceImpl; @@ -49,6 +51,7 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Set; /** * The persistence implementation for the sportello service. @@ -293,6 +296,247 @@ public class SportelloPersistenceImpl extends BasePersistenceImpl } private static final String _FINDER_COLUMN_COMUNEID_COMUNEID_2 = "sportello.comuneId = ?"; + public static final FinderPath FINDER_PATH_FETCH_BY_USERNAME = new FinderPath(SportelloModelImpl.ENTITY_CACHE_ENABLED, + SportelloModelImpl.FINDER_CACHE_ENABLED, SportelloImpl.class, + FINDER_CLASS_NAME_ENTITY, "fetchByUserName", + new String[] { String.class.getName() }, + SportelloModelImpl.USERNAME_COLUMN_BITMASK); + public static final FinderPath FINDER_PATH_COUNT_BY_USERNAME = new FinderPath(SportelloModelImpl.ENTITY_CACHE_ENABLED, + SportelloModelImpl.FINDER_CACHE_ENABLED, Long.class, + FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION, "countByUserName", + new String[] { String.class.getName() }); + + /** + * Returns the sportello where userName = ? or throws a {@link it.mwg.sicilia.sue.NoSuchSportelloException} if it could not be found. + * + * @param userName the user name + * @return the matching sportello + * @throws it.mwg.sicilia.sue.NoSuchSportelloException if a matching sportello could not be found + * @throws SystemException if a system exception occurred + */ + @Override + public Sportello findByUserName(String userName) + throws NoSuchSportelloException, SystemException { + Sportello sportello = fetchByUserName(userName); + + if (sportello == null) { + StringBundler msg = new StringBundler(4); + + msg.append(_NO_SUCH_ENTITY_WITH_KEY); + + msg.append("userName="); + msg.append(userName); + + msg.append(StringPool.CLOSE_CURLY_BRACE); + + if (_log.isWarnEnabled()) { + _log.warn(msg.toString()); + } + + throw new NoSuchSportelloException(msg.toString()); + } + + return sportello; + } + + /** + * Returns the sportello where userName = ? or returns null if it could not be found. Uses the finder cache. + * + * @param userName the user name + * @return the matching sportello, or null if a matching sportello could not be found + * @throws SystemException if a system exception occurred + */ + @Override + public Sportello fetchByUserName(String userName) throws SystemException { + return fetchByUserName(userName, true); + } + + /** + * Returns the sportello where userName = ? or returns null if it could not be found, optionally using the finder cache. + * + * @param userName the user name + * @param retrieveFromCache whether to use the finder cache + * @return the matching sportello, or null if a matching sportello could not be found + * @throws SystemException if a system exception occurred + */ + @Override + public Sportello fetchByUserName(String userName, boolean retrieveFromCache) + throws SystemException { + Object[] finderArgs = new Object[] { userName }; + + Object result = null; + + if (retrieveFromCache) { + result = FinderCacheUtil.getResult(FINDER_PATH_FETCH_BY_USERNAME, + finderArgs, this); + } + + if (result instanceof Sportello) { + Sportello sportello = (Sportello)result; + + if (!Validator.equals(userName, sportello.getUserName())) { + result = null; + } + } + + if (result == null) { + StringBundler query = new StringBundler(3); + + query.append(_SQL_SELECT_SPORTELLO_WHERE); + + boolean bindUserName = false; + + if (userName == null) { + query.append(_FINDER_COLUMN_USERNAME_USERNAME_1); + } + else if (userName.equals(StringPool.BLANK)) { + query.append(_FINDER_COLUMN_USERNAME_USERNAME_3); + } + else { + bindUserName = true; + + query.append(_FINDER_COLUMN_USERNAME_USERNAME_2); + } + + String sql = query.toString(); + + Session session = null; + + try { + session = openSession(); + + Query q = session.createQuery(sql); + + QueryPos qPos = QueryPos.getInstance(q); + + if (bindUserName) { + qPos.add(userName); + } + + List list = q.list(); + + if (list.isEmpty()) { + FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_USERNAME, + finderArgs, list); + } + else { + Sportello sportello = list.get(0); + + result = sportello; + + cacheResult(sportello); + + if ((sportello.getUserName() == null) || + !sportello.getUserName().equals(userName)) { + FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_USERNAME, + finderArgs, sportello); + } + } + } + catch (Exception e) { + FinderCacheUtil.removeResult(FINDER_PATH_FETCH_BY_USERNAME, + finderArgs); + + throw processException(e); + } + finally { + closeSession(session); + } + } + + if (result instanceof List) { + return null; + } + else { + return (Sportello)result; + } + } + + /** + * Removes the sportello where userName = ? from the database. + * + * @param userName the user name + * @return the sportello that was removed + * @throws SystemException if a system exception occurred + */ + @Override + public Sportello removeByUserName(String userName) + throws NoSuchSportelloException, SystemException { + Sportello sportello = findByUserName(userName); + + return remove(sportello); + } + + /** + * Returns the number of sportellos where userName = ?. + * + * @param userName the user name + * @return the number of matching sportellos + * @throws SystemException if a system exception occurred + */ + @Override + public int countByUserName(String userName) throws SystemException { + FinderPath finderPath = FINDER_PATH_COUNT_BY_USERNAME; + + Object[] finderArgs = new Object[] { userName }; + + Long count = (Long)FinderCacheUtil.getResult(finderPath, finderArgs, + this); + + if (count == null) { + StringBundler query = new StringBundler(2); + + query.append(_SQL_COUNT_SPORTELLO_WHERE); + + boolean bindUserName = false; + + if (userName == null) { + query.append(_FINDER_COLUMN_USERNAME_USERNAME_1); + } + else if (userName.equals(StringPool.BLANK)) { + query.append(_FINDER_COLUMN_USERNAME_USERNAME_3); + } + else { + bindUserName = true; + + query.append(_FINDER_COLUMN_USERNAME_USERNAME_2); + } + + String sql = query.toString(); + + Session session = null; + + try { + session = openSession(); + + Query q = session.createQuery(sql); + + QueryPos qPos = QueryPos.getInstance(q); + + if (bindUserName) { + qPos.add(userName); + } + + count = (Long)q.uniqueResult(); + + FinderCacheUtil.putResult(finderPath, finderArgs, count); + } + catch (Exception e) { + FinderCacheUtil.removeResult(finderPath, finderArgs); + + throw processException(e); + } + finally { + closeSession(session); + } + } + + return count.intValue(); + } + + private static final String _FINDER_COLUMN_USERNAME_USERNAME_1 = "sportello.userName IS NULL"; + private static final String _FINDER_COLUMN_USERNAME_USERNAME_2 = "sportello.userName = ?"; + private static final String _FINDER_COLUMN_USERNAME_USERNAME_3 = "(sportello.userName IS NULL OR sportello.userName = '')"; public SportelloPersistenceImpl() { setModelClass(Sportello.class); @@ -311,6 +555,9 @@ public class SportelloPersistenceImpl extends BasePersistenceImpl FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_COMUNEID, new Object[] { sportello.getComuneId() }, sportello); + FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_USERNAME, + new Object[] { sportello.getUserName() }, sportello); + sportello.resetOriginalValues(); } @@ -392,6 +639,13 @@ public class SportelloPersistenceImpl extends BasePersistenceImpl Long.valueOf(1)); FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_COMUNEID, args, sportello); + + args = new Object[] { sportello.getUserName() }; + + FinderCacheUtil.putResult(FINDER_PATH_COUNT_BY_USERNAME, args, + Long.valueOf(1)); + FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_USERNAME, args, + sportello); } else { SportelloModelImpl sportelloModelImpl = (SportelloModelImpl)sportello; @@ -405,6 +659,16 @@ public class SportelloPersistenceImpl extends BasePersistenceImpl FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_COMUNEID, args, sportello); } + + if ((sportelloModelImpl.getColumnBitmask() & + FINDER_PATH_FETCH_BY_USERNAME.getColumnBitmask()) != 0) { + Object[] args = new Object[] { sportello.getUserName() }; + + FinderCacheUtil.putResult(FINDER_PATH_COUNT_BY_USERNAME, args, + Long.valueOf(1)); + FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_USERNAME, args, + sportello); + } } } @@ -423,6 +687,19 @@ public class SportelloPersistenceImpl extends BasePersistenceImpl FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_COMUNEID, args); FinderCacheUtil.removeResult(FINDER_PATH_FETCH_BY_COMUNEID, args); } + + args = new Object[] { sportello.getUserName() }; + + FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_USERNAME, args); + FinderCacheUtil.removeResult(FINDER_PATH_FETCH_BY_USERNAME, args); + + if ((sportelloModelImpl.getColumnBitmask() & + FINDER_PATH_FETCH_BY_USERNAME.getColumnBitmask()) != 0) { + args = new Object[] { sportelloModelImpl.getOriginalUserName() }; + + FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_USERNAME, args); + FinderCacheUtil.removeResult(FINDER_PATH_FETCH_BY_USERNAME, args); + } } /** @@ -585,14 +862,20 @@ public class SportelloPersistenceImpl extends BasePersistenceImpl sportelloImpl.setSportelloId(sportello.getSportelloId()); sportelloImpl.setGroupId(sportello.getGroupId()); sportelloImpl.setCompanyId(sportello.getCompanyId()); - sportelloImpl.setUserId(sportello.getUserId()); - sportelloImpl.setUserName(sportello.getUserName()); sportelloImpl.setCreateDate(sportello.getCreateDate()); + sportelloImpl.setCreateUserId(sportello.getCreateUserId()); + sportelloImpl.setCreateUserName(sportello.getCreateUserName()); sportelloImpl.setModifiedDate(sportello.getModifiedDate()); + sportelloImpl.setModifiedUserId(sportello.getModifiedUserId()); + sportelloImpl.setModifiedUserName(sportello.getModifiedUserName()); + sportelloImpl.setUserName(sportello.getUserName()); sportelloImpl.setEmail(sportello.getEmail()); sportelloImpl.setComuneId(sportello.getComuneId()); - sportelloImpl.setApiKey(sportello.getApiKey()); sportelloImpl.setAttivo(sportello.isAttivo()); + sportelloImpl.setPassword(sportello.getPassword()); + sportelloImpl.setPasswordModifiedDate(sportello.getPasswordModifiedDate()); + sportelloImpl.setPasswordModifiedUserId(sportello.getPasswordModifiedUserId()); + sportelloImpl.setPasswordModifiedUserName(sportello.getPasswordModifiedUserName()); return sportelloImpl; } @@ -870,6 +1153,11 @@ public class SportelloPersistenceImpl extends BasePersistenceImpl return count.intValue(); } + @Override + protected Set getBadColumnNames() { + return _badColumnNames; + } + /** * Initializes the sportello persistence. */ @@ -912,6 +1200,9 @@ public class SportelloPersistenceImpl extends BasePersistenceImpl private static final boolean _HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE = GetterUtil.getBoolean(PropsUtil.get( PropsKeys.HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE)); private static Log _log = LogFactoryUtil.getLog(SportelloPersistenceImpl.class); + private static Set _badColumnNames = SetUtil.fromArray(new String[] { + "password" + }); private static Sportello _nullSportello = new SportelloImpl() { @Override public Object clone() { diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/startup/Startup.java b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/startup/Startup.java index ffbb0da3..cae82332 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/startup/Startup.java +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/it/mwg/sicilia/sue/startup/Startup.java @@ -59,7 +59,7 @@ public class Startup extends SimpleAction { } catch (NoSuchAlgorithmException e) { } if (Validator.isNotNull(generator)) { - generator.initialize(1024); + generator.initialize(4096); KeyPair pair = generator.generateKeyPair(); try { ApiSettingLocalServiceUtil.set(companyId, ApiConstants.API_PRIVATE_KEY, diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/service.properties b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/service.properties index a9d58c54..c22d2279 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/service.properties +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/WEB-INF/src/service.properties @@ -13,8 +13,8 @@ ## build.namespace=sicilia_sue - build.number=41 - build.date=1623664988040 + build.number=61 + build.date=1623771128700 build.auto.upgrade=true ## diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/html/administration/edit_sportello.jsp b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/html/administration/edit_sportello.jsp index bdc5727b..49d0d3b9 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/html/administration/edit_sportello.jsp +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/html/administration/edit_sportello.jsp @@ -1,8 +1,8 @@ +<%@page import="it.mwg.sicilia.sue.service.SportelloServiceUtil"%> <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="com.liferay.portal.kernel.util.ParamUtil"%> <%@page import="com.liferay.portal.kernel.util.StringPool"%> <%@page import="com.liferay.portal.kernel.util.Validator"%> -<%@page import="it.mwg.sicilia.sue.api.v1.ApiUtil"%> <%@page import="it.mwg.sicilia.sue.model.Sportello"%> <%@page import="it.mwg.sicilia.sue.portlet.SueAdministrationPortlet"%> <%@page import="it.mwg.sicilia.sue.service.SportelloLocalServiceUtil"%> @@ -15,26 +15,43 @@ Sportello sportello = sportelloId == 0 ? null : SportelloLocalServiceUtil.getSpo - - - + + + + - - + + + + - + + - + +A.one('#generate').on('click', function(event) { + Liferay.Service( + '/sicilia-sue-connector-portlet.sportello/genera-password', + { + lunghezza: 12, + }, + function(obj) { + A.one('#password').set('value', obj); + } + ); +}); A.mix( A.config.FormValidator.RULES, { requiredSelect: function(value, fieldNode, ruleValue) { diff --git a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/html/administration/view.jsp b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/html/administration/view.jsp index 66a03fb0..f66b0005 100644 --- a/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/html/administration/view.jsp +++ b/liferay-plugins-sdk-6.2/portlets/sicilia-sue-connector-portlet/docroot/html/administration/view.jsp @@ -1,8 +1,9 @@ -<%@page import="java.text.NumberFormat"%> +<%@page import="com.liferay.portal.kernel.util.Constants"%> <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@page import="com.liferay.portal.kernel.language.LanguageUtil"%> +<%@page import="java.text.NumberFormat"%> <%@page import="it.mwg.sicilia.sue.model.Sportello"%> <%@page import="it.mwg.sicilia.sue.service.SportelloLocalServiceUtil"%> -<%@page import="java.util.List"%> <%@include file="/html/init.jsp"%> @@ -19,12 +20,15 @@ searchContainer.getEnd()) %>" /> <% NumberFormat format = NumberFormat.getInstance(); + String redirect = searchContainer.getIteratorURL().toString(); %> + - + @@ -33,7 +37,20 @@ - + + + + + + + + + + + + + +