fleet/website/config/bootstrap.js
Eric 75ffd8b12f
Website: Update login/register flow, add Fleet UI background to /try and /login (#39290)
Closes: https://github.com/fleetdm/fleet/issues/36465
Closes: https://github.com/fleetdm/fleet/issues/36467
Related to: https://github.com/fleetdm/confidential/issues/14254

Changes:
- Updated "Try it yourself" links to go to the `/try` page (Which
redirects users who aren't logged in to the /login page)
- Removed the `<signup-modal>` and `<signup-button>` components
- Removed the route for the /register page, and added a redirect to go
to /login
- Updated the /login page to have the signup form, and to match the
latest wireframes
- Updated the /try page to have a fake Fleet UI as a background
(previously an image)
2026-02-10 12:32:49 -06:00

109 lines
5.3 KiB
JavaScript
Vendored

/**
* Seed Function
* (sails.config.bootstrap)
*
* A function that runs just before your Sails app gets lifted.
* > Need more flexibility? You can also create a hook.
*
* For more information on seeding your app with fake data, check out:
* https://sailsjs.com/config/bootstrap
*/
module.exports.bootstrap = async function() {
// Import dependencies
var path = require('path');
// This bootstrap version indicates what version of fake data we're dealing with here.
var HARD_CODED_DATA_VERSION = 1;
// This path indicates where to store/look for the JSON file that tracks the "last run bootstrap info"
// locally on this development computer (if we happen to be on a development computer).
var bootstrapLastRunInfoPath = path.resolve(sails.config.appPath, '.tmp/bootstrap-version.json');
// Whether or not to continue doing the stuff in this file (i.e. wiping and regenerating data)
// depends on some factors:
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// If the hard-coded data version has been incremented, or we're being forced
// (i.e. `--drop` or `--environment=test` was set), then run the meat of this
// bootstrap script to wipe all existing data and rebuild hard-coded data.
if (sails.config.models.migrate !== 'drop' && sails.config.environment !== 'test') {
// If this is _actually_ a production environment (real or simulated), or we have
// `migrate: safe` enabled, then prevent accidentally removing all data!
if (process.env.NODE_ENV==='production' || sails.config.models.migrate === 'safe') {
sails.log('Since we are running with migrate: \'safe\' and/or NODE_ENV=production (in the "'+sails.config.environment+'" Sails environment, to be precise), skipping the rest of the bootstrap to avoid data loss...');
return;
}//•
// Compare bootstrap version from code base to the version that was last run
var lastRunBootstrapInfo = await sails.helpers.fs.readJson(bootstrapLastRunInfoPath)
.tolerate('doesNotExist');// (it's ok if the file doesn't exist yet-- just keep going.)
let numberOfPlatformRecords = await Platform.count();
if(numberOfPlatformRecords > 1) {
throw new Error('Consistency error: More than one platform record exists. To accurately freeze and unfreeze GitHub pull requests when the main branch is frozen, only one of these records should exist. Number of platform records found'+numberOfPlatformRecords);
}
if (lastRunBootstrapInfo && lastRunBootstrapInfo.lastRunVersion === HARD_CODED_DATA_VERSION) {
sails.log('Skipping v'+HARD_CODED_DATA_VERSION+' bootstrap script... (because it\'s already been run)');
sails.log('(last run on this computer: @ '+(new Date(lastRunBootstrapInfo.lastRunAt))+')');
return;
}//•
sails.log('Running v'+HARD_CODED_DATA_VERSION+' bootstrap script... ('+(lastRunBootstrapInfo ? 'before this, the last time the bootstrap ran on this computer was for v'+lastRunBootstrapInfo.lastRunVersion+' @ '+(new Date(lastRunBootstrapInfo.lastRunAt)) : 'looks like this is the first time the bootstrap has run on this computer')+')');
}
else {
sails.log('Running bootstrap script because it was forced... (either `--drop` or `--environment=test` was used)');
}
// Since the hard-coded data version has been incremented, and we're running in
// a "throwaway data" environment, delete all records from all models.
for (let identity in sails.models) {
await sails.models[identity].destroy({});
}//∞
// By convention, this is a good place to set up fake data during development.
let adminUser = await User.create({
emailAddress: '[email protected]',
firstName: 'Ryan',
lastName: 'Dahl',
organization: 'Golaith Industries',
isSuperAdmin: true,
fleetSandboxURL: 'http://example.com',
fleetSandboxExpiresAt: 1,
fleetSandboxDemoKey: await sails.helpers.strings.uuid(),
password: await sails.helpers.passwords.hashPassword('abc123'),
fleetPremiumTrialType: 'local trial',
fleetPremiumTrialLicenseKey: await sails.helpers.strings.uuid(),
fleetPremiumTrialLicenseKeyExpiresAt: Date.now() + (60 * 60 * 24 * 30 * 1000),
}).fetch();
// Note: We do not create a platform record to avoid potential consistency violations.
if (sails.config.custom.enableBillingFeatures) {
let stripeCustomerId = await sails.helpers.stripe.saveBillingInfo.with({
emailAddress: adminUser.emailAddress
}).timeout(5000).retry();
await User.updateOne({id: adminUser.id})
.set({
stripeCustomerId
});
}
// Save new bootstrap version
await sails.helpers.fs.writeJson.with({
destination: bootstrapLastRunInfoPath,
json: {
lastRunVersion: HARD_CODED_DATA_VERSION,
lastRunAt: Date.now()
},
force: true
})
.tolerate((err)=>{
sails.log.warn('For some reason, could not write bootstrap version .json file. This could be a result of a problem with your configured paths, or, if you are in production, a limitation of your hosting provider related to `pwd`. As a workaround, try updating app.js to explicitly pass in `appPath: __dirname` instead of relying on `chdir`. Current sails.config.appPath: `'+sails.config.appPath+'`. Full error details: '+err.stack+'\n\n(Proceeding anyway this time...)');
});
};