~jan0sch/smederee
Showing details for patch 4fe46815c73d11830c4afedab22d332e734eb00b.
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryRoutes.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryRoutes.scala --- old-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryRoutes.scala 2025-02-02 16:45:10.729815608 +0000 +++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryRoutes.scala 2025-02-02 16:45:10.729815608 +0000 @@ -40,7 +40,8 @@ extends Http4sDsl[F] { private val log = LoggerFactory.getLogger(getClass) - private val createRepoPath = uri"/repo/create" + private val createRepoPath = uri"/repo/create" + private val MaximumFileSize = 131072L // TODO Move to configuration directive. /** List walk the given directory at the first level and return all found files and directories and their * stats sorted by directory first and by name second. If the given path is _not_ a directory then no @@ -238,9 +239,15 @@ listFiles(requestedFilePath) content <- if (viewFile) - Sync[F].delay( - os.read.lines(requestedFilePath) - ) // FIXME Use streaming and max size to avoid flooding memory with large files. + for { + size <- Sync[F].delay(os.size(requestedFilePath)) + stream <- + if (size <= MaximumFileSize) + Sync[F].delay(os.read.lines.stream(requestedFilePath)) + else + Sync[F].delay(os.Generator("File is too big!")) + lines <- Sync[F].delay(stream.toVector) + } yield lines else Sync[F].delay(IndexedSeq.empty) fileContent <- Sync[F].delay {