transfer-key.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /**
  2. * VO for TransferKey which has appSiteUrlOrigin and key as its public member
  3. */
  4. export class TransferKey {
  5. private static _internalSeperator = '__grw_internal_tranferkey__';
  6. public appSiteUrlOrigin: string;
  7. public key: string;
  8. constructor(appSiteUrlOrigin: string, key: string) {
  9. this.appSiteUrlOrigin = appSiteUrlOrigin;
  10. this.key = key;
  11. }
  12. get getKeyString(): string {
  13. return TransferKey.generateKeyString(this.key, this.appSiteUrlOrigin);
  14. }
  15. /**
  16. * Parse a transfer key string generated by the generateKeyString static method
  17. * @param {string} keyString Transfer key string
  18. * @returns {TransferKey}
  19. */
  20. static parse(keyString: string): TransferKey {
  21. const generalErrorPhrase = 'Failed to parse TransferKey from string';
  22. const splitted = keyString.split(TransferKey._internalSeperator);
  23. if (splitted.length !== 2) {
  24. throw Error(generalErrorPhrase);
  25. }
  26. const key = splitted[0];
  27. const appSiteUrl = splitted[1];
  28. let appSiteUrlOrigin: string;
  29. try {
  30. appSiteUrlOrigin = new URL(appSiteUrl).origin;
  31. } catch (e) {
  32. throw Error(generalErrorPhrase + (e as Error));
  33. }
  34. return new TransferKey(appSiteUrlOrigin, key);
  35. }
  36. /**
  37. * Generates transfer key string (e.g. https://example.com:8080__grw_internal_tranferkey__key)
  38. * @param {string} key Key generated by GROWI
  39. * @param {string} appSiteUrlOrigin GROWI app site URL origin
  40. * @returns {string} Transfer key string
  41. */
  42. static generateKeyString(key: string, appSiteUrlOrigin: string): string {
  43. return `${key}${TransferKey._internalSeperator}${appSiteUrlOrigin}`;
  44. }
  45. }