fleet/website/scripts/provision-sandbox-instance-for-one-user-and-deliver-email.js
Eric 46802ee56a
Website: Add admin page to manage the Fleet Sandbox waitlist (#13111)
Closes: #12954

Changes:
- Added an admin page that displays a table containing all of the users
that are currently on the Fleet Sandbox waitlist where admins can
approve waitlisted users.
- Added a new email template that tells users that their Fleet Sandbox
instance is ready.
- Added a new action:
`admin/provision-sandbox-instance-and-deliver-email.js`, an action that
provisions a Fleet sandbox instance for a single user and sends them an
email telling them that their Fleet Sandbox Instance is ready.
- Added a script that provisions a Fleet Sandbox instance for the user
who has been on the waitlist the longest and sends them an email telling
them that their Sandbox instance is ready.
2023-08-04 18:32:00 -05:00

63 lines
2.2 KiB
JavaScript
Vendored

module.exports = {
friendlyName: 'Provision Sandbox instance for one user and deliver email.',
description: 'Provisions a new Fleet Sandbox instance for a user on the Fleet Sandbox waitlist, and sends an email to the user.',
extendedDescription: 'This script will provision a Sandbox instance for the user who has been on the waitlist the longest.',
fn: async function () {
let earliestCreatedUserCurrentlyOnWaitlist = await User.find({inSandboxWaitlist: true})
.limit(1)
.sort('createdAt ASC');
// If there are no users on the Fleet sandbox waitlist, end the script.
if(earliestCreatedUserCurrentlyOnWaitlist.length === 0){
sails.log('There are no users currently waiting on the Fleet Sandbox Waitlist.');
return;
}
let userToRemoveFromSandboxWaitlist = earliestCreatedUserCurrentlyOnWaitlist[0];
let sandboxInstanceDetails = await sails.helpers.fleetSandboxCloudProvisioner.provisionNewFleetSandboxInstance.with({
firstName: userToRemoveFromSandboxWaitlist.firstName,
lastName: userToRemoveFromSandboxWaitlist.lastName,
emailAddress: userToRemoveFromSandboxWaitlist.emailAddress,
})
.intercept((err)=>{
return new Error(`When attempting to provision a new Fleet Sandbox instance for a User (id:${userToRemoveFromSandboxWaitlist.id}), an error occured. Full error: ${err}`);
});
await User.updateOne({id: userToRemoveFromSandboxWaitlist.id})
.set({
fleetSandboxURL: sandboxInstanceDetails.fleetSandboxURL,
fleetSandboxExpiresAt: sandboxInstanceDetails.fleetSandboxExpiresAt,
fleetSandboxDemoKey: sandboxInstanceDetails.fleetSandboxDemoKey,
inSandboxWaitlist: false,
});
// Send the user an email to let them know that their Fleet sandbox instance is ready.
await sails.helpers.sendTemplateEmail.with({
to: userToRemoveFromSandboxWaitlist.emailAddress,
from: sails.config.custom.fromEmailAddress,
fromName: sails.config.custom.fromName,
subject: 'Your Fleet Sandbox instance is ready!',
template: 'email-sandbox-ready-approved',
templateData: {},
});
sails.log(`Successfully removed a user (id: ${userToRemoveFromSandboxWaitlist.id}) from the Fleet Sandbox waitlist.`);
}
};