mirror of
https://github.com/empayre/fleet.git
synced 2024-11-06 00:45:19 +00:00
Website: Update /try-fleet (#17608)
Changes: - Added `/start`, a page where users can choose whether to run a local demo of Fleet, or purchase a Fleet Premium license - Updated all "Try it now" links to go to the `/register` page. - Updated the URL and added redirects: - `/customers/new-license` » `/new-license` - `/try-fleet/fleetctl-preview` » `/try-fleet` - `/customers/register` » `/register` - `/customers/login` » `/login` - Removed the `/try-fleet/login` and `/try-fleet/register` pages - Updated the /try-fleet/explore-data pages to redirect logged-out-users to the /register page - Updated policies, routes, and importer.less --------- Co-authored-by: Mike Thomas <78363703+mike-j-thomas@users.noreply.github.com>
This commit is contained in:
parent
7e4964385c
commit
b36256a053
@ -24,7 +24,7 @@ module.exports = {
|
||||
fn: async function () {
|
||||
|
||||
if (this.req.me) {
|
||||
throw {redirect: '/customers/new-license'};
|
||||
throw {redirect: '/start'};
|
||||
}
|
||||
|
||||
return {};
|
||||
|
@ -56,7 +56,7 @@ module.exports = {
|
||||
|
||||
// If the requesting user is not logged in, redirect them to the /try-fleet/register page with the specified hostPlatform added as a query parameter.
|
||||
if(!this.req.me){
|
||||
throw {redirect: `/try-fleet/register?targetPlatform=${encodeURIComponent(hostPlatform)}` };
|
||||
throw {redirect: `/register?targetPlatform=${encodeURIComponent(hostPlatform)}` };
|
||||
}
|
||||
|
||||
if(!sails.config.custom.queryIdsByTableName){
|
||||
|
@ -1,38 +0,0 @@
|
||||
module.exports = {
|
||||
|
||||
|
||||
friendlyName: 'View register',
|
||||
|
||||
|
||||
description: 'Display "Register" page. Note: This page is the "signup" page skinned for Fleet Sandbox.',
|
||||
|
||||
|
||||
exits: {
|
||||
|
||||
success: {
|
||||
viewTemplatePath: 'pages/try-fleet/register'
|
||||
},
|
||||
|
||||
redirect: {
|
||||
description: 'The requesting user is already logged in.',
|
||||
responseType: 'redirect'
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
|
||||
fn: async function () {
|
||||
|
||||
// If the user is logged in, redirect them to the Fleet sandbox page.
|
||||
// FUTURE: once all Sandbox instances have expired, redirect users to the fleetctl-preview page.
|
||||
if (this.req.me) {
|
||||
throw {redirect: '/try-fleet/sandbox'};
|
||||
}
|
||||
|
||||
// Respond with view.
|
||||
return {};
|
||||
|
||||
}
|
||||
|
||||
|
||||
};
|
@ -1,38 +0,0 @@
|
||||
module.exports = {
|
||||
|
||||
|
||||
friendlyName: 'View Sandbox login',
|
||||
|
||||
|
||||
description: 'Display the "Sandbox Login" page. Note: This page is the "login" page skinned for Fleet Sandbox.',
|
||||
|
||||
|
||||
exits: {
|
||||
|
||||
success: {
|
||||
viewTemplatePath: 'pages/try-fleet/sandbox-login'
|
||||
},
|
||||
|
||||
redirect: {
|
||||
description: 'The requesting user is already logged in.',
|
||||
responseType: 'redirect'
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
|
||||
|
||||
fn: async function () {
|
||||
|
||||
// If the user is logged in, redirect them to the Fleet sandbox page.
|
||||
if (this.req.me) {
|
||||
throw {redirect: '/try-fleet/sandbox'};
|
||||
}
|
||||
|
||||
// Respond with view.
|
||||
return {};
|
||||
|
||||
}
|
||||
|
||||
|
||||
};
|
27
website/api/controllers/view-start.js
vendored
Normal file
27
website/api/controllers/view-start.js
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
module.exports = {
|
||||
|
||||
|
||||
friendlyName: 'View start',
|
||||
|
||||
|
||||
description: 'Display "Start" page.',
|
||||
|
||||
|
||||
exits: {
|
||||
|
||||
success: {
|
||||
viewTemplatePath: 'pages/start'
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
|
||||
fn: async function () {
|
||||
|
||||
// Respond with view.
|
||||
return {};
|
||||
|
||||
}
|
||||
|
||||
|
||||
};
|
BIN
website/assets/images/start-purchase-license-64x64@2x.png
vendored
Normal file
BIN
website/assets/images/start-purchase-license-64x64@2x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.7 KiB |
BIN
website/assets/images/start-try-fleet-64x64@2x.png
vendored
Normal file
BIN
website/assets/images/start-try-fleet-64x64@2x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.9 KiB |
30
website/assets/js/pages/entrance/login.page.js
vendored
30
website/assets/js/pages/entrance/login.page.js
vendored
@ -25,6 +25,17 @@ parasails.registerPage('login', {
|
||||
// Server error state for the form
|
||||
cloudError: '',
|
||||
showCustomerLogin: true,
|
||||
|
||||
// For redirecting users who come to this page from a /try-fleet/explore-data/* page back to the page they were visiting before they were redirected.
|
||||
exploreDataRedirectSlug: undefined,
|
||||
// Used for the 'create an account' link
|
||||
registrationSlug: '/register',
|
||||
// Possible /try-fleet/explore-data/ redirects
|
||||
redirectSlugsByTargetPlatform: {
|
||||
'macos': 'macos/account_policy_data',
|
||||
'windows': 'windows/appcompat_shims',
|
||||
'linux': 'linux/apparmor_events',
|
||||
},
|
||||
},
|
||||
|
||||
// ╦ ╦╔═╗╔═╗╔═╗╦ ╦╔═╗╦ ╔═╗
|
||||
@ -34,6 +45,18 @@ parasails.registerPage('login', {
|
||||
if(window.location.search === '?admin') {
|
||||
this.showCustomerLogin = false;
|
||||
}
|
||||
// If the user navigated to this page from an /explore-data page, we'll keep track of the page this user came from so we can redirect them, and we'll strip all query parameters from the URL.
|
||||
if(window.location.search) {
|
||||
// https://caniuse.com/mdn-api_urlsearchparams_get
|
||||
let possibleSearchParamsToFilterBy = new URLSearchParams(window.location.search);
|
||||
let posibleRedirect = possibleSearchParamsToFilterBy.get('targetPlatform');
|
||||
// If the provided platform matches a key in the userFriendlyPlatformNames array, we'll set this.selectedPlatform.
|
||||
if(posibleRedirect && this.redirectSlugsByTargetPlatform[posibleRedirect] !== undefined){
|
||||
this.registrationSlug +=`?targetPlatform=${posibleRedirect}`;
|
||||
this.exploreDataRedirectSlug = `/try-fleet/explore-data/${this.redirectSlugsByTargetPlatform[posibleRedirect]}`;
|
||||
}
|
||||
window.history.replaceState({}, document.title, '/login' );
|
||||
}
|
||||
},
|
||||
mounted: async function() {
|
||||
//…
|
||||
@ -49,7 +72,12 @@ parasails.registerPage('login', {
|
||||
// > (Note that we re-enable the syncing state here. This is on purpose--
|
||||
// > to make sure the spinner stays there until the page navigation finishes.)
|
||||
this.syncing = true;
|
||||
window.location = '/customers/new-license?login';
|
||||
if(this.exploreDataRedirectSlug){
|
||||
window.location = this.exploreDataRedirectSlug;
|
||||
} else {
|
||||
window.location = '/start';
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
}
|
||||
|
30
website/assets/js/pages/entrance/signup.page.js
vendored
30
website/assets/js/pages/entrance/signup.page.js
vendored
@ -24,13 +24,33 @@ parasails.registerPage('signup', {
|
||||
cloudError: '',
|
||||
// For displaying the full signup form.
|
||||
showFullForm: false,
|
||||
exploreDataRedirectSlug: undefined,
|
||||
// Used for the 'I have an account' link
|
||||
loginSlug: '/login',
|
||||
// Possible /try-fleet/explore-data/ redirects
|
||||
redirectSlugsByTargetPlatform: {
|
||||
'macos': 'macos/account_policy_data',
|
||||
'windows': 'windows/appcompat_shims',
|
||||
'linux': 'linux/apparmor_events',
|
||||
},
|
||||
},
|
||||
|
||||
// ╦ ╦╔═╗╔═╗╔═╗╦ ╦╔═╗╦ ╔═╗
|
||||
// ║ ║╠╣ ║╣ ║ ╚╦╝║ ║ ║╣
|
||||
// ╩═╝╩╚ ╚═╝╚═╝ ╩ ╚═╝╩═╝╚═╝
|
||||
beforeMount: function() {
|
||||
//…
|
||||
// If the user navigated to this page from an /explore-data page, we'll keep track of the page this user came from so we can redirect them, and we'll strip all query parameters from the URL.
|
||||
if(window.location.search){
|
||||
// https://caniuse.com/mdn-api_urlsearchparams_get
|
||||
let possibleSearchParamsToFilterBy = new URLSearchParams(window.location.search);
|
||||
let posibleRedirect = possibleSearchParamsToFilterBy.get('targetPlatform');
|
||||
// If the provided platform matches a key in the userFriendlyPlatformNames array, we'll set this.selectedPlatform.
|
||||
if(posibleRedirect && this.redirectSlugsByTargetPlatform[posibleRedirect] !== undefined){
|
||||
this.loginSlug +=`?targetPlatform=${posibleRedirect}`;
|
||||
this.exploreDataRedirectSlug = `/try-fleet/explore-data/${this.redirectSlugsByTargetPlatform[posibleRedirect]}`;
|
||||
}
|
||||
window.history.replaceState({}, document.title, '/register' );
|
||||
}
|
||||
},
|
||||
mounted: async function() {
|
||||
//…
|
||||
@ -56,11 +76,15 @@ parasails.registerPage('signup', {
|
||||
},
|
||||
|
||||
submittedSignUpForm: async function() {
|
||||
// redirect to the new-license page.
|
||||
// redirect to the /start page.
|
||||
// > (Note that we re-enable the syncing state here. This is on purpose--
|
||||
// > to make sure the spinner stays there until the page navigation finishes.)
|
||||
this.syncing = true;
|
||||
window.location = '/customers/new-license?signup';
|
||||
if(this.exploreDataRedirectSlug){
|
||||
window.location = this.exploreDataRedirectSlug;
|
||||
} else {
|
||||
window.location = '/start';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
25
website/assets/js/pages/start.page.js
vendored
Normal file
25
website/assets/js/pages/start.page.js
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
parasails.registerPage('start', {
|
||||
// ╦╔╗╔╦╔╦╗╦╔═╗╦ ╔═╗╔╦╗╔═╗╔╦╗╔═╗
|
||||
// ║║║║║ ║ ║╠═╣║ ╚═╗ ║ ╠═╣ ║ ║╣
|
||||
// ╩╝╚╝╩ ╩ ╩╩ ╩╩═╝ ╚═╝ ╩ ╩ ╩ ╩ ╚═╝
|
||||
data: {
|
||||
//…
|
||||
},
|
||||
|
||||
// ╦ ╦╔═╗╔═╗╔═╗╦ ╦╔═╗╦ ╔═╗
|
||||
// ║ ║╠╣ ║╣ ║ ╚╦╝║ ║ ║╣
|
||||
// ╩═╝╩╚ ╚═╝╚═╝ ╩ ╚═╝╩═╝╚═╝
|
||||
beforeMount: function() {
|
||||
//…
|
||||
},
|
||||
mounted: async function() {
|
||||
//…
|
||||
},
|
||||
|
||||
// ╦╔╗╔╔╦╗╔═╗╦═╗╔═╗╔═╗╔╦╗╦╔═╗╔╗╔╔═╗
|
||||
// ║║║║ ║ ║╣ ╠╦╝╠═╣║ ║ ║║ ║║║║╚═╗
|
||||
// ╩╝╚╝ ╩ ╚═╝╩╚═╩ ╩╚═╝ ╩ ╩╚═╝╝╚╝╚═╝
|
||||
methods: {
|
||||
//…
|
||||
}
|
||||
});
|
@ -1,87 +0,0 @@
|
||||
parasails.registerPage('register', {
|
||||
// ╦╔╗╔╦╔╦╗╦╔═╗╦ ╔═╗╔╦╗╔═╗╔╦╗╔═╗
|
||||
// ║║║║║ ║ ║╠═╣║ ╚═╗ ║ ╠═╣ ║ ║╣
|
||||
// ╩╝╚╝╩ ╩ ╩╩ ╩╩═╝ ╚═╝ ╩ ╩ ╩ ╩ ╚═╝
|
||||
data: {
|
||||
formData: { /* … */ },
|
||||
// For tracking client-side validation errors in our form.
|
||||
// > Has property set to `true` for each invalid property in `formData`.
|
||||
formErrors: { /* … */ },
|
||||
|
||||
// Form rules
|
||||
formRules: {
|
||||
firstName: {required: true},
|
||||
lastName: {required: true},
|
||||
organization: {required: true},
|
||||
emailAddress: {required: true, isEmail: true},
|
||||
password: {required: true, minLength: 8},
|
||||
},
|
||||
// Syncing / loading state
|
||||
syncing: false,
|
||||
// Server error state
|
||||
cloudError: '',
|
||||
// Modal
|
||||
modal: '',
|
||||
// For redirecting users who come to this page from a /try-fleet/explore-data/* page back to the page they were visiting before they were redirected.
|
||||
exploreDataRedirectSlug: undefined,
|
||||
// Used for the 'I have an account' link
|
||||
loginSlug: '/try-fleet/login',
|
||||
// Possible /try-fleet/explore-data/ redirects
|
||||
redirectSlugsByTargetPlatform: {
|
||||
'macos': 'macos/account_policy_data',
|
||||
'windows': 'windows/appcompat_shims',
|
||||
'linux': 'linux/apparmor_events',
|
||||
},
|
||||
},
|
||||
|
||||
// ╦ ╦╔═╗╔═╗╔═╗╦ ╦╔═╗╦ ╔═╗
|
||||
// ║ ║╠╣ ║╣ ║ ╚╦╝║ ║ ║╣
|
||||
// ╩═╝╩╚ ╚═╝╚═╝ ╩ ╚═╝╩═╝╚═╝
|
||||
beforeMount: function() {
|
||||
// If the user navigated to this page from an /explore-data page, we'll keep track of the page this user came from so we can redirect them, and we'll strip all query parameters from the URL.
|
||||
if(window.location.search){
|
||||
// https://caniuse.com/mdn-api_urlsearchparams_get
|
||||
let possibleSearchParamsToFilterBy = new URLSearchParams(window.location.search);
|
||||
let posibleRedirect = possibleSearchParamsToFilterBy.get('targetPlatform');
|
||||
// If the provided platform matches a key in the userFriendlyPlatformNames array, we'll set this.selectedPlatform.
|
||||
if(posibleRedirect && this.redirectSlugsByTargetPlatform[posibleRedirect] !== undefined){
|
||||
this.loginSlug +=`?targetPlatform=${posibleRedirect}`;
|
||||
this.exploreDataRedirectSlug = `/try-fleet/explore-data/${this.redirectSlugsByTargetPlatform[posibleRedirect]}`;
|
||||
}
|
||||
window.history.replaceState({}, document.title, '/try-fleet/register' );
|
||||
}
|
||||
},
|
||||
mounted: async function() {
|
||||
//…
|
||||
},
|
||||
|
||||
// ╦╔╗╔╔╦╗╔═╗╦═╗╔═╗╔═╗╔╦╗╦╔═╗╔╗╔╔═╗
|
||||
// ║║║║ ║ ║╣ ╠╦╝╠═╣║ ║ ║║ ║║║║╚═╗
|
||||
// ╩╝╚╝ ╩ ╚═╝╩╚═╩ ╩╚═╝ ╩ ╩╚═╝╝╚╝╚═╝
|
||||
methods: {
|
||||
|
||||
// Using handle-submitting to add firstName, and lastName values to our formData before sending it to signup.js
|
||||
handleSubmittingRegisterForm: async function(argins) {
|
||||
argins.signupReason = 'Try Fleet';
|
||||
return await Cloud.signup.with(argins);
|
||||
},
|
||||
|
||||
// After the form is submitted, we'll redirect the user to the fleetctl preview page.
|
||||
submittedRegisterForm: async function() {
|
||||
this.syncing = true;
|
||||
if(this.exploreDataRedirectSlug){
|
||||
window.location = this.exploreDataRedirectSlug;
|
||||
} else {
|
||||
window.location = '/try-fleet/explore-data';
|
||||
}
|
||||
},
|
||||
|
||||
clickOpenVideoModal: function() {
|
||||
this.modal = 'video';
|
||||
},
|
||||
|
||||
closeModal: function() {
|
||||
this.modal = '';
|
||||
},
|
||||
}
|
||||
});
|
@ -1,84 +0,0 @@
|
||||
parasails.registerPage('sandbox-login', {
|
||||
// ╦╔╗╔╦╔╦╗╦╔═╗╦ ╔═╗╔╦╗╔═╗╔╦╗╔═╗
|
||||
// ║║║║║ ║ ║╠═╣║ ╚═╗ ║ ╠═╣ ║ ║╣
|
||||
// ╩╝╚╝╩ ╩ ╩╩ ╩╩═╝ ╚═╝ ╩ ╩ ╩ ╩ ╚═╝
|
||||
data: {
|
||||
// Main syncing/loading state for this page.
|
||||
syncing: false,
|
||||
|
||||
// Form data
|
||||
formData: { },
|
||||
|
||||
// For tracking client-side validation errors in our form.
|
||||
// > Has property set to `true` for each invalid property in `formData`.
|
||||
formErrors: { /* … */ },
|
||||
|
||||
// A set of validation rules for our form.
|
||||
// > The form will not be submitted if these are invalid.
|
||||
formRules: {
|
||||
emailAddress: { required: true, isEmail: true },
|
||||
password: { required: true },
|
||||
},
|
||||
|
||||
// Server error state for the form
|
||||
cloudError: '',
|
||||
|
||||
// Modal
|
||||
modal: '',
|
||||
// For redirecting users who come to this page from a /try-fleet/explore-data/* page back to the page they were visiting before they were redirected.
|
||||
exploreDataRedirectSlug: undefined,
|
||||
// Used for the 'create an account' link
|
||||
registrationSlug: '/try-fleet/register',
|
||||
// Possible /try-fleet/explore-data/ redirects
|
||||
redirectSlugsByTargetPlatform: {
|
||||
'macos': 'macos/account_policy_data',
|
||||
'windows': 'windows/appcompat_shims',
|
||||
'linux': 'linux/apparmor_events',
|
||||
},
|
||||
},
|
||||
|
||||
// ╦ ╦╔═╗╔═╗╔═╗╦ ╦╔═╗╦ ╔═╗
|
||||
// ║ ║╠╣ ║╣ ║ ╚╦╝║ ║ ║╣
|
||||
// ╩═╝╩╚ ╚═╝╚═╝ ╩ ╚═╝╩═╝╚═╝
|
||||
beforeMount: function() {
|
||||
|
||||
// If the user navigated to this page from an /explore-data page, we'll keep track of the page this user came from so we can redirect them, and we'll strip all query parameters from the URL.
|
||||
if(window.location.search) {
|
||||
// https://caniuse.com/mdn-api_urlsearchparams_get
|
||||
let possibleSearchParamsToFilterBy = new URLSearchParams(window.location.search);
|
||||
let posibleRedirect = possibleSearchParamsToFilterBy.get('targetPlatform');
|
||||
// If the provided platform matches a key in the userFriendlyPlatformNames array, we'll set this.selectedPlatform.
|
||||
if(posibleRedirect && this.redirectSlugsByTargetPlatform[posibleRedirect] !== undefined){
|
||||
this.registrationSlug +=`?targetPlatform=${posibleRedirect}`;
|
||||
this.exploreDataRedirectSlug = `/try-fleet/explore-data/${this.redirectSlugsByTargetPlatform[posibleRedirect]}`;
|
||||
}
|
||||
window.history.replaceState({}, document.title, '/try-fleet/login' );
|
||||
}
|
||||
},
|
||||
mounted: async function() {
|
||||
//…
|
||||
},
|
||||
|
||||
// ╦╔╗╔╔╦╗╔═╗╦═╗╔═╗╔═╗╔╦╗╦╔═╗╔╗╔╔═╗
|
||||
// ║║║║ ║ ║╣ ╠╦╝╠═╣║ ║ ║║ ║║║║╚═╗
|
||||
// ╩╝╚╝ ╩ ╚═╝╩╚═╩ ╩╚═╝ ╩ ╩╚═╝╝╚╝╚═╝
|
||||
methods: {
|
||||
|
||||
submittedLoginForm: async function() {
|
||||
this.syncing = true;
|
||||
if(this.exploreDataRedirectSlug){
|
||||
window.location = this.exploreDataRedirectSlug;
|
||||
} else {
|
||||
window.location = '/try-fleet/explore-data';
|
||||
}
|
||||
},
|
||||
|
||||
clickOpenVideoModal: function() {
|
||||
this.modal = 'video';
|
||||
},
|
||||
|
||||
closeModal: function() {
|
||||
this.modal = '';
|
||||
},
|
||||
}
|
||||
});
|
3
website/assets/styles/importer.less
vendored
3
website/assets/styles/importer.less
vendored
@ -49,8 +49,6 @@
|
||||
@import 'pages/498.less';
|
||||
@import 'pages/customers/new-license.less';
|
||||
@import 'pages/customers/dashboard.less';
|
||||
@import 'pages/try-fleet/sandbox-login.less';
|
||||
@import 'pages/try-fleet/register.less';
|
||||
@import 'pages/try-fleet/sandbox-teleporter.less';
|
||||
@import 'pages/try-fleet/sandbox-expired.less';
|
||||
@import 'pages/query-detail.less';
|
||||
@ -78,6 +76,7 @@
|
||||
@import 'pages/integrations.less';
|
||||
@import 'pages/try-fleet/query-report.less';
|
||||
@import 'pages/try-fleet/explore-data.less';
|
||||
@import 'pages/start.less';
|
||||
|
||||
|
||||
// Imagine = landing pages for Marketing
|
||||
|
@ -7,7 +7,8 @@
|
||||
line-height: 38px;
|
||||
}
|
||||
a {
|
||||
color: @core-vibrant-blue;
|
||||
color: @core-fleet-black-75;
|
||||
text-decoration: underline;
|
||||
}
|
||||
[purpose='customer-login-container'] {
|
||||
max-width: 560px;
|
||||
|
@ -5,7 +5,8 @@
|
||||
line-height: 38px;
|
||||
}
|
||||
a {
|
||||
color: @core-vibrant-blue;
|
||||
color: @core-fleet-black-75;
|
||||
text-decoration: underline;
|
||||
}
|
||||
[purpose='page-heading'] {
|
||||
padding-left: 30px;
|
||||
|
96
website/assets/styles/pages/start.less
vendored
Normal file
96
website/assets/styles/pages/start.less
vendored
Normal file
@ -0,0 +1,96 @@
|
||||
#start {
|
||||
background: linear-gradient(180deg, #E8F1F6 0%, #FFF 16.49%);
|
||||
a {
|
||||
color: @core-fleet-black-75;
|
||||
}
|
||||
h1 {
|
||||
font-size: 32px;
|
||||
font-weight: 800;
|
||||
line-height: 150%;
|
||||
}
|
||||
[purpose='page-container'] {
|
||||
padding-top: 80px;
|
||||
padding-left: 64px;
|
||||
padding-right: 64px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
[purpose='start-cards'] {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin-top: 40px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
[purpose='card'] {
|
||||
width: 252px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-decoration: none;
|
||||
|
||||
padding: 43px 52px;
|
||||
background: #FFF;
|
||||
color: @core-fleet-black-75;
|
||||
border-radius: 12px;
|
||||
border: 1px solid @core-vibrant-blue-15;
|
||||
text-align: center;
|
||||
img {
|
||||
height: 64px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 16px;
|
||||
font-weight: 800;
|
||||
line-height: 120%;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
p {
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
line-height: 150%;
|
||||
white-space: nowrap;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
&:first-of-type {
|
||||
margin-right: 20px;
|
||||
}
|
||||
&:hover {
|
||||
box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.10);
|
||||
}
|
||||
|
||||
}
|
||||
@media (max-width: 991px) {
|
||||
[purpose='page-container'] {
|
||||
padding-top: 60px;
|
||||
padding-left: 40px;
|
||||
padding-right: 40px;
|
||||
}
|
||||
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
[purpose='page-container'] {
|
||||
padding-top: 40px;
|
||||
padding-left: 24px;
|
||||
padding-right: 24px;
|
||||
}
|
||||
|
||||
}
|
||||
@media (max-width: 575px) {
|
||||
[purpose='start-cards'] {
|
||||
flex-direction: column;
|
||||
padding-bottom: 120px;
|
||||
}
|
||||
[purpose='card']:first-of-type {
|
||||
margin-right: unset;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 375px) {
|
||||
h1 {
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
}
|
114
website/assets/styles/pages/try-fleet/register.less
vendored
114
website/assets/styles/pages/try-fleet/register.less
vendored
@ -1,114 +0,0 @@
|
||||
#register {
|
||||
p {
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
color: @core-fleet-black-75;
|
||||
}
|
||||
h2 {
|
||||
font-size: 32px;
|
||||
font-style: normal;
|
||||
font-weight: 800;
|
||||
line-height: 38.4px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
a {
|
||||
color: @core-vibrant-blue;
|
||||
cursor: pointer;
|
||||
}
|
||||
input {
|
||||
padding: 16px;
|
||||
border-radius: 12px;
|
||||
}
|
||||
input:focus-visible {
|
||||
border: 1px solid @core-vibrant-blue;
|
||||
outline: none;
|
||||
}
|
||||
input::placeholder {
|
||||
color: #8B8FA2;
|
||||
}
|
||||
[purpose='legal-text'] {
|
||||
font-size: 12px;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
line-height: 18px;
|
||||
text-align: center;
|
||||
}
|
||||
[purpose='sandbox-mdm-note'] {
|
||||
padding: 16px 24px;
|
||||
background: #F1F0FF;
|
||||
border: 1px solid #B4B2FE;
|
||||
box-shadow: 0px 3px 4px rgba(25, 33, 71, 0.22);
|
||||
border-radius: 8px;
|
||||
margin-bottom: 24px;
|
||||
p {
|
||||
line-height: 17px;
|
||||
font-weight: 700;
|
||||
color: #515774;
|
||||
}
|
||||
a {
|
||||
font-weight: 400;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
[purpose='sandbox-image'] {
|
||||
width: 300px;
|
||||
margin-right: 65px;
|
||||
}
|
||||
[purpose='error-message'] {
|
||||
font-size: 16px;
|
||||
}
|
||||
[parasails-component='cloud-error'] {
|
||||
padding: 16px 10px 16px 16px;
|
||||
}
|
||||
[parasails-component='ajax-button'] {
|
||||
border-radius: 12px;
|
||||
font-size: 16px;
|
||||
line-height: 18px;
|
||||
padding-top: 17.5px;
|
||||
padding-bottom: 17.5px;
|
||||
}
|
||||
[parasails-component='modal'] {
|
||||
[purpose='modal-content'] {
|
||||
margin-top: 0px;
|
||||
max-width: 100vw;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
background-color: #192147;
|
||||
border: 0;
|
||||
padding: 120px;
|
||||
box-shadow: none;
|
||||
overflow: hidden;
|
||||
[purpose='modal-close-button'] {
|
||||
margin-top: 40px;
|
||||
margin-right: 40px;
|
||||
color: #FFF;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
[purpose='modal-dialog'] {
|
||||
max-width: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
[purpose='embedded-content'] {
|
||||
position: relative;
|
||||
padding-bottom: 54.5%;
|
||||
padding-top: 25px;
|
||||
width: 100%;
|
||||
iframe {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
padding-top: 0px;
|
||||
[purpose='sandbox-image'] {
|
||||
margin-right: 0px;
|
||||
margin-bottom: 16px;
|
||||
width: 250px;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,97 +0,0 @@
|
||||
#sandbox-login {
|
||||
p {
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
color: @core-fleet-black-75;
|
||||
}
|
||||
h2 {
|
||||
font-size: 32px;
|
||||
font-style: normal;
|
||||
font-weight: 800;
|
||||
line-height: 38.4px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
a {
|
||||
color: @core-vibrant-blue;
|
||||
cursor: pointer;
|
||||
}
|
||||
input {
|
||||
padding: 16px;
|
||||
border-radius: 12px;
|
||||
}
|
||||
input:focus-visible {
|
||||
border: 1px solid @core-vibrant-blue;
|
||||
outline: none;
|
||||
}
|
||||
input::placeholder {
|
||||
color: #8B8FA2;
|
||||
}
|
||||
[purpose='legal-text'] {
|
||||
font-size: 12px;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
line-height: 18px;
|
||||
text-align: center;
|
||||
}
|
||||
[purpose='sandbox-image'] {
|
||||
width: 300px;
|
||||
margin-right: 65px;
|
||||
}
|
||||
[purpose='error-message'] {
|
||||
font-size: 14px;
|
||||
}
|
||||
[parasails-component='cloud-error'] {
|
||||
padding: 16px 10px 16px 16px;
|
||||
}
|
||||
[parasails-component='ajax-button'] {
|
||||
border-radius: 12px;
|
||||
font-size: 16px;
|
||||
line-height: 18px;
|
||||
padding-top: 17.5px;
|
||||
padding-bottom: 17.5px;
|
||||
}
|
||||
[parasails-component='modal'] {
|
||||
[purpose='modal-content'] {
|
||||
margin-top: 0px;
|
||||
max-width: 100vw;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
background-color: #192147;
|
||||
border: 0;
|
||||
padding: 120px;
|
||||
box-shadow: none;
|
||||
overflow: hidden;
|
||||
[purpose='modal-close-button'] {
|
||||
margin-top: 40px;
|
||||
margin-right: 40px;
|
||||
color: #FFF;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
[purpose='modal-dialog'] {
|
||||
max-width: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
[purpose='embedded-content'] {
|
||||
position: relative;
|
||||
padding-bottom: 54.5%;
|
||||
padding-top: 25px;
|
||||
width: 100%;
|
||||
iframe {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
padding-top: 0px;
|
||||
[purpose='sandbox-image'] {
|
||||
margin-right: 0px;
|
||||
margin-bottom: 16px;
|
||||
width: 250px;
|
||||
}
|
||||
}
|
||||
}
|
3
website/config/policies.js
vendored
3
website/config/policies.js
vendored
@ -23,7 +23,6 @@ module.exports.policies = {
|
||||
'view-homepage-or-redirect': true,
|
||||
'view-faq': true,
|
||||
'view-contact': true,
|
||||
'view-fleetctl-preview': true,// Redirects not-logged-in users to /try-fleet/login
|
||||
'view-pricing': true,
|
||||
'legal/view-terms': true,
|
||||
'legal/view-privacy': true,
|
||||
@ -38,8 +37,6 @@ module.exports.policies = {
|
||||
'deliver-demo-signup': true,
|
||||
'articles/*': true,
|
||||
'reports/*': true,
|
||||
'try-fleet/view-register': true,
|
||||
'try-fleet/view-sandbox-login': true,
|
||||
'try-fleet/view-sandbox-teleporter-or-redirect-because-expired-or-waitlist': true,
|
||||
'create-or-update-one-newsletter-subscription': true,
|
||||
'unsubscribe-from-all-newsletters': true,
|
||||
|
62
website/config/routes.js
vendored
62
website/config/routes.js
vendored
@ -29,9 +29,11 @@ module.exports.routes = {
|
||||
}
|
||||
},
|
||||
|
||||
'GET /try-fleet/fleetctl-preview': {
|
||||
'GET /try-fleet': {
|
||||
action: 'view-fleetctl-preview',
|
||||
locals: {
|
||||
hideHeaderLinks: true,
|
||||
hideFooterLinks: true,
|
||||
pageTitleForMeta: 'fleetctl preview | Fleet',
|
||||
pageDescriptionForMeta: 'Learn about getting started with Fleet using fleetctl.'
|
||||
}
|
||||
@ -104,7 +106,7 @@ module.exports.routes = {
|
||||
pageDescriptionForMeta: 'Learn what data osquery can see.',
|
||||
}
|
||||
},
|
||||
'GET /customers/new-license': {
|
||||
'GET /new-license': {
|
||||
action: 'customers/view-new-license',
|
||||
locals: {
|
||||
hideHeaderLinks: true,
|
||||
@ -113,22 +115,22 @@ module.exports.routes = {
|
||||
pageDescriptionForMeta: 'Generate your quote and start using Fleet Premium today.',
|
||||
}
|
||||
},
|
||||
'GET /customers/register': {
|
||||
'GET /register': {
|
||||
action: 'entrance/view-signup',
|
||||
locals: {
|
||||
hideHeaderLinks: true,
|
||||
hideFooterLinks: true,
|
||||
pageTitleForMeta: 'Sign up | Fleet',
|
||||
pageDescriptionForMeta: 'Sign up for a Fleet Premium license.',
|
||||
pageDescriptionForMeta: 'Sign up for a Fleet account.',
|
||||
}
|
||||
},
|
||||
'GET /customers/login': {
|
||||
'GET /login': {
|
||||
action: 'entrance/view-login',
|
||||
locals: {
|
||||
hideHeaderLinks: true,
|
||||
hideFooterLinks: true,
|
||||
pageTitleForMeta: 'Log in | Fleet',
|
||||
pageDescriptionForMeta: 'Log in to the Fleet customer portal.',
|
||||
pageDescriptionForMeta: 'Log in to Fleet.',
|
||||
}
|
||||
},
|
||||
'GET /customers/dashboard': {
|
||||
@ -167,24 +169,6 @@ module.exports.routes = {
|
||||
}
|
||||
},
|
||||
|
||||
'GET /try-fleet/register': {
|
||||
action: 'try-fleet/view-register',
|
||||
locals: {
|
||||
hideFooterLinks: true,
|
||||
pageTitleForMeta: 'Try Fleet | Fleet',
|
||||
pageDescriptionForMeta: 'Get up and running in minutes to try out Fleet.',
|
||||
}
|
||||
},
|
||||
|
||||
'GET /try-fleet/login': {
|
||||
action: 'try-fleet/view-sandbox-login',
|
||||
locals: {
|
||||
hideFooterLinks: true,
|
||||
pageTitleForMeta: 'Sign in | Fleet',
|
||||
pageDescriptionForMeta: 'Log in to Fleet.',
|
||||
}
|
||||
},
|
||||
|
||||
'GET /try-fleet/explore-data': {
|
||||
action: 'try-fleet/view-explore-data',
|
||||
locals: {
|
||||
@ -301,6 +285,16 @@ module.exports.routes = {
|
||||
}
|
||||
},
|
||||
|
||||
'GET /start': {
|
||||
action: 'view-start',
|
||||
locals: {
|
||||
hideHeaderLinks: true,
|
||||
hideFooterLinks: true,
|
||||
pageTitleForMeta: 'Start | Fleet',
|
||||
pageDescriptionForMeta: 'Get Started with Fleet. Spin up a local demo or get your premium license key.',
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
// ╦╔╦╗╔═╗╔═╗╦╔╗╔╔═╗ ┌─┬ ┌─┐┌┐┌┌┬┐┬┌┐┌┌─┐ ┌─┐┌─┐┌─┐┌─┐┌─┐─┐
|
||||
// ║║║║╠═╣║ ╦║║║║║╣ │ │ ├─┤│││ │││││││ ┬ ├─┘├─┤│ ┬├┤ └─┐ │
|
||||
@ -353,7 +347,6 @@ module.exports.routes = {
|
||||
// ```
|
||||
// 'GET /docs/using-fleet/learn-how-to-use-fleet': '/docs/using-fleet/fleet-for-beginners',
|
||||
// ```
|
||||
'GET /try-fleet': '/get-started',
|
||||
'GET /try': '/get-started',
|
||||
'GET /docs/deploying/fleet-public-load-testing': '/docs/deploying/load-testing',
|
||||
'GET /handbook/customer-experience': '/handbook/customers',
|
||||
@ -469,7 +462,11 @@ module.exports.routes = {
|
||||
'GET /docs/using-fleet/mdm-macos-updates': '/docs/using-fleet/mdm-os-updates',
|
||||
'GET /example-windows-profile': 'https://github.com/fleetdm/fleet-gitops/blob/860dcf2609e2b25a6d6becf8006a7118a19cd615/lib/windows-screenlock.xml',// « resuable link for OS settings doc page
|
||||
'GET /docs/using-fleet/mdm-custom-macos-settings': '/docs/using-fleet/mdm-custom-os-settings',
|
||||
|
||||
'GET /customers/login': '/login',
|
||||
'GET /customers/register': '/register',
|
||||
'GET /try-fleet/login': '/login',
|
||||
'GET /try-fleet/register': '/register',
|
||||
'GET /customers/new-license': '/new-license',
|
||||
// ╔╦╗╦╔═╗╔═╗ ╦═╗╔═╗╔╦╗╦╦═╗╔═╗╔═╗╔╦╗╔═╗ ┬ ╔╦╗╔═╗╦ ╦╔╗╔╦ ╔═╗╔═╗╔╦╗╔═╗
|
||||
// ║║║║╚═╗║ ╠╦╝║╣ ║║║╠╦╝║╣ ║ ║ ╚═╗ ┌┼─ ║║║ ║║║║║║║║ ║ ║╠═╣ ║║╚═╗
|
||||
// ╩ ╩╩╚═╝╚═╝ ╩╚═╚═╝═╩╝╩╩╚═╚═╝╚═╝ ╩ ╚═╝ └┘ ═╩╝╚═╝╚╩╝╝╚╝╩═╝╚═╝╩ ╩═╩╝╚═╝
|
||||
@ -490,22 +487,21 @@ module.exports.routes = {
|
||||
'GET /legal': '/legal/terms',
|
||||
'GET /terms': '/legal/terms',
|
||||
'GET /handbook/security/github': '/handbook/security#git-hub-security',
|
||||
'GET /login': '/customers/login',
|
||||
'GET /slack': 'https://join.slack.com/t/osquery/shared_invite/zt-1wkw5fzba-lWEyke60sjV6C4cdinFA1w',// Note: This redirect is used on error pages and email templates in the Fleet UI.
|
||||
'GET /docs/using-fleet/updating-fleet': '/docs/deploying/upgrading-fleet',
|
||||
'GET /blog': '/articles',
|
||||
'GET /brand': '/logos',
|
||||
'GET /get-started': '/try-fleet/explore-data',
|
||||
'GET /get-started': '/try-fleet',
|
||||
'GET /g': (req,res)=> { let originalQueryStringWithAmp = req.url.match(/\?(.+)$/) ? '&'+req.url.match(/\?(.+)$/)[1] : ''; return res.redirect(301, sails.config.custom.baseUrl+'/?meet-fleet'+originalQueryStringWithAmp); },
|
||||
'GET /test-fleet-sandbox': '/try-fleet/register',
|
||||
'GET /test-fleet-sandbox': '/register',
|
||||
'GET /unsubscribe': (req,res)=> { let originalQueryString = req.url.match(/\?(.+)$/) ? req.url.match(/\?(.+)$/)[1] : ''; return res.redirect(301, sails.config.custom.baseUrl+'/api/v1/unsubscribe-from-all-newsletters?'+originalQueryString);},
|
||||
'GET /tables': '/tables/account_policy_data',
|
||||
'GET /imagine/launch-party': 'https://www.eventbrite.com/e/601763519887',
|
||||
'GET /blackhat2023': 'https://github.com/fleetdm/fleet/tree/main/tools/blackhat-mdm', // Assets from @marcosd4h & @zwass Black Hat 2023 talk
|
||||
'GET /fleetctl-preview': '/try-fleet/fleetctl-preview',
|
||||
'GET /try-fleet/sandbox-expired': '/try-fleet/fleetctl-preview',
|
||||
'GET /try-fleet/sandbox': '/try-fleet/fleetctl-preview',
|
||||
'GET /try-fleet/waitlist': '/try-fleet/fleetctl-preview',
|
||||
'GET /fleetctl-preview': '/try-fleet',
|
||||
'GET /try-fleet/sandbox-expired': '/try-fleet',
|
||||
'GET /try-fleet/sandbox': '/try-fleet',
|
||||
'GET /try-fleet/waitlist': '/try-fleet',
|
||||
'GET /mdm': '/device-management',// « alias for radio ad
|
||||
'GET /endpoint-operations': '/endpoint-ops',// « just in case we type it the wrong way
|
||||
|
||||
|
6
website/generators/landing-page/index.js
vendored
6
website/generators/landing-page/index.js
vendored
@ -220,7 +220,7 @@ module.exports = {
|
||||
<p>Vitae architecto reiciendis in temporibus consequatur doloremque reprehenderit perferendis? Eaque quod voluptates earum corporis, quo labore reprehenderit libero sint.</p>
|
||||
<div purpose="button-row" class="d-flex flex-sm-row flex-column justify-content-center align-items-center">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -275,7 +275,7 @@ module.exports = {
|
||||
|
||||
<div purpose="button-row" style="margin-top: 60px;" class="d-flex flex-sm-row flex-column justify-content-center align-items-center mx-auto">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -297,7 +297,7 @@ module.exports = {
|
||||
<h1>Lighter than air</h1>
|
||||
<div purpose="button-row" style="margin-top: 60px;" class="d-flex flex-sm-row flex-column justify-content-center align-items-center mx-auto">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
45
website/views/layouts/layout.ejs
vendored
45
website/views/layouts/layout.ejs
vendored
@ -372,17 +372,43 @@
|
||||
</div>
|
||||
<% } else { %>
|
||||
<div purpose="reduced-nav-footer" data-nosnippet>
|
||||
<div style="font-size: 11px; line-height: 18px;" class="d-sm-flex d-block flex-sm-row align-items-center justify-content-center">
|
||||
<div class="d-flex flex-row align-items-center pb-2 pb-sm-0">
|
||||
<img alt="Creative Commons Licence CC BY-SA 4.0" src="/images/logo-creative-commons-greyscale-80x16@2x.png" style="width: 80px; height: 15px; margin-right: 8px;"/>
|
||||
<a purpose="footer-trust-link" class="d-flex flex-row align-items-center" href="/trust" target="_blank"><img alt="a small checkmark" style="width: 9px; height: auto; margin-right: 6px;" src="/images/icon-checkmark-fleet-black-75-9x7@2x.png">SOC2 Type 2 certified</a>
|
||||
<div purpose="legal-and-social-nav" class="d-flex flex-md-row flex-column align-items-lg-center justify-content-md-between">
|
||||
|
||||
<div purpose="legal-section" class="d-flex flex-column justify-content-start align-items-start flex-sm-row pr-sm-0">
|
||||
<div purpose="license-information" class="d-flex flex-row align-items-center">
|
||||
<img purpose="creative-commons-license" alt="Creative Commons Licence CC BY-SA 4.0" src="/images/logo-creative-commons-greyscale-80x16@2x.png" />
|
||||
<a purpose="footer-trust-link" class="d-flex flex-row align-items-center" href="/trust" target="_blank"><img alt="a small checkmark" src="/images/icon-checkmark-fleet-black-75-9x7@2x.png">SOC2 Type 2 certified</a>
|
||||
</div>
|
||||
<div purpose="copyright-and-legal-link" class="text-sm-nowrap d-block d-sm-inline">
|
||||
© <%= (new Date()).getFullYear() %> <a href="/handbook/company"><%= corporationDisplayName %></a>
|
||||
<span purpose="legal-links">
|
||||
<a href="/legal/privacy">Privacy</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex">
|
||||
© <%= (new Date()).getFullYear() %> <%= corporationDisplayName %>
|
||||
<a style="margin-left: 12px; font-size: 12px; text-underline-offset: 2.5px; text-decoration: underline; color: #515774" href="/legal/privacy">Privacy</a>
|
||||
|
||||
<div purpose="footer-socials" class="flex-row d-inline-flex font-weight-bold order-first order-md-last justify-content-start justify-content-lg-end pl-lg-3">
|
||||
<a target="_blank" href="/slack" class="mr-4">
|
||||
<img alt="Slack logo" src="/images/logo-slack-dark-20x20@2x.png"/>
|
||||
</a>
|
||||
<a target="_blank" href="https://github.com/fleetdm/fleet" class="mr-4">
|
||||
<img alt="GitHub logo" src="/images/logo-github-dark-24x24@2x.png" />
|
||||
</a>
|
||||
<a target="_blank" href="https://www.linkedin.com/company/fleetdm" class="mr-4">
|
||||
<img alt="LinkedIn logo" src="/images/logo-linkedin-24x24@2x.png" />
|
||||
</a>
|
||||
<a target="_blank" href="https://twitter.com/fleetctl" class="mr-4">
|
||||
<img alt="X (Twitter) logo" src="/images/logo-x-24x24@2x.png"/>
|
||||
</a>
|
||||
<a target="_blank" href="https://www.youtube.com/channel/UCZyoqZ4exJvoibmTKJrQ-dQ" class="mr-4">
|
||||
<img alt="Youtube logo" src="/images/logo-youtube-29x20@2x.png" />
|
||||
</a>
|
||||
<a target="_blank" href="https://mastodon.social/@Fleet@discuss.systems" class="mr-4">
|
||||
<img alt="Mastadon logo" src="/images/logo-mastadon-24x23@2x.png"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
</div>
|
||||
|
||||
@ -504,13 +530,12 @@
|
||||
<script src="/js/pages/query-detail.page.js"></script>
|
||||
<script src="/js/pages/query-library.page.js"></script>
|
||||
<script src="/js/pages/reports/state-of-device-management.page.js"></script>
|
||||
<script src="/js/pages/start.page.js"></script>
|
||||
<script src="/js/pages/support.page.js"></script>
|
||||
<script src="/js/pages/transparency.page.js"></script>
|
||||
<script src="/js/pages/try-fleet/explore-data.page.js"></script>
|
||||
<script src="/js/pages/try-fleet/query-report.page.js"></script>
|
||||
<script src="/js/pages/try-fleet/register.page.js"></script>
|
||||
<script src="/js/pages/try-fleet/sandbox-expired.page.js"></script>
|
||||
<script src="/js/pages/try-fleet/sandbox-login.page.js"></script>
|
||||
<script src="/js/pages/try-fleet/sandbox-teleporter.page.js"></script>
|
||||
<script src="/js/pages/try-fleet/waitlist.page.js"></script>
|
||||
<script src="/js/pages/upgrade.page.js"></script>
|
||||
|
@ -26,7 +26,7 @@
|
||||
<a href="/contact" class="d-flex btn btn-primary justify-content-center align-items-center" purpose="next-steps-button">
|
||||
Talk to us
|
||||
</a>
|
||||
<a href="/pricing" purpose="animated-arrow-button-red">
|
||||
<a href="/register" purpose="animated-arrow-button-red">
|
||||
Try it out
|
||||
</a>
|
||||
</div>
|
||||
|
4
website/views/pages/device-management.ejs
vendored
4
website/views/pages/device-management.ejs
vendored
@ -19,7 +19,7 @@
|
||||
<p>You can use Fleet’s API to customize every aspect of conditional access – even the stuff your CISO hasn’t thought of yet.</p>
|
||||
<div purpose="button-row" class="d-flex flex-md-row flex-column justify-content-start align-items-center">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -207,7 +207,7 @@
|
||||
<h2>Manage everything in one place</h2>
|
||||
<div purpose="button-row" style="margin-top: 32px;" class="d-flex flex-md-row flex-column justify-content-center align-items-center mx-auto">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
4
website/views/pages/endpoint-ops.ejs
vendored
4
website/views/pages/endpoint-ops.ejs
vendored
@ -19,7 +19,7 @@
|
||||
<p>You don’t need to be an osquery expert to get the answers you need from your devices, Fleet does some of that for you.</p>
|
||||
<div purpose="button-row" class="d-flex flex-md-row flex-column justify-content-start align-items-center">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -195,7 +195,7 @@
|
||||
<h3>A consistent interface</h3>
|
||||
<div purpose="button-row" style="margin-top: 32px;" class="d-flex flex-md-row flex-column justify-content-center align-items-center mx-auto">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
2
website/views/pages/entrance/login.ejs
vendored
2
website/views/pages/entrance/login.ejs
vendored
@ -12,7 +12,7 @@
|
||||
<ajax-form class="customers-login" action="login" :syncing.sync="syncing" :cloud-error.sync="cloudError" :form-data="formData" :form-rules="formRules" :form-errors.sync="formErrors" @submitted="submittedForm()">
|
||||
<div class="form-group">
|
||||
<label for="email">Email</label>
|
||||
<span style="float: right" class="text-right small" v-if="showCustomerLogin"><a href="/customers/register">Create an account</a></span>
|
||||
<span style="float: right" class="text-right small" v-if="showCustomerLogin"><a :href="registrationSlug">Create an account</a></span>
|
||||
<input type="email" class="form-control" :class="[formErrors.emailAddress ? 'is-invalid' : '']" v-model.trim="formData.emailAddress" autocomplete="email" focus-first>
|
||||
<div class="invalid-feedback" v-if="formErrors.emailAddress">Please provide a valid email address.</div>
|
||||
</div>
|
||||
|
6
website/views/pages/entrance/signup.ejs
vendored
6
website/views/pages/entrance/signup.ejs
vendored
@ -1,14 +1,14 @@
|
||||
<div id="signup" v-cloak>
|
||||
<div style="max-width: 560px;" class="container-fluid pb-5 px-lg-0 px-3">
|
||||
<div purpose="page-heading">
|
||||
<h1 class="text-center">Welcome to Premium</h1>
|
||||
<p class="text-center pb-2">We just need a few details in order to get you a self-hosted Fleet Premium license key.</p>
|
||||
<h1 class="text-center">Welcome to Fleet</h1>
|
||||
<p class="text-center pb-2">We just need a few details in order to get started.</p>
|
||||
</div>
|
||||
<div purpose="customer-portal-form" class="card card-body">
|
||||
<ajax-form action="signup" class="self-service-register" :syncing.sync="syncing" :cloud-error.sync="cloudError" :form-errors.sync="formErrors" :form-data="formData" :form-rules="formRules" @submitted="submittedSignUpForm()">
|
||||
<div class="form-group">
|
||||
<label for="email-address">Email</label>
|
||||
<span style="float: right" class="text-right small"><a href="/customers/login">I have an account</a></span>
|
||||
<span style="float: right" class="text-right small"><a :href="loginSlug">I have an account</a></span>
|
||||
<input class="form-control" id="email-address" :class="[formErrors.emailAddress ? 'is-invalid' : '']" v-model.trim="formData.emailAddress" @input="typeClearOneFormError('emailAddress')">
|
||||
<div class="invalid-feedback" v-if="formErrors.emailAddress" focus-first>This doesn’t appear to be a valid email address</div>
|
||||
</div>
|
||||
|
2
website/views/pages/fleetctl-preview.ejs
vendored
2
website/views/pages/fleetctl-preview.ejs
vendored
@ -102,7 +102,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>Next steps</h2>
|
||||
<h2 class="pt-0">Next steps</h2>
|
||||
<div purpose="next-steps" class="d-flex flex-sm-row flex-column align-items-center">
|
||||
<a purpose="docs-button" href="/docs" class="btn btn-primary">
|
||||
Read the docs
|
||||
|
4
website/views/pages/homepage.ejs
vendored
4
website/views/pages/homepage.ejs
vendored
@ -11,7 +11,7 @@
|
||||
<p>Replace the sprawl with open-source code that works the way you want.</p>
|
||||
<div purpose="button-row" class="d-flex flex-sm-row flex-column justify-content-center align-items-center">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -321,7 +321,7 @@
|
||||
<h1><%- partial('../partials/primary-tagline.partial.ejs') %></h1>
|
||||
<div purpose="button-row" style="margin-top: 60px;" class="d-flex flex-sm-row flex-column justify-content-center align-items-center mx-auto">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -9,7 +9,7 @@
|
||||
<p>Automate security workflows in a single application by creating or installing policies to identify which devices comply with your security guidelines.</p>
|
||||
<div purpose="button-row" class="d-flex flex-sm-row flex-column justify-content-center align-items-center">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -64,7 +64,7 @@
|
||||
|
||||
<div purpose="button-row" style="margin-top: 60px;" class="d-flex flex-sm-row flex-column justify-content-center align-items-center mx-auto">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -86,7 +86,7 @@
|
||||
<h1>Think for yourself</h1>
|
||||
<div purpose="button-row" style="margin-top: 60px;" class="d-flex flex-sm-row flex-column justify-content-center align-items-center mx-auto">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -9,7 +9,7 @@
|
||||
<p>Bringh-your-own MDM. Enjoy enterprise-ready open-source MDM and leverage the best of DevOps and GitOps inside a full-featured Macbook MDM.</p>
|
||||
<div purpose="button-row" class="d-flex flex-sm-row flex-column justify-content-center align-items-center">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -38,7 +38,7 @@
|
||||
|
||||
<div purpose="button-row" style="margin-top: 60px;" class="d-flex flex-sm-row flex-column justify-content-center align-items-center mx-auto">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -60,7 +60,7 @@
|
||||
<h1>Lighter than air</h1>
|
||||
<div purpose="button-row" style="margin-top: 60px;" class="d-flex flex-sm-row flex-column justify-content-center align-items-center mx-auto">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -9,7 +9,7 @@
|
||||
<p>Fleet, an open-source security platform, empowers you to take control of vulnerability management for your organization. Designed with modern DevOps practices in mind, Fleet offers superior visibility, rapid response capabilities, and seamless integration with your existing workflows.</p>
|
||||
<div purpose="button-row" class="d-flex flex-sm-row flex-column justify-content-center align-items-center">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -79,7 +79,7 @@
|
||||
|
||||
<div purpose="button-row" style="margin-top: 60px;" class="d-flex flex-sm-row flex-column justify-content-center align-items-center mx-auto">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -101,7 +101,7 @@
|
||||
<h1>Lighter than air</h1>
|
||||
<div purpose="button-row" style="margin-top: 60px;" class="d-flex flex-sm-row flex-column justify-content-center align-items-center mx-auto">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -9,7 +9,7 @@
|
||||
<p>Fleet, the leading open-source, flexible device management solution, offers unprecedented visibility into your IT infrastructure, making it the ideal tool to discover and manage unused software licenses. This capability is essential to unlocking more IT budget, enhancing security, and ultimately improving the employee experience.</p>
|
||||
<div purpose="button-row" class="d-flex flex-sm-row flex-column justify-content-center align-items-center">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -65,7 +65,7 @@
|
||||
|
||||
<div purpose="button-row" style="margin-top: 60px;" class="d-flex flex-sm-row flex-column justify-content-center align-items-center mx-auto">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@ -332,7 +332,7 @@
|
||||
</div>
|
||||
<div purpose="cta-btns" class="mx-auto d-flex flex-sm-row flex-column justify-content-center">
|
||||
<a purpose="get-started-btn" class="d-sm-flex align-items-center justify-content-center btn btn-primary mx-auto mr-sm-4 ml-sm-0" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-btn-red" style="max-width: 220px;" class="btn btn-lg btn-white mr-2 pl-0 mx-auto mx-sm-0 mt-2 mt-sm-0" href="/pricing">Try it out
|
||||
<a purpose="animated-arrow-btn-red" style="max-width: 220px;" class="btn btn-lg btn-white mr-2 pl-0 mx-auto mx-sm-0 mt-2 mt-sm-0" href="/register">Try it out
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@ -544,7 +544,7 @@
|
||||
</div>
|
||||
<div purpose="cta-btns" class="mx-auto d-flex flex-sm-row flex-column justify-content-center">
|
||||
<a purpose="get-started-btn" class="d-sm-flex align-items-center justify-content-center btn btn-primary mx-auto mr-sm-4 ml-sm-0" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-btn-red" style="max-width: 220px;" class="btn btn-lg mr-2 pl-0 mx-auto mx-sm-0 mt-2 mt-sm-0" href="/pricing">Try it out
|
||||
<a purpose="animated-arrow-btn-red" style="max-width: 220px;" class="btn btn-lg mr-2 pl-0 mx-auto mx-sm-0 mt-2 mt-sm-0" href="/register">Try it out
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
21
website/views/pages/start.ejs
vendored
Normal file
21
website/views/pages/start.ejs
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
<div id="start" v-cloak>
|
||||
<div class="d-flex container" purpose="page-container">
|
||||
<div class="text-center mx-auto">
|
||||
<h1>Welcome to Fleet</h1>
|
||||
<p class="mb-0">Spin up a local demo or get your Fleet Premium license key.</p>
|
||||
</div>
|
||||
<div purpose="start-cards">
|
||||
<a purpose="card" href="/try-fleet">
|
||||
<img alt="Run a local demo of Fleet" src="/images/start-try-fleet-64x64@2x.png">
|
||||
<h2>Try Fleet</h2>
|
||||
<p>Run a local demo of Fleet</p>
|
||||
</a>
|
||||
<a purpose="card" href="/new-license">
|
||||
<img alt="Purchase a Fleet Premium license" src="/images/start-purchase-license-64x64@2x.png">
|
||||
<h2>Start</h2>
|
||||
<p>Purchase a Fleet Premium license</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<%- /* Expose server-rendered data as window.SAILS_LOCALS :: */ exposeLocalsToBrowser() %>
|
65
website/views/pages/try-fleet/register.ejs
vendored
65
website/views/pages/try-fleet/register.ejs
vendored
@ -1,65 +0,0 @@
|
||||
<div id="register" v-cloak>
|
||||
<div style="max-width: 800px; padding-top: 80px; padding-bottom: 80px;" class="container d-flex flex-md-row flex-column justify-content-center align-items-center mx-auto px-4 px-md-3">
|
||||
<div style="max-width: 400px;" class="flex-column d-flex">
|
||||
<h2>Explore real data</h2>
|
||||
<p class="mb-4">
|
||||
See live data collected from a real device enrolled in Fleet.
|
||||
</p>
|
||||
<div>
|
||||
<ajax-form :handle-submitting="handleSubmittingRegisterForm" class="sandbox-register" :syncing.sync="syncing" :cloud-error.sync="cloudError" :form-errors.sync="formErrors" :form-data="formData" :form-rules="formRules" @submitted="submittedRegisterForm()">
|
||||
<div class="form-group mb-3">
|
||||
<div class="d-flex flex-row">
|
||||
<div class="d-flex flex-column mr-2">
|
||||
<input id="firstName" type="text" class="form-control d-flex" :class="[formErrors.firstName ? 'is-invalid' : '']" v-model.trim="formData.firstName" placeholder="First name">
|
||||
<div class="invalid-feedback mt-2" v-if="formErrors.firstName === 'required'">Please enter your first name.</div>
|
||||
</div>
|
||||
<div class="d-flex flex-column">
|
||||
<input id="lastName" type="text" class="form-control d-flex" :class="[formErrors.lastName ? 'is-invalid' : '']" v-model.trim="formData.lastName" placeholder="Last name">
|
||||
<div class="invalid-feedback mt-2" v-if="formErrors.lastName === 'required'">Please enter your last name.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<input id="organization" type="text" class="form-control d-flex w-100" :class="[formErrors.organization ? 'is-invalid' : '']" v-model.trim="formData.organization" placeholder="Company">
|
||||
<div class="invalid-feedback mt-2" v-if="formErrors.organization === 'required'">Please enter the name of your organization.</div>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<input id="emailAddress" type="text" class="form-control d-flex w-100" :class="[formErrors.emailAddress ? 'is-invalid' : '']" v-model.trim="formData.emailAddress" placeholder="Email address">
|
||||
<div class="invalid-feedback mt-2">This doesn’t appear to be a valid email address</div>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<input id="password" type="password" class="form-control d-flex w-100" :class="[formErrors.password ? 'is-invalid' : '']" v-model.trim="formData.password" placeholder="Choose a password">
|
||||
<div class="invalid-feedback mt-2" v-if="formErrors.password === 'minLength'">Password too short.</div>
|
||||
<div class="invalid-feedback mt-2" v-if="formErrors.password === 'required'">Please enter a password.</div>
|
||||
</div>
|
||||
<ajax-button style="height: 53px;" purpose="submit-button" spinner="true" type="submit" :syncing="syncing" class="btn btn-block btn-lg btn-primary" v-if="!cloudError">Sign up</ajax-button>
|
||||
<div class="d-flex flex-column" v-if="cloudError === 'emailAlreadyInUse'">
|
||||
<cloud-error class="my-0">
|
||||
<p purpose="error-message">This email is already linked to a Fleet account.</p>
|
||||
</cloud-error>
|
||||
<a class="mx-auto font-weight-bold d-flex align-items-center py-3" href="/try-fleet/login">Sign in with existing account <img alt="A blue arrow pointing right" style="height: 10px; margin-left: 6px;" src="/images/arrow-right-blue-18x10@2x.png"></a>
|
||||
<ajax-button style="height: 53px;" purpose="submit-button" spinner="true" type="submit" :syncing="syncing" class="btn btn-block btn-lg btn-primary">Try again</ajax-button>
|
||||
</div>
|
||||
<cloud-error purpose="cloud-error" v-else-if="cloudError === 'requestToProvisionerTimedOut'">
|
||||
<p purpose="error-message">Fleet Sandbox is experiencing unusually high activity. Please refresh the page in 13 seconds and try signing up again.</p>
|
||||
</cloud-error>
|
||||
<cloud-error purpose="cloud-error" v-else-if="cloudError"></cloud-error>
|
||||
</ajax-form>
|
||||
</div>
|
||||
<div class="d-flex flex-column" v-if="!cloudError">
|
||||
<a class="mx-auto d-flex py-3" :href="loginSlug">I have an account</a>
|
||||
<p purpose="legal-text" class="pt-4">By signing in you agree to the <a href="https://docs.google.com/document/d/1OM6YDVIs7bP8wg6iA3VG13X086r64tWDqBSRudG4a0Y" target="_blank">terms of service</a> and <a href="https://docs.google.com/document/d/17i_g1aGpnuSmlqj35-yHJiwj7WRrLdC_Typc1Yb7aBE" target="_blank">privacy policy</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<modal v-if="modal === 'video'" @close="closeModal()" v-cloak>
|
||||
<div style="height: 100%;" class="d-flex flex-column align-items-center justify-content-center">
|
||||
<div purpose="embedded-content" class="container-lg">
|
||||
<iframe id="ytplayer" type="text/html"
|
||||
src="https://www.youtube.com/embed/iQtdpZYxiqI?autoplay=1&controls=1&modestbranding=1&playsinline=1&color=white"
|
||||
frameborder="0" allowfullscreen autoplay></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</modal>
|
||||
</div>
|
||||
<%- /* Expose server-rendered data as window.SAILS_LOCALS :: */ exposeLocalsToBrowser() %>
|
47
website/views/pages/try-fleet/sandbox-login.ejs
vendored
47
website/views/pages/try-fleet/sandbox-login.ejs
vendored
@ -1,47 +0,0 @@
|
||||
<div id="sandbox-login" v-cloak>
|
||||
<div style="max-width: 800px; padding-top: 80px; padding-bottom: 80px;" class="container d-flex flex-md-row flex-column justify-content-center align-items-center mx-auto px-4 px-md-3">
|
||||
<div style="max-width: 400px;" class="flex-column d-flex">
|
||||
<h2>Explore real data</h2>
|
||||
<p class="mb-4">
|
||||
See live data collected from a real device enrolled in Fleet.
|
||||
</p>
|
||||
<div>
|
||||
<ajax-form action="login" class="sandbox-login" :syncing.sync="syncing" :cloud-error.sync="cloudError" :form-errors.sync="formErrors" :form-data="formData" :form-rules="formRules" @submitted="submittedLoginForm()" >
|
||||
<div class="form-group mb-3">
|
||||
<input id="emailAddress" type="text" class="form-control d-flex w-100" :class="[formErrors.emailAddress ? 'is-invalid' : '']" v-model.trim="formData.emailAddress" placeholder="Email">
|
||||
<div class="invalid-feedback mt-2">This doesn’t appear to be a valid email address</div>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<input id="password" type="password" class="form-control d-flex w-100" :class="[formErrors.password ? 'is-invalid' : '']" v-model.trim="formData.password" placeholder="Password">
|
||||
<div class="invalid-feedback mt-2" v-if="formErrors.password === 'minLength'">Password too short.</div>
|
||||
<div class="invalid-feedback mt-2" v-if="formErrors.password === 'required'">Please enter a password.</div>
|
||||
</div>
|
||||
<cloud-error v-if="cloudError==='badCombo' || cloudError==='noUser'">
|
||||
<p purpose="error-message">Something's not right with your email or password</p>
|
||||
</cloud-error>
|
||||
<cloud-error purpose="cloud-error" v-else-if="cloudError"></cloud-error>
|
||||
<ajax-button style="height: 53px;" purpose="submit-button" spinner="true" type="submit" :syncing="syncing" class="btn btn-block btn-lg btn-primary">Sign in</ajax-button>
|
||||
</ajax-form>
|
||||
</div>
|
||||
<div class="d-flex flex-column">
|
||||
<div class="mx-sm-auto d-flex flex-column flex-sm-row justify-content-start align-items-start justify-content-sm-center py-3">
|
||||
<a href="/customers/forgot-password">Forgot your password?</a>
|
||||
<span class="d-none d-sm-inline"> | </span>
|
||||
<a class="pt-2 pt-sm-0" :href="registrationSlug">Create an account</a>
|
||||
</div>
|
||||
<p purpose="legal-text">By signing in you agree to the <a href="https://docs.google.com/document/d/1OM6YDVIs7bP8wg6iA3VG13X086r64tWDqBSRudG4a0Y" target="_blank">terms of service</a> and <a href="https://docs.google.com/document/d/17i_g1aGpnuSmlqj35-yHJiwj7WRrLdC_Typc1Yb7aBE" target="_blank">privacy policy</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<modal v-if="modal === 'video'" @close="closeModal()" v-cloak>
|
||||
<div style="height: 100%;" class="d-flex flex-column align-items-center justify-content-center">
|
||||
<div purpose="embedded-content" class="container-lg">
|
||||
<iframe id="ytplayer" type="text/html"
|
||||
src="https://www.youtube.com/embed/iQtdpZYxiqI?autoplay=1&controls=1&modestbranding=1&playsinline=1&color=white"
|
||||
frameborder="0" allowfullscreen autoplay></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</modal>
|
||||
</div>
|
||||
<%- /* Expose server-rendered data as window.SAILS_LOCALS :: */ exposeLocalsToBrowser() %>
|
||||
|
@ -19,7 +19,7 @@
|
||||
<p>Use open data and APIs to connect your vulnerability solution with osquery, the agent you might already have deployed.</p>
|
||||
<div purpose="button-row" class="d-flex flex-md-row flex-column justify-content-start align-items-center">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -142,7 +142,7 @@
|
||||
<h2>Build the vulnerability program you actually want</h2>
|
||||
<div purpose="button-row" style="margin-top: 32px;" class="d-flex flex-md-row flex-column justify-content-center align-items-center mx-auto">
|
||||
<a purpose="cta-button" href="/contact">Talk to us</a>
|
||||
<a purpose="animated-arrow-button-red" href="/pricing">Try it out</a>
|
||||
<a purpose="animated-arrow-button-red" href="/register">Try it out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user