Implement automatic premium installation/activation
[MAILPOET-2431]
This commit is contained in:
committed by
Jack Kitterhing
parent
84a17505c4
commit
e569a90ad8
@ -6,6 +6,15 @@ import MssMessages from 'settings/premium_tab/messages/mss_messages.jsx';
|
|||||||
import { PremiumStatus, PremiumMessages } from 'settings/premium_tab/messages/premium_messages.jsx';
|
import { PremiumStatus, PremiumMessages } from 'settings/premium_tab/messages/premium_messages.jsx';
|
||||||
import { PremiumInstallationStatus } from 'settings/premium_tab/messages/premium_installation_messages.jsx';
|
import { PremiumInstallationStatus } from 'settings/premium_tab/messages/premium_installation_messages.jsx';
|
||||||
|
|
||||||
|
const request = async (url) => {
|
||||||
|
try {
|
||||||
|
const response = await fetch(url);
|
||||||
|
return response.ok;
|
||||||
|
} catch (error) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const requestServicesApi = async (key, action) => MailPoet.Ajax.post({
|
const requestServicesApi = async (key, action) => MailPoet.Ajax.post({
|
||||||
api_version: window.mailpoet_api_version,
|
api_version: window.mailpoet_api_version,
|
||||||
endpoint: 'services',
|
endpoint: 'services',
|
||||||
@ -21,6 +30,40 @@ const PremiumTab = (props) => {
|
|||||||
const [mssKeyValid, setMssKeyValid] = useState(key ? props.mssKeyValid : null);
|
const [mssKeyValid, setMssKeyValid] = useState(key ? props.mssKeyValid : null);
|
||||||
const [mssKeyMessage, setMssKeyMessage] = useState(null);
|
const [mssKeyMessage, setMssKeyMessage] = useState(null);
|
||||||
|
|
||||||
|
let premiumActivateUrl = props.premiumActivateUrl;
|
||||||
|
|
||||||
|
const activatePremiumPlugin = async (isAfterInstall = false) => {
|
||||||
|
const status = PremiumInstallationStatus;
|
||||||
|
const activateStatus = isAfterInstall ? status.INSTALL_ACTIVATING : status.ACTIVATE_ACTIVATING;
|
||||||
|
const doneStatus = isAfterInstall ? status.INSTALL_DONE : status.ACTIVATE_DONE;
|
||||||
|
const errorStatus = isAfterInstall ? status.INSTALL_ACTIVATING_ERROR : status.ACTIVATE_ERROR;
|
||||||
|
|
||||||
|
setPremiumInstallationStatus(activateStatus);
|
||||||
|
if (!await request(premiumActivateUrl)) {
|
||||||
|
setPremiumInstallationStatus(errorStatus);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setPremiumInstallationStatus(doneStatus);
|
||||||
|
};
|
||||||
|
|
||||||
|
const installPremiumPlugin = async () => {
|
||||||
|
setPremiumInstallationStatus(PremiumInstallationStatus.INSTALL_INSTALLING);
|
||||||
|
if (!await request(props.premiumInstallUrl)) {
|
||||||
|
setPremiumInstallationStatus(PremiumInstallationStatus.INSTALL_INSTALLING_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// refetch 'plugin_activate_url' since it's only set after installation
|
||||||
|
try {
|
||||||
|
const response = await requestServicesApi(key, 'checkPremiumKey');
|
||||||
|
premiumActivateUrl = response.meta.premium_activate_url;
|
||||||
|
} catch (error) {
|
||||||
|
setPremiumInstallationStatus(PremiumInstallationStatus.INSTALL_INSTALLING_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await activatePremiumPlugin(true);
|
||||||
|
};
|
||||||
|
|
||||||
const verifyMailPoetPremiumKey = async () => {
|
const verifyMailPoetPremiumKey = async () => {
|
||||||
try {
|
try {
|
||||||
const response = await requestServicesApi(key, 'checkPremiumKey');
|
const response = await requestServicesApi(key, 'checkPremiumKey');
|
||||||
@ -29,10 +72,10 @@ const PremiumTab = (props) => {
|
|||||||
// install/activate Premium plugin
|
// install/activate Premium plugin
|
||||||
if (!response.meta.premium_plugin_installed) {
|
if (!response.meta.premium_plugin_installed) {
|
||||||
setPremiumStatus(PremiumStatus.KEY_VALID_PREMIUM_PLUGIN_BEING_INSTALLED);
|
setPremiumStatus(PremiumStatus.KEY_VALID_PREMIUM_PLUGIN_BEING_INSTALLED);
|
||||||
//TODO
|
await installPremiumPlugin();
|
||||||
} else if (!response.meta.premium_plugin_active) {
|
} else if (!response.meta.premium_plugin_active) {
|
||||||
setPremiumStatus(PremiumStatus.KEY_VALID_PREMIUM_PLUGIN_BEING_ACTIVATED);
|
setPremiumStatus(PremiumStatus.KEY_VALID_PREMIUM_PLUGIN_BEING_ACTIVATED);
|
||||||
//TODO
|
await activatePremiumPlugin();
|
||||||
} else {
|
} else {
|
||||||
setPremiumStatus(PremiumStatus.KEY_VALID_PREMIUM_PLUGIN_ACTIVE);
|
setPremiumStatus(PremiumStatus.KEY_VALID_PREMIUM_PLUGIN_ACTIVE);
|
||||||
}
|
}
|
||||||
@ -125,8 +168,8 @@ const PremiumTab = (props) => {
|
|||||||
keyStatus={premiumStatus}
|
keyStatus={premiumStatus}
|
||||||
keyMessage={premiumMessage}
|
keyMessage={premiumMessage}
|
||||||
installationStatus={premiumInstallationStatus}
|
installationStatus={premiumInstallationStatus}
|
||||||
installationCallback="" //TODO
|
installationCallback={installPremiumPlugin}
|
||||||
activationCallback="" //TODO
|
activationCallback={() => activatePremiumPlugin()}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</td>
|
</td>
|
||||||
@ -141,10 +184,13 @@ PremiumTab.propTypes = {
|
|||||||
premiumStatus: PropTypes.number.isRequired,
|
premiumStatus: PropTypes.number.isRequired,
|
||||||
mssKeyValid: PropTypes.bool.isRequired,
|
mssKeyValid: PropTypes.bool.isRequired,
|
||||||
premiumPluginActive: PropTypes.bool.isRequired,
|
premiumPluginActive: PropTypes.bool.isRequired,
|
||||||
|
premiumInstallUrl: PropTypes.string.isRequired,
|
||||||
|
premiumActivateUrl: PropTypes.string,
|
||||||
};
|
};
|
||||||
|
|
||||||
PremiumTab.defaultProps = {
|
PremiumTab.defaultProps = {
|
||||||
activationKey: null,
|
activationKey: null,
|
||||||
|
premiumActivateUrl: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
const container = document.getElementById('settings-premium-tab');
|
const container = document.getElementById('settings-premium-tab');
|
||||||
@ -170,6 +216,8 @@ if (container) {
|
|||||||
premiumStatus={getPremiumStatus()}
|
premiumStatus={getPremiumStatus()}
|
||||||
mssKeyValid={window.mailpoet_mss_key_valid}
|
mssKeyValid={window.mailpoet_mss_key_valid}
|
||||||
premiumPluginActive={!!window.mailpoet_premium_version}
|
premiumPluginActive={!!window.mailpoet_premium_version}
|
||||||
|
premiumInstallUrl={window.mailpoet_premium_install_url}
|
||||||
|
premiumActivateUrl={window.mailpoet_premium_activate_url || null}
|
||||||
/>,
|
/>,
|
||||||
container
|
container
|
||||||
);
|
);
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
var mailpoet_premium_key_valid = <%= json_encode(premium_key_valid) %>;
|
var mailpoet_premium_key_valid = <%= json_encode(premium_key_valid) %>;
|
||||||
var mailpoet_premium_plugin_installed = <%= json_encode(premium_plugin_installed) %>;
|
var mailpoet_premium_plugin_installed = <%= json_encode(premium_plugin_installed) %>;
|
||||||
var mailpoet_mss_key_valid = <%= json_encode(mss_key_valid) %>;
|
var mailpoet_mss_key_valid = <%= json_encode(mss_key_valid) %>;
|
||||||
|
var mailpoet_premium_install_url = <%= json_encode(premium_install_url) %>;
|
||||||
|
var mailpoet_premium_activate_url = <%= json_encode(premium_activate_url) %>;
|
||||||
<% endautoescape %>
|
<% endautoescape %>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user