redirect.js 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. /**
  2. * Copyright (c) 2011-2020, JGraph Ltd
  3. */
  4. async function handleRequest(request) {
  5. let requestURL = new URL(request.url)
  6. let host = requestURL.host
  7. let sub = host;
  8. let path = requestURL.pathname
  9. if (host != null)
  10. {
  11. let parts = host.split('.')
  12. sub = parts[0]
  13. }
  14. let hostRedirectMap = redirectMap.get(sub)
  15. if (hostRedirectMap)
  16. {
  17. //Match full path then reduce one level at a time
  18. let redirect, notUsedPath = '', done = false
  19. do
  20. {
  21. redirect = hostRedirectMap.get(path) || hostRedirectMap.get(path + '/');
  22. if (redirect)
  23. {
  24. //Complete the URL
  25. if (redirect.startsWith('/'))
  26. {
  27. redirect = requestURL.protocol + '//' + host + redirect;
  28. }
  29. return Response.redirect(redirect + notUsedPath, 301)
  30. }
  31. else
  32. {
  33. if (path.startsWith('/label') || path.startsWith('/rest') || path.startsWith('/login.action'))
  34. {
  35. // blah
  36. }
  37. else
  38. {
  39. let msg = encodeURIComponent('redirect-worker-404-' + requestURL);
  40. let url = 'https://log.diagrams.net/' + msg;
  41. fetch(url);
  42. }
  43. let lastSlash = path.lastIndexOf('/');
  44. if (lastSlash >= 0)
  45. {
  46. notUsedPath = path.substr(lastSlash) + notUsedPath;
  47. path = path.substr(0, lastSlash);
  48. }
  49. else
  50. {
  51. done = true
  52. }
  53. }
  54. } while (!done)
  55. }
  56. // If not in the map, return 404
  57. return new Response('NOT_FOUND', { status: 404 });
  58. }
  59. addEventListener('fetch', async event => {
  60. event.respondWith(handleRequest(event.request))
  61. })
  62. const redirectMap = new Map([
  63. ['about', new Map([
  64. ['/drawio-desktop-10-7-5-release', 'https://github.com/jgraph/drawio-desktop/releases/tag/v10.7.5'],
  65. ['/insert-from-text-now-supports-plantuml', '/use-plantuml-in-draw-io'],
  66. ['/integrate-draw-io/', '/integrations-ecosystem/'],
  67. ['/new-edge-styles/', '/connector-styles-and-animations-in-draw-io/'],
  68. ['/publish-diagrams-to-github/', '/github-support/'],
  69. ['/prefer-draw-io-in-an-atlassian-style/', '/pick-your-favorite-draw-io-theme-kennedy-atlas-dark-or-minimal/'],
  70. ['/drawio-desktop-10-7-5-release', 'https://github.com/jgraph/drawio-desktop/releases/tag/v10.7.5'],
  71. ['/insert-from-text-now-supports-plantuml', '/use-plantuml-in-draw-io'],
  72. ['/integrate-draw-io/', '/integrations-ecosystem/'],
  73. ['/new-edge-styles/', '/connector-styles-and-animations-in-draw-io/'],
  74. ['/publish-diagrams-to-github/', '/github-support/'],
  75. ['/prefer-draw-io-in-an-atlassian-style/', '/pick-your-favorite-draw-io-theme-kennedy-atlas-dark-or-minimal/'],
  76. ['/integrations/confluence-integration-2/', 'https://www.diagrams.net/integrations.html'],
  77. ['/integrations/jira-integration/', 'https://www.diagrams.net/integrations.html'],
  78. ['/integrations/', 'https://www.diagrams.net/integrations.html'],
  79. ['/features/examples/', 'https://drawio-app.com/'],
  80. ['/features/training-material/', 'https://drawio-app.com/tutorials/'],
  81. ['/features/', 'https://www.diagrams.net/'],
  82. ['/integrations-ecosystem/', 'https://www.diagrams.net/integrations'],
  83. ['/multiple-pages-per-diagram/', 'https://www.diagrams.net/blog/multiple-page-diagrams'],
  84. ['/drawio-data-protection/', 'https://www.diagrams.net/blog/data-protection'],
  85. ['/use-draw-io-offline/', 'https://www.diagrams.net/blog/diagrams-offline'],
  86. ['/use-your-own-fonts-in-draw-io/', 'https://www.diagrams.net/blog/external-fonts'],
  87. ['/4-ways-to-connect-shapes/', 'https://www.diagrams.net/blog/connect-shapes'],
  88. ['/export-cloudockit-architecture-to-drawio/', 'https://www.diagrams.net/blog/cloudockit-to-drawio'],
  89. ['/google-drive-connector-for-confluence-cloud/', 'https://www.diagrams.net/'],
  90. ['/document-your-aws-architecture-with-cloudcraft-and-draw-io/', 'https://www.diagrams.net/blog/drawio-aws-cloudcraft'],
  91. ['/use-draw-io-diagrams-in-google-docs/', 'https://www.diagrams.net/blog/diagrams-google-docs'],
  92. ['/improved-import/', 'https://www.diagrams.net/blog/import-formats'],
  93. ['/incremental-find-plugin/', 'https://www.diagrams.net/doc/faq/find-shapes'],
  94. ['/sidebar-click/', 'https://www.diagrams.net/blog/quick-add-shapes'],
  95. ['/find-plugin-update/', 'https://www.diagrams.net/doc/faq/find-shapes'],
  96. ['/how-to-quickly-remove-sensitive-information-from-draw-io-diagrams/', 'https://www.diagrams.net/doc/faq/anonymize-plugin'],
  97. ['/draw-io-privacy-and-google-analytics/', 'https://www.diagrams.net/blog/google-analytics'],
  98. ['/share-diagrams-with-draw-io/', 'https://www.diagrams.net/blog/online-diagram-viewer'],
  99. ['/publish-link-and-embed-html/', 'https://www.diagrams.net/blog/publish-link'],
  100. ['/public-google-files/', 'https://www.diagrams.net/blog/share-diagrams-via-google'],
  101. ['/export-diagrams-as-urls/', 'https://www.diagrams.net/blog/export-url'],
  102. ['/using-draw-io-diagrams-in-wordpress/', 'https://www.diagrams.net/blog/export-svg'],
  103. ['/insert-from-text-now-supports-lists-and-graphs/', 'https://www.diagrams.net/blog/insert-from-text'],
  104. ['/altdrop/', 'https://www.diagrams.net/blog/shortcut-overlay-shapes'],
  105. ['/animation-and-automatic-layout-explore-complex-diagrams/', 'https://www.diagrams.net/doc/faq/explore-plugin'],
  106. ['/google-team-drives-support/', 'https://www.diagrams.net/blog/google-shared-drives'],
  107. ['/30k-reviews/', 'https://www.diagrams.net'],
  108. ['/external-fonts-in-draw-io/', 'https://www.diagrams.net/blog/external-fonts'],
  109. ['/analysing-vulnerabilities-with-threat-modelling-in-draw-io/', 'https://www.diagrams.net/blog/threat-modelling'],
  110. ['/fosdem2020-sponsor/', 'https://www.diagrams.net/blog/fosdem-sponsor'],
  111. ['/google-docs-add-on-now-supports-high-resolution-images/', 'https://www.diagrams.net/blog/high-resolution-images-google-docs'],
  112. ['/sql-plugin/', 'https://www.diagrams.net/blog/insert-sql'],
  113. ['/properties-plugin/', 'https://www.diagrams.net/doc/faq/properties-plugin'],
  114. ['/number-plugin/', 'https://www.diagrams.net/doc/faq/plugins'],
  115. ['/40k-reviews/', 'https://www.diagrams.net'],
  116. ['/new-veeam-stencil-set/', 'https://www.diagrams.net/blog/veeam-stencils'],
  117. ['/new-github-repository/', 'https://www.diagrams.net/blog/example-diagrams-github'],
  118. ['/updates-to-draw-io-desktop/', 'https://www.diagrams.net/blog/desktop-updates'],
  119. ['/simplified-tags-plugin/', 'https://www.diagrams.net/doc/faq/tags-plugin'],
  120. ['/github-support/', 'https://www.diagrams.net/blog/github-support'],
  121. ['/support-for-your-language-in-draw-io/', 'https://www.diagrams.net/blog/translate-drawio'],
  122. ['/translate-drawio/', 'https://www.diagrams.net/blog/translate-drawio'],
  123. ['/altshiftcursor/', 'https://www.diagrams.net/blog/shortcut-clone-connect'],
  124. ['/altshiftselect-now-removes-selected-cells%ef%bb%bf/', 'https://www.diagrams.net/blog/shortcut-deselect-shapes'],
  125. ['/draw-io-diagrams-for-confluence/', 'https://www.diagrams.net/integrations'],
  126. ['/scratchpad-in-chrome-app/', 'https://www.diagrams.net/blog/drawio-chrome-app'],
  127. ['/find-and-tags/', 'https://www.diagrams.net/doc/faq/find-shapes'],
  128. ['/disable-recursive-resize/', 'https://www.diagrams.net/blog/disable-resize-children'],
  129. ['/placeholder-scope/', 'https://www.diagrams.net/blog/placeholder-scope'],
  130. ['/scissors-tool/', 'https://www.diagrams.net/blog/shortcut-move-area'],
  131. ['/shiftdelete-in-toolbar-now-deletes-cells-with-connections%ef%bb%bf/', 'https://www.diagrams.net/blog/shortcut-shift-delete'],
  132. ['/snap-to-point/', 'https://www.diagrams.net/blog/snap-to-point'],
  133. ['/features/examples/', 'https://drawio-app.com/'],
  134. ['/features/training-material/', 'https://drawio-app.com/tutorials/'],
  135. ['/terms-conditions/', 'https://seibert-media.com/general-terms/'],
  136. ['/support/', 'https://github.com/jgraph/drawio/wiki/Getting-Support'],
  137. ['/about-us/', 'https://www.diagrams.net/about.html'],
  138. ['/', 'https://drawio-app.com']
  139. ])],
  140. ['support', new Map([
  141. ['/label', 'https://127.0.0.1'],
  142. ['/rest', 'https://127.0.0.1'],
  143. ['/display/DFCS/draw.io+for+Confluence+Server', 'https://drawio-app.com'],
  144. ['/display/DO/Exporting+Files', 'https://desk.draw.io/a/solutions/articles/16000067785'],
  145. ['/display/DO/Online+Support', 'https://github.com/jgraph/drawio/wiki/Getting-Support'],
  146. ['/display/DO', 'https://github.com/jgraph/drawio/wiki/Getting-Support'],
  147. ['/display/DAFGD/draw.io+Add-on+for+Google+Docs', 'https://www.diagrams.net/blog/diagrams-google-docs.html'],
  148. ['/x/LYAk', 'https://seibert.biz/atlassianeula'],
  149. ['/display/DOB/2016/04/28/UML+State+Diagrams+with+draw.io', 'https://drawio-app.com/uml-state-diagrams-with-draw-io/'],
  150. ['/display/do/2015/01/08/gliffy+and+lucidchart+importing', 'https://desk.draw.io/support/solutions/articles/16000064013-mass-import-gliffy-diagrams-to-draw-io-in-confluence-server'],
  151. ['/display/DFCS/draw.io+for+Confluence+and+JIRA+support+terms+and+Service+Level+Agreement',
  152. 'https://marketplace.atlassian.com/apps/1210933/draw-io-diagrams-for-confluence?hosting=server&tab=support'],
  153. ['/', 'https://github.com/jgraph/drawio/wiki/Getting-Support']
  154. ])],
  155. ['blog', new Map([
  156. ['/', 'https://www.diagrams.net/blog']
  157. ])],
  158. ['download', new Map([
  159. ['/', 'https://github.com/jgraph/drawio-desktop/releases/latest']
  160. ])],
  161. ['get', new Map([
  162. ['/', 'https://github.com/jgraph/drawio-desktop/releases/latest']
  163. ])],
  164. ['docsaddon', new Map([
  165. ['/', 'https://gsuite.google.com/marketplace/app/drawio_viewer_for_docs/224440279306']
  166. ])],
  167. ['gsuite', new Map([
  168. ['/', 'https://gsuite.google.com/marketplace/app/drawio_diagrams/671128082532']
  169. ])],
  170. ['office', new Map([
  171. ['/', 'https://appsource.microsoft.com/product/office/wa200000113']
  172. ])],
  173. ['slidesaddon', new Map([
  174. ['/', 'https://gsuite.google.com/marketplace/app/drawio_diagrams_for_slides/588283048931']
  175. ])],
  176. ['sheetsaddon', new Map([
  177. ['/', 'https://gsuite.google.com/marketplace/app/drawio_diagrams_for_sheets/948903782998']
  178. ])],
  179. ['doc', new Map([
  180. ['/i18n', 'https://docs.google.com/spreadsheets/d/1FoYdyEraEQuWofzbYCDPKN7EdKgS_2ZrsDrOA8scgwQ'],
  181. ['/', 'https://www.diagrams.net/doc/']
  182. ])],
  183. ['app', new Map([
  184. ['/', 'https://app.diagrams.net']
  185. ])],
  186. ['new', new Map([
  187. ['/', 'https://app.diagrams.net/?splash=0']
  188. ])]
  189. ])