Source: models/AuthAccess.js

  1. 'use strict';
  2. import Model from './Model.js';
  3. import Utils from '../utils/Utils.js';
  4. import Constants from '../utils/Constants.js';
  5. import Account from './Account.js';
  6. import ServerCapabilities from './ServerCapabilities.js';
  7. import MailCapabilities from './MailCapabilities.js';
  8. import JSONBuilder from '../utils/JSONBuilder.js';
  9. export default class AuthAccess extends Model {
  10. /**
  11. * This class represents a JMAP [Auth Access Response]{@link http://jmap.io/spec-core.html#201-authentication-is-complete-access-token-created}.
  12. *
  13. * @constructor
  14. *
  15. * @param jmap {Client} The {@link Client} instance that created this _AuthAccess_.
  16. * @param payload {Object} The server response of an auth access request.
  17. */
  18. constructor(jmap, payload) {
  19. super(jmap);
  20. Utils.assertRequiredParameterIsPresent(payload, 'payload');
  21. ['username', 'accessToken', 'signingId', 'signingKey', 'apiUrl', 'eventSourceUrl', 'uploadUrl', 'downloadUrl', 'accounts', 'capabilities'].forEach((property) => {
  22. Utils.assertRequiredParameterIsPresent(payload[property], property);
  23. });
  24. this.username = payload.username;
  25. this.accessToken = payload.accessToken;
  26. this.signingId = payload.signingId;
  27. this.signingKey = payload.signingKey;
  28. this.apiUrl = payload.apiUrl;
  29. this.eventSourceUrl = payload.eventSourceUrl;
  30. this.uploadUrl = payload.uploadUrl;
  31. this.downloadUrl = payload.downloadUrl;
  32. this.capabilities = payload.capabilities;
  33. this.serverCapabilities = new ServerCapabilities(this.capabilities[Constants.CORE_CAPABILITIES_URI] || {});
  34. this.mailCapabilities = new MailCapabilities(this.capabilities[Constants.MAIL_CAPABILITIES_URI] || {});
  35. this.accounts = {};
  36. for (var accountId in payload.accounts) {
  37. this.accounts[accountId] = Account.fromJSONObject(jmap, Object.assign({ id: accountId }, payload.accounts[accountId]));
  38. }
  39. }
  40. /**
  41. * Creates a JSON representation from this {@link AuthAccess}.
  42. *
  43. * @return JSON object with only owned properties and non-null default values.
  44. */
  45. toJSONObject() {
  46. return new JSONBuilder()
  47. .append('username', this.username)
  48. .append('accessToken', this.accessToken)
  49. .append('signingId', this.signingId)
  50. .append('signingKey', this.signingKey)
  51. .append('apiUrl', this.apiUrl)
  52. .append('eventSourceUrl', this.eventSourceUrl)
  53. .append('uploadUrl', this.uploadUrl)
  54. .append('downloadUrl', this.downloadUrl)
  55. .appendObject('accounts', this.accounts)
  56. .appendObject('capabilities', this.capabilities)
  57. .build();
  58. }
  59. }