mirror of
https://github.com/fleetdm/fleet
synced 2026-05-22 16:39:01 +00:00
Closes: https://github.com/fleetdm/confidential/issues/4015 Changes: - Changed the url for `/fleetctl-preview` to `/try-fleet/fleetctl-preview` - Updated the controller for the `/fleetctl-preview` page to redirect non-logged-in users to `/try-fleet/login` - Removed the route for `/try-fleet/sandbox-expired`, and added a redirect going to `/try-fleet/fleetctl-preview`. - Updated the controller for `/try-fleet/sandbox` to redirect the users without a non-expired Sandbox instance to `/try-fleet/fleetctl-preview`. - Updated `signup.js` to not provision Fleet sandbox instances for users. - Updated the `User` model to support a third `signupReason`: "Try Fleet" - Updated `/try-fleet/register` to submit "Try Fleet" as a `signupReason` when users sign up. - Renamed the files for the `/fleetctl-preview` page (`get-started` » `fleetctl-preview`) - Updated/removed Fleet Sandbox related handbook sections. - Replaced the "Fleet vs Fleet Sandbox" section in the deploying documentation with a note about `fleetctl preview`. - Updated links to Fleet Sandbox in articles. --------- Co-authored-by: Mike Thomas <[email protected]>
95 lines
5.6 KiB
JavaScript
Vendored
95 lines
5.6 KiB
JavaScript
Vendored
module.exports = {
|
|
|
|
|
|
friendlyName: 'Download sitemap',
|
|
|
|
|
|
description: 'Download sitemap file (returning a stream).',
|
|
|
|
|
|
extendedDescription: `Notes:
|
|
• Sitemap building inspired by https://github.com/sailshq/sailsjs.com/blob/b53c6e6a90c9afdf89e5cae00b9c9dd3f391b0e7/api/controllers/documentation/refresh.js#L112-L180 and https://github.com/sailshq/sailsjs.com/blob/b53c6e6a90c9afdf89e5cae00b9c9dd3f391b0e7/api/helpers/get-pages-for-sitemap.js
|
|
• Why escape XML? See http://stackoverflow.com/questions/3431280/validation-problem-entityref-expecting-what-should-i-do and https://github.com/sailshq/sailsjs.com/blob/b53c6e6a90c9afdf89e5cae00b9c9dd3f391b0e7/api/controllers/documentation/refresh.js#L161-L172
|
|
`,
|
|
|
|
|
|
exits: {
|
|
success: { outputFriendlyName: 'Sitemap (XML)', outputType: 'string' },
|
|
badConfig: { responseType: 'badConfig' },
|
|
},
|
|
|
|
|
|
fn: async function ({}) {
|
|
|
|
if (sails.config.environment === 'staging') {
|
|
// This explicit check for staging allows for the sitemap to still be developed/tested locally,
|
|
// and for the real thing to be served in production, while explicitly preventing the "whoops,
|
|
// i deployed staging and search engine crawlers got fixated on the wrong sitemap" dilemma.
|
|
throw new Error('Since this is the staging environment, prevented sitemap.xml from being served to avoid search engine accidents.');
|
|
}
|
|
|
|
if (!_.isObject(sails.config.builtStaticContent)) {
|
|
throw {badConfig: 'builtStaticContent'};
|
|
} else if (!_.isArray(sails.config.builtStaticContent.queries)) {
|
|
throw {badConfig: 'builtStaticContent.queries'};
|
|
} else if (!_.isArray(sails.config.builtStaticContent.markdownPages)) {
|
|
throw {badConfig: 'builtStaticContent.markdownPages'};
|
|
}
|
|
|
|
// Start with sitemap.xml preamble + the root relative URLs of other webpages that aren't being generated from markdown
|
|
let sitemapXml = '<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
|
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// ╦ ╦╔═╗╔╗╔╔╦╗ ╔═╗╔═╗╔╦╗╔═╗╔╦╗ ╔═╗╔═╗╔═╗╔═╗╔═╗
|
|
// ╠═╣╠═╣║║║ ║║───║ ║ ║ ║║║╣ ║║ ╠═╝╠═╣║ ╦║╣ ╚═╗
|
|
// ╩ ╩╩ ╩╝╚╝═╩╝ ╚═╝╚═╝═╩╝╚═╝═╩╝ ╩ ╩ ╩╚═╝╚═╝╚═╝
|
|
let HAND_CODED_HTML_PAGES = [
|
|
'/',
|
|
'/company/contact',
|
|
'/queries',
|
|
'/pricing',
|
|
'/transparency',
|
|
'/docs',
|
|
'/logos',
|
|
'/reports/state-of-device-management',
|
|
'/releases',
|
|
'/success-stories',
|
|
'/securing',
|
|
'/engineering',
|
|
'/guides',
|
|
'/announcements',
|
|
'/report',
|
|
'/deploy',
|
|
'/podcasts',
|
|
'/device-management',
|
|
'/support',
|
|
// FUTURE: Do something smarter to get hand-coded HTML pages from routes.js, like how rebuild-cloud-sdk works, to avoid this manual duplication.
|
|
// See also https://github.com/sailshq/sailsjs.com/blob/b53c6e6a90c9afdf89e5cae00b9c9dd3f391b0e7/api/helpers/get-pages-for-sitemap.js#L27
|
|
];
|
|
for (let url of HAND_CODED_HTML_PAGES) {
|
|
let trimmedRootRelativeUrl = _.trimRight(url,'/');// « really only necessary for home page; run on everything as a failsafe against accidental dupes due to trailing slashes in the list above
|
|
sitemapXml += `<url><loc>${_.escape(sails.config.custom.baseUrl+trimmedRootRelativeUrl)}</loc></url>`;
|
|
}//∞
|
|
// ╔╦╗╦ ╦╔╗╔╔═╗╔╦╗╦╔═╗ ╔═╗╔═╗╦═╗ ╔═╗ ╦ ╦╔═╗╦═╗╦ ╦ ╔═╗╔═╗╔═╗╔═╗╔═╗
|
|
// ║║╚╦╝║║║╠═╣║║║║║ ╠═╝║╣ ╠╦╝───║═╬╗║ ║║╣ ╠╦╝╚╦╝ ╠═╝╠═╣║ ╦║╣ ╚═╗
|
|
// ═╩╝ ╩ ╝╚╝╩ ╩╩ ╩╩╚═╝ ╩ ╚═╝╩╚═ ╚═╝╚╚═╝╚═╝╩╚═ ╩ ╩ ╩ ╩╚═╝╚═╝╚═╝
|
|
for (let query of sails.config.builtStaticContent.queries) {
|
|
sitemapXml +=`<url><loc>${_.escape(sails.config.custom.baseUrl+`/queries/${query.slug}`)}</loc></url>`;// note we omit lastmod for some sitemap entries. This is ok, to mix w/ other entries that do have lastmod. Why? See https://docs.google.com/document/d/1SbpSlyZVXWXVA_xRTaYbgs3750jn252oXyMFLEQxMeU/edit
|
|
}//∞
|
|
// ╔╦╗╦ ╦╔╗╔╔═╗╔╦╗╦╔═╗ ╔═╗╔═╗╔═╗╔═╗╔═╗ ╔═╗╦═╗╔═╗╔╦╗ ╔╦╗╔═╗╦═╗╦╔═╔╦╗╔═╗╦ ╦╔╗╔
|
|
// ║║╚╦╝║║║╠═╣║║║║║ ╠═╝╠═╣║ ╦║╣ ╚═╗ ╠╣ ╠╦╝║ ║║║║ ║║║╠═╣╠╦╝╠╩╗ ║║║ ║║║║║║║
|
|
// ═╩╝ ╩ ╝╚╝╩ ╩╩ ╩╩╚═╝ ╩ ╩ ╩╚═╝╚═╝╚═╝ ╚ ╩╚═╚═╝╩ ╩ ╩ ╩╩ ╩╩╚═╩ ╩═╩╝╚═╝╚╩╝╝╚╝
|
|
for (let pageInfo of sails.config.builtStaticContent.markdownPages) {
|
|
sitemapXml +=`<url><loc>${_.escape(sails.config.custom.baseUrl+pageInfo.url)}</loc><lastmod>${_.escape(new Date(pageInfo.lastModifiedAt).toJSON())}</lastmod></url>`;
|
|
}//∞
|
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
sitemapXml += '</urlset>';
|
|
|
|
// Set MIME type for content-type response header.
|
|
this.res.type('text/xml');
|
|
|
|
// Respond with XML.
|
|
return sitemapXml;
|
|
}
|
|
|
|
|
|
};
|