Merge remote-tracking branch 'upstream/v2.7.x-release' into patch-2
@ -1156,6 +1156,11 @@ public class ParamsProcessorUtil {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean parentMeetingExists(String parentMeetingId) {
|
||||||
|
Meeting meeting = ServiceUtils.findMeetingFromMeetingID(parentMeetingId);
|
||||||
|
return meeting != null;
|
||||||
|
}
|
||||||
|
|
||||||
/*************************************************
|
/*************************************************
|
||||||
* Setters
|
* Setters
|
||||||
************************************************/
|
************************************************/
|
||||||
|
@ -2,11 +2,14 @@ package org.bigbluebutton.api;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import org.apache.commons.codec.digest.DigestUtils;
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
|
import org.apache.commons.io.FilenameUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
public final class Util {
|
public final class Util {
|
||||||
@ -50,8 +53,19 @@ public final class Util {
|
|||||||
return DigestUtils.sha1Hex(presFilename + uuid) + "-" + timestamp;
|
return DigestUtils.sha1Hex(presFilename + uuid) + "-" + timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String extractFilenameFromUrl(String preUploadedPresentation) throws MalformedURLException {
|
||||||
|
URL url = new URL(preUploadedPresentation);
|
||||||
|
String filename = FilenameUtils.getName(url.getPath());
|
||||||
|
String extension = FilenameUtils.getExtension(url.getPath());
|
||||||
|
if (extension == null || extension.isEmpty()) return null;
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
public static String createNewFilename(String presId, String fileExt) {
|
public static String createNewFilename(String presId, String fileExt) {
|
||||||
return presId + "." + fileExt;
|
if (!fileExt.isEmpty()) {
|
||||||
|
return presId + "." + fileExt;
|
||||||
|
} else {
|
||||||
|
return presId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static File createPresentationDir(String meetingId, String presentationDir, String presentationId) {
|
public static File createPresentationDir(String meetingId, String presentationDir, String presentationId) {
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package org.bigbluebutton.presentation;
|
package org.bigbluebutton.presentation;
|
||||||
|
|
||||||
|
import org.bigbluebutton.api.domain.Extension;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static org.bigbluebutton.presentation.FileTypeConstants.*;
|
import static org.bigbluebutton.presentation.FileTypeConstants.*;
|
||||||
@ -43,7 +45,16 @@ public class MimeTypeUtils {
|
|||||||
put(FileTypeConstants.SVG, Arrays.asList(SVG));
|
put(FileTypeConstants.SVG, Arrays.asList(SVG));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public String getExtensionBasedOnMimeType(String mimeType) {
|
||||||
|
return EXTENSIONS_MIME.entrySet()
|
||||||
|
.stream()
|
||||||
|
.filter(entry -> entry.getValue().contains(mimeType))
|
||||||
|
.map(Map.Entry::getKey)
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
public Boolean extensionMatchMimeType(String mimeType, String finalExtension) {
|
public Boolean extensionMatchMimeType(String mimeType, String finalExtension) {
|
||||||
finalExtension = finalExtension.toLowerCase();
|
finalExtension = finalExtension.toLowerCase();
|
||||||
|
|
||||||
|
@ -108,14 +108,21 @@ public final class SupportedFileTypes {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String detectFileExtensionBasedOnMimeType(File pres) {
|
||||||
|
String mimeType = detectMimeType(pres);
|
||||||
|
return mimeTypeUtils.getExtensionBasedOnMimeType(mimeType);
|
||||||
|
}
|
||||||
|
|
||||||
public static Boolean isPresentationMimeTypeValid(File pres, String fileExtension) {
|
public static Boolean isPresentationMimeTypeValid(File pres, String fileExtension) {
|
||||||
String mimeType = detectMimeType(pres);
|
String mimeType = detectMimeType(pres);
|
||||||
|
|
||||||
if (mimeType.equals("")) {
|
if (mimeType.equals("")) {
|
||||||
|
log.error("Not able to detect mimeType.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mimeTypeUtils.getValidMimeTypes().contains(mimeType)) {
|
if (!mimeTypeUtils.getValidMimeTypes().contains(mimeType)) {
|
||||||
|
log.error("MimeType is not valid for this meeting, [{}]", mimeType);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1033
bbb-learning-dashboard/package-lock.json
generated
330
bigbluebutton-html5/package-lock.json
generated
@ -12,13 +12,36 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/generator": {
|
"@babel/generator": {
|
||||||
"version": "7.15.8",
|
"version": "7.23.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
|
||||||
"integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==",
|
"integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/types": "^7.15.6",
|
"@babel/types": "^7.23.0",
|
||||||
"jsesc": "^2.5.1",
|
"@jridgewell/gen-mapping": "^0.3.2",
|
||||||
"source-map": "^0.5.0"
|
"@jridgewell/trace-mapping": "^0.3.17",
|
||||||
|
"jsesc": "^2.5.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/helper-string-parser": {
|
||||||
|
"version": "7.22.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
|
||||||
|
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="
|
||||||
|
},
|
||||||
|
"@babel/helper-validator-identifier": {
|
||||||
|
"version": "7.22.20",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
|
||||||
|
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
|
||||||
|
},
|
||||||
|
"@babel/types": {
|
||||||
|
"version": "7.23.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
|
||||||
|
"integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/helper-string-parser": "^7.22.5",
|
||||||
|
"@babel/helper-validator-identifier": "^7.22.20",
|
||||||
|
"to-fast-properties": "^2.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/helper-annotate-as-pure": {
|
"@babel/helper-annotate-as-pure": {
|
||||||
@ -29,30 +52,70 @@
|
|||||||
"@babel/types": "^7.18.6"
|
"@babel/types": "^7.18.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/helper-function-name": {
|
"@babel/helper-environment-visitor": {
|
||||||
"version": "7.15.4",
|
"version": "7.22.20",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
|
||||||
"integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==",
|
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA=="
|
||||||
"requires": {
|
|
||||||
"@babel/helper-get-function-arity": "^7.15.4",
|
|
||||||
"@babel/template": "^7.15.4",
|
|
||||||
"@babel/types": "^7.15.4"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"@babel/helper-get-function-arity": {
|
"@babel/helper-function-name": {
|
||||||
"version": "7.15.4",
|
"version": "7.23.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
|
||||||
"integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==",
|
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/types": "^7.15.4"
|
"@babel/template": "^7.22.15",
|
||||||
|
"@babel/types": "^7.23.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/helper-string-parser": {
|
||||||
|
"version": "7.22.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
|
||||||
|
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="
|
||||||
|
},
|
||||||
|
"@babel/helper-validator-identifier": {
|
||||||
|
"version": "7.22.20",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
|
||||||
|
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
|
||||||
|
},
|
||||||
|
"@babel/types": {
|
||||||
|
"version": "7.23.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
|
||||||
|
"integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/helper-string-parser": "^7.22.5",
|
||||||
|
"@babel/helper-validator-identifier": "^7.22.20",
|
||||||
|
"to-fast-properties": "^2.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/helper-hoist-variables": {
|
"@babel/helper-hoist-variables": {
|
||||||
"version": "7.15.4",
|
"version": "7.22.5",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
|
||||||
"integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==",
|
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/types": "^7.15.4"
|
"@babel/types": "^7.22.5"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/helper-string-parser": {
|
||||||
|
"version": "7.22.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
|
||||||
|
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="
|
||||||
|
},
|
||||||
|
"@babel/helper-validator-identifier": {
|
||||||
|
"version": "7.22.20",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
|
||||||
|
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
|
||||||
|
},
|
||||||
|
"@babel/types": {
|
||||||
|
"version": "7.23.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
|
||||||
|
"integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/helper-string-parser": "^7.22.5",
|
||||||
|
"@babel/helper-validator-identifier": "^7.22.20",
|
||||||
|
"to-fast-properties": "^2.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/helper-module-imports": {
|
"@babel/helper-module-imports": {
|
||||||
@ -64,11 +127,33 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/helper-split-export-declaration": {
|
"@babel/helper-split-export-declaration": {
|
||||||
"version": "7.15.4",
|
"version": "7.22.6",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
|
||||||
"integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==",
|
"integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/types": "^7.15.4"
|
"@babel/types": "^7.22.5"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/helper-string-parser": {
|
||||||
|
"version": "7.22.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
|
||||||
|
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="
|
||||||
|
},
|
||||||
|
"@babel/helper-validator-identifier": {
|
||||||
|
"version": "7.22.20",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
|
||||||
|
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
|
||||||
|
},
|
||||||
|
"@babel/types": {
|
||||||
|
"version": "7.23.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
|
||||||
|
"integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/helper-string-parser": "^7.22.5",
|
||||||
|
"@babel/helper-validator-identifier": "^7.22.20",
|
||||||
|
"to-fast-properties": "^2.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/helper-string-parser": {
|
"@babel/helper-string-parser": {
|
||||||
@ -120,9 +205,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/parser": {
|
"@babel/parser": {
|
||||||
"version": "7.15.8",
|
"version": "7.23.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
|
||||||
"integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA=="
|
"integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw=="
|
||||||
},
|
},
|
||||||
"@babel/runtime": {
|
"@babel/runtime": {
|
||||||
"version": "7.21.5",
|
"version": "7.21.5",
|
||||||
@ -143,33 +228,54 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/template": {
|
"@babel/template": {
|
||||||
"version": "7.15.4",
|
"version": "7.22.15",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
|
||||||
"integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==",
|
"integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/code-frame": "^7.14.5",
|
"@babel/code-frame": "^7.22.13",
|
||||||
"@babel/parser": "^7.15.4",
|
"@babel/parser": "^7.22.15",
|
||||||
"@babel/types": "^7.15.4"
|
"@babel/types": "^7.22.15"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/code-frame": {
|
"@babel/code-frame": {
|
||||||
"version": "7.15.8",
|
"version": "7.22.13",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
|
||||||
"integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
|
"integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/highlight": "^7.14.5"
|
"@babel/highlight": "^7.22.13",
|
||||||
|
"chalk": "^2.4.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@babel/helper-string-parser": {
|
||||||
|
"version": "7.22.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
|
||||||
|
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="
|
||||||
|
},
|
||||||
|
"@babel/helper-validator-identifier": {
|
||||||
|
"version": "7.22.20",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
|
||||||
|
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
|
||||||
|
},
|
||||||
"@babel/highlight": {
|
"@babel/highlight": {
|
||||||
"version": "7.14.5",
|
"version": "7.22.20",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
|
||||||
"integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
|
"integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/helper-validator-identifier": "^7.14.5",
|
"@babel/helper-validator-identifier": "^7.22.20",
|
||||||
"chalk": "^2.0.0",
|
"chalk": "^2.4.2",
|
||||||
"js-tokens": "^4.0.0"
|
"js-tokens": "^4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@babel/types": {
|
||||||
|
"version": "7.23.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
|
||||||
|
"integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/helper-string-parser": "^7.22.5",
|
||||||
|
"@babel/helper-validator-identifier": "^7.22.20",
|
||||||
|
"to-fast-properties": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"ansi-styles": {
|
"ansi-styles": {
|
||||||
"version": "3.2.1",
|
"version": "3.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||||
@ -199,39 +305,61 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/traverse": {
|
"@babel/traverse": {
|
||||||
"version": "7.15.4",
|
"version": "7.23.2",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
|
||||||
"integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==",
|
"integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/code-frame": "^7.14.5",
|
"@babel/code-frame": "^7.22.13",
|
||||||
"@babel/generator": "^7.15.4",
|
"@babel/generator": "^7.23.0",
|
||||||
"@babel/helper-function-name": "^7.15.4",
|
"@babel/helper-environment-visitor": "^7.22.20",
|
||||||
"@babel/helper-hoist-variables": "^7.15.4",
|
"@babel/helper-function-name": "^7.23.0",
|
||||||
"@babel/helper-split-export-declaration": "^7.15.4",
|
"@babel/helper-hoist-variables": "^7.22.5",
|
||||||
"@babel/parser": "^7.15.4",
|
"@babel/helper-split-export-declaration": "^7.22.6",
|
||||||
"@babel/types": "^7.15.4",
|
"@babel/parser": "^7.23.0",
|
||||||
|
"@babel/types": "^7.23.0",
|
||||||
"debug": "^4.1.0",
|
"debug": "^4.1.0",
|
||||||
"globals": "^11.1.0"
|
"globals": "^11.1.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/code-frame": {
|
"@babel/code-frame": {
|
||||||
"version": "7.15.8",
|
"version": "7.22.13",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
|
||||||
"integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
|
"integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/highlight": "^7.14.5"
|
"@babel/highlight": "^7.22.13",
|
||||||
|
"chalk": "^2.4.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@babel/helper-string-parser": {
|
||||||
|
"version": "7.22.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
|
||||||
|
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="
|
||||||
|
},
|
||||||
|
"@babel/helper-validator-identifier": {
|
||||||
|
"version": "7.22.20",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
|
||||||
|
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
|
||||||
|
},
|
||||||
"@babel/highlight": {
|
"@babel/highlight": {
|
||||||
"version": "7.14.5",
|
"version": "7.22.20",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
|
||||||
"integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
|
"integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/helper-validator-identifier": "^7.14.5",
|
"@babel/helper-validator-identifier": "^7.22.20",
|
||||||
"chalk": "^2.0.0",
|
"chalk": "^2.4.2",
|
||||||
"js-tokens": "^4.0.0"
|
"js-tokens": "^4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@babel/types": {
|
||||||
|
"version": "7.23.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
|
||||||
|
"integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/helper-string-parser": "^7.22.5",
|
||||||
|
"@babel/helper-validator-identifier": "^7.22.20",
|
||||||
|
"to-fast-properties": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"ansi-styles": {
|
"ansi-styles": {
|
||||||
"version": "3.2.1",
|
"version": "3.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||||
@ -251,9 +379,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"version": "4.3.2",
|
"version": "4.3.4",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||||
"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
|
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"ms": "2.1.2"
|
"ms": "2.1.2"
|
||||||
}
|
}
|
||||||
@ -780,6 +908,40 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@jridgewell/gen-mapping": {
|
||||||
|
"version": "0.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
|
||||||
|
"integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
|
||||||
|
"requires": {
|
||||||
|
"@jridgewell/set-array": "^1.0.1",
|
||||||
|
"@jridgewell/sourcemap-codec": "^1.4.10",
|
||||||
|
"@jridgewell/trace-mapping": "^0.3.9"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@jridgewell/resolve-uri": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA=="
|
||||||
|
},
|
||||||
|
"@jridgewell/set-array": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
|
||||||
|
},
|
||||||
|
"@jridgewell/sourcemap-codec": {
|
||||||
|
"version": "1.4.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
|
||||||
|
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
|
||||||
|
},
|
||||||
|
"@jridgewell/trace-mapping": {
|
||||||
|
"version": "0.3.20",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
|
||||||
|
"integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
|
||||||
|
"requires": {
|
||||||
|
"@jridgewell/resolve-uri": "^3.1.0",
|
||||||
|
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@mconf/bbb-diff": {
|
"@mconf/bbb-diff": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@mconf/bbb-diff/-/bbb-diff-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@mconf/bbb-diff/-/bbb-diff-1.2.0.tgz",
|
||||||
@ -3313,9 +3475,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"semver": {
|
"semver": {
|
||||||
"version": "6.3.0",
|
"version": "6.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3690,9 +3852,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"get-func-name": {
|
"get-func-name": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
|
||||||
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
|
"integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"get-intrinsic": {
|
"get-intrinsic": {
|
||||||
@ -5368,9 +5530,9 @@
|
|||||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||||
},
|
},
|
||||||
"nanoid": {
|
"nanoid": {
|
||||||
"version": "3.3.4",
|
"version": "3.3.6",
|
||||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
|
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
|
||||||
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
|
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
|
||||||
},
|
},
|
||||||
"natural-compare": {
|
"natural-compare": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
@ -5912,11 +6074,11 @@
|
|||||||
"integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ=="
|
"integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ=="
|
||||||
},
|
},
|
||||||
"postcss": {
|
"postcss": {
|
||||||
"version": "8.4.20",
|
"version": "8.4.31",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
|
||||||
"integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==",
|
"integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"nanoid": "^3.3.4",
|
"nanoid": "^3.3.6",
|
||||||
"picocolors": "^1.0.0",
|
"picocolors": "^1.0.0",
|
||||||
"source-map-js": "^1.0.2"
|
"source-map-js": "^1.0.2"
|
||||||
}
|
}
|
||||||
@ -7175,9 +7337,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"word-wrap": {
|
"word-wrap": {
|
||||||
"version": "1.2.3",
|
"version": "1.2.5",
|
||||||
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
|
||||||
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
|
"integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"wrap-ansi": {
|
"wrap-ansi": {
|
||||||
|
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 124 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.2 KiB |
@ -1,7 +1,7 @@
|
|||||||
grailsVersion=5.3.2
|
grailsVersion=5.3.3
|
||||||
gormVersion=7.3.1
|
gormVersion=7.3.1
|
||||||
gradleWrapperVersion=7.3.1
|
gradleWrapperVersion=7.3.1
|
||||||
grailsGradlePluginVersion=5.0.0
|
grailsGradlePluginVersion=5.0.0
|
||||||
groovyVersion=3.0.11
|
groovyVersion=3.0.19
|
||||||
tomcatEmbedVersion=9.0.78
|
tomcatEmbedVersion=9.0.82
|
||||||
springVersion=2.7.12
|
springVersion=2.7.17
|
||||||
|
@ -21,6 +21,7 @@ package org.bigbluebutton.web.controllers
|
|||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import grails.web.context.ServletContextHolder
|
import grails.web.context.ServletContextHolder
|
||||||
import groovy.json.JsonBuilder
|
import groovy.json.JsonBuilder
|
||||||
|
import groovy.xml.MarkupBuilder
|
||||||
import org.apache.commons.codec.binary.Base64
|
import org.apache.commons.codec.binary.Base64
|
||||||
import org.apache.commons.codec.digest.DigestUtils
|
import org.apache.commons.codec.digest.DigestUtils
|
||||||
import org.apache.commons.io.FilenameUtils
|
import org.apache.commons.io.FilenameUtils
|
||||||
@ -43,7 +44,6 @@ import org.bigbluebutton.web.services.turn.TurnEntry
|
|||||||
import org.bigbluebutton.web.services.turn.StunServer
|
import org.bigbluebutton.web.services.turn.StunServer
|
||||||
import org.bigbluebutton.web.services.turn.RemoteIceCandidate
|
import org.bigbluebutton.web.services.turn.RemoteIceCandidate
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
|
|
||||||
import javax.servlet.ServletRequest
|
import javax.servlet.ServletRequest
|
||||||
|
|
||||||
class ApiController {
|
class ApiController {
|
||||||
@ -127,9 +127,20 @@ class ApiController {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if(params.isBreakout && !params.parentIdMeetingId) {
|
Boolean isBreakoutRoom = false
|
||||||
invalid("parentMeetingIdMissing", "No parent meeting ID was provided for the breakout room")
|
if (!StringUtils.isEmpty(params.isBreakout)) {
|
||||||
return
|
isBreakoutRoom = Boolean.parseBoolean(params.isBreakout)
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isBreakoutRoom) {
|
||||||
|
if(StringUtils.isEmpty(params.parentMeetingID)) {
|
||||||
|
invalid("parentMeetingIDMissing", "No parent meeting ID was provided for the breakout room")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(!paramsProcessorUtil.parentMeetingExists(params.parentMeetingID)) {
|
||||||
|
invalid("parentMeetingDoesNotExist", "No parent meeting exists for the breakout room")
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure unique TelVoice. Uniqueness is not guaranteed by paramsProcessorUtil.
|
// Ensure unique TelVoice. Uniqueness is not guaranteed by paramsProcessorUtil.
|
||||||
@ -1378,6 +1389,37 @@ class ApiController {
|
|||||||
Boolean isDefaultPresentationCurrent = false;
|
Boolean isDefaultPresentationCurrent = false;
|
||||||
def listOfPresentation = []
|
def listOfPresentation = []
|
||||||
def presentationListHasCurrent = false
|
def presentationListHasCurrent = false
|
||||||
|
Boolean hasPresentationUrlInParameter = false
|
||||||
|
|
||||||
|
|
||||||
|
String[] pu = request.getParameterMap().get("preUploadedPresentation")
|
||||||
|
String[] puName = request.getParameterMap().get("preUploadedPresentationName")
|
||||||
|
if (pu != null) {
|
||||||
|
String preUploadedPresentation = pu[0]
|
||||||
|
hasPresentationUrlInParameter = true
|
||||||
|
def xmlString = new StringWriter()
|
||||||
|
def xml = new MarkupBuilder(xmlString)
|
||||||
|
String filename
|
||||||
|
if (puName == null) {
|
||||||
|
filename = Util.extractFilenameFromUrl(preUploadedPresentation)
|
||||||
|
if (filename == null) {
|
||||||
|
filename = "untitled"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
filename = puName[0]
|
||||||
|
}
|
||||||
|
xml.document (
|
||||||
|
removable: "true",
|
||||||
|
downloadable: "false",
|
||||||
|
url: preUploadedPresentation,
|
||||||
|
filename: filename,
|
||||||
|
isPreUploadedPresentationFromParameter: "true"
|
||||||
|
)
|
||||||
|
|
||||||
|
def parsedXml = new XmlSlurper().parseText(xmlString.toString())
|
||||||
|
|
||||||
|
listOfPresentation << parsedXml
|
||||||
|
}
|
||||||
|
|
||||||
// This part of the code is responsible for organize the presentations in a certain order
|
// This part of the code is responsible for organize the presentations in a certain order
|
||||||
// It selects the one that has the current=true, and put it in the 0th place.
|
// It selects the one that has the current=true, and put it in the 0th place.
|
||||||
@ -1387,10 +1429,17 @@ class ApiController {
|
|||||||
log.warn("Insert Document API called without a payload - ignoring")
|
log.warn("Insert Document API called without a payload - ignoring")
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
listOfPresentation << [name: "default", current: true];
|
if (hasPresentationUrlInParameter) {
|
||||||
|
if (!preUploadedPresentationOverrideDefault) {
|
||||||
|
listOfPresentation << [name: "default", current: true]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
listOfPresentation << [name: "default", current: true]
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
def xml = new XmlSlurper().parseText(requestBody);
|
def xml = new XmlSlurper().parseText(requestBody);
|
||||||
Boolean hasCurrent = false;
|
Boolean hasCurrent = hasPresentationUrlInParameter;
|
||||||
xml.children().each { module ->
|
xml.children().each { module ->
|
||||||
log.debug("module config found: [${module.@name}]");
|
log.debug("module config found: [${module.@name}]");
|
||||||
|
|
||||||
@ -1425,6 +1474,7 @@ class ApiController {
|
|||||||
def Boolean isRemovable = true;
|
def Boolean isRemovable = true;
|
||||||
def Boolean isDownloadable = false;
|
def Boolean isDownloadable = false;
|
||||||
def Boolean isInitialPresentation = false;
|
def Boolean isInitialPresentation = false;
|
||||||
|
def Boolean isPreUploadedPresentationFromParameter = false
|
||||||
|
|
||||||
if (document.name != null && "default".equals(document.name)) {
|
if (document.name != null && "default".equals(document.name)) {
|
||||||
if (presentationService.defaultUploadedPresentation) {
|
if (presentationService.defaultUploadedPresentation) {
|
||||||
@ -1433,11 +1483,15 @@ class ApiController {
|
|||||||
}
|
}
|
||||||
downloadAndProcessDocument(presentationService.defaultUploadedPresentation, conf.getInternalId(),
|
downloadAndProcessDocument(presentationService.defaultUploadedPresentation, conf.getInternalId(),
|
||||||
document.current /* default presentation */, '', false,
|
document.current /* default presentation */, '', false,
|
||||||
true, isInitialPresentation);
|
true, isInitialPresentation, isPreUploadedPresentationFromParameter);
|
||||||
} else {
|
} else {
|
||||||
log.error "Default presentation could not be read, it is (" + presentationService.defaultUploadedPresentation + ")", "error"
|
log.error "Default presentation could not be read, it is (" + presentationService.defaultUploadedPresentation + ")", "error"
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (!StringUtils.isEmpty(document.@isPreUploadedPresentationFromParameter.toString())) {
|
||||||
|
isPreUploadedPresentationFromParameter = java.lang.Boolean.parseBoolean(
|
||||||
|
document.@isPreUploadedPresentationFromParameter.toString());
|
||||||
|
}
|
||||||
// Extracting all properties inside the xml
|
// Extracting all properties inside the xml
|
||||||
if (!StringUtils.isEmpty(document.@removable.toString())) {
|
if (!StringUtils.isEmpty(document.@removable.toString())) {
|
||||||
isRemovable = java.lang.Boolean.parseBoolean(document.@removable.toString());
|
isRemovable = java.lang.Boolean.parseBoolean(document.@removable.toString());
|
||||||
@ -1464,7 +1518,7 @@ class ApiController {
|
|||||||
fileName = document.@filename.toString();
|
fileName = document.@filename.toString();
|
||||||
}
|
}
|
||||||
downloadAndProcessDocument(document.@url.toString(), conf.getInternalId(), isCurrent /* default presentation */,
|
downloadAndProcessDocument(document.@url.toString(), conf.getInternalId(), isCurrent /* default presentation */,
|
||||||
fileName, isDownloadable, isRemovable, isInitialPresentation);
|
fileName, isDownloadable, isRemovable, isInitialPresentation, isPreUploadedPresentationFromParameter);
|
||||||
} else if (!StringUtils.isEmpty(document.@name.toString())) {
|
} else if (!StringUtils.isEmpty(document.@name.toString())) {
|
||||||
def b64 = new Base64()
|
def b64 = new Base64()
|
||||||
def decodedBytes = b64.decode(document.text().getBytes())
|
def decodedBytes = b64.decode(document.text().getBytes())
|
||||||
@ -1534,7 +1588,8 @@ class ApiController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def downloadAndProcessDocument(address, meetingId, current, fileName, isDownloadable, isRemovable, isInitialPresentation) {
|
def downloadAndProcessDocument(address, meetingId, current, fileName, isDownloadable, isRemovable,
|
||||||
|
isInitialPresentation, isPreUploadedPresentationFromParameter) {
|
||||||
log.debug("ApiController#downloadAndProcessDocument(${address}, ${meetingId}, ${fileName})");
|
log.debug("ApiController#downloadAndProcessDocument(${address}, ${meetingId}, ${fileName})");
|
||||||
String presOrigFilename;
|
String presOrigFilename;
|
||||||
if (StringUtils.isEmpty(fileName)) {
|
if (StringUtils.isEmpty(fileName)) {
|
||||||
@ -1559,7 +1614,7 @@ class ApiController {
|
|||||||
def pres = null
|
def pres = null
|
||||||
def presId
|
def presId
|
||||||
|
|
||||||
if (presFilename == "" || filenameExt == "") {
|
if (presFilename == "" || (filenameExt == "" && !isPreUploadedPresentationFromParameter)) {
|
||||||
log.debug("presentation is null by default")
|
log.debug("presentation is null by default")
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
@ -1576,6 +1631,22 @@ class ApiController {
|
|||||||
uploadFailReasons.add("failed_to_download_file")
|
uploadFailReasons.add("failed_to_download_file")
|
||||||
uploadFailed = true
|
uploadFailed = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isPreUploadedPresentationFromParameter && filenameExt.isEmpty()) {
|
||||||
|
String fileExtension = SupportedFileTypes.detectFileExtensionBasedOnMimeType(pres)
|
||||||
|
newFilename = Util.createNewFilename(presId, fileExtension)
|
||||||
|
newFilePath = uploadDir.absolutePath + File.separatorChar + newFilename
|
||||||
|
File destination = new File(newFilePath)
|
||||||
|
filenameExt = fileExtension
|
||||||
|
presFilename = Util.createNewFilename(presFilename, fileExtension)
|
||||||
|
if (pres.renameTo(destination)) {
|
||||||
|
log.info("Presentation coming from URL parameter is at ${destination.getAbsolutePath()}")
|
||||||
|
pres = destination
|
||||||
|
} else {
|
||||||
|
log.error("Error while renaming presentation from URL parameter to ${destination.getAbsolutePath()}, " +
|
||||||
|
"consider sending it through `/insertDocument`")
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
log.error("Null presentation directory meeting=[${meetingId}], presentationDir=[${presentationDir}], presId=[${presId}]")
|
log.error("Null presentation directory meeting=[${meetingId}], presentationDir=[${presentationDir}], presId=[${presId}]")
|
||||||
uploadFailReasons.add("null_presentation_dir")
|
uploadFailReasons.add("null_presentation_dir")
|
||||||
|
@ -384,6 +384,18 @@ const createEndpointTableData = [
|
|||||||
"type": "Boolean",
|
"type": "Boolean",
|
||||||
"default": "false",
|
"default": "false",
|
||||||
"description": (<>Controls whether media (audio, cameras and screen sharing) should be captured on their full duration if the meeting's recorded property is true (<code className="language-plaintext highlighter-rouge">recorded=true</code>). Default is false: only captures media while recording is running in the meeting. (added 2.6.9)</>)
|
"description": (<>Controls whether media (audio, cameras and screen sharing) should be captured on their full duration if the meeting's recorded property is true (<code className="language-plaintext highlighter-rouge">recorded=true</code>). Default is false: only captures media while recording is running in the meeting. (added 2.6.9)</>)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "preUploadedPresentation",
|
||||||
|
"required": false,
|
||||||
|
"type": "String",
|
||||||
|
"description": (<>If passed with a valid presentation file url, this presentation will override the default presentation. To only upload but not set as default, also pass <code className="language-plaintext highlighter-rouge">preUploadedPresentationOverrideDefault=false</code> (added 2.7.2)</>)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "preUploadedPresentationName",
|
||||||
|
"required": false,
|
||||||
|
"type": "String",
|
||||||
|
"description": (<>If passed it will use this string as the name of the presentation uploaded via <code className="language-plaintext highlighter-rouge">preUploadedPresentation</code> (added 2.7.2)</>)
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ Updated in 2.6:
|
|||||||
|
|
||||||
Updated in 2.7:
|
Updated in 2.7:
|
||||||
|
|
||||||
- **create** - **Added:** `disabledFeatures` options`cameraAsContent`, `snapshotOfCurrentSlide`, `downloadPresentationOriginalFile`, `downloadPresentationConvertedToPdf`, `timer`.
|
- **create** - **Added:** `preUploadedPresentation`, `preUploadedPresentationName`, `disabledFeatures` options`cameraAsContent`, `snapshotOfCurrentSlide`, `downloadPresentationOriginalFile`, `downloadPresentationConvertedToPdf`, `timer`.
|
||||||
|
|
||||||
- **join** - **Added:** `redirectErrorUrl`, `userdata-bbb_fullaudio_bridge`
|
- **join** - **Added:** `redirectErrorUrl`, `userdata-bbb_fullaudio_bridge`
|
||||||
|
|
||||||
|