123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = exports.PublicAPIRouter = void 0;
- var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
- var _Config = _interopRequireDefault(require("../Config"));
- var _express = _interopRequireDefault(require("express"));
- var _path = _interopRequireDefault(require("path"));
- var _fs = _interopRequireDefault(require("fs"));
- var _querystring = _interopRequireDefault(require("querystring"));
- var _node = require("parse/node");
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
- const public_html = _path.default.resolve(__dirname, '../../public_html');
- const views = _path.default.resolve(__dirname, '../../views');
- class PublicAPIRouter extends _PromiseRouter.default {
- verifyEmail(req) {
- const {
- username,
- token: rawToken
- } = req.query;
- const token = rawToken && typeof rawToken !== 'string' ? rawToken.toString() : rawToken;
- const appId = req.params.appId;
- const config = _Config.default.get(appId);
- if (!config) {
- this.invalidRequest();
- }
- if (!config.publicServerURL) {
- return this.missingPublicServerURL();
- }
- if (!token || !username) {
- return this.invalidLink(req);
- }
- const userController = config.userController;
- return userController.verifyEmail(username, token).then(() => {
- const params = _querystring.default.stringify({
- username
- });
- return Promise.resolve({
- status: 302,
- location: `${config.verifyEmailSuccessURL}?${params}`
- });
- }, () => {
- return this.invalidVerificationLink(req);
- });
- }
- resendVerificationEmail(req) {
- const username = req.body.username;
- const appId = req.params.appId;
- const config = _Config.default.get(appId);
- if (!config) {
- this.invalidRequest();
- }
- if (!config.publicServerURL) {
- return this.missingPublicServerURL();
- }
- if (!username) {
- return this.invalidLink(req);
- }
- const userController = config.userController;
- return userController.resendVerificationEmail(username, req).then(() => {
- return Promise.resolve({
- status: 302,
- location: `${config.linkSendSuccessURL}`
- });
- }, () => {
- return Promise.resolve({
- status: 302,
- location: `${config.linkSendFailURL}`
- });
- });
- }
- changePassword(req) {
- return new Promise((resolve, reject) => {
- const config = _Config.default.get(req.query.id);
- if (!config) {
- this.invalidRequest();
- }
- if (!config.publicServerURL) {
- return resolve({
- status: 404,
- text: 'Not found.'
- });
- }
-
- _fs.default.readFile(_path.default.resolve(views, 'choose_password'), 'utf-8', (err, data) => {
- if (err) {
- return reject(err);
- }
- data = data.replace('PARSE_SERVER_URL', `'${config.publicServerURL}'`);
- resolve({
- text: data
- });
- });
- });
- }
- requestResetPassword(req) {
- const config = req.config;
- if (!config) {
- this.invalidRequest();
- }
- if (!config.publicServerURL) {
- return this.missingPublicServerURL();
- }
- const {
- username,
- token: rawToken
- } = req.query;
- const token = rawToken && typeof rawToken !== 'string' ? rawToken.toString() : rawToken;
- if (!username || !token) {
- return this.invalidLink(req);
- }
- return config.userController.checkResetTokenValidity(username, token).then(() => {
- const params = _querystring.default.stringify({
- token,
- id: config.applicationId,
- username,
- app: config.appName
- });
- return Promise.resolve({
- status: 302,
- location: `${config.choosePasswordURL}?${params}`
- });
- }, () => {
- return this.invalidLink(req);
- });
- }
- resetPassword(req) {
- const config = req.config;
- if (!config) {
- this.invalidRequest();
- }
- if (!config.publicServerURL) {
- return this.missingPublicServerURL();
- }
- const {
- username,
- new_password,
- token: rawToken
- } = req.body;
- const token = rawToken && typeof rawToken !== 'string' ? rawToken.toString() : rawToken;
- if ((!username || !token || !new_password) && req.xhr === false) {
- return this.invalidLink(req);
- }
- if (!username) {
- throw new _node.Parse.Error(_node.Parse.Error.USERNAME_MISSING, 'Missing username');
- }
- if (!token) {
- throw new _node.Parse.Error(_node.Parse.Error.OTHER_CAUSE, 'Missing token');
- }
- if (!new_password) {
- throw new _node.Parse.Error(_node.Parse.Error.PASSWORD_MISSING, 'Missing password');
- }
- return config.userController.updatePassword(username, token, new_password).then(() => {
- return Promise.resolve({
- success: true
- });
- }, err => {
- return Promise.resolve({
- success: false,
- err
- });
- }).then(result => {
- const params = _querystring.default.stringify({
- username: username,
- token: token,
- id: config.applicationId,
- error: result.err,
- app: config.appName
- });
- if (req.xhr) {
- if (result.success) {
- return Promise.resolve({
- status: 200,
- response: 'Password successfully reset'
- });
- }
- if (result.err) {
- throw new _node.Parse.Error(_node.Parse.Error.OTHER_CAUSE, `${result.err}`);
- }
- }
- const encodedUsername = encodeURIComponent(username);
- const location = result.success ? `${config.passwordResetSuccessURL}?username=${encodedUsername}` : `${config.choosePasswordURL}?${params}`;
- return Promise.resolve({
- status: 302,
- location
- });
- });
- }
- invalidLink(req) {
- return Promise.resolve({
- status: 302,
- location: req.config.invalidLinkURL
- });
- }
- invalidVerificationLink(req) {
- const config = req.config;
- if (req.query.username && req.params.appId) {
- const params = _querystring.default.stringify({
- username: req.query.username,
- appId: req.params.appId
- });
- return Promise.resolve({
- status: 302,
- location: `${config.invalidVerificationLinkURL}?${params}`
- });
- } else {
- return this.invalidLink(req);
- }
- }
- missingPublicServerURL() {
- return Promise.resolve({
- text: 'Not found.',
- status: 404
- });
- }
- invalidRequest() {
- const error = new Error();
- error.status = 403;
- error.message = 'unauthorized';
- throw error;
- }
- setConfig(req) {
- req.config = _Config.default.get(req.params.appId);
- return Promise.resolve();
- }
- mountRoutes() {
- this.route('GET', '/apps/:appId/verify_email', req => {
- this.setConfig(req);
- }, req => {
- return this.verifyEmail(req);
- });
- this.route('POST', '/apps/:appId/resend_verification_email', req => {
- this.setConfig(req);
- }, req => {
- return this.resendVerificationEmail(req);
- });
- this.route('GET', '/apps/choose_password', req => {
- return this.changePassword(req);
- });
- this.route('POST', '/apps/:appId/request_password_reset', req => {
- this.setConfig(req);
- }, req => {
- return this.resetPassword(req);
- });
- this.route('GET', '/apps/:appId/request_password_reset', req => {
- this.setConfig(req);
- }, req => {
- return this.requestResetPassword(req);
- });
- }
- expressRouter() {
- const router = _express.default.Router();
- router.use('/apps', _express.default.static(public_html));
- router.use('/', super.expressRouter());
- return router;
- }
- }
- exports.PublicAPIRouter = PublicAPIRouter;
- var _default = exports.default = PublicAPIRouter;
|