ParseUser.js 30 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142
  1. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
  7. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
  8. var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
  9. var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
  10. var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
  11. var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
  12. var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
  13. var _AnonymousUtils = _interopRequireDefault(require("./AnonymousUtils"));
  14. var _CoreManager = _interopRequireDefault(require("./CoreManager"));
  15. var _isRevocableSession = _interopRequireDefault(require("./isRevocableSession"));
  16. var _ParseError = _interopRequireDefault(require("./ParseError"));
  17. var _ParseObject2 = _interopRequireDefault(require("./ParseObject"));
  18. var _ParseSession = _interopRequireDefault(require("./ParseSession"));
  19. var _MoralisWeb = _interopRequireDefault(require("./MoralisWeb3"));
  20. var _Storage = _interopRequireDefault(require("./Storage"));
  21. function _createSuper(Derived) {
  22. var hasNativeReflectConstruct = _isNativeReflectConstruct();
  23. return function () {
  24. var Super = (0, _getPrototypeOf2.default)(Derived),
  25. result;
  26. if (hasNativeReflectConstruct) {
  27. var NewTarget = (0, _getPrototypeOf2.default)(this).constructor;
  28. result = Reflect.construct(Super, arguments, NewTarget);
  29. } else {
  30. result = Super.apply(this, arguments);
  31. }
  32. return (0, _possibleConstructorReturn2.default)(this, result);
  33. };
  34. }
  35. function _isNativeReflectConstruct() {
  36. if (typeof Reflect === "undefined" || !Reflect.construct) return false;
  37. if (Reflect.construct.sham) return false;
  38. if (typeof Proxy === "function") return true;
  39. try {
  40. Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
  41. return true;
  42. } catch (e) {
  43. return false;
  44. }
  45. }
  46. var CURRENT_USER_KEY = 'currentUser';
  47. var canUseCurrentUser = !_CoreManager.default.get('IS_NODE');
  48. var currentUserCacheMatchesDisk = false;
  49. var currentUserCache = null;
  50. var authProviders = {};
  51. var ParseUser = function (_ParseObject) {
  52. (0, _inherits2.default)(ParseUser, _ParseObject);
  53. var _super = _createSuper(ParseUser);
  54. function ParseUser(attributes) {
  55. var _this;
  56. (0, _classCallCheck2.default)(this, ParseUser);
  57. _this = _super.call(this, '_User');
  58. if (attributes && typeof attributes === 'object') {
  59. if (!_this.set(attributes || {})) {
  60. throw new Error("Can't create an invalid Parse User");
  61. }
  62. }
  63. return _this;
  64. }
  65. (0, _createClass2.default)(ParseUser, [{
  66. key: "_upgradeToRevocableSession",
  67. value: function (options) {
  68. options = options || {};
  69. var upgradeOptions = {};
  70. if (options.hasOwnProperty('useMasterKey')) {
  71. upgradeOptions.useMasterKey = options.useMasterKey;
  72. }
  73. var controller = _CoreManager.default.getUserController();
  74. return controller.upgradeToRevocableSession(this, upgradeOptions);
  75. }
  76. }, {
  77. key: "linkWith",
  78. value: function (provider, options) {
  79. var _this2 = this;
  80. var saveOpts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  81. saveOpts.sessionToken = saveOpts.sessionToken || this.getSessionToken() || '';
  82. var authType;
  83. if (typeof provider === 'string') {
  84. authType = provider;
  85. if (authProviders[provider]) {
  86. provider = authProviders[provider];
  87. } else {
  88. var authProvider = {
  89. restoreAuthentication: function () {
  90. return true;
  91. },
  92. getAuthType: function () {
  93. return authType;
  94. }
  95. };
  96. authProviders[authProvider.getAuthType()] = authProvider;
  97. provider = authProvider;
  98. }
  99. } else {
  100. authType = provider.getAuthType();
  101. }
  102. if (options && options.hasOwnProperty('authData')) {
  103. var authData = this.get('authData') || {};
  104. if (typeof authData !== 'object') {
  105. throw new Error('Invalid type: authData field should be an object');
  106. }
  107. authData[authType] = options.authData;
  108. var controller = _CoreManager.default.getUserController();
  109. return controller.linkWith(this, authData, saveOpts);
  110. }
  111. return new Promise(function (resolve, reject) {
  112. provider.authenticate({
  113. success: function (provider, result) {
  114. var opts = {};
  115. opts.authData = result;
  116. _this2.linkWith(provider, opts, saveOpts).then(function () {
  117. resolve(_this2);
  118. }, function (error) {
  119. reject(error);
  120. });
  121. },
  122. error: function (provider, _error) {
  123. reject(_error);
  124. }
  125. });
  126. });
  127. }
  128. }, {
  129. key: "_linkWith",
  130. value: function (provider, options) {
  131. var saveOpts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  132. return this.linkWith(provider, options, saveOpts);
  133. }
  134. }, {
  135. key: "_synchronizeAuthData",
  136. value: function (provider) {
  137. if (!this.isCurrent() || !provider) {
  138. return;
  139. }
  140. var authType;
  141. if (typeof provider === 'string') {
  142. authType = provider;
  143. provider = authProviders[authType];
  144. } else {
  145. authType = provider.getAuthType();
  146. }
  147. var authData = this.get('authData');
  148. if (!provider || !authData || typeof authData !== 'object') {
  149. return;
  150. }
  151. var success = provider.restoreAuthentication(authData[authType]);
  152. if (!success) {
  153. this._unlinkFrom(provider);
  154. }
  155. }
  156. }, {
  157. key: "_synchronizeAllAuthData",
  158. value: function () {
  159. var authData = this.get('authData');
  160. if (typeof authData !== 'object') {
  161. return;
  162. }
  163. for (var _key in authData) {
  164. this._synchronizeAuthData(_key);
  165. }
  166. }
  167. }, {
  168. key: "_cleanupAuthData",
  169. value: function () {
  170. if (!this.isCurrent()) {
  171. return;
  172. }
  173. var authData = this.get('authData');
  174. if (typeof authData !== 'object') {
  175. return;
  176. }
  177. for (var _key2 in authData) {
  178. if (!authData[_key2]) {
  179. delete authData[_key2];
  180. }
  181. }
  182. }
  183. }, {
  184. key: "_unlinkFrom",
  185. value: function (provider, options) {
  186. var _this3 = this;
  187. return this.linkWith(provider, {
  188. authData: null
  189. }, options).then(function () {
  190. _this3._synchronizeAuthData(provider);
  191. return Promise.resolve(_this3);
  192. });
  193. }
  194. }, {
  195. key: "_isLinked",
  196. value: function (provider) {
  197. var authType;
  198. if (typeof provider === 'string') {
  199. authType = provider;
  200. } else {
  201. authType = provider.getAuthType();
  202. }
  203. var authData = this.get('authData') || {};
  204. if (typeof authData !== 'object') {
  205. return false;
  206. }
  207. return !!authData[authType];
  208. }
  209. }, {
  210. key: "_logOutWithAll",
  211. value: function () {
  212. var authData = this.get('authData');
  213. if (typeof authData !== 'object') {
  214. return;
  215. }
  216. for (var _key3 in authData) {
  217. this._logOutWith(_key3);
  218. }
  219. }
  220. }, {
  221. key: "_logOutWith",
  222. value: function (provider) {
  223. if (!this.isCurrent()) {
  224. return;
  225. }
  226. if (typeof provider === 'string') {
  227. provider = authProviders[provider];
  228. }
  229. if (provider && provider.deauthenticate) {
  230. provider.deauthenticate();
  231. }
  232. }
  233. }, {
  234. key: "_preserveFieldsOnFetch",
  235. value: function () {
  236. return {
  237. sessionToken: this.get('sessionToken')
  238. };
  239. }
  240. }, {
  241. key: "isCurrent",
  242. value: function () {
  243. var current = ParseUser.current();
  244. return !!current && current.id === this.id;
  245. }
  246. }, {
  247. key: "getUsername",
  248. value: function () {
  249. var username = this.get('username');
  250. if (username == null || typeof username === 'string') {
  251. return username;
  252. }
  253. return '';
  254. }
  255. }, {
  256. key: "setUsername",
  257. value: function (username) {
  258. var authData = this.get('authData');
  259. if (authData && typeof authData === 'object' && authData.hasOwnProperty('anonymous')) {
  260. authData.anonymous = null;
  261. }
  262. this.set('username', username);
  263. }
  264. }, {
  265. key: "setPassword",
  266. value: function (password) {
  267. this.set('password', password);
  268. }
  269. }, {
  270. key: "getEmail",
  271. value: function () {
  272. var email = this.get('email');
  273. if (email == null || typeof email === 'string') {
  274. return email;
  275. }
  276. return '';
  277. }
  278. }, {
  279. key: "setEmail",
  280. value: function (email) {
  281. return this.set('email', email);
  282. }
  283. }, {
  284. key: "getSessionToken",
  285. value: function () {
  286. var token = this.get('sessionToken');
  287. if (token == null || typeof token === 'string') {
  288. return token;
  289. }
  290. return '';
  291. }
  292. }, {
  293. key: "authenticated",
  294. value: function () {
  295. var current = ParseUser.current();
  296. return !!this.get('sessionToken') && !!current && current.id === this.id;
  297. }
  298. }, {
  299. key: "signUp",
  300. value: function (attrs, options) {
  301. options = options || {};
  302. var signupOptions = {};
  303. if (options.hasOwnProperty('useMasterKey')) {
  304. signupOptions.useMasterKey = options.useMasterKey;
  305. }
  306. if (options.hasOwnProperty('installationId')) {
  307. signupOptions.installationId = options.installationId;
  308. }
  309. var controller = _CoreManager.default.getUserController();
  310. return controller.signUp(this, attrs, signupOptions);
  311. }
  312. }, {
  313. key: "logIn",
  314. value: function (options) {
  315. options = options || {};
  316. var loginOptions = {
  317. usePost: true
  318. };
  319. if (options.hasOwnProperty('useMasterKey')) {
  320. loginOptions.useMasterKey = options.useMasterKey;
  321. }
  322. if (options.hasOwnProperty('installationId')) {
  323. loginOptions.installationId = options.installationId;
  324. }
  325. if (options.hasOwnProperty('usePost')) {
  326. loginOptions.usePost = options.usePost;
  327. }
  328. var controller = _CoreManager.default.getUserController();
  329. return controller.logIn(this, loginOptions);
  330. }
  331. }, {
  332. key: "save",
  333. value: function () {
  334. var _this4 = this;
  335. for (var _len = arguments.length, args = new Array(_len), _key4 = 0; _key4 < _len; _key4++) {
  336. args[_key4] = arguments[_key4];
  337. }
  338. return (0, _get2.default)((0, _getPrototypeOf2.default)(ParseUser.prototype), "save", this).apply(this, args).then(function () {
  339. if (_this4.isCurrent()) {
  340. return _CoreManager.default.getUserController().updateUserOnDisk(_this4);
  341. }
  342. return _this4;
  343. });
  344. }
  345. }, {
  346. key: "destroy",
  347. value: function () {
  348. var _this5 = this;
  349. for (var _len2 = arguments.length, args = new Array(_len2), _key5 = 0; _key5 < _len2; _key5++) {
  350. args[_key5] = arguments[_key5];
  351. }
  352. return (0, _get2.default)((0, _getPrototypeOf2.default)(ParseUser.prototype), "destroy", this).apply(this, args).then(function () {
  353. if (_this5.isCurrent()) {
  354. return _CoreManager.default.getUserController().removeUserFromDisk();
  355. }
  356. return _this5;
  357. });
  358. }
  359. }, {
  360. key: "fetch",
  361. value: function () {
  362. var _this6 = this;
  363. for (var _len3 = arguments.length, args = new Array(_len3), _key6 = 0; _key6 < _len3; _key6++) {
  364. args[_key6] = arguments[_key6];
  365. }
  366. return (0, _get2.default)((0, _getPrototypeOf2.default)(ParseUser.prototype), "fetch", this).apply(this, args).then(function () {
  367. if (_this6.isCurrent()) {
  368. return _CoreManager.default.getUserController().updateUserOnDisk(_this6);
  369. }
  370. return _this6;
  371. });
  372. }
  373. }, {
  374. key: "fetchWithInclude",
  375. value: function () {
  376. var _this7 = this;
  377. for (var _len4 = arguments.length, args = new Array(_len4), _key7 = 0; _key7 < _len4; _key7++) {
  378. args[_key7] = arguments[_key7];
  379. }
  380. return (0, _get2.default)((0, _getPrototypeOf2.default)(ParseUser.prototype), "fetchWithInclude", this).apply(this, args).then(function () {
  381. if (_this7.isCurrent()) {
  382. return _CoreManager.default.getUserController().updateUserOnDisk(_this7);
  383. }
  384. return _this7;
  385. });
  386. }
  387. }, {
  388. key: "verifyPassword",
  389. value: function (password, options) {
  390. var username = this.getUsername() || '';
  391. return ParseUser.verifyPassword(username, password, options);
  392. }
  393. }], [{
  394. key: "readOnlyAttributes",
  395. value: function () {
  396. return ['sessionToken'];
  397. }
  398. }, {
  399. key: "extend",
  400. value: function (protoProps, classProps) {
  401. if (protoProps) {
  402. for (var _prop in protoProps) {
  403. if (_prop !== 'className') {
  404. Object.defineProperty(ParseUser.prototype, _prop, {
  405. value: protoProps[_prop],
  406. enumerable: false,
  407. writable: true,
  408. configurable: true
  409. });
  410. }
  411. }
  412. }
  413. if (classProps) {
  414. for (var _prop2 in classProps) {
  415. if (_prop2 !== 'className') {
  416. Object.defineProperty(ParseUser, _prop2, {
  417. value: classProps[_prop2],
  418. enumerable: false,
  419. writable: true,
  420. configurable: true
  421. });
  422. }
  423. }
  424. }
  425. return ParseUser;
  426. }
  427. }, {
  428. key: "current",
  429. value: function () {
  430. if (!canUseCurrentUser) {
  431. return null;
  432. }
  433. var controller = _CoreManager.default.getUserController();
  434. return controller.currentUser();
  435. }
  436. }, {
  437. key: "currentAsync",
  438. value: function () {
  439. if (!canUseCurrentUser) {
  440. return Promise.resolve(null);
  441. }
  442. var controller = _CoreManager.default.getUserController();
  443. return controller.currentUserAsync();
  444. }
  445. }, {
  446. key: "signUp",
  447. value: function (username, password, attrs, options) {
  448. attrs = attrs || {};
  449. attrs.username = username;
  450. attrs.password = password;
  451. var user = new this(attrs);
  452. return user.signUp({}, options);
  453. }
  454. }, {
  455. key: "logIn",
  456. value: function (username, password, options) {
  457. if (typeof username !== 'string') {
  458. return Promise.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Username must be a string.'));
  459. }
  460. if (typeof password !== 'string') {
  461. return Promise.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Password must be a string.'));
  462. }
  463. var user = new this();
  464. user._finishFetch({
  465. username: username,
  466. password: password
  467. });
  468. return user.logIn(options);
  469. }
  470. }, {
  471. key: "loginOrSignup",
  472. value: function (username, password) {
  473. var _this8 = this;
  474. return this.logIn(username, password).catch(function (err) {
  475. if (err.code === 101) {
  476. var newUser = new _this8();
  477. newUser.set('username', username);
  478. newUser.set('password', password);
  479. return newUser.signUp();
  480. }
  481. throw err;
  482. });
  483. }
  484. }, {
  485. key: "become",
  486. value: function (sessionToken, options) {
  487. if (!canUseCurrentUser) {
  488. throw new Error('It is not memory-safe to become a user in a server environment');
  489. }
  490. options = options || {};
  491. var becomeOptions = {
  492. sessionToken: sessionToken
  493. };
  494. if (options.hasOwnProperty('useMasterKey')) {
  495. becomeOptions.useMasterKey = options.useMasterKey;
  496. }
  497. var controller = _CoreManager.default.getUserController();
  498. var user = new this();
  499. return controller.become(user, becomeOptions);
  500. }
  501. }, {
  502. key: "me",
  503. value: function (sessionToken) {
  504. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  505. var controller = _CoreManager.default.getUserController();
  506. var meOptions = {
  507. sessionToken: sessionToken
  508. };
  509. if (options.useMasterKey) {
  510. meOptions.useMasterKey = options.useMasterKey;
  511. }
  512. var user = new this();
  513. return controller.me(user, meOptions);
  514. }
  515. }, {
  516. key: "hydrate",
  517. value: function (userJSON) {
  518. var controller = _CoreManager.default.getUserController();
  519. var user = new this();
  520. return controller.hydrate(user, userJSON);
  521. }
  522. }, {
  523. key: "logInWith",
  524. value: function (provider, options, saveOpts) {
  525. var user = new this();
  526. return user.linkWith(provider, options, saveOpts);
  527. }
  528. }, {
  529. key: "logOut",
  530. value: function () {
  531. var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  532. var controller = _CoreManager.default.getUserController();
  533. return controller.logOut(options);
  534. }
  535. }, {
  536. key: "requestPasswordReset",
  537. value: function (email, options) {
  538. options = options || {};
  539. var requestOptions = {};
  540. if (options.hasOwnProperty('useMasterKey')) {
  541. requestOptions.useMasterKey = options.useMasterKey;
  542. }
  543. var controller = _CoreManager.default.getUserController();
  544. return controller.requestPasswordReset(email, requestOptions);
  545. }
  546. }, {
  547. key: "requestEmailVerification",
  548. value: function (email, options) {
  549. options = options || {};
  550. var requestOptions = {};
  551. if (options.hasOwnProperty('useMasterKey')) {
  552. requestOptions.useMasterKey = options.useMasterKey;
  553. }
  554. var controller = _CoreManager.default.getUserController();
  555. return controller.requestEmailVerification(email, requestOptions);
  556. }
  557. }, {
  558. key: "verifyPassword",
  559. value: function (username, password, options) {
  560. if (typeof username !== 'string') {
  561. return Promise.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Username must be a string.'));
  562. }
  563. if (typeof password !== 'string') {
  564. return Promise.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Password must be a string.'));
  565. }
  566. options = options || {};
  567. var verificationOption = {};
  568. if (options.hasOwnProperty('useMasterKey')) {
  569. verificationOption.useMasterKey = options.useMasterKey;
  570. }
  571. var controller = _CoreManager.default.getUserController();
  572. return controller.verifyPassword(username, password, verificationOption);
  573. }
  574. }, {
  575. key: "allowCustomUserClass",
  576. value: function (isAllowed) {
  577. _CoreManager.default.set('PERFORM_USER_REWRITE', !isAllowed);
  578. }
  579. }, {
  580. key: "enableRevocableSession",
  581. value: function (options) {
  582. options = options || {};
  583. _CoreManager.default.set('FORCE_REVOCABLE_SESSION', true);
  584. if (canUseCurrentUser) {
  585. var current = ParseUser.current();
  586. if (current) {
  587. return current._upgradeToRevocableSession(options);
  588. }
  589. }
  590. return Promise.resolve();
  591. }
  592. }, {
  593. key: "enableUnsafeCurrentUser",
  594. value: function () {
  595. canUseCurrentUser = true;
  596. }
  597. }, {
  598. key: "disableUnsafeCurrentUser",
  599. value: function () {
  600. canUseCurrentUser = false;
  601. }
  602. }, {
  603. key: "_registerAuthenticationProvider",
  604. value: function (provider) {
  605. authProviders[provider.getAuthType()] = provider;
  606. ParseUser.currentAsync().then(function (current) {
  607. if (current) {
  608. current._synchronizeAuthData(provider.getAuthType());
  609. }
  610. });
  611. }
  612. }, {
  613. key: "_logInWith",
  614. value: function (provider, options, saveOpts) {
  615. var user = new this();
  616. return user.linkWith(provider, options, saveOpts);
  617. }
  618. }, {
  619. key: "_clearCache",
  620. value: function () {
  621. currentUserCache = null;
  622. currentUserCacheMatchesDisk = false;
  623. }
  624. }, {
  625. key: "_setCurrentUserCache",
  626. value: function (user) {
  627. currentUserCache = user;
  628. }
  629. }]);
  630. return ParseUser;
  631. }(_ParseObject2.default);
  632. _ParseObject2.default.registerSubclass('_User', ParseUser);
  633. var DefaultController = {
  634. updateUserOnDisk: function (user) {
  635. var path = _Storage.default.generatePath(CURRENT_USER_KEY);
  636. var json = user.toJSON();
  637. delete json.password;
  638. json.className = '_User';
  639. var userData = JSON.stringify(json);
  640. if (_CoreManager.default.get('ENCRYPTED_USER')) {
  641. var crypto = _CoreManager.default.getCryptoController();
  642. userData = crypto.encrypt(json, _CoreManager.default.get('ENCRYPTED_KEY'));
  643. }
  644. return _Storage.default.setItemAsync(path, userData).then(function () {
  645. return user;
  646. });
  647. },
  648. removeUserFromDisk: function () {
  649. var path = _Storage.default.generatePath(CURRENT_USER_KEY);
  650. currentUserCacheMatchesDisk = true;
  651. currentUserCache = null;
  652. return _Storage.default.removeItemAsync(path);
  653. },
  654. setCurrentUser: function (user) {
  655. var _this9 = this;
  656. return function () {
  657. var currentUser;
  658. return _regenerator.default.async(function (_context) {
  659. while (1) {
  660. switch (_context.prev = _context.next) {
  661. case 0:
  662. _context.next = 2;
  663. return _regenerator.default.awrap(_this9.currentUserAsync());
  664. case 2:
  665. currentUser = _context.sent;
  666. if (!(currentUser && !user.equals(currentUser) && _AnonymousUtils.default.isLinked(currentUser))) {
  667. _context.next = 6;
  668. break;
  669. }
  670. _context.next = 6;
  671. return _regenerator.default.awrap(currentUser.destroy({
  672. sessionToken: currentUser.getSessionToken()
  673. }));
  674. case 6:
  675. currentUserCache = user;
  676. user._cleanupAuthData();
  677. user._synchronizeAllAuthData();
  678. return _context.abrupt("return", DefaultController.updateUserOnDisk(user));
  679. case 10:
  680. case "end":
  681. return _context.stop();
  682. }
  683. }
  684. }, null, null, null, Promise);
  685. }();
  686. },
  687. currentUser: function () {
  688. if (currentUserCache) {
  689. return currentUserCache;
  690. }
  691. if (currentUserCacheMatchesDisk) {
  692. return null;
  693. }
  694. if (_Storage.default.async()) {
  695. throw new Error('Cannot call currentUser() when using a platform with an async ' + 'storage system. Call currentUserAsync() instead.');
  696. }
  697. var path = _Storage.default.generatePath(CURRENT_USER_KEY);
  698. var userData = _Storage.default.getItem(path);
  699. currentUserCacheMatchesDisk = true;
  700. if (!userData) {
  701. currentUserCache = null;
  702. return null;
  703. }
  704. if (_CoreManager.default.get('ENCRYPTED_USER')) {
  705. var crypto = _CoreManager.default.getCryptoController();
  706. userData = crypto.decrypt(userData, _CoreManager.default.get('ENCRYPTED_KEY'));
  707. }
  708. userData = JSON.parse(userData);
  709. if (!userData.className) {
  710. userData.className = '_User';
  711. }
  712. if (userData._id) {
  713. if (userData.objectId !== userData._id) {
  714. userData.objectId = userData._id;
  715. }
  716. delete userData._id;
  717. }
  718. if (userData._sessionToken) {
  719. userData.sessionToken = userData._sessionToken;
  720. delete userData._sessionToken;
  721. }
  722. var current = _ParseObject2.default.fromJSON(userData);
  723. currentUserCache = current;
  724. current._synchronizeAllAuthData();
  725. return current;
  726. },
  727. currentUserAsync: function () {
  728. if (currentUserCache) {
  729. return Promise.resolve(currentUserCache);
  730. }
  731. if (currentUserCacheMatchesDisk) {
  732. return Promise.resolve(null);
  733. }
  734. var path = _Storage.default.generatePath(CURRENT_USER_KEY);
  735. return _Storage.default.getItemAsync(path).then(function (userData) {
  736. currentUserCacheMatchesDisk = true;
  737. if (!userData) {
  738. currentUserCache = null;
  739. return Promise.resolve(null);
  740. }
  741. if (_CoreManager.default.get('ENCRYPTED_USER')) {
  742. var crypto = _CoreManager.default.getCryptoController();
  743. userData = crypto.decrypt(userData.toString(), _CoreManager.default.get('ENCRYPTED_KEY'));
  744. }
  745. userData = JSON.parse(userData);
  746. if (!userData.className) {
  747. userData.className = '_User';
  748. }
  749. if (userData._id) {
  750. if (userData.objectId !== userData._id) {
  751. userData.objectId = userData._id;
  752. }
  753. delete userData._id;
  754. }
  755. if (userData._sessionToken) {
  756. userData.sessionToken = userData._sessionToken;
  757. delete userData._sessionToken;
  758. }
  759. var current = _ParseObject2.default.fromJSON(userData);
  760. currentUserCache = current;
  761. current._synchronizeAllAuthData();
  762. return Promise.resolve(current);
  763. });
  764. },
  765. signUp: function (user, attrs, options) {
  766. var username = attrs && attrs.username || user.get('username');
  767. var password = attrs && attrs.password || user.get('password');
  768. if (!username || !username.length) {
  769. return Promise.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Cannot sign up user with an empty username.'));
  770. }
  771. if (!password || !password.length) {
  772. return Promise.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Cannot sign up user with an empty password.'));
  773. }
  774. return user.save(attrs, options).then(function () {
  775. user._finishFetch({
  776. password: undefined
  777. });
  778. if (canUseCurrentUser) {
  779. return DefaultController.setCurrentUser(user);
  780. }
  781. return user;
  782. });
  783. },
  784. logIn: function (user, options) {
  785. var RESTController = _CoreManager.default.getRESTController();
  786. var stateController = _CoreManager.default.getObjectStateController();
  787. var auth = {
  788. username: user.get('username'),
  789. password: user.get('password')
  790. };
  791. return RESTController.request(options.usePost ? 'POST' : 'GET', 'login', auth, options).then(function (response) {
  792. user._migrateId(response.objectId);
  793. user._setExisted(true);
  794. stateController.setPendingOp(user._getStateIdentifier(), 'username', undefined);
  795. stateController.setPendingOp(user._getStateIdentifier(), 'password', undefined);
  796. response.password = undefined;
  797. user._finishFetch(response);
  798. if (!canUseCurrentUser) {
  799. return Promise.resolve(user);
  800. }
  801. return DefaultController.setCurrentUser(user);
  802. });
  803. },
  804. become: function (user, options) {
  805. var RESTController = _CoreManager.default.getRESTController();
  806. return RESTController.request('GET', 'users/me', {}, options).then(function (response) {
  807. user._finishFetch(response);
  808. user._setExisted(true);
  809. return DefaultController.setCurrentUser(user);
  810. });
  811. },
  812. hydrate: function (user, userJSON) {
  813. user._finishFetch(userJSON);
  814. user._setExisted(true);
  815. if (userJSON.sessionToken && canUseCurrentUser) {
  816. return DefaultController.setCurrentUser(user);
  817. }
  818. return Promise.resolve(user);
  819. },
  820. me: function (user, options) {
  821. var RESTController = _CoreManager.default.getRESTController();
  822. return RESTController.request('GET', 'users/me', {}, options).then(function (response) {
  823. user._finishFetch(response);
  824. user._setExisted(true);
  825. return user;
  826. });
  827. },
  828. logOut: function (options) {
  829. var Moralis = require('./Parse');
  830. Moralis.cleanup();
  831. var RESTController = _CoreManager.default.getRESTController();
  832. if (options.sessionToken) {
  833. return RESTController.request('POST', 'logout', {}, options);
  834. }
  835. return DefaultController.currentUserAsync().then(function (currentUser) {
  836. var path = _Storage.default.generatePath(CURRENT_USER_KEY);
  837. var promise = _Storage.default.removeItemAsync(path);
  838. if (currentUser !== null) {
  839. var isAnonymous = _AnonymousUtils.default.isLinked(currentUser);
  840. var currentSession = currentUser.getSessionToken();
  841. if (currentSession && (0, _isRevocableSession.default)(currentSession)) {
  842. promise = promise.then(function () {
  843. if (isAnonymous) {
  844. return currentUser.destroy({
  845. sessionToken: currentSession
  846. });
  847. }
  848. }).then(function () {
  849. return RESTController.request('POST', 'logout', {}, {
  850. sessionToken: currentSession
  851. });
  852. });
  853. }
  854. currentUser._logOutWithAll();
  855. currentUser._finishFetch({
  856. sessionToken: undefined
  857. });
  858. currentUser._clearServerData();
  859. }
  860. currentUserCacheMatchesDisk = true;
  861. currentUserCache = null;
  862. return promise;
  863. });
  864. },
  865. requestPasswordReset: function (email, options) {
  866. var RESTController = _CoreManager.default.getRESTController();
  867. return RESTController.request('POST', 'requestPasswordReset', {
  868. email: email
  869. }, options);
  870. },
  871. upgradeToRevocableSession: function (user, options) {
  872. var token = user.getSessionToken();
  873. if (!token) {
  874. return Promise.reject(new _ParseError.default(_ParseError.default.SESSION_MISSING, 'Cannot upgrade a user with no session token'));
  875. }
  876. options.sessionToken = token;
  877. var RESTController = _CoreManager.default.getRESTController();
  878. return RESTController.request('POST', 'upgradeToRevocableSession', {}, options).then(function (result) {
  879. var session = new _ParseSession.default();
  880. session._finishFetch(result);
  881. user._finishFetch({
  882. sessionToken: session.getSessionToken()
  883. });
  884. if (user.isCurrent()) {
  885. return DefaultController.setCurrentUser(user);
  886. }
  887. return Promise.resolve(user);
  888. });
  889. },
  890. linkWith: function (user, authData, options) {
  891. return user.save({
  892. authData: authData
  893. }, options).then(function () {
  894. if (canUseCurrentUser) {
  895. return DefaultController.setCurrentUser(user);
  896. }
  897. return user;
  898. });
  899. },
  900. verifyPassword: function (username, password, options) {
  901. var RESTController = _CoreManager.default.getRESTController();
  902. return RESTController.request('GET', 'verifyPassword', {
  903. username: username,
  904. password: password
  905. }, options);
  906. },
  907. requestEmailVerification: function (email, options) {
  908. var RESTController = _CoreManager.default.getRESTController();
  909. return RESTController.request('POST', 'verificationEmailRequest', {
  910. email: email
  911. }, options);
  912. }
  913. };
  914. _CoreManager.default.setUserController(DefaultController);
  915. var _default = ParseUser;
  916. exports.default = _default;