Author: dcosse Date: 2014-06-27 17:02:46 +0200 (Fri, 27 Jun 2014) New Revision: 279 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/279 Log: rejet des mails dont le client n'est pas connu, correction sur l'arborescence des dossiers Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailActionSupport.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-06-27 14:50:53 UTC (rev 278) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-06-27 15:02:46 UTC (rev 279) @@ -650,4 +650,28 @@ getPersistenceContext().commit(); } + + public void rejectEmail(String from, String to, String subject, + String content) throws EmailException, MessagingException, IOException { + + final String smtpUser = getApplicationConfig().getSmtpUser(); + final String password = getApplicationConfig().getSmtpPassword(); + final boolean useSsl = getApplicationConfig().isSmtpUseSsl(); + + MultiPartEmail message = new MultiPartEmail(); + message.setHostName(getApplicationConfig().getSmtpHost()); + message.setSmtpPort(getApplicationConfig().getSmtpPort()); + if (StringUtils.isNotBlank(smtpUser) && password != null) { + message.setAuthenticator(new DefaultAuthenticator(smtpUser, password)); + } + message.setSSLOnConnect(useSsl); + + message.setCharset(EmailConstants.UTF_8); + message.setFrom(from); + message.addTo(to); + message.setSubject(subject); + message.setMsg(content); + + message.send(); + } } Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailActionSupport.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailActionSupport.java 2014-06-27 14:50:53 UTC (rev 278) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailActionSupport.java 2014-06-27 15:02:46 UTC (rev 279) @@ -26,6 +26,7 @@ import java.util.Map; +import com.franciaflex.faxtomail.persistence.entities.FaxToMailUserAbstract; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.convention.annotation.Result; @@ -59,6 +60,30 @@ public static final String NEXT = "next"; + protected static final Multimap<Class<?>, String> GSON_EXCLUSIONS = HashMultimap.create(); + + static { + // Fill exclusion map + GSON_EXCLUSIONS.put(FaxToMailUserAbstract.class, FaxToMailUser.PROPERTY_AFFECTED_FOLDERS); + GSON_EXCLUSIONS.put(MailFolderAbstract.class, MailFolder.PROPERTY_PARENT); + } + + protected static final ExclusionStrategy EXCLUSION_STRATEGY = new ExclusionStrategy() { + @Override + public boolean shouldSkipField(FieldAttributes f) { + // TODO AThimel 06/08/13 Maybe another Multimap implementation will do the job ? + Class<?> declaringClass = f.getDeclaringClass(); + String attributeName = f.getName(); + boolean result = GSON_EXCLUSIONS.containsEntry(declaringClass, attributeName); + return result; + } + + @Override + public boolean shouldSkipClass(Class<?> clazz) { + return false; + } + }; + protected FaxToMailConfiguration applicationConfig; protected FaxToMailSession session; @@ -106,25 +131,8 @@ public static Gson getGson() { if (gson == null) { GsonBuilder builder = new GsonBuilder(); - // exclusion - final Multimap<Class<?>, String> gsonExclusions = HashMultimap.create(); - gsonExclusions.put(MailFolderAbstract.class, MailFolder.PROPERTY_PARENT); - builder.addSerializationExclusionStrategy(new ExclusionStrategy() { - @Override - public boolean shouldSkipField(FieldAttributes f) { - // TODO AThimel 06/08/13 Maybe another Multimap implementation will do the job ? - Class<?> declaringClass = f.getDeclaringClass(); - String attributeName = f.getName(); - boolean result = gsonExclusions.containsEntry(declaringClass, attributeName); - return result; - } - - @Override - public boolean shouldSkipClass(Class<?> clazz) { - return false; - } - }); + builder.addSerializationExclusionStrategy(EXCLUSION_STRATEGY); // Renseigne a gson comment instancier les Impl à partir des interfaces Topia FaxToMailEntityEnum[] classes = FaxToMailEntityEnum.getContracts(); Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 2014-06-27 14:50:53 UTC (rev 278) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 2014-06-27 15:02:46 UTC (rev 279) @@ -285,19 +285,41 @@ } email.setClient(client); - MailFolder mailFolder = null; + MailFolder mailFolder; if (filter.isClientResponsiblePriority()) { + // add to person in charge or reject the mail if client is unknown if ( client == null || client.getPersonInCharge() == null || client.getPersonInCharge().getAffectedFolders() == null || client.getPersonInCharge().getAffectedFolders().isEmpty()) { + if(client == null && + (filter.getMailFolder().getRejectUnknownSender() != null && + filter.getMailFolder().getRejectUnknownSender())) { + // rejected client mail unknown filter activated + // mail rejected + MailFolder folderTmp = filter.getMailFolder(); + emailService.rejectEmail(email.getRecipient(), email.getSender(), email.getObject(), folderTmp.getRejectResponseMessage()); + continue; + } + // client mailFolder unknown -> to default folder mailFolder = filter.getMailFolder(); } else { + // to client mailFolder FaxToMailUser personInCharge = client.getPersonInCharge(); mailFolder = mailFolderService.getFolderForFaxToMailUser(personInCharge); } } else { + if(client == null && + (filter.getMailFolder().getRejectUnknownSender() != null && + filter.getMailFolder().getRejectUnknownSender())) { + // client unknown filter active + // unknown client -> message rejected + MailFolder folderTmp = filter.getMailFolder(); + emailService.rejectEmail(email.getRecipient(), email.getSender(), email.getObject(), folderTmp.getRejectResponseMessage()); + continue; + } + // to default folder mailFolder = filter.getMailFolder(); } if (mailFolder != null) { Modified: trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-06-27 14:50:53 UTC (rev 278) +++ trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-06-27 15:02:46 UTC (rev 279) @@ -896,7 +896,7 @@ <tr ng-repeat="mailFilter in rootFolderMailFilters[mailFolder.topiaId]"> <td>{{mailFilter.expression}}</td> <td>{{mailFilter.mailFolder.$fullPath}}</td> - <td>{{mailFilter.clientResponsiblePriority ? 'Non' : 'Oui'}}</td> + <td>{{mailFilter.clientResponsiblePriority ? 'Oui' : 'Non'}}</td> <td><a class="btn btn-danger btn-xs" ng-click="removeFilter(mailFolder, mailFilter)"> <span class="glyphicon glyphicon-remove"></span> </a></td> @@ -917,11 +917,11 @@ <label for="clientResponsiblePriorityField">Utiliser le dossier de la règle en priorité : </label> <label class="radio-inline"> <input type="radio" - ng-model="newFilter.clientResponsiblePriority" ng-value="false"> oui + ng-model="newFilter.clientResponsiblePriority" ng-value="false"> non </label> <label class="radio-inline"> <input type="radio" - ng-model="newFilter.clientResponsiblePriority" ng-value="true"> non + ng-model="newFilter.clientResponsiblePriority" ng-value="true"> oui </label> </div> </div> Modified: trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-06-27 14:50:53 UTC (rev 278) +++ trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-06-27 15:02:46 UTC (rev 279) @@ -936,7 +936,7 @@ ConfigurationModule.controller('ConfigurationFilterController', ['$scope', '$window', 'ConfigurationData', function($scope, $window, ConfigurationData) { //{Object} New accout empty filter - $scope.newFilter = {clientResponsiblePriority:false}; + $scope.newFilter = {clientResponsiblePriority:true}; // option de la configuration 'sortable' $scope.sortableOptions = {