package jnpf.bizcommon.onlyoffice.service.impl;
|
|
import jnpf.base.UserInfo;
|
import jnpf.dms.DmsTicketLifecycleApi;
|
import jnpf.dms.DmsTicketLifecycleChecks;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import jnpf.bizcommon.onlyoffice.entity.DmsPrintRenderItem;
|
import jnpf.bizcommon.onlyoffice.entity.DmsPrintRenderRequest;
|
import jnpf.constant.GlobalConst;
|
import jnpf.dmsEntity.preview.model.DmsFilePreviewTicket;
|
import jnpf.exception.DataException;
|
import jnpf.util.TicketUtil;
|
import org.springframework.stereotype.Component;
|
import org.springframework.util.ObjectUtils;
|
|
@Component
|
public class DmsOnlyOfficePrintTicketValidator {
|
private final DmsOnlyOfficePreviewTicketValidator.TicketReader ticketReader;
|
|
@Autowired
|
public DmsOnlyOfficePrintTicketValidator(DmsTicketLifecycleApi lifecycleApi) {
|
this(ticket -> DmsTicketLifecycleChecks.preview(TicketUtil.parseTicket(ticket), lifecycleApi, "jnpf-biz-common"));
|
}
|
|
DmsOnlyOfficePrintTicketValidator(DmsOnlyOfficePreviewTicketValidator.TicketReader ticketReader) {
|
this.ticketReader = ticketReader;
|
}
|
|
public DmsFilePreviewTicket validate(DmsPrintRenderRequest request, UserInfo user) {
|
return validate(request == null ? null : request.legacyItem(), user);
|
}
|
|
public DmsFilePreviewTicket validate(DmsPrintRenderItem request, UserInfo user) {
|
if (request == null || ObjectUtils.isEmpty(request.getAccessTicket())) {
|
throw new DataException("缺少 DMS 打印票据");
|
}
|
if (user == null || ObjectUtils.isEmpty(user.getUserId())) {
|
throw new DataException("无法识别当前用户,拒绝 DMS 文件打印");
|
}
|
|
DmsFilePreviewTicket payload;
|
try {
|
payload = DmsFilePreviewTicket.fromRaw(ticketReader.read(request.getAccessTicket()));
|
} catch (RuntimeException exception) {
|
throw new DataException("DMS 打印票据无效或已过期");
|
}
|
if (!DmsFilePreviewTicket.PRINT_SCOPE.equals(payload.getScope())) {
|
throw new DataException("DMS 打印票据 scope 无效");
|
}
|
|
String tenantId = ObjectUtils.isEmpty(user.getTenantId())
|
? GlobalConst.DEFAULT_TENANT_VALUE : user.getTenantId().trim();
|
if (!payload.getTenantId().equals(tenantId)
|
|| !payload.getUserId().equals(user.getUserId())
|
|| !payload.getFileVersionId().equals(request.getFileVersionId())
|
|| !payload.getFileName().equals(request.getFileName())) {
|
throw new DataException("DMS 打印票据与当前用户、租户或文件不匹配");
|
}
|
return payload;
|
}
|
}
|