You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2018/04/16 15:33:44 UTC

[openmeetings] branch OPENMEETINGS-1864-privacy updated: [OPENMEETINGS-1864] basic purge is implemented

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch OPENMEETINGS-1864-privacy
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/OPENMEETINGS-1864-privacy by this push:
     new adfa789  [OPENMEETINGS-1864] basic purge is implemented
adfa789 is described below

commit adfa78931dec907c9804f605ee3684cad7c6c30f
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Mon Apr 16 22:33:33 2018 +0700

    [OPENMEETINGS-1864] basic purge is implemented
---
 .../apache/openmeetings/db/dao/user/UserDao.java   | 34 ++++++++++++++++++++++
 .../openmeetings/db/entity/basic/ChatMessage.java  |  1 +
 .../openmeetings/db/entity/basic/MailMessage.java  |  1 +
 .../org/apache/openmeetings/util/OmFileHelper.java |  6 +++-
 .../openmeetings/web/admin/AdminSavePanel.java     |  4 +--
 .../openmeetings/web/admin/users/UserForm.java     | 26 +++++++++++++++++
 6 files changed, 69 insertions(+), 3 deletions(-)

diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
index 1adf437..990f99d 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
@@ -25,6 +25,7 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.getDefaultLang;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.getMinLoginLength;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
 
+import java.io.File;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -48,6 +49,7 @@ import org.apache.openjpa.persistence.OpenJPAQuery;
 import org.apache.openmeetings.db.dao.IGroupAdminDataProviderDao;
 import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.AsteriskSipUser;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Right;
 import org.apache.openmeetings.db.entity.user.User.Salutation;
@@ -55,6 +57,7 @@ import org.apache.openmeetings.db.entity.user.User.Type;
 import org.apache.openmeetings.db.util.AuthLevelUtil;
 import org.apache.openmeetings.util.DaoHelper;
 import org.apache.openmeetings.util.OmException;
+import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.util.crypt.CryptProvider;
 import org.apache.openmeetings.util.crypt.ICrypt;
 import org.apache.wicket.util.string.Strings;
@@ -326,6 +329,37 @@ public class UserDao implements IGroupAdminDataProviderDao<User> {
 		}
 	}
 
+	// created here so this action would be executed in Transaction
+	public void purge(User u, Long userId) {
+		if (u != null && u.getId() != null) {
+			em.createNamedQuery("purgeChatUserName")
+				.setParameter("purged", "Purged User")
+				.setParameter("userId", u.getId())
+				.executeUpdate();
+			if (!Strings.isEmpty(u.getAddress().getEmail())) {
+				em.createNamedQuery("purgeMailMessages")
+					.setParameter("email", String.format("%%%s%%", u.getAddress().getEmail()))
+					.executeUpdate();
+			}
+			u.setDeleted(true);
+			u.setSipUser(new AsteriskSipUser());
+			u.setAddress(new Address());
+			u.setAge(new Date());
+			u.setExternalId(null);
+			final String purged = String.format("Purged %s", UUID.randomUUID());
+			u.setFirstname(purged);
+			u.setLastname(purged);
+			u.setLogin(purged);
+			File pic = OmFileHelper.getUserProfilePicture(u.getId(), u.getPictureuri(), null);
+			u.setPictureuri(null);
+			update(u, userId);
+			// this should be last action, so file will be deleted in case there were no errors
+			if (pic != null) {
+				pic.delete();
+			}
+		}
+	}
+
 	public List<User> get(Collection<Long> ids) {
 		return em.createNamedQuery("getUsersByIds", User.class).setParameter("ids", ids).getResultList();
 	}
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
index 13d6824..8c812f7 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
@@ -53,6 +53,7 @@ import org.simpleframework.xml.Root;
 	, @NamedQuery(name = "deleteChatGlobal", query = "DELETE FROM ChatMessage c WHERE c.toUser IS NULL AND c.toRoom IS NULL")
 	, @NamedQuery(name = "deleteChatRoom", query = "DELETE FROM ChatMessage c WHERE c.toUser IS NULL AND c.toRoom.id = :roomId")
 	, @NamedQuery(name = "deleteChatUser", query = "DELETE FROM ChatMessage c WHERE c.toRoom IS NULL AND c.toUser.id = :userId")
