diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java index 4cfa808e38b738de0c906c377fae0c548468c792..9086ceb37f74d3373bbbc5160d18b8a65ff71a0e 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java @@ -438,6 +438,10 @@ public class MeetingService implements MessageListener { return recordingService.getCaptionsDir(); } + public boolean isRecordingExist(String recordId) { + return recordingService.isRecordingExist(recordId); + } + public String getRecordings2x(List<String> idList, List<String> states, Map<String, String> metadataFilters) { return recordingService.getRecordings2x(idList, states, metadataFilters); } diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/RecordingService.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/RecordingService.java index dad597e22f1fd5161f30086bd6ec3a9d67f09e87..7a4fc132b8361bc4012c5546f53c3bcab44dabd5 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/RecordingService.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/RecordingService.java @@ -243,6 +243,16 @@ public class RecordingService { return ids; } + public boolean isRecordingExist(String recordId) { + List<String> publishList = getAllRecordingIds(publishedDir); + List<String> unpublishList = getAllRecordingIds(unpublishedDir); + if (publishList.contains(recordId) || unpublishList.contains(recordId)) { + return true; + } + + return false; + } + public boolean existAnyRecording(List<String> idList) { List<String> publishList = getAllRecordingIds(publishedDir); List<String> unpublishList = getAllRecordingIds(unpublishedDir); diff --git a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/RecordingController.groovy b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/RecordingController.groovy index 51ccee962c107befbaca3307186980d340209d75..ccc238cfc05f30963d7946b7ec715a71b3ccd07b 100755 --- a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/RecordingController.groovy +++ b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/RecordingController.groovy @@ -10,6 +10,7 @@ import org.bigbluebutton.api.ApiParams import org.apache.commons.lang3.StringUtils import org.json.JSONArray import org.springframework.web.multipart.commons.CommonsMultipartFile +import org.apache.commons.lang.LocaleUtils class RecordingController { private static final String CONTROLLER_NAME = 'RecordingController' @@ -110,17 +111,14 @@ class RecordingController { String recordId = StringUtils.strip(params.recordID) log.debug("Captions for recordID: " + recordId) - if (!paramsProcessorUtil.isChecksumSame(API_CALL, params.checksum, request.getQueryString())) { invalid("checksumError", "You did not pass the checksum security check") return } - - String captionsDirPath = meetingService.getCaptionsDir() + File.separatorChar + recordId - File captionsDir = new File(captionsDirPath); - if (!captionsDir.exists() || !captionsDir.isDirectory()) { + + if (!meetingService.isRecordingExist(recordId)) { respondWithError("noRecordings", "No recording was found for " + recordId) - return; + return } if (StringUtils.isEmpty(params.kind)) { @@ -136,7 +134,7 @@ class RecordingController { respondWithError("invalidKind", "Invalid kind parameter, expected='subtitles|captions' actual=" + captionsKind) return } - + Locale locale if (StringUtils.isEmpty(params.lang)) { respondWithError("paramError", "Missing param lang.") @@ -146,25 +144,17 @@ class RecordingController { String paramsLang = StringUtils.strip(params.lang) log.debug("Captions lang: " + paramsLang) - Locale paramLocale = Locale.forLanguageTag(paramsLang) - log.debug("Captions locale: " + paramLocale.toString()) - Collection<Locale> locales = new ArrayList<>() - locales.add(paramLocale) try { - List<Locale.LanguageRange> languageRanges = Locale.LanguageRange.parse(paramsLang) - locale = Locale.lookup(languageRanges, locales) - if (locale == null) { - respondWithError("invalidLang", "Invalid lang param, received=" + paramsLang) - return - } + locale = LocaleUtils.toLocale(paramsLang) + log.debug("Captions locale: " + locale.toLanguageTag()) } catch (IllegalArgumentException e) { respondWithError("invalidLang", "Malformed lang param, received=" + paramsLang) return } - String captionsLang = locale.toString() - String captionsLabel = paramLocale.getDisplayLanguage() + String captionsLang = locale.toLanguageTag() + String captionsLabel = locale.getDisplayLanguage() if (!StringUtils.isEmpty(params.label)) { captionsLabel = StringUtils.strip(params.label)