From 174652e889fca0cbcd9c85e2120e946581636743 Mon Sep 17 00:00:00 2001 From: androidlover5842 Date: Fri, 30 Jan 2026 15:58:02 +0530 Subject: [PATCH] Allow guest document file token access --- .../controller/GuestDocuments.kt | 27 +++++-------------- .../security/PublicEndpoints.kt | 2 ++ 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/GuestDocuments.kt b/src/main/kotlin/com/android/trisolarisserver/controller/GuestDocuments.kt index 06de4b1..1fa7323 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/GuestDocuments.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/GuestDocuments.kt @@ -27,7 +27,6 @@ import java.time.OffsetDateTime import java.nio.file.Files import java.nio.file.Paths import java.util.UUID -import java.util.Base64 @RestController @RequestMapping("/properties/{propertyId}/guests/{guestId}/documents") @@ -44,7 +43,9 @@ class GuestDocuments( private val llamaClient: LlamaClient, private val objectMapper: ObjectMapper, @org.springframework.beans.factory.annotation.Value("\${storage.documents.publicBaseUrl}") - private val publicBaseUrl: String + private val publicBaseUrl: String, + @org.springframework.beans.factory.annotation.Value("\${storage.documents.aiBaseUrl:\${storage.documents.publicBaseUrl}}") + private val aiBaseUrl: String ) { @PostMapping @@ -142,7 +143,9 @@ class GuestDocuments( extractionQueue.enqueue { val document = guestDocumentRepo.findById(documentId).orElse(null) ?: return@enqueue try { - val imageUrl = buildImageDataUrl(document) ?: return@enqueue + val token = tokenService.createToken(document.id.toString()) + val imageUrl = + "${aiBaseUrl}/properties/$propertyId/guests/$guestId/documents/${document.id}/file?token=$token" val results = linkedMapOf() results["hasAadhar"] = llamaClient.ask(imageUrl, "CONTAINS AADHAAR? Answer YES or NO only.") @@ -200,24 +203,6 @@ class GuestDocuments( } } - private fun buildImageDataUrl(document: GuestDocument): String? { - val contentType = document.contentType?.trim()?.lowercase() - if (contentType == null || !contentType.startsWith("image/")) { - return null - } - val path = Paths.get(document.storagePath) - if (!Files.exists(path)) { - return null - } - return try { - val bytes = Files.readAllBytes(path) - val encoded = Base64.getEncoder().encodeToString(bytes) - "data:$contentType;base64,$encoded" - } catch (_: Exception) { - null - } - } - } data class GuestDocumentResponse( diff --git a/src/main/kotlin/com/android/trisolarisserver/security/PublicEndpoints.kt b/src/main/kotlin/com/android/trisolarisserver/security/PublicEndpoints.kt index d80acb5..395d47f 100644 --- a/src/main/kotlin/com/android/trisolarisserver/security/PublicEndpoints.kt +++ b/src/main/kotlin/com/android/trisolarisserver/security/PublicEndpoints.kt @@ -12,6 +12,7 @@ internal object PublicEndpoints { private val iconPngFile = Regex("^/icons/png/[^/]+$") private val payuWebhook = Regex("^/properties/[^/]+/payu/webhook$") private val payuReturn = Regex("^/properties/[^/]+/payu/return/(success|failure)$") + private val guestDocumentFile = Regex("^/properties/[^/]+/guests/[^/]+/documents/[^/]+/file$") fun isPublic(request: HttpServletRequest): Boolean { val path = request.requestURI @@ -30,5 +31,6 @@ internal object PublicEndpoints { || (path == "/image-tags" && method == "GET") || path == "/icons/png" || iconPngFile.matches(path) + || guestDocumentFile.matches(path) } }