+	, @NamedQuery(name = "purgeChatUserName", query = "UPDATE ChatMessage c SET c.fromName = :purged WHERE c.toUser.id = :userId")
 })
 @Table(name = "chat")
 @Root(name = "ChatMessage")
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/MailMessage.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
index 671a060..bff9218 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
@@ -40,6 +40,7 @@ import org.apache.openmeetings.db.entity.HistoricalEntity;
 	, @NamedQuery(name = "countMailMessages", query = "SELECT COUNT(m) FROM MailMessage m")
 	, @NamedQuery(name = "resetMailStatusByDate", query = "UPDATE MailMessage m SET m.status = :noneStatus WHERE m.status = :sendingStatus AND m.updated < :date")
 	, @NamedQuery(name = "resetMailStatusById", query = "UPDATE MailMessage m SET m.errorCount = 0, m.status = :noneStatus WHERE m.id = :id")
+	, @NamedQuery(name = "purgeMailMessages", query = "DELETE FROM MailMessage m WHERE m.recipients LIKE :email OR m.replyTo LIKE :email")
 })
 @Table(name = "email_queue")
 public class MailMessage extends HistoricalEntity {
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
index 829cc2f..0d6b1d7 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
@@ -143,6 +143,10 @@ public class OmFileHelper {
 	}
 
 	public static File getUserProfilePicture(Long userId, String uri) {
+		return getUserProfilePicture(userId, uri, getDefaultProfilePicture());
+	}
+
+	public static File getUserProfilePicture(Long userId, String uri, File def) {
 		File img = null;
 		if (SIP_USER_ID.equals(userId)) {
 			img = new File(getImagesDir(), SIP_PICTURE_URI);
@@ -150,7 +154,7 @@ public class OmFileHelper {
 			img = new File(getUploadProfilesUserDir(userId), uri == null ? "" : uri);
 		}
 		if (img == null || !img.exists() || img.isDirectory()) {
-			img = getDefaultProfilePicture();
+			img = def;
 		}
 		return img;
 	}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminSavePanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminSavePanel.java
index 21eaf7e..24098c4 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminSavePanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminSavePanel.java
@@ -31,7 +31,7 @@ public abstract class AdminSavePanel<T> extends FormSaveRefreshPanel<T> {
 	private final Label newRecord = new Label("newRecord", Model.of(""));
 	private final Form<T> form;
 	private ConfirmableAjaxBorder delBtn;
-	private AjaxButton purgeBtn;
+	private ConfirmableAjaxBorder purgeBtn;
 	private AjaxButton restoreBtn;
 
 	public AdminSavePanel(String id, final Form<T> form) {
@@ -86,7 +86,7 @@ public abstract class AdminSavePanel<T> extends FormSaveRefreshPanel<T> {
 				onDeleteSubmit(target, form);
 			}
 		};
-		purgeBtn = new AjaxButton("btn-purge", form) {
+		purgeBtn = new ConfirmableAjaxBorder("btn-purge", getString("80"), getString("833"), cForm) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
index 7bee061..9c75db7 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
@@ -29,8 +29,10 @@ import static org.apache.openmeetings.web.app.WebSession.getRights;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -44,11 +46,14 @@ import org.apache.openmeetings.db.dao.server.OAuth2Dao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.server.LdapConfig;
 import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.AsteriskSipUser;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Right;
 import org.apache.openmeetings.db.entity.user.User.Type;
 import org.apache.openmeetings.db.util.AuthLevelUtil;
 import org.apache.openmeetings.service.mail.EmailManager;
+import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.web.admin.AdminBaseForm;
 import org.apache.openmeetings.web.common.ComunityUserForm;
 import org.apache.openmeetings.web.common.GeneralUserForm;
@@ -191,6 +196,27 @@ public class UserForm extends AdminBaseForm<User> {
 	}
 
 	@Override
+	protected void onPurgeSubmit(AjaxRequestTarget target, Form<?> form) {
+		User u = getModelObject();
+		u.setDeleted(true);
+		u.setSipUser(new AsteriskSipUser());
+		u.setAddress(new Address());
+		u.setAge(new Date());
+		u.setExternalId(null);
+		final String purged = String.format("Purged %s", UUID.randomUUID());
+		u.setFirstname(purged);
+		u.setLastname(purged);
+		u.setLogin(purged);
+		File pic = OmFileHelper.getUserProfilePicture(u.getId(), u.getPictureuri(), null);
+		if (pic != null) {
+			pic.delete();
+		}
+		//u.
+		//User fields "age, externaluserid, firstname, lastname, login, pictureuri" will be replaced with "Purged_some_hash"
+		//onSaveSubmit(target, form);
+	}
+
+	@Override
 	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
 		if (isAdminPassRequired()) {
 			adminPass.setAction((SerializableConsumer<AjaxRequestTarget>)t -> saveUser(t, password.getModelObject()));

-- 
To stop receiving notification emails like this one, please contact
solomax@apache.org.