From 1675b4ee736b3c312bb659528039814aac1368c2 Mon Sep 17 00:00:00 2001 From: Rachael Shaw Date: Wed, 27 Mar 2024 12:52:05 -0500 Subject: [PATCH 01/64] Update agent options for canary team (#17901) - This is to explore queries for https://github.com/fleetdm/fleet/issues/16899 --- it-and-security/teams/workstations-canary.yml | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/it-and-security/teams/workstations-canary.yml b/it-and-security/teams/workstations-canary.yml index d2c42b0cd7..e5ad3636eb 100644 --- a/it-and-security/teams/workstations-canary.yml +++ b/it-and-security/teams/workstations-canary.yml @@ -9,7 +9,31 @@ team_settings: secrets: - secret: $DOGFOOD_WORKSTATIONS_CANARY_ENROLL_SECRET agent_options: - path: ../lib/agent-options.yml + config: + decorators: + load: + - SELECT uuid AS host_uuid FROM system_info; + - SELECT hostname AS hostname FROM system_info; + options: + disable_distributed: false + distributed_interval: 10 + distributed_plugin: tls + distributed_tls_max_attempts: 3 + logger_tls_endpoint: /api/osquery/log + logger_tls_period: 10 + pack_delimiter: / + overrides: + platforms: + darwin: + auto_table_construction: + tcc: + path: /Library/Application Support/com.apple.TCC/TCC.db + query: 'select service, client, auth_value, auth_reason from access' + columns: + - service + - client + - auth_value + - auth_reason controls: enable_disk_encryption: true macos_settings: From 4d2d704bb9665345aab596f57327a4431ca0c093 Mon Sep 17 00:00:00 2001 From: George Karr Date: Wed, 27 Mar 2024 14:02:35 -0500 Subject: [PATCH 02/64] georgekarrv publish release (#17870) - **Added confirmation for tag** - **Adding npm publish** --- tools/release/patch_release.sh | 90 +++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 2 deletions(-) diff --git a/tools/release/patch_release.sh b/tools/release/patch_release.sh index 30e61662b8..0acd0ce7bf 100755 --- a/tools/release/patch_release.sh +++ b/tools/release/patch_release.sh @@ -78,6 +78,7 @@ usage() { echo " -r, --release_notes Update the release notes in the named release on github and exit (requires changelog output from running the script previously)." echo " -s, --start_version Set the target starting version (can also be the first positional arg) for the release, defaults to latest release on github" echo " -t, --target_date Set the target date for the release, defaults to today if not provided" + echo " -u, --publish_release Set's release from draft to release, deploys to dogfood." echo " -v, --target_version Set the target version for the release" echo "" echo "Environment Variables:" @@ -219,6 +220,42 @@ update_release_notes() { fi } +publish() { + gh release edit --draft=false --latest $next_tag + gh workflow run dogfood-deploy.yml -f DOCKER_IMAGE=fleetdm/fleet:$next_ver + show_spinner 200 + echo "=========================================================================" + echo "Update osquery Slack Fleet channel topic to say the correct version $next_ver" + echo "=========================================================================" + dogfood_deploy=`gh run list --workflow=dogfood-deploy.yml --status in_progress -L 1 --json url | jq -r '.[] | .url'` + cd tools/fleetctl-npm && npm publish + + issues=`gh issue list -m $target_milestone --json number | jq -r '.[] | .number'` + for iss in $issues; do + echo "Closing #$iss" + gh issue close $iss + done + + echo "Closing milestone" + gh api repos/fleetdm/fleet/milestones/$target_milestone_number -f state=closed + + # Slack + slack_hook_url=https://hooks.slack.com/services + app_id=T019PP37ALW + general_channel_id=B06RZ60NUHX/tzaDZOvFCSvS2HC6rECi3Mvu + help_infra_channel_id=B06RLDFLC75/biuacbLxWRsDhv0hLA2qnLbX + help_eng_channel_id=B06RDTMUP1U/x2R36PXvW13KE6daxMiUK6W7 + announce_text=":cloud: :rocket: The latest version of Fleet is $target_milestone.\nMore info: https://github.com/fleetdm/fleet/releases/tag/$next_tag\nUpgrade now: https://fleetdm.com/docs/deploying/upgrading-fleet" + + curl -X POST -H 'Content-type: application/json' \ + --data "{\"text\":\"$announce_text\"}" \ + $slack_hook_url/$app_id/$general_channel_id + + curl -X POST -H 'Content-type: application/json' \ + --data "{\"text\":\"$announce_text\nDogfood Deployed $dogfood_deploy\"}" \ + $slack_hook_url/$app_id/$help_infra_channel_id +} + # Validate we have all commands required to perform this script check_required_binaries @@ -232,6 +269,7 @@ start_version="" target_date="" target_version="" print_info=false +publish_release=false release_notes=false # Parse long options manually @@ -245,6 +283,7 @@ for arg in "$@"; do "--minor") set -- "$@" "-m" ;; "--open_api_key") set -- "$@" "-o" ;; "--print") set -- "$@" "-p" ;; + "--publish_release") set -- "$@" "-u" ;; "--release_notes") set -- "$@" "-r" ;; "--start_version") set -- "$@" "-s" ;; "--target_date") set -- "$@" "-t" ;; @@ -254,7 +293,7 @@ for arg in "$@"; do done # Extract options and their arguments using getopts -while getopts "cdfhmo:prs:t:v:" opt; do +while getopts "cdfhmo:prs:t:uv:" opt; do case "$opt" in c) cherry_pick_resolved=true ;; d) dry_run=true ;; @@ -266,6 +305,7 @@ while getopts "cdfhmo:prs:t:v:" opt; do r) release_notes=true ;; s) start_version=$OPTARG ;; t) target_date=$OPTARG ;; + u) publish_release=true ;; v) target_version=$OPTARG ;; ?) usage; exit 1 ;; esac @@ -356,10 +396,15 @@ if [ "$force" = "false" ]; then ;; esac fi +# 4.47.2 start_milestone="${start_version:1}" +# 4.47.3 target_milestone="${next_ver:1}" +# 79 target_milestone_number=`gh api repos/:owner/:repo/milestones | jq -r ".[] | select(.title==\"$target_milestone\") | .number"` +# patch-fleet-v4.47.3 target_patch_branch="patch-fleet-$next_ver" +# fleet-v4.47.3 next_tag="fleet-$next_ver" if [ "$print_info" = "true" ]; then @@ -378,6 +423,11 @@ if [[ "$target_milestone_number" == "" ]]; then fi echo "Found milestone $target_milestone with number $target_milestone_number" +if [ "$publish_release" = "true" ]; then + publish + exit 0 +fi + failed=false if [ "$cherry_pick_resolved" = "false" ]; then @@ -550,6 +600,20 @@ if [[ "$failed" == "false" ]]; then echo -e "${output}" >> temp_changelog echo "" >> temp_changelog cp CHANGELOG.md old_changelog + cat temp_changelog + echo + echo "About to write changelog" + if [ "$force" = "false" ]; then + read -r -p "Does the above changelog look good (edit temp_changelog now to make changes) (n exits)? [y/N] " response + case "$response" in + [yY][eE][sS]|[yY]) + echo + ;; + *) + exit 1 + ;; + esac + fi cat temp_changelog > CHANGELOG.md cat old_changelog >> CHANGELOG.md rm -f old_changelog @@ -561,6 +625,15 @@ if [[ "$failed" == "false" ]]; then fi git checkout -b $update_changelog_patch_branch git add CHANGELOG.md + escaped_start_version=$(echo "$start_milestone" | sed 's/\./\\./g') + version_files=`ack -l --ignore-file=is:CHANGELOG.md "$escaped_start_version"` + unameOut="$(uname -s)" + case "${unameOut}" in + Linux*) echo "$version_files" | xargs sed -i "s/$escaped_start_version/$target_milestone/g";; + Darwin*) echo "$version_files" | xargs sed -i '' "s/$escaped_start_version/$target_milestone/g";; + *) echo "unknown distro to parse version" + esac + git add terraform charts infrastructure tools git commit -m "Adding changes for patch $target_milestone" git push origin $update_changelog_patch_branch -f gh pr create -f -B $target_patch_branch @@ -622,7 +695,7 @@ if [[ "$failed" == "false" ]]; then echo `gh pr view $update_changelog_patch_branch --json url | jq -r .url` echo waiting=true - while waiting; do + while $waiting; do pr_state=`gh pr view $update_changelog_patch_branch --json state | jq -r .state` if [[ "$pr_state" == "MERGED" ]]; then waiting=false @@ -632,6 +705,19 @@ if [[ "$failed" == "false" ]]; then done git pull origin $target_patch_branch + + echo "About to tag to $next_tag" + if [ "$force" = "false" ]; then + read -r -p "Did all steps succeed and is the tag ready to push? [y/N] " response + case "$response" in + [yY][eE][sS]|[yY]) + echo + ;; + *) + exit 1 + ;; + esac + fi git tag $next_tag git push origin $next_tag From 8aa1dcf84b2eba7829818140b9100950dec84334 Mon Sep 17 00:00:00 2001 From: Sam Pfluger <108141731+Sampfluger88@users.noreply.github.com> Date: Wed, 27 Mar 2024 14:09:42 -0500 Subject: [PATCH 03/64] Move revenue report to Bizops (#17902) --- handbook/business-operations/README.md | 28 +++++++++++++++++++ .../business-operations.rituals.yml | 10 +++++++ handbook/digital-experience/README.md | 27 ------------------ .../digital-experience.rituals.yml | 10 ------- 4 files changed, 38 insertions(+), 37 deletions(-) diff --git a/handbook/business-operations/README.md b/handbook/business-operations/README.md index 491da34684..5ce2c08b2c 100644 --- a/handbook/business-operations/README.md +++ b/handbook/business-operations/README.md @@ -108,6 +108,34 @@ For Fleet's US contractors, running payroll is a manual process: - Adjust time frame to match current payroll period (the 27th through 26th of the month) - Sync hours and run contractor payroll. + +### Grant role-specific license to a team member (RevOps) +Certain new team members, especially in go-to-market (GTM) roles, will need paid access to paid tools like Salesforce and LinkedIn Sales Navigator immediately on their first dayΒ with the company. Gong licenses that other departments need may [request them from BizOps](https://fleetdm.com/handbook/business-operations#contact-us) and we will make sure there is no license redundancy in that department. The table below can be used to determine which paid licenses they will need, based on their role: + +| Role | Salesforce CRM | Salesforce "Inbox" | LinkedIn _(paid)_ | Gong _(paid)_ | Zoom _(paid)_| +|:-----------------|:---|:---|:----|:---|:---| +| πŸ‹ AE | βœ… | βœ… | βœ… | βœ… | βœ… +| πŸ‹ CSM | βœ… | βœ… | ❌ | βœ… | βœ… +| πŸ‹ SC | βœ… | βœ… | ❌ | ❌ | βœ… +| βš—οΈ PM | ❌ | ❌ | ❌ | βœ… | βœ… +| βš—οΈ PD | ❌ | ❌ | ❌ | βœ… | βœ… +| πŸ”¦ CEO | βœ… | βœ… | βœ… | βœ… | βœ… +| Other roles | ❌ | ❌ | ❌ | ❌ | ❌ + +> **Warning:** Do NOT buy LinkedIn Recruiter. AEs and SDRs should use their personal Brex card to purchase the monthly [Core Sales Navigator](https://business.linkedin.com/sales-solutions/compare-plans) plan. Fleet does not use a company wide Sales Navigator account. The goal of Sales Navigator is to access to profile views and data, not InMail. Fleet does not send InMail. + + +### Add a seat to Salesforce +Here are the steps we take to grant appropriate Salesforce licenses to a new hire: +- Go to ["My Account"](https://fleetdm.lightning.force.com/lightning/n/standard-OnlineSalesHome). +- View contracts -> pick current contract. +- Add the desired number of licenses. +- Sign DocuSign sent to the email. +- The order will be processed in ~30m. +- Once the basic license has been added, you can create a new user using the new team member's `@fleetdm.com` email and assign a license to it. +- To also assign a user an "Inbox license", go to the ["Setup" page](https://fleetdm.lightning.force.com/lightning/setup/SetupOneHome/home) and select "User > Permission sets". Find the [inbox permission set](https://fleetdm.lightning.force.com/lightning/setup/PermSets/page?address=%2F005%3Fid%3D0PS4x000002uUn2%26isUserEntityOverride%3D1%26SetupNode%3DPermSets%26sfdcIFrameOrigin%3Dhttps%253A%252F%252Ffleetdm.lightning.force.com%26clc%3D1) and assign it to the new team member. + + ### Run US commission payroll - Update [commission calculator](https://docs.google.com/spreadsheets/d/1vw6Q7kCC7-FdG5Fgx3ghgUdQiF2qwxk6njgK6z8_O9U/edit) with new revenue from any deals that are closed/won (have a subscription agreement signed by both parties) and have an **effective start date** within the previous month. - Find detailed notes on this process in [Notes - Run commission payroll in Gusto](https://docs.google.com/document/d/1FQLpGxvHPW6X801HYYLPs5y8o943mmasQD3m9k_c0so/edit#). diff --git a/handbook/business-operations/business-operations.rituals.yml b/handbook/business-operations/business-operations.rituals.yml index 3be2ee4b68..e5f2c58c76 100644 --- a/handbook/business-operations/business-operations.rituals.yml +++ b/handbook/business-operations/business-operations.rituals.yml @@ -42,6 +42,16 @@ autoIssue: labels: [ "#g-business-operations" ] repo: "confidential" +- + task: "Revenue report" # TODO tie this to a responsibility + startedOn: "2024-02-12" + frequency: "Weekly" + description: "At the start of every week, check the Salesforce reports for past due invoices, non-invoiced opportunities, and past due renewals. Report any findings to in the `#g-sales` channel by mentioning Alex Mitchell and Mike McNeil." + moreInfoUrl: + dri: "jostableford" + autoIssue: + labels: [ "#g-digital-experience" ] + repo: "confidential" - task: "AP invoice monitoring" # TODO tie this to a responsibility startedOn: "2024-04-01" diff --git a/handbook/digital-experience/README.md b/handbook/digital-experience/README.md index e8d0626b78..362735ede7 100644 --- a/handbook/digital-experience/README.md +++ b/handbook/digital-experience/README.md @@ -152,33 +152,6 @@ If the action fails, please complete the following steps: 3. Head to the fleetdm/fleet GitHub repository and re-run the Deploy Fleet Website action. -### Grant role-specific license to a team member (RevOps) -Certain new team members, especially in go-to-market (GTM) roles, will need paid access to paid tools like Salesforce and LinkedIn Sales Navigator immediately on their first dayΒ with the company. Gong licenses that other departments need may [request them from BizOps](https://fleetdm.com/handbook/business-operations#contact-us) and we will make sure there is no license redundancy in that department. The table below can be used to determine which paid licenses they will need, based on their role: - -| Role | Salesforce CRM | Salesforce "Inbox" | LinkedIn _(paid)_ | Gong _(paid)_ | Zoom _(paid)_| -|:-----------------|:---|:---|:----|:---|:---| -| πŸ‹ AE | βœ… | βœ… | βœ… | βœ… | βœ… -| πŸ‹ CSM | βœ… | βœ… | ❌ | βœ… | βœ… -| πŸ‹ SC | βœ… | βœ… | ❌ | ❌ | βœ… -| βš—οΈ PM | ❌ | ❌ | ❌ | βœ… | βœ… -| βš—οΈ PD | ❌ | ❌ | ❌ | βœ… | βœ… -| πŸ”¦ CEO | βœ… | βœ… | βœ… | βœ… | βœ… -| Other roles | ❌ | ❌ | ❌ | ❌ | ❌ - -> **Warning:** Do NOT buy LinkedIn Recruiter. AEs and SDRs should use their personal Brex card to purchase the monthly [Core Sales Navigator](https://business.linkedin.com/sales-solutions/compare-plans) plan. Fleet does not use a company wide Sales Navigator account. The goal of Sales Navigator is to access to profile views and data, not InMail. Fleet does not send InMail. - - -### Add a seat to Salesforce -Here are the steps we take to grant appropriate Salesforce licenses to a new hire: -- Go to ["My Account"](https://fleetdm.lightning.force.com/lightning/n/standard-OnlineSalesHome). -- View contracts -> pick current contract. -- Add the desired number of licenses. -- Sign DocuSign sent to the email. -- The order will be processed in ~30m. -- Once the basic license has been added, you can create a new user using the new team member's `@fleetdm.com` email and assign a license to it. -- To also assign a user an "Inbox license", go to the ["Setup" page](https://fleetdm.lightning.force.com/lightning/setup/SetupOneHome/home) and select "User > Permission sets". Find the [inbox permission set](https://fleetdm.lightning.force.com/lightning/setup/PermSets/page?address=%2F005%3Fid%3D0PS4x000002uUn2%26isUserEntityOverride%3D1%26SetupNode%3DPermSets%26sfdcIFrameOrigin%3Dhttps%253A%252F%252Ffleetdm.lightning.force.com%26clc%3D1) and assign it to the new team member. - - ### Refresh event calendar Fleet's public relations firm is directly responsible for the accuracy of event locations, attendance dates, and CFP deadlines in the event strategy workbook. At the end of every quarter, the PR firm updates every event in the ["Event strategy workbook"](https://docs.google.com/spreadsheets/d/1YQXAX2Q_WnGkAwMYjMbQpV3nbCj7gOBbv7Y0u4twxzQ/edit) (private Google doc) by following these steps: 1. Visit the latest website for each event. diff --git a/handbook/digital-experience/digital-experience.rituals.yml b/handbook/digital-experience/digital-experience.rituals.yml index 75e4244d02..fbb34ae2c2 100644 --- a/handbook/digital-experience/digital-experience.rituals.yml +++ b/handbook/digital-experience/digital-experience.rituals.yml @@ -48,16 +48,6 @@ description: "Prepare the CEO office minutes calendar event and meeting agenda" moreInfoUrl: "https://fleetdm.com/handbook/digital-experience#prepare-for-ceo-office-minutes" dri: "sampfluger88" -- - task: "Revenue report" # TODO tie this to a responsibility - startedOn: "2024-02-12" - frequency: "Weekly" - description: "At the start of every week, check the Salesforce reports for past due invoices, non-invoiced opportunities, and past due renewals. Report any findings to in the `#g-sales` channel by mentioning Alex Mitchell and Mike McNeil." - moreInfoUrl: - dri: "hughestaylor" - autoIssue: - labels: [ "#g-digital-experience" ] - repo: "confidential" - task: "Refresh event calendar" startedOn: "2023-12-31" From cf531a242aab67012e71a51459614bd3606a6473 Mon Sep 17 00:00:00 2001 From: Noah Talerman <47070608+noahtalerman@users.noreply.github.com> Date: Wed, 27 Mar 2024 15:50:47 -0400 Subject: [PATCH 04/64] Update workstations.yml (#17906) - Add policies Windows 11 CIS Benchmarks - Remove Windows device health policies --- .../lib/windows-device-health.policies.yml | 24 ------------------- it-and-security/teams/workstations.yml | 2 +- 2 files changed, 1 insertion(+), 25 deletions(-) delete mode 100644 it-and-security/lib/windows-device-health.policies.yml diff --git a/it-and-security/lib/windows-device-health.policies.yml b/it-and-security/lib/windows-device-health.policies.yml deleted file mode 100644 index 4b92f5841e..0000000000 --- a/it-and-security/lib/windows-device-health.policies.yml +++ /dev/null @@ -1,24 +0,0 @@ -- name: Windows - Enable screen saver after 20 minutes - query: SELECT 1 FROM mdm_bridge where mdm_command_input = "1./Device/Vendor/MSFT/Policy/Result/DeviceLock/MaxInactivityTimeDeviceLock" and CAST(mdm_command_output AS INT) <= 20; - critical: false - description: This policy checks if maximum amount of time (in minutes) the device is allowed to sit idle before the screen is locked. End users can select any value less than the specified maximum. - resolution: "As an IT admin, to deploy a Windows profile with the MaxInactivityTimeDeviceLock option documented here: https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-devicelock#maxinactivitytimedevicelock" - platform: windows -- name: Windows - Enable BitLocker - query: SELECT * FROM bitlocker_info WHERE drive_letter='C:' AND protection_status = 1; - critical: false - description: As an IT admin, turn on disk encryption in Fleet. - resolution: Ask your system administrator to turn on disk encryption in Fleet - platform: windows -- name: Windows - Disable guest account - query: SELECT 1 FROM mdm_bridge where mdm_command_input = "1./Device/Vendor/MSFT/Policy/Result/LocalPoliciesSecurityOptions/Accounts_EnableGuestAccountStatus" and CAST(mdm_command_output AS INT) = 0; - critical: false - description: This policy checks if the guest account is disabled. The Guest account allows unauthenticated network users to gain access to the system. - resolution: "As an IT admin, deploy a Windows profile with the Accounts_EnableGuestAccountStatus option documented here: https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-localpoliciessecurityoptions#accounts_enableguestaccountstatus" - platform: windows -- name: Windows - Require 10 character password - query: SELECT 1 FROM mdm_bridge where mdm_command_input = "1./Device/Vendor/MSFT/Policy/Result/DeviceLock/DevicePasswordEnabled" and CAST(mdm_command_output AS INT) = 0; - critical: false - description: This policy checks if the end user is required to enter a password, with at least 10 characters, to unlock the host. - resolution: "As an IT admin, deploy a Windows profile with the DevicePasswordEnabled and MinDevicePasswordLength option documented here: https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-devicelock" - platform: windows \ No newline at end of file diff --git a/it-and-security/teams/workstations.yml b/it-and-security/teams/workstations.yml index 95ca009dc3..c287420d0f 100644 --- a/it-and-security/teams/workstations.yml +++ b/it-and-security/teams/workstations.yml @@ -55,8 +55,8 @@ controls: - path: ../lib/windows-turn-off-mdm.ps1 policies: - path: ../lib/macos-device-health.policies.yml - - path: ../lib/windows-device-health.policies.yml - path: ../lib/linux-device-health.policies.yml + - path: ../../ee/cis/win-11/cis-policy-queries.yml queries: - path: ../lib/collect-failed-login-attempts.queries.yml - path: ../lib/collect-usb-devices.queries.yml From 465099fa31b3e1e953db476e0a53b875286bcd14 Mon Sep 17 00:00:00 2001 From: Noah Talerman <47070608+noahtalerman@users.noreply.github.com> Date: Wed, 27 Mar 2024 15:53:59 -0400 Subject: [PATCH 05/64] Update workstations-canary.yml (#17907) - Forgot to update workstations (canary) as part of the following PR: #17906 --- it-and-security/teams/workstations-canary.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/it-and-security/teams/workstations-canary.yml b/it-and-security/teams/workstations-canary.yml index e5ad3636eb..97d6a11d7a 100644 --- a/it-and-security/teams/workstations-canary.yml +++ b/it-and-security/teams/workstations-canary.yml @@ -80,7 +80,7 @@ controls: - path: ../lib/windows-install-bitdefender.ps1 policies: - path: ../lib/macos-device-health.policies.yml - - path: ../lib/windows-device-health.policies.yml + - path: ../../ee/cis/win-11/cis-policy-queries.yml - path: ../lib/linux-device-health.policies.yml - name: chromeOS/macOS - Screenlock enabled query: SELECT 1 FROM screenlock WHERE enabled = 1; From c936896c1fa49e4b7b8843204e5205ed1e2f1e52 Mon Sep 17 00:00:00 2001 From: RachelElysia <71795832+RachelElysia@users.noreply.github.com> Date: Wed, 27 Mar 2024 16:17:16 -0400 Subject: [PATCH 06/64] [tiny released bugs] Fleet UI: Fix 2 typos that include a random character (#17908) --- .../LogDestinationIndicator/LogDestinationIndicator.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/components/LogDestinationIndicator/LogDestinationIndicator.tsx b/frontend/components/LogDestinationIndicator/LogDestinationIndicator.tsx index 3bc7998618..4d88395155 100644 --- a/frontend/components/LogDestinationIndicator/LogDestinationIndicator.tsx +++ b/frontend/components/LogDestinationIndicator/LogDestinationIndicator.tsx @@ -60,7 +60,7 @@ const LogDestinationIndicator = ({ return ( <> Each time a query runs, the data is sent to
- Amazon Kinesis Data Firehose.` + Amazon Kinesis Data Firehose. ); case "kinesis": @@ -81,7 +81,7 @@ const LogDestinationIndicator = ({ return ( <> Each time a query runs, the data is
sent to Google Cloud Pub - / Sub.` + / Sub. ); case "kafta": From c7c07d9112b563378c9acd1e7990813b89900c83 Mon Sep 17 00:00:00 2001 From: Grant Bilstad <82750216+pacamaster@users.noreply.github.com> Date: Wed, 27 Mar 2024 14:58:37 -0600 Subject: [PATCH 07/64] Revert "Update workstations.yml" (#17910) Reverts fleetdm/fleet#17906 --- .../lib/windows-device-health.policies.yml | 25 +++++++++++++++++++ it-and-security/teams/workstations.yml | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 it-and-security/lib/windows-device-health.policies.yml diff --git a/it-and-security/lib/windows-device-health.policies.yml b/it-and-security/lib/windows-device-health.policies.yml new file mode 100644 index 0000000000..5a15b90cc5 --- /dev/null +++ b/it-and-security/lib/windows-device-health.policies.yml @@ -0,0 +1,25 @@ +- name: Windows - Enable screen saver after 20 minutes + query: SELECT 1 FROM mdm_bridge where mdm_command_input = "1./Device/Vendor/MSFT/Policy/Result/DeviceLock/MaxInactivityTimeDeviceLock" and CAST(mdm_command_output AS INT) <= 20; + critical: false + description: This policy checks if maximum amount of time (in minutes) the device is allowed to sit idle before the screen is locked. End users can select any value less than the specified maximum. + resolution: "As an IT admin, to deploy a Windows profile with the MaxInactivityTimeDeviceLock option documented here: https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-devicelock#maxinactivitytimedevicelock" + platform: windows +- name: Windows - Enable BitLocker + query: SELECT * FROM bitlocker_info WHERE drive_letter='C:' AND protection_status = 1; + critical: false + description: As an IT admin, turn on disk encryption in Fleet. + resolution: Ask your system administrator to turn on disk encryption in Fleet + platform: windows +- name: Windows - Disable guest account + query: SELECT 1 FROM mdm_bridge where mdm_command_input = "1./Device/Vendor/MSFT/Policy/Result/LocalPoliciesSecurityOptions/Accounts_EnableGuestAccountStatus" and CAST(mdm_command_output AS INT) = 0; + critical: false + description: This policy checks if the guest account is disabled. The Guest account allows unauthenticated network users to gain access to the system. + resolution: "As an IT admin, deploy a Windows profile with the Accounts_EnableGuestAccountStatus option documented here: https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-localpoliciessecurityoptions#accounts_enableguestaccountstatus" + platform: windows +- name: Windows - Require 10 character password + query: SELECT 1 FROM mdm_bridge where mdm_command_input = "1./Device/Vendor/MSFT/Policy/Result/DeviceLock/DevicePasswordEnabled" and CAST(mdm_command_output AS INT) = 0; + critical: false + description: This policy checks if the end user is required to enter a password, with at least 10 characters, to unlock the host. + resolution: "As an IT admin, deploy a Windows profile with the DevicePasswordEnabled and MinDevicePasswordLength option documented here: https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-devicelock" + platform: windows + diff --git a/it-and-security/teams/workstations.yml b/it-and-security/teams/workstations.yml index c287420d0f..95ca009dc3 100644 --- a/it-and-security/teams/workstations.yml +++ b/it-and-security/teams/workstations.yml @@ -55,8 +55,8 @@ controls: - path: ../lib/windows-turn-off-mdm.ps1 policies: - path: ../lib/macos-device-health.policies.yml + - path: ../lib/windows-device-health.policies.yml - path: ../lib/linux-device-health.policies.yml - - path: ../../ee/cis/win-11/cis-policy-queries.yml queries: - path: ../lib/collect-failed-login-attempts.queries.yml - path: ../lib/collect-usb-devices.queries.yml From 0014a2b102a1eb0cc90a71f55dab46d8fc250eff Mon Sep 17 00:00:00 2001 From: Grant Bilstad <82750216+pacamaster@users.noreply.github.com> Date: Wed, 27 Mar 2024 14:59:04 -0600 Subject: [PATCH 08/64] Revert "Update workstations-canary.yml" (#17911) Reverts fleetdm/fleet#17907 --- it-and-security/teams/workstations-canary.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/it-and-security/teams/workstations-canary.yml b/it-and-security/teams/workstations-canary.yml index 97d6a11d7a..e5ad3636eb 100644 --- a/it-and-security/teams/workstations-canary.yml +++ b/it-and-security/teams/workstations-canary.yml @@ -80,7 +80,7 @@ controls: - path: ../lib/windows-install-bitdefender.ps1 policies: - path: ../lib/macos-device-health.policies.yml - - path: ../../ee/cis/win-11/cis-policy-queries.yml + - path: ../lib/windows-device-health.policies.yml - path: ../lib/linux-device-health.policies.yml - name: chromeOS/macOS - Screenlock enabled query: SELECT 1 FROM screenlock WHERE enabled = 1; From 19c395a3ba648a0d702727d3d262445cd10d5d5e Mon Sep 17 00:00:00 2001 From: Sam Pfluger <108141731+Sampfluger88@users.noreply.github.com> Date: Wed, 27 Mar 2024 16:44:06 -0500 Subject: [PATCH 09/64] Remove ritual (#17914) --- handbook/digital-experience/digital-experience.rituals.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/handbook/digital-experience/digital-experience.rituals.yml b/handbook/digital-experience/digital-experience.rituals.yml index fbb34ae2c2..0bd5a43e9a 100644 --- a/handbook/digital-experience/digital-experience.rituals.yml +++ b/handbook/digital-experience/digital-experience.rituals.yml @@ -86,13 +86,6 @@ description: "Process the CEO's calendar" moreInfoUrl: "https://fleetdm.com/handbook/digital-experience#process-the-ceos-calendar" dri: "sampfluger88" -- - task: "Fleet IT warehouse management" - startedOn: "2023-07-29" - frequency: "Weekly" - description: "Fleet IT warehouse management" - moreInfoUrl: "https://fleetdm.com/handbook/digital-experience#fleet-it-warehouse-management" - dri: "sampfluger88" - task: "Send weekly update" startedOn: "2023-09-15" From 770a43d48da6b8e6f80bcf304a62770581838a95 Mon Sep 17 00:00:00 2001 From: Sam Pfluger <108141731+Sampfluger88@users.noreply.github.com> Date: Wed, 27 Mar 2024 17:54:57 -0500 Subject: [PATCH 10/64] Remove Apprentice position (#17918) ... --- handbook/company/open-positions.yml | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/handbook/company/open-positions.yml b/handbook/company/open-positions.yml index fe09da8e55..3e1682d8ea 100644 --- a/handbook/company/open-positions.yml +++ b/handbook/company/open-positions.yml @@ -36,31 +36,6 @@ # - πŸ› οΈ Technical: You understand the software development processes. You understand that software quality matters. # - 🟣 Openness: You are flexible and open to new ideas and ways of working. # - βž• Bonus: Cybersecurity or IT background. - -- jobTitle: 🌐 Apprentice - department: 🌐 Digital Experience - hiringManagerName: Sam Pfluger - hiringManagerGithubUsername: sampfluger88 - hiringManagerLinkedInUrl: https://www.linkedin.com/in/sampfluger88/ - responsibilities: | - - πŸ‘₯ Manage multiple calendars and schedules using Google Calendar and various forms of communication simultaneously. - - πŸ§‘β€πŸ”¬ Perform executive assistance processes as described in [https://fleetdm.com/handbook/digital-experience](https://fleetdm.com/handbook/digital-experience). - - πŸ“– Maintain and update the structure and content of the company handbook. - - πŸ—£οΈ Act as secondary/backup point of contact for other departments for Digital Experience initiatives. - - πŸ—“οΈ Schedule travel arrangements for the CEO and other executives as needed. - - ✍️ Help implement and drive change management for any new or modified processes and tools across the team and/or the organization. - - πŸ“£ Record and communicate relevant information and decisions to the Digital Experience team and other departments. - - πŸ“ˆ Collect and report Digital Experience KPIs. - experience: | - - πŸƒβ€β™‚οΈ Strong desire to build a technical and operational-based skill set. - - πŸš€ Detail-oriented, highly organized, and able to move quickly to solve complex problems using boring solutions. - - πŸ¦‰ Deep understanding of Google Suite (Gmail, Google Calendar, Google Sheets, Google Docs, etc.) - - πŸ«€ Experience dealing with sensitive personal information of team members and customers. - - πŸ› οΈ Strong written and oral communication skills for general and technical topics. - - πŸ’­ Capable of understanding and translating technical concepts and personas. - - 🀝 Ability to work in a process-driven team-based environment. - - 🟣 Openness: You are flexible and open to new ideas and ways of working. - - βž• Bonus: Customer service/support background. - jobTitle: πŸš€ Quality Assurance Engineer department: Engineering hiringManagerName: George Karr From 3588a7c3d816ea487e18bab82427ea939c4b26a5 Mon Sep 17 00:00:00 2001 From: Sam Pfluger <108141731+Sampfluger88@users.noreply.github.com> Date: Wed, 27 Mar 2024 18:20:02 -0500 Subject: [PATCH 11/64] =?UTF-8?q?Replace=20"=F0=9F=8F=B9"=20with=20"?= =?UTF-8?q?=F0=9F=8C=A6=EF=B8=8F"=20(#17920)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ... --- handbook/company/README.md | 2 +- handbook/customer-success/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/handbook/company/README.md b/handbook/company/README.md index 289b378a1c..ef47e8116b 100644 --- a/handbook/company/README.md +++ b/handbook/company/README.md @@ -136,7 +136,7 @@ Fleet announces [support for Windows and Linux devices](https://fleetdm.com/anno To provide clarity about decision-making, [responsibility](https://fleetdm.com/handbook/company/why-this-way#why-direct-responsibility), and resources, everyone at Fleet has a manager, and [every manager](https://fleetdm.com/handbook/company#management) has direct reports. Fleet's organizational chart is accessible company-wide as a sub-tab in ["πŸ§‘β€πŸš€ Fleeties" (private google doc)](https://docs.google.com/spreadsheets/d/1OSLn-ZCbGSjPusHPiR5dwQhheH1K8-xqyZdsOe9y7qc/edit#gid=0). On the other sub-tabs, you can also check out a world map of where everyone is located, hiring stats, and fun facts about each team member. - πŸ”¦ [Business Operations](https://fleetdm.com/handbook/business-operations): The Business Operations department is directly responsible for these traditional functions: People, Finance, tax, compliance, Legal, and IT. -- 🏹 [Customer Success](https://fleetdm.com/handbook/customer-success): The customer success department is directly responsible for ensuring that customers and community members of Fleet achieve their desired outcomes with Fleet products and services. +- 🌦️ [Customer Success](https://fleetdm.com/handbook/customer-success): The customer success department is directly responsible for ensuring that customers and community members of Fleet achieve their desired outcomes with Fleet products and services. - πŸ‹ [Sales](https://fleetdm.com/handbook/sales): The Sales department is directly responsible for attaining the revenue goals of Fleet and helping customers deliver on their objectives. - 🫧 [Demand](https://fleetdm.com/handbook/demand): The Demand department is directly responsible for growing awareness of Fleet and nurturing the community through participation in events, conversations, and other programs. - πŸš€ [Engineering](https://fleetdm.com/handbook/engineering): The Engineering department at Fleet is directly responsible for writing and maintaining the code for Fleet's core product. diff --git a/handbook/customer-success/README.md b/handbook/customer-success/README.md index 245cab5a98..9f8a266164 100644 --- a/handbook/customer-success/README.md +++ b/handbook/customer-success/README.md @@ -109,4 +109,4 @@ The following stubs are included only to make links backward compatible. Please see [Handbook/customer-success#respond-to-messages-and-alerts](https://www.fleetdm.com/handbook/customer-success#respond-to-messages-and-alerts) - + From c4a411b6d6fb18b914ee3e963096d9d23ab3d421 Mon Sep 17 00:00:00 2001 From: Eric Date: Wed, 27 Mar 2024 19:10:24 -0500 Subject: [PATCH 12/64] Website: create `` component (#17846) Closes: #17755 Changes: - Created a new component: `` - Added the logo-carousel component to the /start, /login, and /register pages. - Updated the /register and /login pages to match the latest wireframes. --- .../js/components/logo-carousel.component.js | 92 +++++++++++++++++++ .../components/logo-carousel.component.less | 66 +++++++++++++ website/assets/styles/importer.less | 1 + .../assets/styles/pages/entrance/login.less | 37 +++----- .../assets/styles/pages/entrance/signup.less | 39 +++----- website/assets/styles/pages/homepage.less | 76 --------------- website/assets/styles/pages/start.less | 11 ++- website/views/layouts/layout.ejs | 1 + website/views/pages/entrance/login.ejs | 11 ++- website/views/pages/entrance/signup.ejs | 10 +- website/views/pages/homepage.ejs | 66 +------------ website/views/pages/start.ejs | 3 + 12 files changed, 218 insertions(+), 195 deletions(-) create mode 100644 website/assets/js/components/logo-carousel.component.js create mode 100644 website/assets/styles/components/logo-carousel.component.less diff --git a/website/assets/js/components/logo-carousel.component.js b/website/assets/js/components/logo-carousel.component.js new file mode 100644 index 0000000000..9cd93bf0e5 --- /dev/null +++ b/website/assets/js/components/logo-carousel.component.js @@ -0,0 +1,92 @@ +/** + * + * ----------------------------------------------------------------------------- + * A row of logos that scroll infinitly to the left. + * + * @type {Component} + * + * ----------------------------------------------------------------------------- + */ + +parasails.registerComponent('logoCarousel', { + // ╔═╗╦═╗╔═╗╔═╗╔═╗ + // ╠═╝╠╦╝║ β•‘β• β•β•β•šβ•β•— + // β•© β•©β•šβ•β•šβ•β•β•© β•šβ•β• + props: [], + + // ╦╔╗╔╦╔╦╗╦╔═╗╦ ╔═╗╔╦╗╔═╗╔╦╗╔═╗ + // β•‘β•‘β•‘β•‘β•‘ β•‘ ║╠═╣║ β•šβ•β•— β•‘ ╠═╣ β•‘ β•‘β•£ + // β•©β•β•šβ•β•© β•© β•©β•© ╩╩═╝ β•šβ•β• β•© β•© β•© β•© β•šβ•β• + data: function (){ + return { + //… + }; + }, + + // ╦ ╦╔╦╗╔╦╗╦ + // ╠═╣ β•‘ β•‘β•‘β•‘β•‘ + // β•© β•© β•© β•© ╩╩═╝ + template: ` +
+
+
+ Notion logo + Pinterest logo + Gusto logo + Epic Games logo + Rivian logo + Deloitte logo + Flywire logo + Snowflake logo + Uber logo + Atlassian logo + Toast logo + Fastly logo + Hashicorp logo + Dropbox logo + Reddit logo +
+
+ Notion logo + Pinterest logo + Gusto logo + Epic Games logo + Rivian logo + Deloitte logo + Flywire logo + Snowflake logo + Uber logo + Atlassian logo + Toast logo + Fastly logo + Hashicorp logo + Dropbox logo + Reddit logo +
+
+
+
+ +
+ `, + + // ╦ ╦╔═╗╔═╗╔═╗╦ ╦╔═╗╦ ╔═╗ + // β•‘ β•‘β• β•£ β•‘β•£ β•‘ β•šβ•¦β•β•‘ β•‘ β•‘β•£ + // β•©β•β•β•©β•š β•šβ•β•β•šβ•β• β•© β•šβ•β•β•©β•β•β•šβ•β• + beforeMount: function() { + //… + }, + mounted: async function(){ + //… + }, + beforeDestroy: function() { + //… + }, + + // ╦╔╗╔╔╦╗╔═╗╦═╗╔═╗╔═╗╔╦╗╦╔═╗╔╗╔╔═╗ + // β•‘β•‘β•‘β•‘ β•‘ β•‘β•£ ╠╦╝╠═╣║ β•‘ β•‘β•‘ β•‘β•‘β•‘β•‘β•šβ•β•— + // β•©β•β•šβ• β•© β•šβ•β•β•©β•šβ•β•© β•©β•šβ•β• β•© β•©β•šβ•β•β•β•šβ•β•šβ•β• + methods: { + //… + } +}); diff --git a/website/assets/styles/components/logo-carousel.component.less b/website/assets/styles/components/logo-carousel.component.less new file mode 100644 index 0000000000..2e057bfc05 --- /dev/null +++ b/website/assets/styles/components/logo-carousel.component.less @@ -0,0 +1,66 @@ + +/** + * + * + * App-wide styles for our ajax buttons. + */ + +[parasails-component='logo-carousel'] { + margin-bottom: 80px; + max-width: 1200px; + padding-left: 0px; + padding-right: 0px; + width: 100%; + [purpose='logo-carousel'] { + justify-content: center; + display: flex; + align-items: center; + position: relative; + width: 100%; + overflow: hidden; + [purpose='logo-row'] { + white-space: nowrap; + animation: scroll-horizontal 80s linear infinite; + } + img { + vertical-align: middle; + height: 32px; + margin-right: 64px; + } + [purpose='fade-left'] { + height: 32px; + width: 80px; + position: absolute; + left: 0px; + bottom: 0px; + animation: none; + background: linear-gradient(90deg, #FFF 0%, rgba(255, 255, 255, 0.00) 100%); + } + [purpose='fade-right'] { + height: 32px; + width: 80px; + position: absolute; + right: 0px; + bottom: 0px; + animation: none; + background: linear-gradient(90deg, rgba(255, 255, 255, 0.00) 0%, #FFF 100%); + } + } + + @media (max-width: 575px) { + margin-bottom: 64px; + [purpose='logo-carousel'] { + img { + margin-right: 48px; + } + } + } + @keyframes scroll-horizontal { + 0% { + transform: translateX(50%); + } + 100% { + transform: translateX(-50%); + } + } +} diff --git a/website/assets/styles/importer.less b/website/assets/styles/importer.less index 0d2f94d678..e6b2c2829d 100644 --- a/website/assets/styles/importer.less +++ b/website/assets/styles/importer.less @@ -26,6 +26,7 @@ @import 'components/call-to-action.component.less'; @import 'components/scrollable-tweets.component.less'; @import 'components/parallax-city.component.less'; +@import 'components/logo-carousel.component.less'; // Per-page styles @import 'pages/homepage.less'; diff --git a/website/assets/styles/pages/entrance/login.less b/website/assets/styles/pages/entrance/login.less index cdf78c01d0..f49be521f6 100644 --- a/website/assets/styles/pages/entrance/login.less +++ b/website/assets/styles/pages/entrance/login.less @@ -9,6 +9,8 @@ a { color: @core-fleet-black-75; text-decoration: underline; + text-underline-offset: 2px; + line-height: 150%; } [purpose='customer-login-container'] { max-width: 560px; @@ -23,12 +25,24 @@ padding-left: 30px; padding-right: 30px; text-align: center; + margin-bottom: 40px; + } + [purpose='register-link'] { + margin-bottom: 8px; + a { + float: right; + color: @core-fleet-black-75; + text-decoration: underline; + font-size: 14px; + } } [purpose='customer-portal-form'] { max-width: 560px; border-radius: 16px; - padding: 30px; + margin-bottom: 40px; + padding: 20px 32px 32px 32px; label { + color: @core-fleet-black; font-weight: 700; margin-bottom: 4px; } @@ -62,27 +76,6 @@ } } - [purpose='features-list'] { - - word-wrap: overflow; - padding-left: 40px; - font-size: 14px; - ul { - list-style-type: none; - padding-inline-start: 0px; - } - li { - padding-bottom: 12px; - color: @core-fleet-black-75; - } - img { - display: inline; - height: 16px; - margin-right: 8px; - } - - } - @media (max-width: 768px) { padding-top: 60px; [purpose='customer-portal-form'] { diff --git a/website/assets/styles/pages/entrance/signup.less b/website/assets/styles/pages/entrance/signup.less index 6288210bb1..6c9a3b2c78 100644 --- a/website/assets/styles/pages/entrance/signup.less +++ b/website/assets/styles/pages/entrance/signup.less @@ -7,17 +7,31 @@ a { color: @core-fleet-black-75; text-decoration: underline; + text-underline-offset: 2px; } [purpose='page-heading'] { padding-left: 30px; padding-right: 30px; + text-align: center; + margin-bottom: 40px; } + [purpose='login-link'] { + margin-bottom: 4px; + a { + float: right; + color: @core-fleet-black-75; + text-decoration: underline; + font-size: 14px; + } + } [purpose='customer-portal-form'] { max-width: 560px; border-radius: 16px; - padding: 30px; + margin-bottom: 40px; + padding: 20px 32px 32px 32px; label { + color: @core-fleet-black; font-weight: 700; margin-bottom: 4px; } @@ -25,9 +39,6 @@ height: 40px; border-radius: 6px; } - .card-body { - padding: 2em; - } .selectbox { position: relative; @@ -69,26 +80,6 @@ } } - [purpose='features-list'] { - padding-left: 40px; - font-size: 14px; - word-wrap: overflow; - ul { - list-style-type: none; - padding-inline-start: 0px; - } - li { - padding-bottom: 12px; - color: @core-fleet-black-75; - white-space: nowrap; - } - img { - display: inline; - height: 16px; - margin-right: 8px; - } - - } @media (max-width: 768px) { padding-top: 60px; diff --git a/website/assets/styles/pages/homepage.less b/website/assets/styles/pages/homepage.less index 80fbb8029d..a9d8427354 100644 --- a/website/assets/styles/pages/homepage.less +++ b/website/assets/styles/pages/homepage.less @@ -68,57 +68,11 @@ } [purpose='hero-logos'] { - margin-bottom: 80px; max-width: 1200px; padding-left: 60px; padding-right: 60px; - overflow-x: hidden; - width: 100%; } - [purpose='logo-carousel'] { - display: flex; - justify-content: space-around; - align-items: center; - position: relative; - width: 100%; - overflow: hidden; - [purpose='logo-row'] { - white-space: nowrap; - animation: scroll-horizontal 80s linear infinite; - } - img { - vertical-align: middle; - height: 32px; - margin-right: 64px; - } - [purpose='fade-left'] { - height: 32px; - width: 80px; - position: absolute; - left: 0px; - bottom: 0px; - animation: none; - background: linear-gradient(90deg, #FFF 0%, rgba(255, 255, 255, 0.00) 100%); - } - [purpose='fade-right'] { - height: 32px; - width: 80px; - position: absolute; - right: 0px; - bottom: 0px; - animation: none; - background: linear-gradient(90deg, rgba(255, 255, 255, 0.00) 0%, #FFF 100%); - } - } - @keyframes scroll-horizontal { - 0% { - transform: translateX(-25%); - } - 100% { - transform: translateX(-125%); - } - } [purpose='homepage-content'] { max-width: 1200px; @@ -1143,26 +1097,6 @@ font-size: 16px; } } - [purpose='hero-logos'] { - [purpose='wayfair-logo'] { - margin-right: 0px; - } - [purpose='uber-logo'] { - margin-left: 0px; - margin-right: auto; - } - [purpose='atlassian-logo'] { - margin-left: auto; - margin-right: 0px; - } - [purpose='fastly-logo'] { - margin-left: auto; - margin-right: auto; - } - [purpose='gusto-logo'] { - margin-left: 0px; - } - } [purpose='platform-block'] { margin-bottom: 100px; } @@ -1285,11 +1219,6 @@ padding-left: 20px; padding-right: 20px; } - [purpose='logo-carousel'] { - img { - margin-right: 48px; - } - } [purpose='video-modal'] { [purpose='modal-content'] { width: 95vw; @@ -1387,11 +1316,6 @@ padding-right: 20px; padding-left: 20px; } - [purpose='hero-logos'] { - img { - display: inline; - } - } [purpose='platform-block'] { margin-bottom: 80px; } diff --git a/website/assets/styles/pages/start.less b/website/assets/styles/pages/start.less index b2cdbc4a16..2ab70735ef 100644 --- a/website/assets/styles/pages/start.less +++ b/website/assets/styles/pages/start.less @@ -8,10 +8,16 @@ font-weight: 800; line-height: 150%; } + [purpose='logo-container'] { + max-width: 524px; + margin-left: auto; + margin-right: auto; + } [purpose='page-container'] { padding-top: 80px; padding-left: 64px; padding-right: 64px; + max-width: unset; display: flex; flex-direction: column; } @@ -67,6 +73,7 @@ padding-top: 60px; padding-left: 40px; padding-right: 40px; + max-width: 600px; } } @@ -79,9 +86,11 @@ } @media (max-width: 575px) { + [purpose='logo-container'] { + max-width: 100%; + } [purpose='start-cards'] { flex-direction: column; - padding-bottom: 120px; } [purpose='card']:first-of-type { margin-right: unset; diff --git a/website/views/layouts/layout.ejs b/website/views/layouts/layout.ejs index b2b4f62e82..6ec8255421 100644 --- a/website/views/layouts/layout.ejs +++ b/website/views/layouts/layout.ejs @@ -479,6 +479,7 @@ + diff --git a/website/views/pages/entrance/login.ejs b/website/views/pages/entrance/login.ejs index 0f38e452bc..a5b15cfca4 100644 --- a/website/views/pages/entrance/login.ejs +++ b/website/views/pages/entrance/login.ejs @@ -2,17 +2,19 @@

Welcome to Fleet

-

We just need a few details in order to get started.

+

We just need a few details in order to get started.

Welcome to Fleet

-

Sign in to your Fleet account.

+

Sign in to your Fleet account.

-
+
+ Forgot your password?
+
<%- /* Expose locals as `window.SAILS_LOCALS` :: */ exposeLocalsToBrowser() %> diff --git a/website/views/pages/entrance/signup.ejs b/website/views/pages/entrance/signup.ejs index af992bc0c9..eb7ef5bec5 100644 --- a/website/views/pages/entrance/signup.ejs +++ b/website/views/pages/entrance/signup.ejs @@ -1,14 +1,16 @@
-

Welcome to Fleet

-

We just need a few details in order to get started.

+

Welcome to Fleet

+

We just need a few details in order to get started.

+
- I have an account
This doesn’t appear to be a valid email address
@@ -67,7 +69,7 @@ Try again
- +
<%- /* Expose locals as `window.SAILS_LOCALS` :: */ exposeLocalsToBrowser() %> diff --git a/website/views/pages/homepage.ejs b/website/views/pages/homepage.ejs index 91db1122b6..5087db21ee 100644 --- a/website/views/pages/homepage.ejs +++ b/website/views/pages/homepage.ejs @@ -19,70 +19,8 @@ <%/* Row of logos */%> -
- -
-
- Notion logo - Pinterest logo - Gusto logo - Epic Games logo - Rivian logo - Deloitte logo - Flywire logo - Snowflake logo - Uber logo - Atlassian logo - Toast logo - - Fastly logo - Hashicorp logo - Dropbox logo - - Reddit logo -
-
- Notion logo - Pinterest logo - Gusto logo - Epic Games logo - Rivian logo - Deloitte logo - Flywire logo - Snowflake logo - Uber logo - Atlassian logo - Toast logo - - Fastly logo - Hashicorp logo - Dropbox logo - - Reddit logo -
-
- Notion logo - Pinterest logo - Gusto logo - Epic Games logo - Rivian logo - Deloitte logo - Flywire logo - Snowflake logo - Uber logo - Atlassian logo - Toast logo - - Fastly logo - Hashicorp logo - Dropbox logo - - Reddit logo -
-
-
-
- +
+
<%/* Homepage content */%>
diff --git a/website/views/pages/start.ejs b/website/views/pages/start.ejs index ecab17ca57..e48d94933c 100644 --- a/website/views/pages/start.ejs +++ b/website/views/pages/start.ejs @@ -16,6 +16,9 @@

Purchase a Fleet Premium license

+
+ +
<%- /* Expose server-rendered data as window.SAILS_LOCALS :: */ exposeLocalsToBrowser() %> From 65edee431d2dcf49adab6b459f4fd199322ef7f8 Mon Sep 17 00:00:00 2001 From: Sam Pfluger <108141731+Sampfluger88@users.noreply.github.com> Date: Wed, 27 Mar 2024 20:09:30 -0500 Subject: [PATCH 13/64] Make Sam maintainer of open-positions.yml (#17921) --- website/config/custom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/config/custom.js b/website/config/custom.js index c76c7568d1..5e021287fc 100644 --- a/website/config/custom.js +++ b/website/config/custom.js @@ -244,6 +244,7 @@ module.exports.custom = { 'handbook/README.md': 'mikermcneil', // See https://github.com/fleetdm/fleet/pull/13195 'handbook/company': 'mikermcneil', 'handbook/company/product-groups.md': ['lukeheath', 'sampfluger88','mikermcneil'], + 'handbook/company/open-positions.yml': ['@sampfluger88','mikermcneil'], 'handbook/digital-experience': ['sampfluger88','mikermcneil'], 'handbook/business-operations': ['sampfluger88','mikermcneil'], 'handbook/engineering': ['sampfluger88','mikermcneil', 'lukeheath'], @@ -251,7 +252,6 @@ module.exports.custom = { 'handbook/sales': ['sampfluger88','mikermcneil'], 'handbook/demand': ['sampfluger88','mikermcneil'], 'handbook/customer-success': ['sampfluger88','mikermcneil'], - '/handbook/company/testimonials.yml': ['eashaw', 'mike-j-thomas', 'sampfluger88', 'mikermcneil'], // GitHub issue templates From 6331cbc468f7596ae4e248bb44034180a0403d9c Mon Sep 17 00:00:00 2001 From: Sam Pfluger <108141731+Sampfluger88@users.noreply.github.com> Date: Wed, 27 Mar 2024 20:52:17 -0500 Subject: [PATCH 14/64] Fix broken links on app sec page (#17922) --- .../business-operations/Application-security.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/handbook/business-operations/Application-security.md b/handbook/business-operations/Application-security.md index 14b0553b2a..e914e99f0f 100644 --- a/handbook/business-operations/Application-security.md +++ b/handbook/business-operations/Application-security.md @@ -1,13 +1,13 @@ # Application security -- [Describe your secure coding practices (SDLC)](#describe-your-secure-coding-practices-including-code-reviews-use-of-staticdynamic-security-testing-tools-3rd-party-scansreviews) -- [SQL injection](#sql-injection) -- [Broken authentication](#broken-authentication--authentication-session-management-flaws-that-compromise-passwords-keys-session-tokens-etc) - - [Passwords](#passwords) - - [Authentication tokens](#authentication-tokens) -- [Sensitive data exposure](#sensitive-data-exposure--encryption-in-transit-at-rest-improperly-implemented-APIs) -- [Cross-site scripting](#cross-site-scripting--ensure-an-attacker-cant-execute-scripts-in-the-users-browser) -- [Components with known vulnerabilities](#components-with-known-vulnerabilities--prevent-the-use-of-libraries-frameworks-other-software-with-existing-vulnerabilities) +- [Describe your secure coding practices (SDLC)](https://fleetdm.com/handbook/business-operations/application-security#describe-your-secure-coding-practices-including-code-reviews-use-of-static-dynamic-security-testing-tools-3-rd-party-scans-reviews) +- [SQL injection](https://fleetdm.com/handbook/business-operations/application-security#sql-injection) +- [Broken authentication](https://fleetdm.com/handbook/business-operations/application-security#broken-authentication-authentication-session-management-flaws-that-compromise-passwords-keys-session-tokens-etc) + - [Passwords](https://fleetdm.com/handbook/business-operations/application-security#passwords) + - [Authentication tokens](https://fleetdm.com/handbook/business-operations/application-security#authentication-tokens) +- [Sensitive data exposure](https://fleetdm.com/handbook/business-operations/application-security#sensitive-data-exposure-encryption-in-transit-at-rest-improperly-implemented-apis) +- [Cross-site scripting](https://fleetdm.com/handbook/business-operations/application-security#cross-site-scripting-ensure-an-attacker-cant-execute-scripts-in-the-users-browser) +- [Components with known vulnerabilities](https://fleetdm.com/handbook/business-operations/application-security#components-with-known-vulnerabilities-prevent-the-use-of-libraries-frameworks-other-software-with-existing-vulnerabilities) The Fleet community follows best practices when coding. Here are some of the ways we mitigate against the OWASP top 10 issues: From fc19b0fa5f5524ee5aa66fc3a039b263fb94acab Mon Sep 17 00:00:00 2001 From: Noah Talerman <47070608+noahtalerman@users.noreply.github.com> Date: Wed, 27 Mar 2024 23:11:34 -0400 Subject: [PATCH 15/64] Update pricing-features-table.yml (#17845) - [Policy automations](https://fleetdm.com/docs/using-fleet/automations#policy-automations) are free ... --- handbook/company/pricing-features-table.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/handbook/company/pricing-features-table.yml b/handbook/company/pricing-features-table.yml index 4fe0279bcd..a6d0363bd2 100644 --- a/handbook/company/pricing-features-table.yml +++ b/handbook/company/pricing-features-table.yml @@ -756,11 +756,11 @@ waysToUse: - description: Automatically set admin access to Fleet based on your IDP - industryName: Trigger a workflow based on a failing policy - documentationUrl: https://fleetdm.com/docs/using-fleet/automations#automations + documentationUrl: https://fleetdm.com/docs/using-fleet/automations#policy-automations productCategories: [Endpoint operations,Device management] pricingTableCategories: [Integrations] usualDepartment: IT - tier: Premium + tier: Free - industryName: Role-based access control documentationUrl: https://fleetdm.com/docs/using-fleet/manage-access#manage-access productCategories: [Endpoint operations,Device management,Vulnerability management] From 2a8d84a0fe9f4c6a7853b49215eee58f9afc666e Mon Sep 17 00:00:00 2001 From: RachelElysia <71795832+RachelElysia@users.noreply.github.com> Date: Thu, 28 Mar 2024 08:57:41 -0400 Subject: [PATCH 16/64] [tiny unreleased bugs] Fleet UI: Calendar feature calendar settings page (#17905) --- .../IntegrationsPage/cards/Calendars/Calendars.tsx | 12 ++++++------ .../IntegrationsPage/cards/Calendars/_styles.scss | 5 +++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/frontend/pages/admin/IntegrationsPage/cards/Calendars/Calendars.tsx b/frontend/pages/admin/IntegrationsPage/cards/Calendars/Calendars.tsx index e9f6ed57c9..019d5f192e 100644 --- a/frontend/pages/admin/IntegrationsPage/cards/Calendars/Calendars.tsx +++ b/frontend/pages/admin/IntegrationsPage/cards/Calendars/Calendars.tsx @@ -27,7 +27,7 @@ const GOOGLE_WORKSPACE_DOMAINS = const DOMAIN_WIDE_DELEGATION = "https://www.fleetdm.com/learn-more-about/domain-wide-delegation"; const ENABLING_CALENDAR_API = - "fleetdm.com/learn-more-about/enabling-calendar-api"; + "https://www.fleetdm.com/learn-more-about/enabling-calendar-api"; const OAUTH_SCOPES = "https://www.googleapis.com/auth/calendar.events,https://www.googleapis.com/auth/calendar.settings.readonly"; @@ -112,10 +112,10 @@ const Calendars = (): JSX.Element => { // Must set all keys or no keys at all if (!curFormData.apiKeyJson && !!curFormData.domain) { - errors.apiKeyJson = "API key JSON must be present"; + errors.apiKeyJson = "API key JSON must be completed"; } if (!curFormData.domain && !!curFormData.apiKeyJson) { - errors.domain = "Domain must be present"; + errors.domain = "Domain must be completed"; } if (curFormData.apiKeyJson) { try { @@ -167,11 +167,11 @@ const Calendars = (): JSX.Element => { await configAPI.update({ integrations: destination }); renderFlash( "success", - "Successfully saved calendar integration settings" + "Successfully saved calendar integration settings." ); refetchConfig(); } catch (e) { - renderFlash("error", "Could not save calendar integration settings"); + renderFlash("error", "Could not save calendar integration settings."); } finally { setIsUpdatingSettings(false); } @@ -286,7 +286,7 @@ const Calendars = (): JSX.Element => {

5. Configure your service account integration in Fleet using the - form below: + form below.