fleet/website/api/controllers/admin/view-email-templates.js
Eric 4fd1efe98a
Website: Add API to send signed CSR emails (#8408)
This pull request relies on the `mdm-gen-cert` command from
https://github.com/fleetdm/fleet/pull/8884.
Closes: https://github.com/fleetdm/fleet/issues/8223

Changes:
- Updated the deploy Fleet website workflow to:
   - Add Go as a dependency
   - Build the mdm-gen-cert binary in `/website/.tools/`
   - add the `/.tools/` folder to the Heroku app
- Added `deliver-apple-csr.js` -  an API that:
- can be called by making a `POST` request to
`/api/v1/deliver-apple-csr`
   - accepts `csr` as an input
- runs the `mdm-gen-cert` command with the `csr` set as an environment
variable
- returns an `invalidEmailDomain` response if the user's email domain is
in the array of banned email domains.
- saves the users organization and email address to the website's
database
- Sends an email to the requesting user's email address with the signed
CSR attached as a text file named `apple-apns-request.txt`
   - Posts a message to a channel in the Fleet Slack.
- Added a new model: `CertificateSigningRequests` that contains two
required attributes: `emailAddress` and `organization`
- Added a new email template `email-signed-csr-for-apns`
- Updated routes, policies, eslintrc, and rebuilt cloud-sdk


Before this can be merged, we will need to:
- [x] Add new config variables in Heroku
   - [x] `sails.config.custom.mdmVendorCertPem` 
   - [x] `sails.config.custom.mdmVendorKeyPem`
   - [x] `sails.config.custom.mdmVendorKeyPassphrase`
   - [x] `sails.config.custom.slackWebhookUrlForMDMSignups`
- [x] Add the `CertificateSigningRequests` model to the website's
database
2023-01-19 14:43:14 -06:00

60 lines
1.3 KiB
JavaScript
Vendored

module.exports = {
friendlyName: 'View email templates',
description: 'Display "Email templates" page.',
exits: {
success: {
viewTemplatePath: 'pages/admin/email-templates'
}
},
fn: async function () {
var path = require('path');
// Sniff for top level email templates
let templatePaths = await sails.helpers.fs.ls.with({
dir: path.join(sails.config.paths.views, 'emails/'),
depth: 1,
includeDirs: false,
includeSymlinks: false,
});
let markdownEmailPaths = await sails.helpers.fs.ls.with({
dir: path.join(sails.config.paths.views, 'emails/newsletter'),
depth: 99,
includeDirs: false,
includeSymlinks: false,
});
markdownEmailPaths = markdownEmailPaths.map((templatePath)=>{
let relativePath = path.relative(path.join(sails.config.paths.views, 'emails/'), templatePath);
let extension = path.extname(relativePath);
return relativePath.split(extension)[0];
});
templatePaths = templatePaths.map((templatePath)=>{
let relativePath = path.relative(path.join(sails.config.paths.views, 'emails/'), templatePath);
let extension = path.extname(relativePath);
return relativePath.split(extension)[0];
});
// Respond with view.
return {
templatePaths,
markdownEmailPaths
};
}
};