private void accessBusinessCheck(UploadRequestUrl requestUrl, String password) throws BusinessException { UploadRequest request = requestUrl.getUploadRequest(); if (!isValidPassword(requestUrl, password)) { throw new BusinessException( BusinessErrorCode.UPLOAD_REQUEST_URL_FORBIDDEN, "You do not have the right to get this upload request url : " + requestUrl.getUuid()); } if (!(request.getStatus().equals(UploadRequestStatus.STATUS_ENABLED) || request.getStatus().equals(UploadRequestStatus.STATUS_CLOSED))) { throw new BusinessException( BusinessErrorCode.UPLOAD_REQUEST_READONLY_MODE, "The current upload request url is not available : " + requestUrl.getUuid()); } Calendar now = GregorianCalendar.getInstance(); Calendar compare = GregorianCalendar.getInstance(); compare.setTime(request.getActivationDate()); if (now.before(compare)) { throw new BusinessException( BusinessErrorCode.UPLOAD_REQUEST_NOT_ENABLE_YET, "The current upload request url is not enable yet : " + requestUrl.getUuid()); } compare.setTime(request.getExpiryDate()); if (now.after(compare)) { throw new BusinessException( BusinessErrorCode.UPLOAD_REQUEST_NOT_ENABLE_YET, "The current upload request url is no more available now. : " + requestUrl.getUuid()); } }
private void deleteBusinessCheck(UploadRequestUrl requestUrl) throws BusinessException { UploadRequest request = requestUrl.getUploadRequest(); if (!request.getStatus().equals(UploadRequestStatus.STATUS_ENABLED)) { throw new BusinessException( BusinessErrorCode.UPLOAD_REQUEST_READONLY_MODE, "The current upload request url is in read only mode : " + requestUrl.getUuid()); } }
private boolean isValidPassword(UploadRequestUrl data, String password) { if (data.isProtectedByPassword()) { if (password == null) return false; String hashedPassword = HashUtils.hashSha1withBase64(password.getBytes()); return hashedPassword.equals(data.getPassword()); } return true; }
@Override public UploadRequestEntry createUploadRequestEntry( String uploadRequestUrlUuid, InputStream fi, String fileName, String password) throws BusinessException { // Retrieve upload request URL UploadRequestUrl requestUrl = find(uploadRequestUrlUuid, password); // HOOK : Extract owner for upload request URL Account owner = requestUrl.getUploadRequest().getOwner(); // Store the file into the owner account. DocumentEntry document = documentEntryService.createDocumentEntry(owner, fi, fileName); createBusinessCheck(requestUrl, document); Account actor = accountRepository.getUploadRequestSystemAccount(); // Create the link between the document and the upload request URL. UploadRequestEntry uploadRequestEntry = new UploadRequestEntry(document, requestUrl.getUploadRequest()); UploadRequestEntry requestEntry = uploadRequestEntryBusinessService.create(uploadRequestEntry); MailContainerWithRecipient mail = mailBuildingService.buildAckUploadRequest( (User) requestUrl.getUploadRequest().getOwner(), requestUrl, requestEntry); notifierService.sendNotification(mail); return requestEntry; }
private void createBusinessCheck(UploadRequestUrl requestUrl, DocumentEntry document) throws BusinessException { UploadRequest request = requestUrl.getUploadRequest(); if (!request.getStatus().equals(UploadRequestStatus.STATUS_ENABLED)) { throw new BusinessException( BusinessErrorCode.UPLOAD_REQUEST_READONLY_MODE, "The current upload request url is in read only mode : " + requestUrl.getUuid()); } if (request.getMaxFileSize() != null) { if (document.getSize() > request.getMaxFileSize()) { throw new BusinessException( BusinessErrorCode.UPLOAD_REQUEST_FILE_TOO_LARGE, "You already have reached the uploaded file limit."); } } if (request.getMaxFileCount() != null) { // already reach the limit if (request.getUploadRequestEntries().size() >= request.getMaxFileCount()) { throw new BusinessException( BusinessErrorCode.UPLOAD_REQUEST_TOO_MANY_FILES, "You already have reached the uploaded file limit."); } } if (request.getMaxDepositSize() != null) { long totalSize = 0; for (UploadRequestEntry entry : request.getUploadRequestEntries()) { totalSize += entry.getSize(); } totalSize += document.getSize(); if (totalSize >= request.getMaxDepositSize()) { throw new BusinessException( BusinessErrorCode.UPLOAD_REQUEST_TOTAL_DEPOSIT_SIZE_TOO_LARGE, "You already have reached the limit of your quota."); } } }
@Override public void deleteUploadRequestEntry( String uploadRequestUrlUuid, String password, String entryUuid) throws BusinessException { UploadRequestUrl requestUrl = find(uploadRequestUrlUuid, password); deleteBusinessCheck(requestUrl); Set<UploadRequestEntry> entries = requestUrl.getUploadRequest().getUploadRequestEntries(); UploadRequestEntry found = null; for (UploadRequestEntry entry : entries) { if (entry.getUuid().equals(entryUuid)) { found = entry; break; } } if (found != null) { String documentEntryUuid = null; if (found.getDocumentEntry() != null) { documentEntryUuid = found.getDocumentEntry().getUuid(); } found.setDocumentEntry(null); found = uploadRequestEntryBusinessService.update(found); if (documentEntryUuid != null) { // TODO: HOOK : Extract owner for upload request URL // Actor should be used instead of owner Account owner = requestUrl.getUploadRequest().getOwner(); // Store the file into the owner account. DocumentEntry documentEntry = documentEntryService.findById(owner, documentEntryUuid); documentEntryService.deleteDocumentEntry(owner, documentEntry); } uploadRequestEntryBusinessService.delete(found); } else { throw new BusinessException( BusinessErrorCode.FORBIDDEN, "You do not have the right to delete a file into upload request : " + uploadRequestUrlUuid); } }