license.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /**
  2. * Copyright (c) 2011-2020, JGraph Ltd
  3. */
  4. addEventListener('fetch', event => {
  5. event.respondWith(handleRequest(event.request))
  6. })
  7. /**
  8. * @param {Request} request
  9. */
  10. async function handleRequest(request)
  11. {
  12. if (request.method !== 'POST')
  13. {
  14. return new Response('Only POST method is supported', { status: 500 })
  15. }
  16. let reqBody = await request.body.getReader().read();
  17. let reqBodyTxt = new TextDecoder("utf-8").decode(reqBody.value);
  18. let params = new URL('http://dummy.com?' + reqBodyTxt).searchParams;
  19. let domain = params.get('domain');
  20. let confLicense = params.get('confLicense');
  21. let licenseDump = params.get('licenseDump');
  22. let sParams = new URL(request.url).searchParams;
  23. //Try Query string parameters
  24. if (domain == null)
  25. {
  26. domain = sParams.get('domain');
  27. }
  28. if (confLicense == null)
  29. {
  30. confLicense = sParams.get('confLicense');
  31. }
  32. if (licenseDump == null)
  33. {
  34. licenseDump = sParams.get('licenseDump');
  35. }
  36. let email = params.get('email');
  37. // let locale = params.get('lc');
  38. // let displayName = params.get('ds');
  39. if (email != null)
  40. {
  41. let msg = encodeURIComponent(('license:GWE:' + email));
  42. let url = "https://log.diagrams.net/" + msg;
  43. fetch(url);
  44. }
  45. else if (confLicense != null && domain != null)
  46. {
  47. let msg = encodeURIComponent(('license:cc-domain=' + domain + ',confLicense=' + confLicense));
  48. let url = "https://log.diagrams.net/" + msg;
  49. fetch(url);
  50. }
  51. else if (domain != null)
  52. {
  53. let msg = encodeURIComponent(('license:cc-domain=' + domain));
  54. let url = "https://log.diagrams.net/" + msg;
  55. fetch(url);
  56. }
  57. if (licenseDump != null)
  58. {
  59. let msg = encodeURIComponent('license:cc-licenseDump=') + licenseDump;
  60. let url = 'https://log.diagrams.net/' + msg;
  61. fetch(url);
  62. try
  63. {
  64. let licenseContent = decodeURIComponent(licenseDump);
  65. let obj = JSON.parse(licenseContent);
  66. // msg = encodeURIComponent(JSON.stringify(obj));
  67. // url = 'https://log.diagrams.net/license:cc-obj-string' + msg;
  68. // fetch(url);
  69. if (obj != null && obj.installedDate != null)
  70. {
  71. msg = encodeURIComponent('license:cc-installDate:' + obj.installedDate + ',eval:' + obj.license.evaluation + ',active:' + obj.license.active);
  72. url = 'https://log.diagrams.net/' + msg;
  73. fetch(url);
  74. if (obj.installedDate.startsWith('2019') && obj.license.active && obj.license.evaluation)
  75. {
  76. url = 'https://log.diagrams.net/license:cc-OMGWTFBBQ';
  77. fetch(url);
  78. }
  79. }
  80. }
  81. catch (e)
  82. {
  83. let msg = encodeURIComponent('license:cc-error=') + e;
  84. let url = 'https://log.diagrams.net/' + msg;
  85. fetch(url);
  86. }
  87. }
  88. if (domain != null)
  89. {
  90. try
  91. {
  92. let licenseJson = await getLicense(domain);
  93. if (licenseJson == null)
  94. {
  95. return new Response(null, { status: 204 });
  96. }
  97. else
  98. {
  99. return new Response(licenseJson, {
  100. status: 200,
  101. headers: {
  102. 'Content-Type': 'application/json; charset=utf-8'
  103. }
  104. });
  105. }
  106. }
  107. catch (e)
  108. {
  109. return new Response('INTERNAL_SERVER_ERROR', { status: 500 });
  110. }
  111. }
  112. else
  113. {
  114. return new Response('HTTP_BAD_REQUEST', { status: 400 });
  115. }
  116. }
  117. function formatDate(date)
  118. {
  119. let m = date.getMonth() + 1;
  120. let d = date.getDate();
  121. return date.getFullYear() + '-' + (m < 10? '0' + m : m) + '-' + (d < 10? '0' + d : d);
  122. }
  123. async function getLicense(domain)
  124. {
  125. // Returns test licences
  126. if (domain == 'valid-example.test')
  127. {
  128. let d = new Date();
  129. d.setDate(d.getDate() + 120);
  130. return '{"expiry": "' + formatDate(d) + '"}';
  131. }
  132. else if (domain == 'expire-example.test')
  133. {
  134. let d = new Date();
  135. d.setDate(d.getDate() + 30);
  136. return '{"expiry": "' + formatDate(d) + '"}';
  137. }
  138. else if (domain == 'expired-example.test')
  139. {
  140. let d = new Date();
  141. d.setDate(d.getDate() - 10);
  142. return '{"expiry": "' + formatDate(d) + '"}';
  143. }
  144. else if (domain == 'drawio.atlassian.net')
  145. {
  146. return '{"atlasCloudLic": "expert"}';
  147. }
  148. // LATER: Check email first then domain
  149. var val = await DRAWIO_LICENSE.get(domain, 'json');
  150. return val? val.json : null;
  151. }