route.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { NextResponse } from "next/server";
  2. import { verifyToken } from "@/lib/auth";
  3. import smbClient from "@/lib/smbClient";
  4. export async function GET(request) {
  5. const headers = new Headers();
  6. headers.set("Cache-Control", "no-store");
  7. const decoded = verifyToken(request);
  8. if (decoded.error) {
  9. return NextResponse.json(
  10. { error: decoded.error },
  11. { status: 401, headers }
  12. );
  13. }
  14. if (decoded.role !== "admin") {
  15. console.log(
  16. `Unauthorized access attempt by non-admin user: ${decoded.username}`
  17. );
  18. return NextResponse.json(
  19. { error: "Unauthorized access. Admin only." },
  20. { status: 403, headers }
  21. );
  22. }
  23. return new Promise((resolve) => {
  24. smbClient.readdir("", (err, files) => {
  25. if (err) {
  26. console.error("Fehler beim Zugriff auf den Ordner Niederlassungen:", err);
  27. resolve(
  28. NextResponse.json(
  29. {
  30. error: "Fehler beim Zugriff auf den Ordner Niederlassungen",
  31. details: err.message,
  32. },
  33. { status: 500, headers }
  34. )
  35. );
  36. } else {
  37. const filteredFiles = files.filter(file => file !== "@Recently-Snapshot");
  38. // Zwingend alphabetisch aufsteigend sortieren
  39. const sortedFiles = [...filteredFiles].sort((a, b) => {
  40. return a.toLowerCase().localeCompare(b.toLowerCase());
  41. });
  42. resolve(
  43. NextResponse.json({ files: sortedFiles }, { status: 200, headers })
  44. );
  45. }
  46. });
  47. });
  48. }