space.nim 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. # SPDX-License-Identifier: AGPL-3.0-only
  2. import asyncdispatch, strutils
  3. import jester
  4. import router_utils
  5. import ".."/[types, formatters, redis_cache]
  6. import ../views/[general, space]
  7. import media
  8. export space
  9. proc createSpaceRouter*(cfg: Config) =
  10. router spaceRoute:
  11. get "/i/spaces/@id":
  12. cond @"id".allCharsInSet({'a'..'z', 'A'..'Z', '0'..'9'})
  13. let sp = await getCachedAudioSpace(@"id")
  14. if sp.id.len == 0:
  15. resp Http404, showError("Space not found", cfg)
  16. let prefs = requestPrefs()
  17. resp renderMain(renderSpace(sp, prefs, request.path), request, cfg, prefs,
  18. sp.title, ogTitle=sp.title)
  19. get "/i/spaces/@id/stream":
  20. cond @"id".allCharsInSet({'a'..'z', 'A'..'Z', '0'..'9'})
  21. let sp = await getCachedAudioSpace(@"id")
  22. if sp.m3u8Url.len == 0:
  23. resp Http404
  24. let manifest = await safeFetch(sp.m3u8Url)
  25. if manifest.len == 0:
  26. resp Http502
  27. resp proxifyVideo(manifest, requestPrefs().proxyVideos, sp.m3u8Url), m3u8Mime