mirror of
https://github.com/sismics/docs.git
synced 2025-03-12 15:51:42 +01:00
email sender will be owner of attached file
This commit is contained in:
parent
b7cce4fa51
commit
91413bd2b3
@ -1,12 +1,19 @@
|
|||||||
package com.sismics.docs.core.dao;
|
package com.sismics.docs.core.dao;
|
||||||
|
|
||||||
import com.google.common.base.Joiner;
|
import java.sql.Timestamp;
|
||||||
import com.google.common.base.Strings;
|
import java.util.ArrayList;
|
||||||
import at.favre.lib.crypto.bcrypt.BCrypt;
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import com.google.common.base.Joiner;
|
||||||
|
import com.google.common.base.Strings;
|
||||||
import com.sismics.docs.core.constant.AuditLogType;
|
import com.sismics.docs.core.constant.AuditLogType;
|
||||||
import com.sismics.docs.core.constant.Constants;
|
import com.sismics.docs.core.constant.Constants;
|
||||||
import com.sismics.docs.core.dao.criteria.UserCriteria;
|
import com.sismics.docs.core.dao.criteria.UserCriteria;
|
||||||
@ -19,11 +26,10 @@ import com.sismics.docs.core.util.jpa.QueryUtil;
|
|||||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
|
import at.favre.lib.crypto.bcrypt.BCrypt;
|
||||||
import jakarta.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import jakarta.persistence.NoResultException;
|
import jakarta.persistence.NoResultException;
|
||||||
import jakarta.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.sql.Timestamp;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User DAO.
|
* User DAO.
|
||||||
@ -234,6 +240,23 @@ public class UserDao {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets an active user by its email.
|
||||||
|
*
|
||||||
|
* @param email User's email
|
||||||
|
* @return User
|
||||||
|
*/
|
||||||
|
public User getByEmail(String email) {
|
||||||
|
EntityManager em = ThreadLocalContext.get().getEntityManager();
|
||||||
|
try {
|
||||||
|
Query q = em.createQuery("select u from User u where u.email = :email and u.deleteDate is null");
|
||||||
|
q.setParameter("email", email);
|
||||||
|
return (User) q.getSingleResult();
|
||||||
|
} catch (NoResultException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes a user.
|
* Deletes a user.
|
||||||
*
|
*
|
||||||
|
@ -1,8 +1,32 @@
|
|||||||
package com.sismics.docs.core.service;
|
package com.sismics.docs.core.service;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import javax.mail.Flags;
|
||||||
|
import javax.mail.Folder;
|
||||||
|
import javax.mail.FolderClosedException;
|
||||||
|
import javax.mail.Message;
|
||||||
|
import javax.mail.Session;
|
||||||
|
import javax.mail.Store;
|
||||||
|
import javax.mail.internet.InternetAddress;
|
||||||
|
import javax.mail.search.FlagTerm;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import com.google.common.util.concurrent.AbstractScheduledService;
|
import com.google.common.util.concurrent.AbstractScheduledService;
|
||||||
import com.sismics.docs.core.constant.ConfigType;
|
import com.sismics.docs.core.constant.ConfigType;
|
||||||
import com.sismics.docs.core.dao.TagDao;
|
import com.sismics.docs.core.dao.TagDao;
|
||||||
|
import com.sismics.docs.core.dao.UserDao;
|
||||||
import com.sismics.docs.core.dao.criteria.TagCriteria;
|
import com.sismics.docs.core.dao.criteria.TagCriteria;
|
||||||
import com.sismics.docs.core.dao.dto.TagDto;
|
import com.sismics.docs.core.dao.dto.TagDto;
|
||||||
import com.sismics.docs.core.event.DocumentCreatedAsyncEvent;
|
import com.sismics.docs.core.event.DocumentCreatedAsyncEvent;
|
||||||
@ -15,16 +39,6 @@ import com.sismics.docs.core.util.TransactionUtil;
|
|||||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||||
import com.sismics.util.EmailUtil;
|
import com.sismics.util.EmailUtil;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import javax.mail.*;
|
|
||||||
import javax.mail.search.FlagTerm;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inbox scanning service.
|
* Inbox scanning service.
|
||||||
@ -88,7 +102,8 @@ public class InboxService extends AbstractScheduledService {
|
|||||||
Message[] messages = inbox.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false));
|
Message[] messages = inbox.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false));
|
||||||
log.info(messages.length + " messages found");
|
log.info(messages.length + " messages found");
|
||||||
for (Message message : messages) {
|
for (Message message : messages) {
|
||||||
importMessage(message, tagsNameToId);
|
InternetAddress sender = (InternetAddress) message.getFrom()[0];
|
||||||
|
importMessage(message, tagsNameToId,sender);
|
||||||
lastSyncMessageCount++;
|
lastSyncMessageCount++;
|
||||||
}
|
}
|
||||||
} catch (FolderClosedException e) {
|
} catch (FolderClosedException e) {
|
||||||
@ -190,8 +205,8 @@ public class InboxService extends AbstractScheduledService {
|
|||||||
* @param message Message
|
* @param message Message
|
||||||
* @throws Exception e
|
* @throws Exception e
|
||||||
*/
|
*/
|
||||||
private void importMessage(Message message, Map<String, String> tags) throws Exception {
|
private void importMessage(Message message, Map<String, String> tags,InternetAddress sender) throws Exception {
|
||||||
log.info("Importing message: " + message.getSubject());
|
log.info("Importing message: " + message.getSubject()+",sender="+sender.getAddress());
|
||||||
|
|
||||||
// Parse the mail
|
// Parse the mail
|
||||||
EmailUtil.MailContent mailContent = new EmailUtil.MailContent();
|
EmailUtil.MailContent mailContent = new EmailUtil.MailContent();
|
||||||
@ -219,7 +234,11 @@ public class InboxService extends AbstractScheduledService {
|
|||||||
log.debug("Tags found: " + String.join(", ", tagsFound));
|
log.debug("Tags found: " + String.join(", ", tagsFound));
|
||||||
subject = subject.trim().replaceAll(" +", " ");
|
subject = subject.trim().replaceAll(" +", " ");
|
||||||
}
|
}
|
||||||
|
UserDao userDao = new UserDao();
|
||||||
|
com.sismics.docs.core.model.jpa.User user = userDao.getByEmail(sender.getAddress());
|
||||||
|
if(user!=null)
|
||||||
|
document.setUserId(user.getId());
|
||||||
|
else
|
||||||
document.setUserId("admin");
|
document.setUserId("admin");
|
||||||
document.setTitle(StringUtils.abbreviate(subject, 100));
|
document.setTitle(StringUtils.abbreviate(subject, 100));
|
||||||
document.setDescription(StringUtils.abbreviate(mailContent.getMessage(), 4000));
|
document.setDescription(StringUtils.abbreviate(mailContent.getMessage(), 4000));
|
||||||
@ -232,9 +251,13 @@ public class InboxService extends AbstractScheduledService {
|
|||||||
} else {
|
} else {
|
||||||
document.setCreateDate(mailContent.getDate());
|
document.setCreateDate(mailContent.getDate());
|
||||||
}
|
}
|
||||||
|
if(user!=null)
|
||||||
|
DocumentUtil.createDocument(document, user.getId());
|
||||||
|
else{
|
||||||
// Save the document, create the base ACLs
|
// Save the document, create the base ACLs
|
||||||
DocumentUtil.createDocument(document, "admin");
|
DocumentUtil.createDocument(document, "admin");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Add the tag
|
// Add the tag
|
||||||
String tagId = ConfigUtil.getConfigStringValue(ConfigType.INBOX_TAG);
|
String tagId = ConfigUtil.getConfigStringValue(ConfigType.INBOX_TAG);
|
||||||
@ -253,12 +276,19 @@ public class InboxService extends AbstractScheduledService {
|
|||||||
|
|
||||||
// Raise a document created event
|
// Raise a document created event
|
||||||
DocumentCreatedAsyncEvent documentCreatedAsyncEvent = new DocumentCreatedAsyncEvent();
|
DocumentCreatedAsyncEvent documentCreatedAsyncEvent = new DocumentCreatedAsyncEvent();
|
||||||
|
if(user!=null)
|
||||||
|
documentCreatedAsyncEvent.setUserId(user.getId());
|
||||||
|
else
|
||||||
documentCreatedAsyncEvent.setUserId("admin");
|
documentCreatedAsyncEvent.setUserId("admin");
|
||||||
documentCreatedAsyncEvent.setDocumentId(document.getId());
|
documentCreatedAsyncEvent.setDocumentId(document.getId());
|
||||||
ThreadLocalContext.get().addAsyncEvent(documentCreatedAsyncEvent);
|
ThreadLocalContext.get().addAsyncEvent(documentCreatedAsyncEvent);
|
||||||
|
|
||||||
// Add files to the document
|
// Add files to the document
|
||||||
for (EmailUtil.FileContent fileContent : mailContent.getFileContentList()) {
|
for (EmailUtil.FileContent fileContent : mailContent.getFileContentList()) {
|
||||||
|
if(user!=null)
|
||||||
|
FileUtil.createFile(fileContent.getName(), null, fileContent.getFile(), fileContent.getSize(),
|
||||||
|
document.getLanguage(), user.getId(), document.getId());
|
||||||
|
else
|
||||||
FileUtil.createFile(fileContent.getName(), null, fileContent.getFile(), fileContent.getSize(),
|
FileUtil.createFile(fileContent.getName(), null, fileContent.getFile(), fileContent.getSize(),
|
||||||
document.getLanguage(), "admin", document.getId());
|
document.getLanguage(), "admin", document.getId());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user