payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
115 lines (114 loc) • 16 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _react = /*#__PURE__*/ _interop_require_default(require("react"));
const _reacti18next = require("react-i18next");
const _reactrouterdom = require("react-router-dom");
const _Button = /*#__PURE__*/ _interop_require_default(require("../../elements/Button"));
const _Loading = require("../../elements/Loading");
const _Form = /*#__PURE__*/ _interop_require_default(require("../../forms/Form"));
const _Submit = /*#__PURE__*/ _interop_require_default(require("../../forms/Submit"));
const _Email = /*#__PURE__*/ _interop_require_default(require("../../forms/field-types/Email"));
const _Password = /*#__PURE__*/ _interop_require_default(require("../../forms/field-types/Password"));
const _Logo = /*#__PURE__*/ _interop_require_default(require("../../graphics/Logo"));
const _Minimal = /*#__PURE__*/ _interop_require_default(require("../../templates/Minimal"));
const _Auth = require("../../utilities/Auth");
const _Config = require("../../utilities/Config");
const _Meta = /*#__PURE__*/ _interop_require_default(require("../../utilities/Meta"));
require("./index.scss");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
const baseClass = 'login';
const Login = ()=>{
const history = (0, _reactrouterdom.useHistory)();
const { t } = (0, _reacti18next.useTranslation)('authentication');
const { fetchFullUser, user } = (0, _Auth.useAuth)();
const config = (0, _Config.useConfig)();
const { admin: { autoLogin, components: { afterLogin, beforeLogin } = {}, logoutRoute, user: userSlug }, collections, routes: { admin, api }, serverURL } = config;
const collection = collections.find(({ slug })=>slug === userSlug);
// Fetch 'redirect' from the query string which denotes the URL the user originally tried to visit. This is set in the Routes.tsx file when a user tries to access a protected route and is redirected to the login screen.
const query = new URLSearchParams((0, _reactrouterdom.useLocation)().search);
const redirect = query.get('redirect');
const onSuccess = async (data)=>{
if (data.token) {
await fetchFullUser();
// Ensure the redirect always starts with the admin route, and concatenate the redirect path
history.push(admin + (redirect || ''));
}
};
const prefillForm = autoLogin && autoLogin.prefillOnly;
return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, user ? // Logout
/*#__PURE__*/ _react.default.createElement(_Minimal.default, {
className: baseClass
}, /*#__PURE__*/ _react.default.createElement(_Meta.default, {
description: t('loginUser'),
keywords: t('login'),
title: t('login')
}), /*#__PURE__*/ _react.default.createElement("div", {
className: `${baseClass}__wrap`
}, /*#__PURE__*/ _react.default.createElement("h1", null, t('alreadyLoggedIn')), /*#__PURE__*/ _react.default.createElement("p", null, /*#__PURE__*/ _react.default.createElement(_reacti18next.Trans, {
i18nKey: "loggedIn",
t: t
}, /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Link, {
to: `${admin}${logoutRoute}`
}, t('logOut')))), /*#__PURE__*/ _react.default.createElement(_Button.default, {
buttonStyle: "secondary",
el: "link",
to: admin
}, t('general:backToDashboard')))) : // Login
/*#__PURE__*/ _react.default.createElement(_Minimal.default, {
className: baseClass
}, /*#__PURE__*/ _react.default.createElement(_Meta.default, {
description: t('loginUser'),
keywords: t('login'),
title: t('login')
}), /*#__PURE__*/ _react.default.createElement("div", {
className: `${baseClass}__brand`
}, /*#__PURE__*/ _react.default.createElement(_Logo.default, null)), Array.isArray(beforeLogin) && beforeLogin.map((Component, i)=>/*#__PURE__*/ _react.default.createElement(Component, {
key: i
})), !collection?.auth?.disableLocalStrategy && /*#__PURE__*/ _react.default.createElement(_Form.default, {
action: `${serverURL}${api}/${userSlug}/login`,
className: `${baseClass}__form`,
disableSuccessStatus: true,
initialData: prefillForm ? {
email: autoLogin.email,
password: autoLogin.password
} : undefined,
method: "post",
onSuccess: onSuccess,
waitForAutocomplete: true
}, /*#__PURE__*/ _react.default.createElement(_Loading.FormLoadingOverlayToggle, {
action: "loading",
name: "login-form"
}), /*#__PURE__*/ _react.default.createElement("div", {
className: `${baseClass}__inputWrap`
}, /*#__PURE__*/ _react.default.createElement(_Email.default, {
admin: {
autoComplete: 'email'
},
label: t('general:email'),
name: "email",
required: true
}), /*#__PURE__*/ _react.default.createElement(_Password.default, {
autoComplete: "off",
label: t('general:password'),
name: "password",
required: true
})), /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Link, {
to: `${admin}/forgot`
}, t('forgotPasswordQuestion')), /*#__PURE__*/ _react.default.createElement(_Submit.default, null, t('login'))), Array.isArray(afterLogin) && afterLogin.map((Component, i)=>/*#__PURE__*/ _react.default.createElement(Component, {
key: i
}))));
};
const _default = Login;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL3ZpZXdzL0xvZ2luL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBUcmFucywgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgTGluaywgdXNlSGlzdG9yeSwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJ1xuXG5pbXBvcnQgQnV0dG9uIGZyb20gJy4uLy4uL2VsZW1lbnRzL0J1dHRvbidcbmltcG9ydCB7IEZvcm1Mb2FkaW5nT3ZlcmxheVRvZ2dsZSB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0xvYWRpbmcnXG5pbXBvcnQgRm9ybSBmcm9tICcuLi8uLi9mb3Jtcy9Gb3JtJ1xuaW1wb3J0IEZvcm1TdWJtaXQgZnJvbSAnLi4vLi4vZm9ybXMvU3VibWl0J1xuaW1wb3J0IEVtYWlsIGZyb20gJy4uLy4uL2Zvcm1zL2ZpZWxkLXR5cGVzL0VtYWlsJ1xuaW1wb3J0IFBhc3N3b3JkIGZyb20gJy4uLy4uL2Zvcm1zL2ZpZWxkLXR5cGVzL1Bhc3N3b3JkJ1xuaW1wb3J0IExvZ28gZnJvbSAnLi4vLi4vZ3JhcGhpY3MvTG9nbydcbmltcG9ydCBNaW5pbWFsVGVtcGxhdGUgZnJvbSAnLi4vLi4vdGVtcGxhdGVzL01pbmltYWwnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL0F1dGgnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvQ29uZmlnJ1xuaW1wb3J0IE1ldGEgZnJvbSAnLi4vLi4vdXRpbGl0aWVzL01ldGEnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2xvZ2luJ1xuXG5jb25zdCBMb2dpbjogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbignYXV0aGVudGljYXRpb24nKVxuICBjb25zdCB7IGZldGNoRnVsbFVzZXIsIHVzZXIgfSA9IHVzZUF1dGgoKVxuICBjb25zdCBjb25maWcgPSB1c2VDb25maWcoKVxuICBjb25zdCB7XG4gICAgYWRtaW46IHsgYXV0b0xvZ2luLCBjb21wb25lbnRzOiB7IGFmdGVyTG9naW4sIGJlZm9yZUxvZ2luIH0gPSB7fSwgbG9nb3V0Um91dGUsIHVzZXI6IHVzZXJTbHVnIH0sXG4gICAgY29sbGVjdGlvbnMsXG4gICAgcm91dGVzOiB7IGFkbWluLCBhcGkgfSxcbiAgICBzZXJ2ZXJVUkwsXG4gIH0gPSBjb25maWdcblxuICBjb25zdCBjb2xsZWN0aW9uID0gY29sbGVjdGlvbnMuZmluZCgoeyBzbHVnIH0pID0+IHNsdWcgPT09IHVzZXJTbHVnKVxuXG4gIC8vIEZldGNoICdyZWRpcmVjdCcgZnJvbSB0aGUgcXVlcnkgc3RyaW5nIHdoaWNoIGRlbm90ZXMgdGhlIFVSTCB0aGUgdXNlciBvcmlnaW5hbGx5IHRyaWVkIHRvIHZpc2l0LiBUaGlzIGlzIHNldCBpbiB0aGUgUm91dGVzLnRzeCBmaWxlIHdoZW4gYSB1c2VyIHRyaWVzIHRvIGFjY2VzcyBhIHByb3RlY3RlZCByb3V0ZSBhbmQgaXMgcmVkaXJlY3RlZCB0byB0aGUgbG9naW4gc2NyZWVuLlxuICBjb25zdCBxdWVyeSA9IG5ldyBVUkxTZWFyY2hQYXJhbXModXNlTG9jYXRpb24oKS5zZWFyY2gpXG4gIGNvbnN0IHJlZGlyZWN0ID0gcXVlcnkuZ2V0KCdyZWRpcmVjdCcpXG5cbiAgY29uc3Qgb25TdWNjZXNzID0gYXN5bmMgKGRhdGEpID0+IHtcbiAgICBpZiAoZGF0YS50b2tlbikge1xuICAgICAgYXdhaXQgZmV0Y2hGdWxsVXNlcigpXG5cbiAgICAgIC8vIEVuc3VyZSB0aGUgcmVkaXJlY3QgYWx3YXlzIHN0YXJ0cyB3aXRoIHRoZSBhZG1pbiByb3V0ZSwgYW5kIGNvbmNhdGVuYXRlIHRoZSByZWRpcmVjdCBwYXRoXG4gICAgICBoaXN0b3J5LnB1c2goYWRtaW4gKyAocmVkaXJlY3QgfHwgJycpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHByZWZpbGxGb3JtID0gYXV0b0xvZ2luICYmIGF1dG9Mb2dpbi5wcmVmaWxsT25seVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAge3VzZXIgPyAoXG4gICAgICAgIC8vIExvZ291dFxuICAgICAgICA8TWluaW1hbFRlbXBsYXRlIGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgICAgICA8TWV0YSBkZXNjcmlwdGlvbj17dCgnbG9naW5Vc2VyJyl9IGtleXdvcmRzPXt0KCdsb2dpbicpfSB0aXRsZT17dCgnbG9naW4nKX0gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fd3JhcGB9PlxuICAgICAgICAgICAgPGgxPnt0KCdhbHJlYWR5TG9nZ2VkSW4nKX08L2gxPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIDxUcmFucyBpMThuS2V5PVwibG9nZ2VkSW5cIiB0PXt0fT5cbiAgICAgICAgICAgICAgICA8TGluayB0bz17YCR7YWRtaW59JHtsb2dvdXRSb3V0ZX1gfT57dCgnbG9nT3V0Jyl9PC9MaW5rPlxuICAgICAgICAgICAgICA8L1RyYW5zPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPEJ1dHRvbiBidXR0b25TdHlsZT1cInNlY29uZGFyeVwiIGVsPVwibGlua1wiIHRvPXthZG1pbn0+XG4gICAgICAgICAgICAgIHt0KCdnZW5lcmFsOmJhY2tUb0Rhc2hib2FyZCcpfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvTWluaW1hbFRlbXBsYXRlPlxuICAgICAgKSA6IChcbiAgICAgICAgLy8gTG9naW5cbiAgICAgICAgPE1pbmltYWxUZW1wbGF0ZSBjbGFzc05hbWU9e2Jhc2VDbGFzc30+XG4gICAgICAgICAgPE1ldGEgZGVzY3JpcHRpb249e3QoJ2xvZ2luVXNlcicpfSBrZXl3b3Jkcz17dCgnbG9naW4nKX0gdGl0bGU9e3QoJ2xvZ2luJyl9IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2JyYW5kYH0+XG4gICAgICAgICAgICA8TG9nbyAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtBcnJheS5pc0FycmF5KGJlZm9yZUxvZ2luKSAmJiBiZWZvcmVMb2dpbi5tYXAoKENvbXBvbmVudCwgaSkgPT4gPENvbXBvbmVudCBrZXk9e2l9IC8+KX1cbiAgICAgICAgICB7IWNvbGxlY3Rpb24/LmF1dGg/LmRpc2FibGVMb2NhbFN0cmF0ZWd5ICYmIChcbiAgICAgICAgICAgIDxGb3JtXG4gICAgICAgICAgICAgIGFjdGlvbj17YCR7c2VydmVyVVJMfSR7YXBpfS8ke3VzZXJTbHVnfS9sb2dpbmB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZm9ybWB9XG4gICAgICAgICAgICAgIGRpc2FibGVTdWNjZXNzU3RhdHVzXG4gICAgICAgICAgICAgIGluaXRpYWxEYXRhPXtcbiAgICAgICAgICAgICAgICBwcmVmaWxsRm9ybVxuICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgZW1haWw6IGF1dG9Mb2dpbi5lbWFpbCxcbiAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDogYXV0b0xvZ2luLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG1ldGhvZD1cInBvc3RcIlxuICAgICAgICAgICAgICBvblN1Y2Nlc3M9e29uU3VjY2Vzc31cbiAgICAgICAgICAgICAgd2FpdEZvckF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Rm9ybUxvYWRpbmdPdmVybGF5VG9nZ2xlIGFjdGlvbj1cImxvYWRpbmdcIiBuYW1lPVwibG9naW4tZm9ybVwiIC8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pbnB1dFdyYXBgfT5cbiAgICAgICAgICAgICAgICA8RW1haWxcbiAgICAgICAgICAgICAgICAgIGFkbWluPXt7IGF1dG9Db21wbGV0ZTogJ2VtYWlsJyB9fVxuICAgICAgICAgICAgICAgICAgbGFiZWw9e3QoJ2dlbmVyYWw6ZW1haWwnKX1cbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFBhc3N3b3JkXG4gICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgbGFiZWw9e3QoJ2dlbmVyYWw6cGFzc3dvcmQnKX1cbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8TGluayB0bz17YCR7YWRtaW59L2ZvcmdvdGB9Pnt0KCdmb3Jnb3RQYXNzd29yZFF1ZXN0aW9uJyl9PC9MaW5rPlxuICAgICAgICAgICAgICA8Rm9ybVN1Ym1pdD57dCgnbG9naW4nKX08L0Zvcm1TdWJtaXQ+XG4gICAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7QXJyYXkuaXNBcnJheShhZnRlckxvZ2luKSAmJiBhZnRlckxvZ2luLm1hcCgoQ29tcG9uZW50LCBpKSA9PiA8Q29tcG9uZW50IGtleT17aX0gLz4pfVxuICAgICAgICA8L01pbmltYWxUZW1wbGF0ZT5cbiAgICAgICl9XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBMb2dpblxuIl0sIm5hbWVzIjpbImJhc2VDbGFzcyIsIkxvZ2luIiwiaGlzdG9yeSIsInVzZUhpc3RvcnkiLCJ0IiwidXNlVHJhbnNsYXRpb24iLCJmZXRjaEZ1bGxVc2VyIiwidXNlciIsInVzZUF1dGgiLCJjb25maWciLCJ1c2VDb25maWciLCJhZG1pbiIsImF1dG9Mb2dpbiIsImNvbXBvbmVudHMiLCJhZnRlckxvZ2luIiwiYmVmb3JlTG9naW4iLCJsb2dvdXRSb3V0ZSIsInVzZXJTbHVnIiwiY29sbGVjdGlvbnMiLCJyb3V0ZXMiLCJhcGkiLCJzZXJ2ZXJVUkwiLCJjb2xsZWN0aW9uIiwiZmluZCIsInNsdWciLCJxdWVyeSIsIlVSTFNlYXJjaFBhcmFtcyIsInVzZUxvY2F0aW9uIiwic2VhcmNoIiwicmVkaXJlY3QiLCJnZXQiLCJvblN1Y2Nlc3MiLCJkYXRhIiwidG9rZW4iLCJwdXNoIiwicHJlZmlsbEZvcm0iLCJwcmVmaWxsT25seSIsIlJlYWN0IiwiRnJhZ21lbnQiLCJNaW5pbWFsVGVtcGxhdGUiLCJjbGFzc05hbWUiLCJNZXRhIiwiZGVzY3JpcHRpb24iLCJrZXl3b3JkcyIsInRpdGxlIiwiZGl2IiwiaDEiLCJwIiwiVHJhbnMiLCJpMThuS2V5IiwiTGluayIsInRvIiwiQnV0dG9uIiwiYnV0dG9uU3R5bGUiLCJlbCIsIkxvZ28iLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJDb21wb25lbnQiLCJpIiwia2V5IiwiYXV0aCIsImRpc2FibGVMb2NhbFN0cmF0ZWd5IiwiRm9ybSIsImFjdGlvbiIsImRpc2FibGVTdWNjZXNzU3RhdHVzIiwiaW5pdGlhbERhdGEiLCJlbWFpbCIsInBhc3N3b3JkIiwidW5kZWZpbmVkIiwibWV0aG9kIiwid2FpdEZvckF1dG9jb21wbGV0ZSIsIkZvcm1Mb2FkaW5nT3ZlcmxheVRvZ2dsZSIsIm5hbWUiLCJFbWFpbCIsImF1dG9Db21wbGV0ZSIsImxhYmVsIiwicmVxdWlyZWQiLCJQYXNzd29yZCIsIkZvcm1TdWJtaXQiXSwibWFwcGluZ3MiOiI7Ozs7K0JBcUhBOzs7ZUFBQTs7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