package jnpf.dmsEntity.preview.model;
|
|
import jnpf.dmsEntity.preview.enums.DmsPreviewFormat;
|
import jnpf.dmsEntity.storage.model.DmsPersistentPdfSource;
|
import jnpf.util.JsonUtil;
|
import lombok.Data;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.UUID;
|
|
@Data
|
public class DmsFilePreviewTicket {
|
public static final String SCOPE = "dms:onlyoffice:preview";
|
public static final String PRINT_SCOPE = "dms:onlyoffice:print";
|
public static final String PRINT_BASE_SCOPE = "dms:onlyoffice:print-base";
|
|
private String scope;
|
private String tenantId;
|
private String userId;
|
private UUID fileVersionId;
|
private String fileName;
|
private String mimeType;
|
private Long sizeBytes;
|
private String storagePlatform;
|
private String bucketName;
|
private String basePath;
|
private String objectPath;
|
private String objectName;
|
private DmsPersistentPdfSource pdfSource;
|
private DmsPreviewFormat previewFormat;
|
/** Original physical pages requested for printing, for example 1-3,5. */
|
private String printPages;
|
private List<DmsWatermarkSnapshot> watermarks = new ArrayList<>();
|
/** Set only by a permission-checked historical issuance; absent legacy value means current use. */
|
private boolean historicalAccess;
|
private long expiresAt;
|
|
public static DmsFilePreviewTicket fromRaw(Object raw) {
|
if (!(raw instanceof String) || isBlank((String) raw)) {
|
throw new IllegalArgumentException("DMS 预览票据无效");
|
}
|
DmsFilePreviewTicket payload;
|
try {
|
payload = JsonUtil.getJsonToBean((String) raw, DmsFilePreviewTicket.class);
|
} catch (RuntimeException exception) {
|
throw new IllegalArgumentException("DMS 预览票据无效", exception);
|
}
|
if (payload == null || !isSupportedScope(payload.getScope())
|
|| isBlank(payload.getTenantId()) || isBlank(payload.getUserId())
|
|| payload.getFileVersionId() == null || isBlank(payload.getFileName())
|
|| isBlank(payload.getStoragePlatform()) || isBlank(payload.getBucketName())
|
|| isBlank(payload.getObjectPath()) || isBlank(payload.getObjectName())
|
|| payload.getExpiresAt() <= System.currentTimeMillis()) {
|
throw new IllegalArgumentException("DMS 预览票据无效或已过期");
|
}
|
return payload;
|
}
|
|
private static boolean isSupportedScope(String scope) {
|
return SCOPE.equals(scope) || PRINT_SCOPE.equals(scope) || PRINT_BASE_SCOPE.equals(scope);
|
}
|
|
private static boolean isBlank(String value) {
|
return value == null || value.trim().isEmpty();
|
}
|
}
|