email sender will be owner of attached file

This commit is contained in:
william 2025-01-20 14:45:21 +08:00
parent b7cce4fa51
commit 91413bd2b3
2 changed files with 76 additions and 23 deletions

View File

@ -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.
* *

View File

@ -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());
} }