diff --git a/products/ASC.Files/Client/src/components/dialogs/ConnectDialog/index.js b/products/ASC.Files/Client/src/components/dialogs/ConnectDialog/index.js index ccc399584e..d5f50ad3ff 100644 --- a/products/ASC.Files/Client/src/components/dialogs/ConnectDialog/index.js +++ b/products/ASC.Files/Client/src/components/dialogs/ConnectDialog/index.js @@ -86,7 +86,7 @@ const PureConnectDialogContainer = (props) => { setSelectedNode, providers, } = props; - const { corporate, title, link, provider_id, provider_key } = item; + const { corporate, title, link, token, provider_id, provider_key } = item; const provider = providers.find( (el) => el.provider_key === item.provider_key @@ -98,6 +98,7 @@ const PureConnectDialogContainer = (props) => { const [passwordValue, setPasswordValue] = useState(""); const [customerTitle, setCustomerTitleValue] = useState(folderTitle); const [isCorporate, setMakeShared] = useState(!!corporate); + const [oAuthToken, setToken] = useState(token); const onChangeUrl = (e) => setUrlValue(e.target.value); const onChangeLogin = (e) => setLoginValue(e.target.value); @@ -113,7 +114,7 @@ const PureConnectDialogContainer = (props) => { ].some((el) => el.trim().length === 0); const onSave = () => { - if (isEmptyField) return toastr.error(t("EmptyField")); + //if (isEmptyField) return toastr.error(t("EmptyField")); onClose(); setIsLoading(true); @@ -121,7 +122,7 @@ const PureConnectDialogContainer = (props) => { null, null, null, - null, + oAuthToken, isCorporate, customerTitle, provider_key, @@ -166,8 +167,8 @@ const PureConnectDialogContainer = (props) => { const onReconnect = () => { let authModal = window.open("", "Authorization", "height=600, width=1020"); - openConnectWindow(title, authModal).then( - (modal) => getOAuthToken(modal) //.then((token) => setToken(token)) + openConnectWindow(title, authModal).then((modal) => + getOAuthToken(modal).then((token) => setToken(token)) ); }; diff --git a/products/ASC.Files/Client/src/store/files/actions.js b/products/ASC.Files/Client/src/store/files/actions.js index 4bb1cdf308..5d4c09c544 100644 --- a/products/ASC.Files/Client/src/store/files/actions.js +++ b/products/ASC.Files/Client/src/store/files/actions.js @@ -1724,18 +1724,15 @@ const convertServiceName = (serviceName) => { export function getOAuthToken(modal) { return new Promise((resolve) => { + localStorage.removeItem("code"); const interval = setInterval(() => { try { - if (modal.document.documentElement.innerText) { - const converted = JSON.parse( - modal.document.documentElement.innerText - ); + const code = localStorage.getItem("code"); + + if (code) { + localStorage.removeItem("code"); clearInterval(interval); - const token = converted.response; - if (token) { - modal.close(); - return resolve(token); - } + resolve(code); } } catch { return; diff --git a/web/ASC.Web.Client/src/App.js b/web/ASC.Web.Client/src/App.js index a9880831b7..4575e36c7d 100644 --- a/web/ASC.Web.Client/src/App.js +++ b/web/ASC.Web.Client/src/App.js @@ -22,6 +22,7 @@ const Confirm = lazy(() => import("./components/pages/Confirm")); const Settings = lazy(() => import("./components/pages/Settings")); const Wizard = lazy(() => import("./components/pages/Wizard")); const Payments = lazy(() => import("./components/pages/Payments")); +const ThirdPartyResponse = lazy(() => import("./components/pages/ThirdParty")); const { setIsLoaded, getUser, @@ -97,6 +98,10 @@ class App extends React.Component { component={ComingSoon} /> + diff --git a/web/ASC.Web.Client/src/components/pages/ThirdParty/index.js b/web/ASC.Web.Client/src/components/pages/ThirdParty/index.js new file mode 100644 index 0000000000..9c6c6f1b26 --- /dev/null +++ b/web/ASC.Web.Client/src/components/pages/ThirdParty/index.js @@ -0,0 +1,30 @@ +import React from "react"; +import { withRouter } from "react-router"; +import { Box } from "asc-web-components"; +import { utils } from "asc-web-common"; + +const { getObjectByLocation } = utils; + +class ThirdPartyResponse extends React.Component { + constructor(props) { + super(props); + const { provider } = props.match.params; + const urlParams = getObjectByLocation(window.location); + + this.code = urlParams ? urlParams.code || null : null; + this.provider = provider; + } + + async componentDidMount() { + localStorage.setItem("provider", this.provider); + localStorage.setItem("code", this.code); + + setTimeout(window.close(), 1000); + } + + render() { + return OK; + } +} + +export default withRouter(ThirdPartyResponse);