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 2019/12/05 11:13:16 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2146] file/recording hash is only being changed if necessary

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

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new a109411  [OPENMEETINGS-2146] file/recording hash is only being changed if necessary
a109411 is described below

commit a1094118d1f902b9625a41ac1e65ae5376f7fa59
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Thu Dec 5 18:13:04 2019 +0700

    [OPENMEETINGS-2146] file/recording hash is only being changed if necessary
---
 .../org/apache/openmeetings/backup/BackupImport.java  | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
index e1c46e7..adaaa7d 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
@@ -120,6 +120,7 @@ import java.util.Map.Entry;
 import java.util.TreeMap;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
+import java.util.regex.Pattern;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
@@ -146,6 +147,7 @@ import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
 import org.apache.openmeetings.db.dao.calendar.OmCalendarDao;
+import org.apache.openmeetings.db.dao.file.BaseFileItemDao;
 import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.room.PollDao;
@@ -208,6 +210,7 @@ public class BackupImport {
 	private static final Logger log = LoggerFactory.getLogger(BackupImport.class);
 	private static final Map<String, String> outdatedConfigKeys = new HashMap<>();
 	private static final Map<String, Configuration.Type> configTypes = new HashMap<>();
+	private static final Pattern UUID_PATTERN = Pattern.compile("^[\\da-f]{8}(?:-[\\da-f]{4}){3}-[\\da-f]{12}$");
 	static {
 		outdatedConfigKeys.put("crypt_ClassName", CONFIG_CRYPT);
 		outdatedConfigKeys.put("system_email_addr", CONFIG_SMTP_SYSTEM_EMAIL);
@@ -903,13 +906,13 @@ public class BackupImport {
 				}
 			}
 			String oldHash = r.getHash();
-			r.setHash(randomUUID().toString());
 			if (!Strings.isEmpty(oldHash) && oldHash.startsWith(RECORDING_FILE_NAME)) {
 				String name = getFileName(oldHash);
 				fileMap.put(String.format(FILE_NAME_FMT, name, EXTENSION_JPG), String.format(FILE_NAME_FMT, r.getHash(), EXTENSION_PNG));
 				fileMap.put(String.format("%s.%s.%s", name, "flv", EXTENSION_MP4), String.format(FILE_NAME_FMT, r.getHash(), EXTENSION_MP4));
+				r.setHash(randomUUID().toString());
 			} else {
-				hashMap.put(oldHash, r.getHash());
+				checkHash(r, recordingDao);
 			}
 			r = recordingDao.update(r);
 			if (BaseFileItem.Type.Folder == r.getType()) {
@@ -919,6 +922,14 @@ public class BackupImport {
 		});
 	}
 
+	private void checkHash(BaseFileItem file, BaseFileItemDao dao) {
+		String oldHash = file.getHash();
+		if (Strings.isEmpty(oldHash) || !UUID_PATTERN.matcher(oldHash).matches() || dao.get(oldHash) != null) {
+			file.setHash(randomUUID().toString());
+			hashMap.put(oldHash, file.getHash());
+		}
+	}
+
 	/*
 	 * ##################### Import Private Message Folders
 	 */
@@ -1013,9 +1024,7 @@ public class BackupImport {
 			Long fId = file.getId();
 			// We need to reset this as openJPA reject to store them otherwise
 			file.setId(null);
-			String oldHash = file.getHash();
-			file.setHash(randomUUID().toString());
-			hashMap.put(oldHash, file.getHash());
+			checkHash(file, recordingDao);
 			file = fileItemDao.update(file);
 			if (BaseFileItem.Type.Folder == file.getType()) {
 				folders.put(fId, file.getId());