gotrue.test.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { describe, expect, it } from 'vitest'
  2. import { DEFAULT_FALLBACK_PATH, validateReturnTo } from './gotrue'
  3. describe('validateReturnTo', () => {
  4. const fallback = DEFAULT_FALLBACK_PATH
  5. it('should return the path if it is a valid internal path', () => {
  6. expect(validateReturnTo('/dashboard')).toBe('/dashboard')
  7. expect(validateReturnTo('/settings/profile')).toBe('/settings/profile')
  8. expect(validateReturnTo('/projects?id=123')).toBe('/projects?id=123')
  9. })
  10. it('should return fallback if given an external URL', () => {
  11. expect(validateReturnTo('https://example.com')).toBe(fallback)
  12. expect(validateReturnTo('http://malicious-site.com')).toBe(fallback)
  13. expect(validateReturnTo('//evil.com')).toBe(fallback)
  14. })
  15. it('should return fallback for potentially malicious paths', () => {
  16. expect(validateReturnTo('/%2e%2e/etc/passwd')).toBe(fallback)
  17. expect(validateReturnTo('/..')).toBe(fallback)
  18. expect(validateReturnTo('/@evil/path')).toBe(fallback)
  19. expect(validateReturnTo('/$malicious')).toBe(fallback)
  20. })
  21. it('should use custom fallback when provided', () => {
  22. const customFallback = '/custom-fallback'
  23. expect(validateReturnTo('https://example.com', customFallback)).toBe(customFallback)
  24. expect(validateReturnTo('/%2e%2e/etc/passwd', customFallback)).toBe(customFallback)
  25. })
  26. it('should handle paths with query parameters correctly', () => {
  27. expect(validateReturnTo('/dashboard?param1=value1&param2=value2')).toBe(
  28. '/dashboard?param1=value1&param2=value2'
  29. )
  30. })
  31. it('should handle nextjs dynamic path js', () => {
  32. expect(
  33. validateReturnTo(
  34. '%2F%5B%5Bx%5D%5Djavascript%3Aalert(%22H4CK3D%22)%2F%5By%5D%2F%5B%5Bx%5D%5D%2F%5By%5D%3Fx%26y'
  35. )
  36. ).toBe(fallback)
  37. expect(
  38. validateReturnTo(
  39. '/%2F%5B%5Bx%5D%5Djavascript%3Aalert(%22H4CK3D%22)%2F%5By%5D%2F%5B%5Bx%5D%5D%2F%5By%5D%3Fx%26y'
  40. )
  41. ).toBe(fallback)
  42. })
  43. })