From 8b430cbbcf0755eb13e9ae4dd7514c07f5329137 Mon Sep 17 00:00:00 2001 From: androidlover5842 Date: Tue, 27 Jan 2026 22:36:09 +0530 Subject: [PATCH] Add public icon list endpoint --- .../trisolarisserver/controller/IconFiles.kt | 32 +++++++++++++++++++ .../security/FirebaseAuthFilter.kt | 1 + .../security/SecurityConfig.kt | 1 + 3 files changed, 34 insertions(+) create mode 100644 src/main/kotlin/com/android/trisolarisserver/controller/IconFiles.kt diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/IconFiles.kt b/src/main/kotlin/com/android/trisolarisserver/controller/IconFiles.kt new file mode 100644 index 0000000..503c610 --- /dev/null +++ b/src/main/kotlin/com/android/trisolarisserver/controller/IconFiles.kt @@ -0,0 +1,32 @@ +package com.android.trisolarisserver.controller + +import org.springframework.beans.factory.annotation.Value +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController +import java.nio.file.Files +import java.nio.file.Paths + +@RestController +@RequestMapping("/icons") +class IconFiles( + @Value("\${storage.icons.png.root:/home/androidlover5842/docs/icons/png}") + private val pngRoot: String +) { + + @GetMapping("/png") + fun listPng(): List { + val dir = Paths.get(pngRoot) + if (!Files.exists(dir) || !Files.isDirectory(dir)) { + return emptyList() + } + Files.newDirectoryStream(dir).use { stream -> + return stream + .filter { Files.isRegularFile(it) } + .map { it.fileName.toString() } + .filter { it.lowercase().endsWith(".png") } + .sorted() + .toList() + } + } +} diff --git a/src/main/kotlin/com/android/trisolarisserver/security/FirebaseAuthFilter.kt b/src/main/kotlin/com/android/trisolarisserver/security/FirebaseAuthFilter.kt index 90a61b7..36c93eb 100644 --- a/src/main/kotlin/com/android/trisolarisserver/security/FirebaseAuthFilter.kt +++ b/src/main/kotlin/com/android/trisolarisserver/security/FirebaseAuthFilter.kt @@ -29,6 +29,7 @@ class FirebaseAuthFilter( || path.matches(Regex("^/properties/[^/]+/rooms/[^/]+/images$")) || path.matches(Regex("^/properties/[^/]+/room-types$")) || (path == "/image-tags" && request.method.equals("GET", true)) + || path == "/icons/png" } override fun doFilterInternal( diff --git a/src/main/kotlin/com/android/trisolarisserver/security/SecurityConfig.kt b/src/main/kotlin/com/android/trisolarisserver/security/SecurityConfig.kt index f633671..91c958a 100644 --- a/src/main/kotlin/com/android/trisolarisserver/security/SecurityConfig.kt +++ b/src/main/kotlin/com/android/trisolarisserver/security/SecurityConfig.kt @@ -30,6 +30,7 @@ class SecurityConfig( it.requestMatchers("/properties/*/rooms/*/images").permitAll() it.requestMatchers("/properties/*/room-types").permitAll() it.requestMatchers(org.springframework.http.HttpMethod.GET, "/image-tags").permitAll() + it.requestMatchers("/icons/png").permitAll() it.anyRequest().authenticated() } .exceptionHandling {