diff --git a/public/__redirects b/public/__redirects index 3b58620dd5f522b..92b3bdf21115482 100644 --- a/public/__redirects +++ b/public/__redirects @@ -6,6 +6,7 @@ /tutorials/ /search/?content_type%5B0%5D=Tutorial 301 /sitemap.xml /sitemap-index.xml /deprecations/ /fundamentals/api/reference/deprecations/ 301 +/learning-paths/ /resources/ 301 # changelog /changelog/rss.xml /changelog/rss/index.xml 301 diff --git a/src/components/HomepageHero.astro b/src/components/HomepageHero.astro index 58eb97d67b2083e..8b51aa9076cc4ef 100644 --- a/src/components/HomepageHero.astro +++ b/src/components/HomepageHero.astro @@ -46,11 +46,9 @@ if (image) {

{tagline &&
} diff --git a/src/components/LearningPathCatalog.tsx b/src/components/LearningPathCatalog.tsx deleted file mode 100644 index cbb6482837c5c3c..000000000000000 --- a/src/components/LearningPathCatalog.tsx +++ /dev/null @@ -1,212 +0,0 @@ -import { useEffect, useState, type ChangeEvent } from "react"; -import Markdown from "react-markdown"; -import type { CollectionEntry } from "astro:content"; -import type { IconifyIconBuildResult } from "@iconify/utils"; -import { setSearchParams } from "~/util/url"; - -type LearningPaths = CollectionEntry<"learning-paths">["data"][]; -type Icons = Record; - -type Filters = { - products: string[]; - groups: string[]; -}; - -const LearningPathCatalog = ({ - paths, - icons, -}: { - paths: LearningPaths; - icons: Icons; -}) => { - const [filters, setFilters] = useState({ - products: [], - groups: [], - }); - - useEffect(() => { - const params = new URLSearchParams(window.location.search); - const products = params.getAll("products"); - const groups = params.getAll("groups"); - - if (!products && !groups) return; - - setFilters({ - ...filters, - products, - groups, - }); - }, []); - - useEffect(() => { - const params = new URLSearchParams(); - - if (filters.products.length > 0) { - filters.products.forEach((product) => params.append("products", product)); - } - - if (filters.groups.length > 0) { - filters.groups.forEach((group) => params.append("groups", group)); - } - - setSearchParams(params); - }, [filters]); - - const sorted = paths.sort((lp1, lp2) => { - return lp1.priority < lp2.priority ? -1 : 1; - }); - - const mapped = sorted.map((lp) => { - const icon = icons[lp.product_group]; - const groups = [lp.product_group]; - - if (lp.additional_groups) { - groups.push(...lp.additional_groups); - } - - return { - title: lp.title, - icon, - link: lp.path, - description: lp.description, - products: lp.products, - groups, - video: lp.video, - }; - }); - - const products = [...new Set(mapped.flatMap((lp) => lp.products).sort())]; - const groups = [...new Set(mapped.flatMap((lp) => lp.groups).sort())]; - - // apply filters to the fields list - const filtered = mapped.filter((path) => { - if (filters.groups.length > 0) { - if (!path.groups.some((c) => filters.groups.includes(c))) { - return false; - } - } - - if (filters.products.length > 0) { - if (!path.products.some((c) => filters.products.includes(c))) { - return false; - } - } - - return true; - }); - - return ( -
-
-
- - Product groups - - - {groups.map((group) => ( - - ))} -
- -
- - Products - - - {products.map((product) => ( - - ))} -
-
- -
- {filtered.length === 0 && ( -
- No products found -

- Try a different search term, or broaden your search by removing - filters. -

-
- )} - {filtered.map((path) => { - return ( - -
- {path.icon && ( -
- -
- )} - {path.video && Video} -
-

{path.title}

-
- - {path.description} - -
-
- ); - })} -
-
- ); -}; - -export default LearningPathCatalog; diff --git a/src/components/ListTutorials.astro b/src/components/ListTutorials.astro index 3178dd330eee004..63a516452f5f973 100644 --- a/src/components/ListTutorials.astro +++ b/src/components/ListTutorials.astro @@ -18,7 +18,7 @@ if (!currentProduct) { ); } -const productTitle = currentProduct.data.product.title; +const productID = currentProduct.id; const docs = await getCollection("docs", (entry) => { return ( @@ -27,9 +27,7 @@ const docs = await getCollection("docs", (entry) => { // /src/content/r2/**/*.mdx (entry.id.startsWith(`${currentSection}/`) || // products: [R2] - entry.data.products?.some( - (v: string) => v.toUpperCase() === productTitle.toUpperCase(), - )) + entry.data.products?.some((product) => product.id === productID)) ); }); diff --git a/src/components/ResourcesBySelector.astro b/src/components/ResourcesBySelector.astro index 5e690a56d8f39a3..953f547b95fc0dd 100644 --- a/src/components/ResourcesBySelector.astro +++ b/src/components/ResourcesBySelector.astro @@ -1,24 +1,32 @@ --- import { z } from "astro:schema"; -import { getCollection, type CollectionEntry } from "astro:content"; +import { + getCollection, + type CollectionEntry, + getEntries, + getEntry, + reference, +} from "astro:content"; import ResourcesBySelectorReact from "./ResourcesBySelector"; type Props = z.input; type DocsData = keyof CollectionEntry<"docs">["data"]; type VideosData = keyof CollectionEntry<"stream">["data"]; +type LearningPathsData = keyof CollectionEntry<"learning-paths">["data"]; -type ResourcesData = DocsData | VideosData; +type ResourcesData = DocsData | VideosData | LearningPathsData; const props = z.object({ tags: z.string().array().optional(), types: z.string().array(), - products: z.string().array().optional(), + products: reference("products").array().optional(), directory: z.string().optional(), filterables: z.custom().array().optional(), - columns: z.union([z.literal(2), z.literal(3)]).default(2), + columns: z.union([z.literal(1), z.literal(2), z.literal(3)]).default(2), showDescriptions: z.boolean().default(true), showLastUpdated: z.boolean().default(false), + filterPlacement: z.enum(["left", "top"]).default("top"), }); const { @@ -30,31 +38,82 @@ const { columns, showDescriptions, showLastUpdated, + filterPlacement, } = props.parse(Astro.props); const docs = await getCollection("docs"); const videos = await getCollection("stream"); +const learningPaths = await getCollection("learning-paths"); -const resources: Array | CollectionEntry<"stream">> = [ - ...docs, - ...videos, -].filter(({ id, collection, data }) => { - const type = "pcx_content_type" in data ? data.pcx_content_type : collection; - return ( - types.includes(type ?? "") && - (directory ? id.startsWith(directory) : true) && - (tags ? data.tags?.some((v: string) => tags.includes(v)) : true) && - (products - ? data.products?.some((v) => - products.includes(typeof v === "object" ? v.id : v), - ) - : true) +const filteredResources = [...docs, ...videos, ...learningPaths].filter( + ({ id, collection, data }) => { + const type = + "pcx_content_type" in data ? data.pcx_content_type : collection; + return ( + types.includes(type ?? "") && + (directory ? id.startsWith(directory) : true) && + (tags ? data.tags?.some((v: string) => tags.includes(v)) : true) && + (products + ? data.products?.some((v) => + products.some((p) => p.id === (typeof v === "object" ? v.id : v)) + ) + : true) + ); + } +); + +// Enhance resources with resolved product titles +const resources = await Promise.all( + filteredResources.map(async (resource) => { + if (resource.collection === "docs") { + const currentSection = resource.id.split("/")[0].replaceAll(".", ""); + const currentProduct = await getEntry("products", currentSection); + if (currentProduct) { + resource.data.products.push(currentProduct); + } + } + + const productEntries = await getEntries(resource.data.products); + const productTitles = productEntries.map((p) => { + if (p === undefined) { + throw new Error( + `Product value was not found. Check the filenames defined at https://github.com/cloudflare/cloudflare-docs/tree/production/src/content/products to make sure they match what's defined in your frontmatter.products field.` + ); + } + return p.data.name as string; + }); + + return { + ...resource, + data: { + ...resource.data, + productTitles, + }, + }; + }) +); + +// Check for duplicate IDs +const idCounts = new Map(); +const duplicateIds: string[] = []; + +for (const resource of resources) { + const count = idCounts.get(resource.id) || 0; + idCounts.set(resource.id, count + 1); + if (count === 1) { + duplicateIds.push(resource.id); + } +} + +if (duplicateIds.length > 0) { + throw new Error( + `[ResourcesBySelector] Found duplicate resource IDs: ${duplicateIds.join(", ")}` ); -}); +} if (resources.length === 0) { throw new Error( - `[ResourcesBySelector] Couldn't resources related to your filtered options`, + `[ResourcesBySelector] Couldn't find resources related to your filtered options` ); } @@ -67,6 +126,11 @@ const facets = resources.reduce( if (val) { if (Array.isArray(val) && val.every((v) => typeof v === "string")) { acc[filter] = [...new Set([...(acc[filter] || []), ...val])]; + } else if (filter === "products" && page.data.productTitles) { + // Use resolved product titles instead of IDs for products filter + acc[filter] = [ + ...new Set([...(acc[filter] || []), ...page.data.productTitles]), + ]; } else if (typeof val === "string") { acc[filter] = [...new Set([...(acc[filter] || []), val])]; } @@ -75,7 +139,7 @@ const facets = resources.reduce( return acc; }, - {} as Record, + {} as Record ); --- @@ -87,6 +151,7 @@ const facets = resources.reduce( columns={columns} showDescriptions={showDescriptions} showLastUpdated={showLastUpdated} + filterPlacement={filterPlacement} client:load />
diff --git a/src/components/ResourcesBySelector.tsx b/src/components/ResourcesBySelector.tsx index a843247278f5321..485fec2dd6e6202 100644 --- a/src/components/ResourcesBySelector.tsx +++ b/src/components/ResourcesBySelector.tsx @@ -1,20 +1,33 @@ import { useEffect, useState } from "react"; -import ReactSelect from "./ReactSelect"; +import type { ChangeEvent, KeyboardEvent } from "react"; import type { CollectionEntry } from "astro:content"; +import ReactSelect from "./ReactSelect"; import { formatDistance } from "date-fns"; +import { setSearchParams } from "~/util/url"; +import { formatContentType } from "~/util/content-type"; type DocsData = keyof CollectionEntry<"docs">["data"]; type VideosData = keyof CollectionEntry<"stream">["data"]; +type LearningPathsData = keyof CollectionEntry<"learning-paths">["data"]; -type ResourcesData = DocsData | VideosData; +type ResourcesData = DocsData | VideosData | LearningPathsData; interface Props { - resources: Array | CollectionEntry<"stream">>; + resources: Array< + ( + | CollectionEntry<"docs"> + | CollectionEntry<"stream"> + | CollectionEntry<"learning-paths"> + ) & { + data: any & { productTitles?: string[] }; + } + >; facets: Record; filters?: ResourcesData[]; columns: number; showDescriptions: boolean; showLastUpdated: boolean; + filterPlacement: string; } export default function ResourcesBySelector({ @@ -24,8 +37,16 @@ export default function ResourcesBySelector({ columns, showDescriptions, showLastUpdated, + filterPlacement, }: Props) { const [selectedFilter, setSelectedFilter] = useState(null); + const [leftFilters, setLeftFilters] = useState<{ + search: string; + selectedValues: Record; + }>({ + search: "", + selectedValues: {}, + }); const timeAgo = (date?: Date) => { if (!date) return undefined; @@ -38,48 +59,237 @@ export default function ResourcesBySelector({ const options = Object.entries(facets).map(([key, values]) => ({ label: key, - options: values.map((v) => ({ - value: v, - label: v, - })), + options: values + .sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base" })) + .map((v) => ({ + value: v, + label: (() => { + if (key === "pcx_content_type") return formatContentType(v); + return v; + })(), + })), })); + // Keep facets organized by filterable field for left sidebar + const visibleResources = resources.filter((resource) => { - if (!selectedFilter || !filters) return true; - - const filterableValues: string[] = []; - for (const filter of filters) { - const val = resource.data[filter as keyof typeof resource.data]; - if (val) { - if (Array.isArray(val) && val.every((v) => typeof v === "string")) { - filterableValues.push(...val); - } else if (typeof val === "string") { - filterableValues.push(val); + // Handle top filter (ReactSelect) + if (filterPlacement === "top" && selectedFilter && filters) { + const filterableValues: string[] = []; + for (const filter of filters) { + if (filter === "products" && resource.data.productTitles) { + // Use resolved product titles for products filter + filterableValues.push(...resource.data.productTitles); + } else { + const val = resource.data[filter as keyof typeof resource.data]; + if (val) { + if (Array.isArray(val) && val.every((v) => typeof v === "string")) { + filterableValues.push(...val); + } else if ( + Array.isArray(val) && + val.every((v) => typeof v === "object") + ) { + filterableValues.push(...val.map((v) => v.id)); + } else if (typeof val === "string") { + filterableValues.push(val); + } + } + } + } + if (!filterableValues.includes(selectedFilter)) return false; + } + + // Handle left sidebar filters + if (filterPlacement === "left" && filters) { + // Check each filterable field separately + for (const [filterField, selectedValues] of Object.entries( + leftFilters.selectedValues, + )) { + if (selectedValues.length > 0) { + const resourceValues: string[] = []; + if (filterField === "products" && resource.data.productTitles) { + // Use resolved product titles for products filter + resourceValues.push(...resource.data.productTitles); + } else { + const val = + resource.data[filterField as keyof typeof resource.data]; + if (val) { + if ( + Array.isArray(val) && + val.every((v) => typeof v === "string") + ) { + resourceValues.push(...val); + } else if ( + Array.isArray(val) && + val.every((v) => typeof v === "object") + ) { + resourceValues.push(...val.map((v) => v.id)); + } else if (typeof val === "string") { + resourceValues.push(val); + } + } + } + if (!resourceValues.some((v) => selectedValues.includes(v))) { + return false; + } + } + } + + // Search filter + if (leftFilters.search) { + const searchTerm = leftFilters.search.toLowerCase(); + const title = resource.data.title?.toLowerCase() || ""; + const description = resource.data.description?.toLowerCase() || ""; + + if (!title.includes(searchTerm) && !description.includes(searchTerm)) { + return false; } } } - return filterableValues.includes(selectedFilter); + return true; }); useEffect(() => { const params = new URLSearchParams(window.location.search); - const value = params.get("filters"); - if (value) { - setSelectedFilter(value); + if (filterPlacement === "top") { + const value = params.get("filters"); + if (value) { + setSelectedFilter(value); + } + } else if (filterPlacement === "left") { + // Handle left sidebar URL params + const searchTerm = params.get("search-term") ?? ""; + const selectedValues: Record = {}; + + // Get values for each filterable field from URL params + if (filters) { + for (const filter of filters) { + const values = params.getAll(`filter-${filter}`); + if (values.length > 0) { + selectedValues[filter] = values; + } + } + } + + if (Object.keys(selectedValues).length > 0 || searchTerm) { + setLeftFilters({ + search: searchTerm, + selectedValues: selectedValues, + }); + } } - }, []); + }, [filterPlacement]); + + // Update URL params for left sidebar filters + useEffect(() => { + if (filterPlacement === "left") { + const params = new URLSearchParams(); + + if (leftFilters.search) { + params.set("search-term", leftFilters.search); + } + + // Add URL params for each filterable field + for (const [filterField, selectedValues] of Object.entries( + leftFilters.selectedValues, + )) { + selectedValues.forEach((value) => + params.append(`filter-${filterField}`, value), + ); + } + + setSearchParams(params); + } + }, [leftFilters, filterPlacement]); return ( -
- {filters && ( +
+ {filterPlacement === "left" && filters && ( +
+ + setLeftFilters({ ...leftFilters, search: e.target.value }) + } + onKeyDown={(e: KeyboardEvent) => { + if (e.key === "Escape") { + setLeftFilters({ ...leftFilters, search: "" }); + } + }} + /> + + {Object.entries(facets).map(([filterField, values]) => ( +
+ + {filterField === "pcx_content_type" + ? "Content Type" + : filterField + .replace(/_/g, " ") + .replace(/\b\w/g, (l) => l.toUpperCase())} + + + {values.map((value) => ( + + ))} +
+ ))} +
+ )} + + {filterPlacement === "top" && filters && (
- {visibleResources.map((page) => { - const href = - page.collection === "stream" - ? `/videos/${page.data.url}/` - : `/${page.id}/`; - - // title can either be set directly in title or added as a meta.title property when we want something different for sidebar and SEO titles - let title; - - if (page.collection === "docs") { - const titleItem = page.data.head.find( - (item) => item.tag === "title", - ); - title = titleItem ? titleItem.content : page.data.title; - } else { - title = page.data.title; - } + {filterPlacement === "left" && visibleResources.length === 0 && ( +
+ No resources found +

+ Try a different search term, or broaden your search by removing + filters. +

+
+ )} + +
+ {visibleResources.map((page) => { + let href; + switch (page.collection) { + case "docs": + href = `/${page.id}/`; + break; + case "learning-paths": + href = `${page.data.path}/`; + break; + case "stream": + href = `/videos/${page.data.url}/`; + break; + default: + href = `/${(page as any).id}/`; + break; + } + + // title can either be set directly in title or added as a meta.title property when we want something different for sidebar and SEO titles + let title; + + if (page.collection === "docs") { + const titleItem = page.data.head.find( + (item: any) => item.tag === "title", + ); + title = titleItem ? titleItem.content : page.data.title; + } else { + title = page.data.title; + } - return ( - -

- {title} -

- {showDescriptions && ( - - {page.data.description} - - )} - {showLastUpdated && "reviewed" in page.data && ( - - Updated {timeAgo(page.data.reviewed)} - - )} -
- ); - })} + return ( + +

+ {title} +

+ {showDescriptions && ( + + {page.data.description} + + )} + {showLastUpdated && "reviewed" in page.data && ( + + Updated {timeAgo(page.data.reviewed)} + + )} +
+ ); + })} +
); diff --git a/src/components/overrides/Head.astro b/src/components/overrides/Head.astro index 492d92e8de06301..26708cc9b81d09d 100644 --- a/src/components/overrides/Head.astro +++ b/src/components/overrides/Head.astro @@ -3,8 +3,9 @@ import Default from "@astrojs/starlight/components/Head.astro"; import { differenceInCalendarDays } from "date-fns"; import "tippy.js/dist/tippy.css"; -import { getEntry } from "astro:content"; +import { getEntry, getEntries } from "astro:content"; import { getOgImage } from "~/util/og"; +import { formatContentType } from "~/util/content-type"; import type { CollectionEntry } from "astro:content"; const DEFAULT_TITLE_DELIMITER = "|"; @@ -36,8 +37,9 @@ if (currentSection) { // if entry for changelog, grab the first product value (which corresponds to the folder the entry is in) and use as the primary "product" if (currentSection === "changelog") { const products = frontmatter.products; - if (products) { - product = await getEntry("products", products[0]); + if (products && products.length > 0) { + const primaryProduct = products[0]; + product = await getEntry("products", primaryProduct.id); } } @@ -131,12 +133,7 @@ if ( if (frontmatter.pcx_content_type) { ["pcx_content_type", "algolia_content_type"].map((name) => { const contentType = frontmatter.pcx_content_type; - const updatedName = contentType - ? (contentType.charAt(0).toUpperCase() + contentType.slice(1)).replace( - "-", - " ", - ) - : ""; + const updatedName = contentType ? formatContentType(contentType) : ""; metaTags.push({ name, content: updatedName, @@ -145,9 +142,14 @@ if (frontmatter.pcx_content_type) { } if (frontmatter.products) { + const additionalProducts = await getEntries(frontmatter.products); + const additionalProductsNames = additionalProducts.map( + (product) => product.data.name, + ); + metaTags.push({ name: "pcx_additional_products", - content: frontmatter.products.toString(), + content: additionalProductsNames.toString(), }); } @@ -168,7 +170,10 @@ if (lastUpdated) { } if (frontmatter.reviewed) { - const daysBetween = differenceInCalendarDays(new Date(), frontmatter.reviewed); + const daysBetween = differenceInCalendarDays( + new Date(), + frontmatter.reviewed, + ); metaTags.push({ name: "pcx_last_reviewed", diff --git a/src/content/docs/ai-gateway/demos.mdx b/src/content/docs/ai-gateway/demos.mdx index 2262f8229823450..30bf54e2f3dba6f 100644 --- a/src/content/docs/ai-gateway/demos.mdx +++ b/src/content/docs/ai-gateway/demos.mdx @@ -21,5 +21,5 @@ Explore the following reference a "design-guide", "reference-architecture-diagram", ]} - products={["AI Gateway"]} + products={["ai-gateway"]} /> diff --git a/src/content/docs/ai-gateway/tutorials/deploy-aig-worker.mdx b/src/content/docs/ai-gateway/tutorials/deploy-aig-worker.mdx index b0bbe48edfc993c..126411f5ebfb349 100644 --- a/src/content/docs/ai-gateway/tutorials/deploy-aig-worker.mdx +++ b/src/content/docs/ai-gateway/tutorials/deploy-aig-worker.mdx @@ -6,8 +6,6 @@ tags: - AI - JavaScript title: Deploy a Worker that connects to OpenAI via AI Gateway -products: - - Workers description: Learn how to deploy a Worker that makes calls to OpenAI through AI Gateway --- diff --git a/src/content/docs/analytics/graphql-api/tutorials/querying-workers-metrics.mdx b/src/content/docs/analytics/graphql-api/tutorials/querying-workers-metrics.mdx index 0bc60957fb0db3a..978577cd270eb80 100644 --- a/src/content/docs/analytics/graphql-api/tutorials/querying-workers-metrics.mdx +++ b/src/content/docs/analytics/graphql-api/tutorials/querying-workers-metrics.mdx @@ -1,9 +1,7 @@ --- title: Querying Workers Metrics with GraphQL pcx_content_type: example -products: - - Workers - +products: [workers] --- In this example, we are going to use the GraphQL Analytics API to query for Workers Metrics over a specified time period. We can query up to one month of data for dates up to three months ago. @@ -127,4 +125,4 @@ https://api.cloudflare.com/client/v4/graphql \ #=> } ``` -[^1]: Refer to [Configure an Analytics API token](/analytics/graphql-api/getting-started/authentication/api-token-auth/) for more information on configuration and permissions. \ No newline at end of file +[^1]: Refer to [Configure an Analytics API token](/analytics/graphql-api/getting-started/authentication/api-token-auth/) for more information on configuration and permissions. diff --git a/src/content/docs/browser-rendering/workers-bindings/browser-rendering-with-DO.mdx b/src/content/docs/browser-rendering/workers-bindings/browser-rendering-with-DO.mdx index 1e033a6185c7da5..d63af63ba3d59bb 100644 --- a/src/content/docs/browser-rendering/workers-bindings/browser-rendering-with-DO.mdx +++ b/src/content/docs/browser-rendering/workers-bindings/browser-rendering-with-DO.mdx @@ -1,10 +1,7 @@ --- pcx_content_type: tutorial title: Deploy a Browser Rendering Worker with Durable Objects -products: - - Workers - - Durable Objects - - R2 +products: [workers, durable-objects, r2] difficulty: Beginner reviewed: 2023-09-28 tags: diff --git a/src/content/docs/cache/how-to/cache-rules/examples/browser-cache-ttl.mdx b/src/content/docs/cache/how-to/cache-rules/examples/browser-cache-ttl.mdx index 4d0ebe4c65d03e2..c74842883ecc376 100644 --- a/src/content/docs/cache/how-to/cache-rules/examples/browser-cache-ttl.mdx +++ b/src/content/docs/cache/how-to/cache-rules/examples/browser-cache-ttl.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Browser Cache TTL title: Browser Cache TTL description: Browser Cache TTL -products: - - Cache Rules +products: [cache-rules] --- import { Example, Render } from "~/components"; diff --git a/src/content/docs/cache/how-to/cache-rules/examples/bypass-cache-on-cookie.mdx b/src/content/docs/cache/how-to/cache-rules/examples/bypass-cache-on-cookie.mdx index f3d553f0ecce9de..c4e3ec1411c642b 100644 --- a/src/content/docs/cache/how-to/cache-rules/examples/bypass-cache-on-cookie.mdx +++ b/src/content/docs/cache/how-to/cache-rules/examples/bypass-cache-on-cookie.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Bypass Cache on Cookie title: Bypass Cache on Cookie description: Bypass Cache on Cookie -products: - - Cache Rules +products: [cache-rules] --- import { Example, Render } from "~/components"; diff --git a/src/content/docs/cache/how-to/cache-rules/examples/cache-deception-armor.mdx b/src/content/docs/cache/how-to/cache-rules/examples/cache-deception-armor.mdx index 5133556ee814fd4..201885951f2a31e 100644 --- a/src/content/docs/cache/how-to/cache-rules/examples/cache-deception-armor.mdx +++ b/src/content/docs/cache/how-to/cache-rules/examples/cache-deception-armor.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Cache Deception Armor title: Cache Deception Armor description: Cache Deception Armor -products: - - Cache Rules +products: [cache-rules] --- import { Example, Render } from "~/components"; diff --git a/src/content/docs/cache/how-to/cache-rules/examples/cache-device-type.mdx b/src/content/docs/cache/how-to/cache-rules/examples/cache-device-type.mdx index d74194de4d01b88..a2ad8d3d518f7ba 100644 --- a/src/content/docs/cache/how-to/cache-rules/examples/cache-device-type.mdx +++ b/src/content/docs/cache/how-to/cache-rules/examples/cache-device-type.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Cache by Device Type title: Cache by Device Type description: Cache by Device Type -products: - - Cache Rules +products: [cache-rules] --- import { Example, Render } from "~/components"; diff --git a/src/content/docs/cache/how-to/cache-rules/examples/cache-everything-ignore-query-strings.mdx b/src/content/docs/cache/how-to/cache-rules/examples/cache-everything-ignore-query-strings.mdx index 217f2f62ee6e0a2..f19e11fafe53d69 100644 --- a/src/content/docs/cache/how-to/cache-rules/examples/cache-everything-ignore-query-strings.mdx +++ b/src/content/docs/cache/how-to/cache-rules/examples/cache-everything-ignore-query-strings.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Cache Everything while ignoring query strings title: Cache Everything while ignoring query strings description: Cache Everything while ignoring query strings -products: - - Cache Rules +products: [cache-rules] --- import { Example, Render } from "~/components"; diff --git a/src/content/docs/cache/how-to/cache-rules/examples/cache-everything.mdx b/src/content/docs/cache/how-to/cache-rules/examples/cache-everything.mdx index 12fce7add2da7d1..a4c5038bc75ee8e 100644 --- a/src/content/docs/cache/how-to/cache-rules/examples/cache-everything.mdx +++ b/src/content/docs/cache/how-to/cache-rules/examples/cache-everything.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Cache Level (Cache Everything) title: Cache Level (Cache Everything) description: Cache Level (Cache Everything) -products: - - Cache Rules +products: [cache-rules] --- import { Example, Render } from "~/components"; diff --git a/src/content/docs/cache/how-to/cache-rules/examples/cache-ttl-by-status-code.mdx b/src/content/docs/cache/how-to/cache-rules/examples/cache-ttl-by-status-code.mdx index 286fbbf987c5c32..5ed964d7abad1c3 100644 --- a/src/content/docs/cache/how-to/cache-rules/examples/cache-ttl-by-status-code.mdx +++ b/src/content/docs/cache/how-to/cache-rules/examples/cache-ttl-by-status-code.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Cache TTL by status code title: Cache TTL by status code description: Cache TTL by status code -products: - - Cache Rules +products: [cache-rules] --- import { Example, Render } from "~/components"; diff --git a/src/content/docs/cache/how-to/cache-rules/examples/custom-cache-key.mdx b/src/content/docs/cache/how-to/cache-rules/examples/custom-cache-key.mdx index c6cbd798c1c0187..4faad884c6a3d0d 100644 --- a/src/content/docs/cache/how-to/cache-rules/examples/custom-cache-key.mdx +++ b/src/content/docs/cache/how-to/cache-rules/examples/custom-cache-key.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Custom Cache Key title: Custom Cache Key description: Custom Cache Key -products: - - Cache Rules +products: [cache-rules] --- import { Example, Render } from "~/components"; diff --git a/src/content/docs/cache/how-to/cache-rules/examples/edge-ttl.mdx b/src/content/docs/cache/how-to/cache-rules/examples/edge-ttl.mdx index 8aba528a6491c7d..acc87d4f9f0a576 100644 --- a/src/content/docs/cache/how-to/cache-rules/examples/edge-ttl.mdx +++ b/src/content/docs/cache/how-to/cache-rules/examples/edge-ttl.mdx @@ -3,26 +3,25 @@ pcx_content_type: example summary: Edge Cache TTL title: Edge Cache TTL description: Edge Cache TTL -products: - - Cache Rules +products: [cache-rules] --- -import { Example } from "~/components" +import { Example } from "~/components"; [Create a cache rule](/cache/how-to/cache-rules/create-dashboard/) to adjust edge cache TTL for caching resources on Cloudflare edge to one day, for any hostname containing `example.com`: -* **When incoming requests match**: Custom filter expression - * Using the Expression Builder:
+- **When incoming requests match**: Custom filter expression + - Using the Expression Builder:
`Hostname contains "example.com"` - * Using the Expression Editor:
+ - Using the Expression Editor:
`(http.host contains "example.com")` -* **Then**: - * **Cache eligibility**: Eligible for cache - * **Setting**: Edge TTL - * Ignore cache-control header and use this TTL - * **Input time-to-live (TTL)**: *1 day* +- **Then**: + - **Cache eligibility**: Eligible for cache + - **Setting**: Edge TTL + - Ignore cache-control header and use this TTL + - **Input time-to-live (TTL)**: _1 day_
diff --git a/src/content/docs/cache/how-to/cache-rules/examples/origin-cache-control.mdx b/src/content/docs/cache/how-to/cache-rules/examples/origin-cache-control.mdx index beba8b4035afa18..cc378b3275b3924 100644 --- a/src/content/docs/cache/how-to/cache-rules/examples/origin-cache-control.mdx +++ b/src/content/docs/cache/how-to/cache-rules/examples/origin-cache-control.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Origin Cache Control title: Origin Cache Control description: Origin Cache Control -products: - - Cache Rules +products: [cache-rules] --- import { Example } from "~/components" diff --git a/src/content/docs/cache/how-to/cache-rules/examples/query-string-sort.mdx b/src/content/docs/cache/how-to/cache-rules/examples/query-string-sort.mdx index 237d093d0d6bf2d..ac878c378846af9 100644 --- a/src/content/docs/cache/how-to/cache-rules/examples/query-string-sort.mdx +++ b/src/content/docs/cache/how-to/cache-rules/examples/query-string-sort.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Query String Sort title: Query String Sort description: Query String Sort -products: - - Cache Rules +products: [cache-rules] --- import { Example } from "~/components" diff --git a/src/content/docs/cache/how-to/cache-rules/examples/respect-strong-etags.mdx b/src/content/docs/cache/how-to/cache-rules/examples/respect-strong-etags.mdx index f94fd5b34194c98..eb6de19a9bc87a7 100644 --- a/src/content/docs/cache/how-to/cache-rules/examples/respect-strong-etags.mdx +++ b/src/content/docs/cache/how-to/cache-rules/examples/respect-strong-etags.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Respect Strong ETags title: Respect Strong ETags description: Respect Strong ETags -products: - - Cache Rules +products: [cache-rules] --- import { Example } from "~/components" diff --git a/src/content/docs/cloudflare-one/tutorials/access-workers.mdx b/src/content/docs/cloudflare-one/tutorials/access-workers.mdx index 7912434ceb64757..bc6077b4467429d 100644 --- a/src/content/docs/cloudflare-one/tutorials/access-workers.mdx +++ b/src/content/docs/cloudflare-one/tutorials/access-workers.mdx @@ -4,9 +4,7 @@ category: 🔐 Access difficulty: Intermediate pcx_content_type: tutorial title: Create custom headers for Cloudflare Access-protected origins with Workers -products: - - Workers - - Access +products: [workers, access] tags: - JavaScript description: >- diff --git a/src/content/docs/cloudflare-one/tutorials/r2-logs.mdx b/src/content/docs/cloudflare-one/tutorials/r2-logs.mdx index 71d673f38e0e1be..96594f6ccfef4eb 100644 --- a/src/content/docs/cloudflare-one/tutorials/r2-logs.mdx +++ b/src/content/docs/cloudflare-one/tutorials/r2-logs.mdx @@ -4,8 +4,7 @@ category: 🔐 Zero Trust difficulty: Beginner pcx_content_type: tutorial title: Use Cloudflare R2 as a Zero Trust log destination -products: - - R2 +products: [r2] description: >- This tutorial covers how to build a Cloudflare R2 bucket to store Zero Trust logs. It also shows how to connect the bucket to the Zero Trust Logpush service. --- diff --git a/src/content/docs/d1/demos.mdx b/src/content/docs/d1/demos.mdx index 77f1b1974c17ccb..ffbe12dd4e5fce1 100644 --- a/src/content/docs/d1/demos.mdx +++ b/src/content/docs/d1/demos.mdx @@ -32,4 +32,4 @@ Explore the following demo applications Explore the following reference architectures that use D1: - + diff --git a/src/content/docs/d1/tutorials/build-a-comments-api.mdx b/src/content/docs/d1/tutorials/build-a-comments-api.mdx index 90347f7a837e31c..e28c82cee296883 100644 --- a/src/content/docs/d1/tutorials/build-a-comments-api.mdx +++ b/src/content/docs/d1/tutorials/build-a-comments-api.mdx @@ -3,8 +3,7 @@ reviewed: 2024-10-01 difficulty: Intermediate pcx_content_type: tutorial title: Build a Comments API -products: - - Workers +products: [workers] tags: - Hono - JavaScript diff --git a/src/content/docs/d1/tutorials/build-a-staff-directory-app.mdx b/src/content/docs/d1/tutorials/build-a-staff-directory-app.mdx index b9e4a0c8777f622..7abf77bdd5a6442 100644 --- a/src/content/docs/d1/tutorials/build-a-staff-directory-app.mdx +++ b/src/content/docs/d1/tutorials/build-a-staff-directory-app.mdx @@ -3,8 +3,7 @@ reviewed: 2024-03-21 difficulty: Intermediate pcx_content_type: tutorial title: Build a Staff Directory Application -products: - - Pages +products: [pages] tags: - Hono - TypeScript diff --git a/src/content/docs/d1/tutorials/build-an-api-to-access-d1.mdx b/src/content/docs/d1/tutorials/build-an-api-to-access-d1.mdx index c22790318e3d956..f7cbcde3de8a411 100644 --- a/src/content/docs/d1/tutorials/build-an-api-to-access-d1.mdx +++ b/src/content/docs/d1/tutorials/build-an-api-to-access-d1.mdx @@ -3,8 +3,7 @@ reviewed: 2024-09-20 difficulty: Intermediate pcx_content_type: tutorial title: Build an API to access D1 using a proxy Worker -products: - - Workers +products: [workers] tags: - Hono - TypeScript diff --git a/src/content/docs/d1/tutorials/d1-and-prisma-orm.mdx b/src/content/docs/d1/tutorials/d1-and-prisma-orm.mdx index ca7679a12ab4ad0..710a1574a6b276b 100644 --- a/src/content/docs/d1/tutorials/d1-and-prisma-orm.mdx +++ b/src/content/docs/d1/tutorials/d1-and-prisma-orm.mdx @@ -4,8 +4,7 @@ difficulty: Beginner content_type: Tutorial pcx_content_type: tutorial title: Query D1 using Prisma ORM -products: - - Workers +products: [workers] tags: - TypeScript - SQL diff --git a/src/content/docs/durable-objects/demos.mdx b/src/content/docs/durable-objects/demos.mdx index 3471e8c472fc10d..e4ad94cb8b2ad0c 100644 --- a/src/content/docs/durable-objects/demos.mdx +++ b/src/content/docs/durable-objects/demos.mdx @@ -20,4 +20,4 @@ Explore the following demo applications Explore the following reference architectures that use Durable Objects: - + diff --git a/src/content/docs/hyperdrive/demos.mdx b/src/content/docs/hyperdrive/demos.mdx index 8c0fa5218e3ed9a..e4623c3ebd3c753 100644 --- a/src/content/docs/hyperdrive/demos.mdx +++ b/src/content/docs/hyperdrive/demos.mdx @@ -20,4 +20,4 @@ Explore the following demo applications Explore the following reference architectures that use Hyperdrive: - + diff --git a/src/content/docs/hyperdrive/tutorials/serverless-timeseries-api-with-timescale.mdx b/src/content/docs/hyperdrive/tutorials/serverless-timeseries-api-with-timescale.mdx index 7e23448d7130ef7..bd4dc32710b6f5d 100644 --- a/src/content/docs/hyperdrive/tutorials/serverless-timeseries-api-with-timescale.mdx +++ b/src/content/docs/hyperdrive/tutorials/serverless-timeseries-api-with-timescale.mdx @@ -3,8 +3,7 @@ reviewed: 2023-10-30 difficulty: Beginner pcx_content_type: tutorial title: Create a serverless, globally distributed time-series API with Timescale -products: - - Workers +products: [workers] tags: - PostgreSQL - TypeScript diff --git a/src/content/docs/images/demos.mdx b/src/content/docs/images/demos.mdx index dcb75b8c17b6dd2..982d233e26bc064 100644 --- a/src/content/docs/images/demos.mdx +++ b/src/content/docs/images/demos.mdx @@ -20,4 +20,4 @@ Explore the following demo applications Explore the following reference architectures that use Images: - + diff --git a/src/content/docs/kv/demos.mdx b/src/content/docs/kv/demos.mdx index d9218868cc49d5b..2cba1d26f1ae0be 100644 --- a/src/content/docs/kv/demos.mdx +++ b/src/content/docs/kv/demos.mdx @@ -20,4 +20,4 @@ Explore the following demo applications Explore the following reference architectures that use KV: - + diff --git a/src/content/docs/load-balancing/pools/cloudflare-pages-origin.mdx b/src/content/docs/load-balancing/pools/cloudflare-pages-origin.mdx index 94e2959a2ed9ebd..9a88e2fb0c1c6a6 100644 --- a/src/content/docs/load-balancing/pools/cloudflare-pages-origin.mdx +++ b/src/content/docs/load-balancing/pools/cloudflare-pages-origin.mdx @@ -3,8 +3,7 @@ pcx_content_type: tutorial title: Use Pages as an origin for Load Balancing reviewed: 2024-07-03 difficulty: Beginner -products: - - Pages +products: [pages] sidebar: order: 3 description: >- diff --git a/src/content/docs/pages/demos.mdx b/src/content/docs/pages/demos.mdx index df1fbab567b613c..1df1895119aab06 100644 --- a/src/content/docs/pages/demos.mdx +++ b/src/content/docs/pages/demos.mdx @@ -29,5 +29,5 @@ Explore the following reference a "design-guide", "reference-architecture-diagram", ]} - products={["Pages"]} + products={["pages"]} /> diff --git a/src/content/docs/pages/framework-guides/deploy-a-hono-site.mdx b/src/content/docs/pages/framework-guides/deploy-a-hono-site.mdx index 926ce8b16cb099d..1d545076868b994 100644 --- a/src/content/docs/pages/framework-guides/deploy-a-hono-site.mdx +++ b/src/content/docs/pages/framework-guides/deploy-a-hono-site.mdx @@ -83,7 +83,7 @@ For more tutorials involving Hono and Cloudflare Pages, refer to the following r ### Demo apps diff --git a/src/content/docs/pages/tutorials/use-r2-as-static-asset-storage-for-pages.mdx b/src/content/docs/pages/tutorials/use-r2-as-static-asset-storage-for-pages.mdx index 8ad3c20f28d6d7d..269ccb7a2276d4b 100644 --- a/src/content/docs/pages/tutorials/use-r2-as-static-asset-storage-for-pages.mdx +++ b/src/content/docs/pages/tutorials/use-r2-as-static-asset-storage-for-pages.mdx @@ -3,8 +3,7 @@ reviewed: 2024-07-22 difficulty: Intermediate pcx_content_type: tutorial title: Use R2 as static asset storage with Cloudflare Pages -products: - - R2 +products: [r2] tags: - Hono - JavaScript diff --git a/src/content/docs/pulumi/tutorial/hello-world.mdx b/src/content/docs/pulumi/tutorial/hello-world.mdx index f66d2bfcd936a58..9a86eca6fabd167 100644 --- a/src/content/docs/pulumi/tutorial/hello-world.mdx +++ b/src/content/docs/pulumi/tutorial/hello-world.mdx @@ -1,8 +1,7 @@ --- title: Deploy a Worker pcx_content_type: tutorial -products: - - Workers +products: [workers] reviewed: 2024-09-13 difficulty: Beginner tags: diff --git a/src/content/docs/queues/demos.mdx b/src/content/docs/queues/demos.mdx index 4884d342d4693fa..175930a9fed89a8 100644 --- a/src/content/docs/queues/demos.mdx +++ b/src/content/docs/queues/demos.mdx @@ -14,10 +14,10 @@ Learn how you can use Queues within your existing application and architecture. Explore the following demo applications for Queues. - + ## Reference architectures Explore the following reference architectures that use Queues: - + diff --git a/src/content/docs/queues/tutorials/handle-rate-limits/index.mdx b/src/content/docs/queues/tutorials/handle-rate-limits/index.mdx index 0f60cf29551954f..e06083052edf513 100644 --- a/src/content/docs/queues/tutorials/handle-rate-limits/index.mdx +++ b/src/content/docs/queues/tutorials/handle-rate-limits/index.mdx @@ -4,9 +4,7 @@ difficulty: Beginner title: Handle rate limits of external APIs summary: Example of how to use Queues to handle rate limits of external APIs. pcx_content_type: tutorial -products: - - Workers - - Queues +products: [workers] tags: - TypeScript sidebar: diff --git a/src/content/docs/queues/tutorials/web-crawler-with-browser-rendering/index.mdx b/src/content/docs/queues/tutorials/web-crawler-with-browser-rendering/index.mdx index 21a298af749aa24..6c1d4dd8de18885 100644 --- a/src/content/docs/queues/tutorials/web-crawler-with-browser-rendering/index.mdx +++ b/src/content/docs/queues/tutorials/web-crawler-with-browser-rendering/index.mdx @@ -4,10 +4,7 @@ difficulty: Intermediate title: Build a web crawler with Queues and Browser Rendering summary: Example of how to use Queues and Browser Rendering to power a web crawler. pcx_content_type: tutorial -products: - - Workers - - Browser Rendering - - KV +products: [workers, queues, browser-rendering] tags: - TypeScript sidebar: diff --git a/src/content/docs/r2-sql/tutorials/end-to-end-pipeline.mdx b/src/content/docs/r2-sql/tutorials/end-to-end-pipeline.mdx index 24db47baa77c84a..d8224fd11ea7e77 100644 --- a/src/content/docs/r2-sql/tutorials/end-to-end-pipeline.mdx +++ b/src/content/docs/r2-sql/tutorials/end-to-end-pipeline.mdx @@ -2,11 +2,7 @@ title: Build an end to end data pipeline summary: Learn how to create an end-to-end data pipeline using Cloudflare Pipelines, R2 Data Catalog, and R2 SQL for real-time transaction analysis. pcx_content_type: tutorial -products: - - R2 - - R2 Data Catalog - - R2 SQL - - Pipelines +products: [pipelines, r2, r2-sql, r2-data-catalog] description: >- This tutorial demonstrates how to build a complete data pipeline using Cloudflare Pipelines, R2 Data Catalog, and R2 SQL. --- diff --git a/src/content/docs/r2/demos.mdx b/src/content/docs/r2/demos.mdx index 8bc6ecf4e982a71..b4137d5ffcc2186 100644 --- a/src/content/docs/r2/demos.mdx +++ b/src/content/docs/r2/demos.mdx @@ -29,5 +29,5 @@ Explore the following reference a "design-guide", "reference-architecture-diagram", ]} - products={["R2"]} + products={["r2"]} /> diff --git a/src/content/docs/r2/tutorials/summarize-pdf.mdx b/src/content/docs/r2/tutorials/summarize-pdf.mdx index 6cb3d113c505c30..f4444125bf860fc 100644 --- a/src/content/docs/r2/tutorials/summarize-pdf.mdx +++ b/src/content/docs/r2/tutorials/summarize-pdf.mdx @@ -1,10 +1,7 @@ --- title: Use event notification to summarize PDF files on upload pcx_content_type: tutorial -products: - - Queues - - Workers - - Workers AI +products: [workers, queues, workers-ai] difficulty: Intermediate reviewed: 2024-10-11 tags: diff --git a/src/content/docs/r2/tutorials/upload-logs-event-notifications.mdx b/src/content/docs/r2/tutorials/upload-logs-event-notifications.mdx index 2e0f434e2517682..c761ab1319dd02d 100644 --- a/src/content/docs/r2/tutorials/upload-logs-event-notifications.mdx +++ b/src/content/docs/r2/tutorials/upload-logs-event-notifications.mdx @@ -1,9 +1,7 @@ --- title: Log and store upload events in R2 with event notifications pcx_content_type: tutorial -products: - - Queues - - Workers +products: [queues, workers] difficulty: Beginner reviewed: 2024-04-02 tags: diff --git a/src/content/docs/reference-architecture/architectures/cdn.mdx b/src/content/docs/reference-architecture/architectures/cdn.mdx index a5b0370aa818ac1..c54c1d88496ebcb 100644 --- a/src/content/docs/reference-architecture/architectures/cdn.mdx +++ b/src/content/docs/reference-architecture/architectures/cdn.mdx @@ -1,9 +1,7 @@ --- title: Content Delivery Network (CDN) Reference Architecture pcx_content_type: reference-architecture -products: - - Cache - - CDN +products: [cache] sidebar: order: 1 label: Content Delivery Network (CDN) diff --git a/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-microsoft.mdx b/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-microsoft.mdx index 116c023309d51f7..aaabfc766461ef8 100644 --- a/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-microsoft.mdx +++ b/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-microsoft.mdx @@ -1,11 +1,7 @@ --- title: Reference Architecture using Cloudflare SASE with Microsoft pcx_content_type: reference-architecture -products: - - Access - - Gateway - - CASB - - Email Security +products: [access, casb, gateway, email-security-cf1] sidebar: order: 1 label: Cloudflare SASE with Microsoft diff --git a/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-sentinelone.mdx b/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-sentinelone.mdx index 8cb327e5a1228a8..644779f2325b807 100644 --- a/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-sentinelone.mdx +++ b/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-sentinelone.mdx @@ -1,10 +1,7 @@ --- title: Enhancing security posture with SentinelOne and Cloudflare One pcx_content_type: reference-architecture -products: - - Access - - Gateway - - Zero Trust WARP Client +products: [access, gateway, zero-trust-warp] sidebar: order: 1 label: Cloudflare SASE with SentinelOne diff --git a/src/content/docs/reference-architecture/architectures/load-balancing.mdx b/src/content/docs/reference-architecture/architectures/load-balancing.mdx index b863974906d3660..889d37150babac1 100644 --- a/src/content/docs/reference-architecture/architectures/load-balancing.mdx +++ b/src/content/docs/reference-architecture/architectures/load-balancing.mdx @@ -1,8 +1,7 @@ --- title: Load Balancing Reference Architecture pcx_content_type: reference-architecture -products: - - Load Balancing +products: [load-balancing] sidebar: order: 1 label: Load Balancing diff --git a/src/content/docs/reference-architecture/architectures/magic-transit.mdx b/src/content/docs/reference-architecture/architectures/magic-transit.mdx index d97d087538a7336..b20cd33a86b247c 100644 --- a/src/content/docs/reference-architecture/architectures/magic-transit.mdx +++ b/src/content/docs/reference-architecture/architectures/magic-transit.mdx @@ -1,9 +1,7 @@ --- title: Magic Transit Reference Architecture pcx_content_type: reference-architecture -products: - - Magic Transit - - Network Interconnect +products: [magic-transit, network-interconnect] sidebar: order: 1 label: Magic Transit diff --git a/src/content/docs/reference-architecture/architectures/multi-vendor.mdx b/src/content/docs/reference-architecture/architectures/multi-vendor.mdx index c64a319f577fcfd..83dea1175acdb07 100644 --- a/src/content/docs/reference-architecture/architectures/multi-vendor.mdx +++ b/src/content/docs/reference-architecture/architectures/multi-vendor.mdx @@ -1,9 +1,7 @@ --- title: Multi-vendor Application Security and Performance Reference Architecture pcx_content_type: reference-architecture -products: - - DNS - - Network Interconnect +products: [dns, network-interconnect] sidebar: order: 1 label: Multi-Vendor Architecture diff --git a/src/content/docs/reference-architecture/architectures/sase.mdx b/src/content/docs/reference-architecture/architectures/sase.mdx index ae84376b102cd70..f13248355718e78 100644 --- a/src/content/docs/reference-architecture/architectures/sase.mdx +++ b/src/content/docs/reference-architecture/architectures/sase.mdx @@ -1,17 +1,7 @@ --- title: Evolving to a SASE architecture with Cloudflare pcx_content_type: reference-architecture -products: - - Access - - Gateway - - CASB - - Email Security - - Digital Experience Monitoring - - Browser Isolation - - Data Loss Prevention - - Magic WAN - - Magic Firewall - - Magic Transit +products: [access, gateway, casb, email-security-cf1, dex, browser-isolation, dlp, magic-wan, magic-firewall, magic-transit] sidebar: order: 1 label: Secure Access Service Edge (SASE) diff --git a/src/content/docs/reference-architecture/architectures/security.mdx b/src/content/docs/reference-architecture/architectures/security.mdx index b7423f3f1ce94be..c584cb8152e1870 100644 --- a/src/content/docs/reference-architecture/architectures/security.mdx +++ b/src/content/docs/reference-architecture/architectures/security.mdx @@ -1,28 +1,7 @@ --- title: Cloudflare Security Architecture pcx_content_type: reference-architecture -products: - - Workers - - Turnstile - - Access - - Gateway - - CASB - - Email Security - - Data Loss Prevention - - Magic WAN - - Magic Firewall - - Magic Transit - - API Shield - - Bots - - Data Localization Suite - - DDoS Protection - - DNS Firewall - - Page Shield - - SSL/TLS - - Spectrum - - Security Center - - Turnstile - - WAF +products: [access, casb, dlp, gateway, email-security-cf1, workers, turnstile, magic-wan, magic-firewall, magic-transit, api-shield, bots, ddos-protection, dns-firewall, page-shield, ssl, spectrum, security-center, waf] sidebar: order: 1 label: Security Architecture diff --git a/src/content/docs/reference-architecture/design-guides/designing-ztna-access-policies.mdx b/src/content/docs/reference-architecture/design-guides/designing-ztna-access-policies.mdx index 3ad17db8be2d499..8f49299f3c10551 100644 --- a/src/content/docs/reference-architecture/design-guides/designing-ztna-access-policies.mdx +++ b/src/content/docs/reference-architecture/design-guides/designing-ztna-access-policies.mdx @@ -1,9 +1,7 @@ --- title: Designing ZTNA access policies for Cloudflare Access pcx_content_type: design-guide -products: - - Gateway - - Access +products: [gateway, access] sidebar: label: "Designing ZTNA access policies" reviewed: 2024-11-27 diff --git a/src/content/docs/reference-architecture/design-guides/extending-cloudflares-benefits-to-saas-providers-end-customers.mdx b/src/content/docs/reference-architecture/design-guides/extending-cloudflares-benefits-to-saas-providers-end-customers.mdx index a439a67d80a02bb..15e338952081f94 100644 --- a/src/content/docs/reference-architecture/design-guides/extending-cloudflares-benefits-to-saas-providers-end-customers.mdx +++ b/src/content/docs/reference-architecture/design-guides/extending-cloudflares-benefits-to-saas-providers-end-customers.mdx @@ -1,12 +1,7 @@ --- title: Extend Cloudflare's benefits to SaaS providers' end-customers pcx_content_type: design-guide -products: - - Cloudflare for SaaS - - Cloudflare Tunnel - - Load Balancing - - Data Localization Suite -weight: null +products: [cloudflare-tunnel, cloudflare-for-saas, load-balancing, data-localization] sidebar: order: 1 label: Cloudflare's benefits for SaaS providers diff --git a/src/content/docs/reference-architecture/design-guides/leveraging-cloudflare-for-your-saas-applications.mdx b/src/content/docs/reference-architecture/design-guides/leveraging-cloudflare-for-your-saas-applications.mdx index a52df99e85e1eef..412199dd1d99a27 100644 --- a/src/content/docs/reference-architecture/design-guides/leveraging-cloudflare-for-your-saas-applications.mdx +++ b/src/content/docs/reference-architecture/design-guides/leveraging-cloudflare-for-your-saas-applications.mdx @@ -1,12 +1,7 @@ --- title: Leveraging Cloudflare for your SaaS applications pcx_content_type: design-guide -products: - - Cloudflare for SaaS - - Cloudflare Tunnel - - Load Balancing - - Data Localization Suite -weight: null +products: [cloudflare-for-saas, cloudflare-tunnel, load-balancing, data-localization] sidebar: order: 1 label: Leveraging Cloudflare for your SaaS applications diff --git a/src/content/docs/reference-architecture/design-guides/network-vpn-migration.mdx b/src/content/docs/reference-architecture/design-guides/network-vpn-migration.mdx index 0ebad4ab1968f06..e99a995eb3a6b42 100644 --- a/src/content/docs/reference-architecture/design-guides/network-vpn-migration.mdx +++ b/src/content/docs/reference-architecture/design-guides/network-vpn-migration.mdx @@ -1,11 +1,7 @@ --- title: Network-focused migration from VPN concentrators to Zero Trust Network Access pcx_content_type: design-guide -products: - - Magic WAN - - Gateway - - Access - - Network Interconnect +products: [access, gateway, magic-wan, network-interconnect] sidebar: label: "Network-focused VPN migration" reviewed: 2024-09-17 diff --git a/src/content/docs/reference-architecture/design-guides/secure-application-delivery.mdx b/src/content/docs/reference-architecture/design-guides/secure-application-delivery.mdx index b05be4b8d08f338..3cdd17a2dac95f1 100644 --- a/src/content/docs/reference-architecture/design-guides/secure-application-delivery.mdx +++ b/src/content/docs/reference-architecture/design-guides/secure-application-delivery.mdx @@ -1,8 +1,7 @@ --- title: Securely deliver applications with Cloudflare pcx_content_type: design-guide -products: - - Network Interconnect +products: [network-interconnect] sidebar: label: Secure application delivery reviewed: 2023-12-18 diff --git a/src/content/docs/reference-architecture/design-guides/securing-guest-wireless-networks.mdx b/src/content/docs/reference-architecture/design-guides/securing-guest-wireless-networks.mdx index 46cad4e7d396f43..9c027f55d1e45e8 100644 --- a/src/content/docs/reference-architecture/design-guides/securing-guest-wireless-networks.mdx +++ b/src/content/docs/reference-architecture/design-guides/securing-guest-wireless-networks.mdx @@ -1,9 +1,7 @@ --- title: Securing guest wireless networks pcx_content_type: design-guide -products: - - Gateway - - Magic WAN +products: [gateway, magic-wan] tags: - IPv6 sidebar: diff --git a/src/content/docs/reference-architecture/design-guides/streamlined-waf-deployment-across-zones-and-applications.mdx b/src/content/docs/reference-architecture/design-guides/streamlined-waf-deployment-across-zones-and-applications.mdx index 49d08f90faf0092..54f985e33bf652c 100644 --- a/src/content/docs/reference-architecture/design-guides/streamlined-waf-deployment-across-zones-and-applications.mdx +++ b/src/content/docs/reference-architecture/design-guides/streamlined-waf-deployment-across-zones-and-applications.mdx @@ -1,8 +1,7 @@ --- title: Streamlined WAF deployment across zones and applications pcx_content_type: design-guide -products: - - Account Level WAF +products: [waf] sidebar: label: Streamlined WAF deployment across zones and applications reviewed: 2024-12-11 diff --git a/src/content/docs/reference-architecture/design-guides/zero-trust-for-saas.mdx b/src/content/docs/reference-architecture/design-guides/zero-trust-for-saas.mdx index f6d86c843b242a1..6a19d541882219b 100644 --- a/src/content/docs/reference-architecture/design-guides/zero-trust-for-saas.mdx +++ b/src/content/docs/reference-architecture/design-guides/zero-trust-for-saas.mdx @@ -1,15 +1,7 @@ --- title: Using a zero trust framework to secure SaaS applications pcx_content_type: design-guide -products: - - Cloudflare One - - Cloudflare Access - - Cloudflare Gateway - - Data Loss Prevention - - Cloud Access Security Broker - - Remote Browser Isolation - - Cloud Email Security - - Magic WAN +products: [access, browser-isolation, cloudflare-one, casb, dlp, email-security-cf1, gateway, magic-wan] sidebar: order: 1 label: Zero Trust for SaaS applications diff --git a/src/content/docs/reference-architecture/design-guides/zero-trust-for-startups.mdx b/src/content/docs/reference-architecture/design-guides/zero-trust-for-startups.mdx index 6f47bf7e1916c73..738f5c2730c5f43 100644 --- a/src/content/docs/reference-architecture/design-guides/zero-trust-for-startups.mdx +++ b/src/content/docs/reference-architecture/design-guides/zero-trust-for-startups.mdx @@ -1,17 +1,7 @@ --- title: Building zero trust architecture into your startup pcx_content_type: design-guide -products: - - Access - - Gateway - - CASB - - Email Security - - Digital Experience Monitoring - - Browser Isolation - - Data Loss Prevention - - Magic WAN - - Magic Firewall - - Magic Transit +products: [access, browser-isolation, casb, dlp, email-security-cf1, gateway, magic-firewall, magic-transit, magic-wan] sidebar: label: Zero trust architecture for startups reviewed: 2024-04-25 diff --git a/src/content/docs/reference-architecture/diagrams/ai/ai-asset-creation.mdx b/src/content/docs/reference-architecture/diagrams/ai/ai-asset-creation.mdx index 004c132e8a1d18d..1562d5e6fc719ec 100644 --- a/src/content/docs/reference-architecture/diagrams/ai/ai-asset-creation.mdx +++ b/src/content/docs/reference-architecture/diagrams/ai/ai-asset-creation.mdx @@ -1,8 +1,7 @@ --- title: "Content-based asset creation" pcx_content_type: reference-architecture-diagram -products: - - Workers AI +products: [workers-ai] tags: - AI sidebar: diff --git a/src/content/docs/reference-architecture/diagrams/ai/ai-composable.mdx b/src/content/docs/reference-architecture/diagrams/ai/ai-composable.mdx index 73010d4ec0ed708..9a7b25664538380 100644 --- a/src/content/docs/reference-architecture/diagrams/ai/ai-composable.mdx +++ b/src/content/docs/reference-architecture/diagrams/ai/ai-composable.mdx @@ -1,12 +1,7 @@ --- title: Composable AI architecture pcx_content_type: reference-architecture-diagram -products: - - Workers AI - - Workers - - Vectorize - - D1 - - R2 +products: [d1, r2, vectorize, workers, workers-ai] tags: - AI sidebar: diff --git a/src/content/docs/reference-architecture/diagrams/ai/ai-multivendor-observability-control.mdx b/src/content/docs/reference-architecture/diagrams/ai/ai-multivendor-observability-control.mdx index 382863c1ec6a232..63ff49939b091ab 100644 --- a/src/content/docs/reference-architecture/diagrams/ai/ai-multivendor-observability-control.mdx +++ b/src/content/docs/reference-architecture/diagrams/ai/ai-multivendor-observability-control.mdx @@ -1,9 +1,7 @@ --- title: Multi-vendor AI observability and control pcx_content_type: reference-architecture-diagram -products: - - Workers AI - - AI Gateway +products: [ai-gateway, workers-ai] tags: - AI sidebar: diff --git a/src/content/docs/reference-architecture/diagrams/ai/ai-rag.mdx b/src/content/docs/reference-architecture/diagrams/ai/ai-rag.mdx index 8450f35d84285e7..517e4484ca0729e 100644 --- a/src/content/docs/reference-architecture/diagrams/ai/ai-rag.mdx +++ b/src/content/docs/reference-architecture/diagrams/ai/ai-rag.mdx @@ -3,13 +3,7 @@ title: "Retrieval Augmented Generation (RAG)" pcx_content_type: reference-architecture-diagram tags: - AI -products: - - AI Search - - Workers AI - - Workers - - Queues - - Vectorize - - D1 +products: [ai-search, d1, queues, vectorize, workers, workers-ai] sidebar: order: 1 label: Retrieval Augmented Generation (RAG) diff --git a/src/content/docs/reference-architecture/diagrams/ai/ai-vibe-coding-platform.mdx b/src/content/docs/reference-architecture/diagrams/ai/ai-vibe-coding-platform.mdx index 60e0d2735e1e375..619f217e14ef3d6 100644 --- a/src/content/docs/reference-architecture/diagrams/ai/ai-vibe-coding-platform.mdx +++ b/src/content/docs/reference-architecture/diagrams/ai/ai-vibe-coding-platform.mdx @@ -1,9 +1,7 @@ --- title: AI Vibe Coding Platform pcx_content_type: reference-architecture-diagram -products: - - Workers for Platforms - - AI Gateway +products: [ai-gateway, workers-for-platforms] sidebar: order: 0 label: AI Vibe Coding Platform diff --git a/src/content/docs/reference-architecture/diagrams/ai/ai-video-caption.mdx b/src/content/docs/reference-architecture/diagrams/ai/ai-video-caption.mdx index f07e8650ca414e5..f8cfb36d84c54c5 100644 --- a/src/content/docs/reference-architecture/diagrams/ai/ai-video-caption.mdx +++ b/src/content/docs/reference-architecture/diagrams/ai/ai-video-caption.mdx @@ -3,11 +3,7 @@ title: Automatic captioning for video uploads pcx_content_type: reference-architecture-diagram tags: - AI -products: - - Workers AI - - Workers - - Cache / CDN - - R2 +products: [cache, r2, workers, workers-ai] sidebar: order: 1 label: Automatic captioning for video uploads diff --git a/src/content/docs/reference-architecture/diagrams/ai/bigquery-workers-ai.mdx b/src/content/docs/reference-architecture/diagrams/ai/bigquery-workers-ai.mdx index fbc83385608e326..447b51f4b1c1251 100644 --- a/src/content/docs/reference-architecture/diagrams/ai/bigquery-workers-ai.mdx +++ b/src/content/docs/reference-architecture/diagrams/ai/bigquery-workers-ai.mdx @@ -3,13 +3,7 @@ title: "Ingesting BigQuery Data into Workers AI" pcx_content_type: reference-architecture-diagram tags: - AI -products: - - Workers AI - - Workers - - R2 - - Vectorize - - D1 - - Workers KV +products: [d1, kv, r2, vectorize, workers, workers-ai] sidebar: order: 1 label: Ingesting BigQuery Data into Workers AI diff --git a/src/content/docs/reference-architecture/diagrams/bots/bot-management.mdx b/src/content/docs/reference-architecture/diagrams/bots/bot-management.mdx index 17eb73988821b47..9239538b18254c1 100644 --- a/src/content/docs/reference-architecture/diagrams/bots/bot-management.mdx +++ b/src/content/docs/reference-architecture/diagrams/bots/bot-management.mdx @@ -1,8 +1,7 @@ --- title: Bot management pcx_content_type: reference-architecture-diagram -products: - - Bots +products: [bots] sidebar: order: 1 label: Bot management diff --git a/src/content/docs/reference-architecture/diagrams/content-delivery/optimizing-image-delivery-with-cloudflare-image-resizing-and-r2.mdx b/src/content/docs/reference-architecture/diagrams/content-delivery/optimizing-image-delivery-with-cloudflare-image-resizing-and-r2.mdx index 09cf95c6a3bf58e..e7501f2098e2ec3 100644 --- a/src/content/docs/reference-architecture/diagrams/content-delivery/optimizing-image-delivery-with-cloudflare-image-resizing-and-r2.mdx +++ b/src/content/docs/reference-architecture/diagrams/content-delivery/optimizing-image-delivery-with-cloudflare-image-resizing-and-r2.mdx @@ -1,11 +1,7 @@ --- title: Optimizing image delivery with Cloudflare image resizing and R2 pcx_content_type: reference-architecture-diagram -products: - - Images - - R2 - - Cache / CDN - - Transform Rules +products: [cache, images, r2, transform-rules] sidebar: order: 1 label: Optimizing image delivery diff --git a/src/content/docs/reference-architecture/diagrams/iot/optimizing-and-securing-connected-transportation-systems.mdx b/src/content/docs/reference-architecture/diagrams/iot/optimizing-and-securing-connected-transportation-systems.mdx index 815b7dfac2630e5..0e82981e3eafb7b 100644 --- a/src/content/docs/reference-architecture/diagrams/iot/optimizing-and-securing-connected-transportation-systems.mdx +++ b/src/content/docs/reference-architecture/diagrams/iot/optimizing-and-securing-connected-transportation-systems.mdx @@ -1,23 +1,7 @@ --- title: Optimizing and securing connected transportation systems pcx_content_type: reference-architecture-diagram -products: - - Access - - Gateway - - Workers - - DDoS Protection - - DNS Firewall - - SSL/TLS - - WAF - - KV - - D1 - - Durable Objects - - Workers AI - - R2 - - WAF - - Load Balancing - - Cache - - CDN +products: [argo-smart-routing, api-shield, cache, ddos-protection, dns-firewall, load-balancing, r2, workers, ssl, waf, workers-ai] sidebar: order: 1 label: Connected transportation systems diff --git a/src/content/docs/reference-architecture/diagrams/network/bring-your-own-ip-space-to-cloudflare.mdx b/src/content/docs/reference-architecture/diagrams/network/bring-your-own-ip-space-to-cloudflare.mdx index a0891a9ece36544..88d3fcf2d7ac9a1 100644 --- a/src/content/docs/reference-architecture/diagrams/network/bring-your-own-ip-space-to-cloudflare.mdx +++ b/src/content/docs/reference-architecture/diagrams/network/bring-your-own-ip-space-to-cloudflare.mdx @@ -1,9 +1,7 @@ --- title: Bring your own IP space to Cloudflare pcx_content_type: reference-architecture-diagram -products: - - DDoS Protection - - BYOIP +products: [byoip, ddos-protection] sidebar: order: 1 label: BYOIP to Cloudflare diff --git a/src/content/docs/reference-architecture/diagrams/network/optimizing-roaming-experience-with-geolocated-ips.mdx b/src/content/docs/reference-architecture/diagrams/network/optimizing-roaming-experience-with-geolocated-ips.mdx index f32ead808ec265e..1791161bac874a2 100644 --- a/src/content/docs/reference-architecture/diagrams/network/optimizing-roaming-experience-with-geolocated-ips.mdx +++ b/src/content/docs/reference-architecture/diagrams/network/optimizing-roaming-experience-with-geolocated-ips.mdx @@ -1,9 +1,7 @@ --- title: Optimizing device roaming experience with geolocated IPs pcx_content_type: reference-architecture-diagram -products: - - Magic WAN - - Gateway +products: [gateway, magic-wan] sidebar: order: 1 label: Device roaming with geolocated IPs diff --git a/src/content/docs/reference-architecture/diagrams/network/protect-data-center-networks.mdx b/src/content/docs/reference-architecture/diagrams/network/protect-data-center-networks.mdx index 84153a11d6d12ca..b6765ab5e2740cb 100644 --- a/src/content/docs/reference-architecture/diagrams/network/protect-data-center-networks.mdx +++ b/src/content/docs/reference-architecture/diagrams/network/protect-data-center-networks.mdx @@ -1,13 +1,7 @@ --- title: Protect data center networks pcx_content_type: reference-architecture-diagram -products: - - Magic Firewall - - Network Interconnect - - DDoS Protection - - Magic Transit - - Magic WAN - - Gateway +products: [ddos-protection, gateway, magic-firewall, magic-transit, magic-wan, network-interconnect] sidebar: order: 1 label: Protect data center networks diff --git a/src/content/docs/reference-architecture/diagrams/network/protect-hybrid-cloud-networks-with-cloudflare-magic-transit.mdx b/src/content/docs/reference-architecture/diagrams/network/protect-hybrid-cloud-networks-with-cloudflare-magic-transit.mdx index 80641ffc3857cee..b4b14f00dee8dea 100644 --- a/src/content/docs/reference-architecture/diagrams/network/protect-hybrid-cloud-networks-with-cloudflare-magic-transit.mdx +++ b/src/content/docs/reference-architecture/diagrams/network/protect-hybrid-cloud-networks-with-cloudflare-magic-transit.mdx @@ -1,12 +1,7 @@ --- title: Protect hybrid cloud networks with Cloudflare Magic Transit pcx_content_type: reference-architecture-diagram -products: - - Magic Firewall - - Network Interconnect - - DDoS Protection - - Magic Transit - - BYOIP +products: [byoip, ddos-protection, magic-firewall, magic-transit, network-interconnect] sidebar: order: 1 label: Protect hybrid cloud networks diff --git a/src/content/docs/reference-architecture/diagrams/network/protect-public-networks-with-cloudflare.mdx b/src/content/docs/reference-architecture/diagrams/network/protect-public-networks-with-cloudflare.mdx index 5bf3170716792cb..2fc1525e66718fc 100644 --- a/src/content/docs/reference-architecture/diagrams/network/protect-public-networks-with-cloudflare.mdx +++ b/src/content/docs/reference-architecture/diagrams/network/protect-public-networks-with-cloudflare.mdx @@ -1,12 +1,7 @@ --- title: Protect public networks with Cloudflare pcx_content_type: reference-architecture-diagram -products: - - Magic Firewall - - Network Interconnect - - DDoS Protection - - Magic Transit - - Gateway +products: [ddos-protection, gateway, magic-firewall, magic-transit, network-interconnect] sidebar: order: 1 label: Protect public networks diff --git a/src/content/docs/reference-architecture/diagrams/network/protecting-sp-networks-from-ddos.mdx b/src/content/docs/reference-architecture/diagrams/network/protecting-sp-networks-from-ddos.mdx index 6f1995efb06648a..0814631ec033c2d 100644 --- a/src/content/docs/reference-architecture/diagrams/network/protecting-sp-networks-from-ddos.mdx +++ b/src/content/docs/reference-architecture/diagrams/network/protecting-sp-networks-from-ddos.mdx @@ -1,9 +1,7 @@ --- title: Protect ISP and telecommunications networks from DDoS attacks pcx_content_type: reference-architecture-diagram -products: - - Magic Transit - - Network Interconnect +products: [magic-transit, network-interconnect] sidebar: order: 1 label: Protect ISP and telecommunications networks from DDoS attacks diff --git a/src/content/docs/reference-architecture/diagrams/sase/augment-access-with-serverless.mdx b/src/content/docs/reference-architecture/diagrams/sase/augment-access-with-serverless.mdx index 1e9d8f45ebcfb0d..3fd20b3998dc239 100644 --- a/src/content/docs/reference-architecture/diagrams/sase/augment-access-with-serverless.mdx +++ b/src/content/docs/reference-architecture/diagrams/sase/augment-access-with-serverless.mdx @@ -1,9 +1,7 @@ --- title: Extend ZTNA with external authorization and serverless computing pcx_content_type: reference-architecture-diagram -products: - - Access - - Workers +products: [access, workers] sidebar: order: 1 label: ZTNA with external authorization diff --git a/src/content/docs/reference-architecture/diagrams/sase/deploying-self-hosted-VoIP-services-for-hybrid-users.mdx b/src/content/docs/reference-architecture/diagrams/sase/deploying-self-hosted-VoIP-services-for-hybrid-users.mdx index 72e83b83eb48a2f..69c3a3ba3d7d12f 100644 --- a/src/content/docs/reference-architecture/diagrams/sase/deploying-self-hosted-VoIP-services-for-hybrid-users.mdx +++ b/src/content/docs/reference-architecture/diagrams/sase/deploying-self-hosted-VoIP-services-for-hybrid-users.mdx @@ -1,9 +1,7 @@ --- title: Deploy self-hosted VoIP services for hybrid users pcx_content_type: reference-architecture-diagram -products: - - Access - - Gateway +products: [access, gateway] sidebar: order: 1 label: Self-hosted VoIP for hybrid users diff --git a/src/content/docs/reference-architecture/diagrams/sase/gateway-dns-for-isp.mdx b/src/content/docs/reference-architecture/diagrams/sase/gateway-dns-for-isp.mdx index 525f6c5dba971af..872ef24d7aa8a07 100644 --- a/src/content/docs/reference-architecture/diagrams/sase/gateway-dns-for-isp.mdx +++ b/src/content/docs/reference-architecture/diagrams/sase/gateway-dns-for-isp.mdx @@ -1,8 +1,7 @@ --- title: DNS filtering solution for Internet service providers pcx_content_type: reference-architecture-diagram -products: - - Gateway +products: [gateway] sidebar: order: 1 label: DNS filtering solution for Internet service providers diff --git a/src/content/docs/reference-architecture/diagrams/sase/gateway-for-protective-dns.mdx b/src/content/docs/reference-architecture/diagrams/sase/gateway-for-protective-dns.mdx index 08ae8155ad0e780..43c793bdeb8231b 100644 --- a/src/content/docs/reference-architecture/diagrams/sase/gateway-for-protective-dns.mdx +++ b/src/content/docs/reference-architecture/diagrams/sase/gateway-for-protective-dns.mdx @@ -1,8 +1,7 @@ --- title: Protective DNS for governments pcx_content_type: reference-architecture-diagram -products: - - Cloudflare Gateway +products: [gateway] sidebar: order: 1 label: Protective DNS for governments diff --git a/src/content/docs/reference-architecture/diagrams/sase/magic-wan-connector-deployment.mdx b/src/content/docs/reference-architecture/diagrams/sase/magic-wan-connector-deployment.mdx index 67edbe541dc59ce..f303e4fea50292f 100644 --- a/src/content/docs/reference-architecture/diagrams/sase/magic-wan-connector-deployment.mdx +++ b/src/content/docs/reference-architecture/diagrams/sase/magic-wan-connector-deployment.mdx @@ -1,8 +1,7 @@ --- title: Magic WAN Connector deployment options pcx_content_type: reference-architecture-diagram -products: - - Magic WAN +products: [magic-wan] sidebar: order: 1 label: Magic WAN Connector deployment diff --git a/src/content/docs/reference-architecture/diagrams/sase/sase-clientless-access-private-dns.mdx b/src/content/docs/reference-architecture/diagrams/sase/sase-clientless-access-private-dns.mdx index 462176b69548505..b742f44a9e40055 100644 --- a/src/content/docs/reference-architecture/diagrams/sase/sase-clientless-access-private-dns.mdx +++ b/src/content/docs/reference-architecture/diagrams/sase/sase-clientless-access-private-dns.mdx @@ -1,10 +1,7 @@ --- title: Access to private apps without having to deploy client agents pcx_content_type: reference-architecture-diagram -products: - - Access - - Browser Isolation - - Gateway +products: [access, browser-isolation, gateway] sidebar: order: 1 label: Access to private apps without having to deploy client agents diff --git a/src/content/docs/reference-architecture/diagrams/sase/secure-access-to-saas-applications-with-sase.mdx b/src/content/docs/reference-architecture/diagrams/sase/secure-access-to-saas-applications-with-sase.mdx index f685983868e9bb5..5174a741fb4e1fe 100644 --- a/src/content/docs/reference-architecture/diagrams/sase/secure-access-to-saas-applications-with-sase.mdx +++ b/src/content/docs/reference-architecture/diagrams/sase/secure-access-to-saas-applications-with-sase.mdx @@ -1,10 +1,7 @@ --- title: Secure access to SaaS applications with SASE pcx_content_type: reference-architecture-diagram -products: - - Access - - Browser Isolation - - Gateway +products: [access, browser-isolation, gateway] sidebar: order: 1 label: Secure access to SaaS applications diff --git a/src/content/docs/reference-architecture/diagrams/sase/zero-trust-and-virtual-desktop-infrastructure.mdx b/src/content/docs/reference-architecture/diagrams/sase/zero-trust-and-virtual-desktop-infrastructure.mdx index ebe443433dd51d2..3212e60ff333587 100644 --- a/src/content/docs/reference-architecture/diagrams/sase/zero-trust-and-virtual-desktop-infrastructure.mdx +++ b/src/content/docs/reference-architecture/diagrams/sase/zero-trust-and-virtual-desktop-infrastructure.mdx @@ -1,9 +1,7 @@ --- title: Zero Trust and Virtual Desktop Infrastructure pcx_content_type: reference-architecture-diagram -products: - - Gateway - - Access +products: [access, gateway] sidebar: order: 1 label: Zero Trust and Virtual Desktop Infrastructure diff --git a/src/content/docs/reference-architecture/diagrams/security/securing-data-in-transit.mdx b/src/content/docs/reference-architecture/diagrams/security/securing-data-in-transit.mdx index e22618dd084eb7e..791e5f098d397c3 100644 --- a/src/content/docs/reference-architecture/diagrams/security/securing-data-in-transit.mdx +++ b/src/content/docs/reference-architecture/diagrams/security/securing-data-in-transit.mdx @@ -8,8 +8,7 @@ head: - tag: title content: "Reference Architecture Diagram: Securing data in transit" reviewed: 2024-05-01 -products: - - DLP +products: [dlp] description: >- Data in transit is often considered vulnerable to interception or tampering during transmission. Data Loss Prevention (DLP) technologies can be used to inspect the contents of network traffic and block sensitive data from going to a risky destination. --- diff --git a/src/content/docs/reference-architecture/diagrams/security/securing-data-in-use.mdx b/src/content/docs/reference-architecture/diagrams/security/securing-data-in-use.mdx index 7cb152162ffc2f5..a13fa6827898f23 100644 --- a/src/content/docs/reference-architecture/diagrams/security/securing-data-in-use.mdx +++ b/src/content/docs/reference-architecture/diagrams/security/securing-data-in-use.mdx @@ -5,8 +5,7 @@ sidebar: order: 1 label: Securing data in use reviewed: 2024-05-01 -products: - - Browser Isolation +products: [browser-isolation] description: >- Learn how Cloudflare's Remote Browser Isolation (RBI) works and secures data in use. --- diff --git a/src/content/docs/reference-architecture/diagrams/serverless/a-b-testing-using-workers.mdx b/src/content/docs/reference-architecture/diagrams/serverless/a-b-testing-using-workers.mdx index 2ccb30df84dc8e8..4d4d529cbaad94b 100644 --- a/src/content/docs/reference-architecture/diagrams/serverless/a-b-testing-using-workers.mdx +++ b/src/content/docs/reference-architecture/diagrams/serverless/a-b-testing-using-workers.mdx @@ -1,9 +1,7 @@ --- title: A/B-testing using Workers pcx_content_type: reference-architecture-diagram -products: - - Workers - - KV +products: [workers, kv] sidebar: order: 1 label: A/B-testing using Workers diff --git a/src/content/docs/reference-architecture/diagrams/serverless/fullstack-application.mdx b/src/content/docs/reference-architecture/diagrams/serverless/fullstack-application.mdx index 3ecd7f7cfc94620..be169cd2360397e 100644 --- a/src/content/docs/reference-architecture/diagrams/serverless/fullstack-application.mdx +++ b/src/content/docs/reference-architecture/diagrams/serverless/fullstack-application.mdx @@ -1,30 +1,7 @@ --- title: Fullstack applications pcx_content_type: reference-architecture-diagram -products: - - Workers - - KV - - D1 - - Durable Objects - - Workers AI - - Pages - - Logs - - R2 - - Stream - - Images - - Realtime - - WAF - - Bots - - SSL/TLS - - DDoS protection - - API Shield - - Workflows - - Queues - - Pipelines - - Agents - - Vectorize - - AI Gateway - - Containers +products: [ai-gateway, agents, api-shield, bots, containers, d1, ddos-protection, durable-objects, images, kv, logs, pages, pipelines, queues, r2, realtime, ssl, stream, vectorize, waf, workflows, workers, workers-ai] sidebar: order: 1 label: Fullstack applications diff --git a/src/content/docs/reference-architecture/diagrams/serverless/programmable-platforms.mdx b/src/content/docs/reference-architecture/diagrams/serverless/programmable-platforms.mdx index 9d7ff5facb20dc4..accc85b65956e4f 100644 --- a/src/content/docs/reference-architecture/diagrams/serverless/programmable-platforms.mdx +++ b/src/content/docs/reference-architecture/diagrams/serverless/programmable-platforms.mdx @@ -1,9 +1,7 @@ --- title: Programmable Platforms pcx_content_type: reference-architecture-diagram -products: - - workers-for-platforms - - KV +products: [workers-for-platforms, kv] sidebar: order: 1 label: Programmable Platforms diff --git a/src/content/docs/reference-architecture/diagrams/serverless/serverless-etl.mdx b/src/content/docs/reference-architecture/diagrams/serverless/serverless-etl.mdx index 96359f81e2cef87..ffee80fd3505850 100644 --- a/src/content/docs/reference-architecture/diagrams/serverless/serverless-etl.mdx +++ b/src/content/docs/reference-architecture/diagrams/serverless/serverless-etl.mdx @@ -1,10 +1,7 @@ --- title: Serverless ETL pipelines pcx_content_type: reference-architecture-diagram -products: - - Workers - - Queues - - R2 +products: [queues, r2, workers] sidebar: order: 1 label: Serverless ETL pipelines diff --git a/src/content/docs/reference-architecture/diagrams/serverless/serverless-global-apis.mdx b/src/content/docs/reference-architecture/diagrams/serverless/serverless-global-apis.mdx index 94526ca9296caf2..431b43b31e7223c 100644 --- a/src/content/docs/reference-architecture/diagrams/serverless/serverless-global-apis.mdx +++ b/src/content/docs/reference-architecture/diagrams/serverless/serverless-global-apis.mdx @@ -1,11 +1,7 @@ --- title: Serverless global APIs pcx_content_type: reference-architecture-diagram -products: - - Workers - - KV - - D1 - - Hyperdrive +products: [d1, hyperdrive, kv, workers] sidebar: order: 1 label: Serverless global APIs diff --git a/src/content/docs/reference-architecture/diagrams/serverless/serverless-image-content-management.mdx b/src/content/docs/reference-architecture/diagrams/serverless/serverless-image-content-management.mdx index 8c4e593e992038f..3e33274e72cc633 100644 --- a/src/content/docs/reference-architecture/diagrams/serverless/serverless-image-content-management.mdx +++ b/src/content/docs/reference-architecture/diagrams/serverless/serverless-image-content-management.mdx @@ -1,14 +1,7 @@ --- title: Serverless image content management pcx_content_type: reference-architecture-diagram -products: - - KV - - R2 - - Workers AI - - WAF - - DDoS protection - - Workers - - Bots +products: [bots, ddos-protection, kv, r2, waf, workers, workers-ai] sidebar: order: 1 label: Serverless image content management diff --git a/src/content/docs/reference-architecture/diagrams/storage/durable-object-control-data-plane-pattern.mdx b/src/content/docs/reference-architecture/diagrams/storage/durable-object-control-data-plane-pattern.mdx index d92af0d1725d447..a3e851995d1d6b4 100644 --- a/src/content/docs/reference-architecture/diagrams/storage/durable-object-control-data-plane-pattern.mdx +++ b/src/content/docs/reference-architecture/diagrams/storage/durable-object-control-data-plane-pattern.mdx @@ -1,8 +1,7 @@ --- title: "Control and data plane architectural pattern for Durable Objects" pcx_content_type: reference-architecture-diagram -products: - - Durable Objects +products: [durable-objects] sidebar: order: 1 label: Control and data plane architectural pattern for Durable Objects diff --git a/src/content/docs/reference-architecture/diagrams/storage/egress-free-storage-multi-cloud.mdx b/src/content/docs/reference-architecture/diagrams/storage/egress-free-storage-multi-cloud.mdx index a3451d5e17c843e..b9d9ef9eef10086 100644 --- a/src/content/docs/reference-architecture/diagrams/storage/egress-free-storage-multi-cloud.mdx +++ b/src/content/docs/reference-architecture/diagrams/storage/egress-free-storage-multi-cloud.mdx @@ -1,9 +1,7 @@ --- title: Egress-free object storage in multi-cloud setups pcx_content_type: reference-architecture-diagram -products: - - Workers - - R2 +products: [r2, workers] sidebar: order: 1 label: Egress-free object storage in multi-cloud setups diff --git a/src/content/docs/reference-architecture/diagrams/storage/event-notifications-for-storage.mdx b/src/content/docs/reference-architecture/diagrams/storage/event-notifications-for-storage.mdx index f5fc9164dcdcaa5..7efac66d646f149 100644 --- a/src/content/docs/reference-architecture/diagrams/storage/event-notifications-for-storage.mdx +++ b/src/content/docs/reference-architecture/diagrams/storage/event-notifications-for-storage.mdx @@ -1,9 +1,7 @@ --- title: Event notifications for storage pcx_content_type: reference-architecture-diagram -products: - - R2 - - Workers +products: [r2, workers] sidebar: order: 1 label: Event notifications for storage diff --git a/src/content/docs/reference-architecture/diagrams/storage/on-demand-object-storage-migration.mdx b/src/content/docs/reference-architecture/diagrams/storage/on-demand-object-storage-migration.mdx index b3db2636dfabec5..28ba08a8f7cb524 100644 --- a/src/content/docs/reference-architecture/diagrams/storage/on-demand-object-storage-migration.mdx +++ b/src/content/docs/reference-architecture/diagrams/storage/on-demand-object-storage-migration.mdx @@ -1,8 +1,7 @@ --- title: On-demand Object Storage Data Migration pcx_content_type: reference-architecture-diagram -products: - - R2 +products: [r2] sidebar: order: 1 label: On-demand Object Storage Data Migration diff --git a/src/content/docs/reference-architecture/diagrams/storage/storing-user-generated-content.mdx b/src/content/docs/reference-architecture/diagrams/storage/storing-user-generated-content.mdx index 0ae877ccf7cce78..e66553044d14ebf 100644 --- a/src/content/docs/reference-architecture/diagrams/storage/storing-user-generated-content.mdx +++ b/src/content/docs/reference-architecture/diagrams/storage/storing-user-generated-content.mdx @@ -1,10 +1,7 @@ --- title: Storing user generated content pcx_content_type: reference-architecture-diagram -products: - - R2 - - Workers AI - - Workers +products: [r2, workers, workers-ai] sidebar: order: 1 label: Storing user generated content diff --git a/src/content/docs/rules/cloud-connector/examples/route-images-to-aws-s3-using-terraform.mdx b/src/content/docs/rules/cloud-connector/examples/route-images-to-aws-s3-using-terraform.mdx index 4ea42eb81ad2ab5..bd84c48543b3404 100644 --- a/src/content/docs/rules/cloud-connector/examples/route-images-to-aws-s3-using-terraform.mdx +++ b/src/content/docs/rules/cloud-connector/examples/route-images-to-aws-s3-using-terraform.mdx @@ -1,8 +1,7 @@ --- pcx_content_type: example summary: Route requests with a URI path starting with `/images` to a specific AWS S3 bucket with Cloud Connector using Terraform. -products: - - Cloud Connector +products: [cloud-connector] title: Route /images to an S3 Bucket using Terraform description: Route requests with a URI path starting with `/images` to a specific AWS S3 bucket with Cloud Connector using Terraform. --- diff --git a/src/content/docs/rules/cloud-connector/examples/route-images-to-s3.mdx b/src/content/docs/rules/cloud-connector/examples/route-images-to-s3.mdx index 2ed4dcffbabd107..cbd5efa21554d97 100644 --- a/src/content/docs/rules/cloud-connector/examples/route-images-to-s3.mdx +++ b/src/content/docs/rules/cloud-connector/examples/route-images-to-s3.mdx @@ -3,8 +3,7 @@ title: Route /images to an S3 Bucket pcx_content_type: example summary: Route requests with a URI path starting with `/images` to a specific AWS S3 bucket using Cloud Connector. description: Route requests with a URI path starting with `/images` to a specific AWS S3 bucket using Cloud Connector. -products: - - Cloud Connector +products: [cloud-connector] --- import { Steps, DashButton } from "~/components"; diff --git a/src/content/docs/rules/cloud-connector/examples/send-eu-visitors-to-gcs.mdx b/src/content/docs/rules/cloud-connector/examples/send-eu-visitors-to-gcs.mdx index f3e54389c6bc98d..454d707cd23c7b7 100644 --- a/src/content/docs/rules/cloud-connector/examples/send-eu-visitors-to-gcs.mdx +++ b/src/content/docs/rules/cloud-connector/examples/send-eu-visitors-to-gcs.mdx @@ -3,8 +3,7 @@ title: Send EU visitors to a Google Cloud Storage bucket pcx_content_type: example summary: Route all traffic from EU visitors to a Google Cloud Storage bucket using Cloud Connector. description: Route all traffic from EU visitors to a Google Cloud Storage bucket using Cloud Connector. -products: - - Cloud Connector +products: [cloud-connector] --- import { Steps, DashButton } from "~/components"; diff --git a/src/content/docs/rules/cloud-connector/examples/serve-static-assets-from-azure.mdx b/src/content/docs/rules/cloud-connector/examples/serve-static-assets-from-azure.mdx index 698eb5dd4bd6823..a2708e1f4d72ed7 100644 --- a/src/content/docs/rules/cloud-connector/examples/serve-static-assets-from-azure.mdx +++ b/src/content/docs/rules/cloud-connector/examples/serve-static-assets-from-azure.mdx @@ -3,8 +3,7 @@ title: Serve /static-assets from Azure Blob Storage pcx_content_type: example summary: Route requests with a URI path starting with `/static-assets` to an Azure Blob Storage container using Cloud Connector. description: Route requests with a URI path starting with `/static-assets` to an Azure Blob Storage container using Cloud Connector. -products: - - Cloud Connector +products: [cloud-connector] --- import { Steps, DashButton } from "~/components"; diff --git a/src/content/docs/rules/compression-rules/examples/disable-all-brotli.mdx b/src/content/docs/rules/compression-rules/examples/disable-all-brotli.mdx index 30edde95da3e3c7..199e9946c7fdba8 100644 --- a/src/content/docs/rules/compression-rules/examples/disable-all-brotli.mdx +++ b/src/content/docs/rules/compression-rules/examples/disable-all-brotli.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a compression rule to turn off Brotli compression for all incoming requests of a given zone. -products: - - Compression Rules +products: [compression-rules] title: Disable Brotli compression description: Create a compression rule to turn off Brotli compression for all incoming requests of a given zone. diff --git a/src/content/docs/rules/compression-rules/examples/disable-compression-avif.mdx b/src/content/docs/rules/compression-rules/examples/disable-compression-avif.mdx index 908bc0c408d8c7b..e5e2d698d3444f2 100644 --- a/src/content/docs/rules/compression-rules/examples/disable-compression-avif.mdx +++ b/src/content/docs/rules/compression-rules/examples/disable-compression-avif.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Create a compression rule to turn off compression for AVIF images, based on either the content type or the file extension specified in the request. -products: - - Compression Rules +products: [compression-rules] title: Disable compression for AVIF images description: Create a compression rule to turn off compression for AVIF images, based on either the content type or the file extension specified in the diff --git a/src/content/docs/rules/compression-rules/examples/enable-zstandard.mdx b/src/content/docs/rules/compression-rules/examples/enable-zstandard.mdx index ba03e68ddeb79e2..774012cdbbee064 100644 --- a/src/content/docs/rules/compression-rules/examples/enable-zstandard.mdx +++ b/src/content/docs/rules/compression-rules/examples/enable-zstandard.mdx @@ -1,8 +1,7 @@ --- pcx_content_type: example summary: Create a compression rule to turn on Zstandard compression for response content types where Cloudflare applies compression by default. -products: - - Compression Rules +products: [compression-rules] title: Enable Zstandard compression for default content types description: Create a compression rule to turn on Zstandard compression for response content types where Cloudflare applies compression by default. --- diff --git a/src/content/docs/rules/compression-rules/examples/gzip-for-csv.mdx b/src/content/docs/rules/compression-rules/examples/gzip-for-csv.mdx index 951999d14727273..53cf5c768557895 100644 --- a/src/content/docs/rules/compression-rules/examples/gzip-for-csv.mdx +++ b/src/content/docs/rules/compression-rules/examples/gzip-for-csv.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a compression rule to set Gzip compression as the preferred compression method for CSV files. -products: - - Compression Rules +products: [compression-rules] title: Use Gzip compression for CSV files description: Create a compression rule to set Gzip compression as the preferred compression method for CSV files. diff --git a/src/content/docs/rules/compression-rules/examples/only-brotli-url-path.mdx b/src/content/docs/rules/compression-rules/examples/only-brotli-url-path.mdx index dcaf12bef48ac7a..e65c39be45c73e6 100644 --- a/src/content/docs/rules/compression-rules/examples/only-brotli-url-path.mdx +++ b/src/content/docs/rules/compression-rules/examples/only-brotli-url-path.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a compression rule to set Brotli as the only supported compression algorithm for a specific URI path. -products: - - Compression Rules +products: [compression-rules] title: Use only Brotli compression for a specific path description: Create a compression rule to set Brotli as the only supported compression algorithm for a specific URI path. diff --git a/src/content/docs/rules/configuration-rules/examples/define-single-configuration-terraform.mdx b/src/content/docs/rules/configuration-rules/examples/define-single-configuration-terraform.mdx index 695530b37820372..9fb42cb12bf8dff 100644 --- a/src/content/docs/rules/configuration-rules/examples/define-single-configuration-terraform.mdx +++ b/src/content/docs/rules/configuration-rules/examples/define-single-configuration-terraform.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a configuration rule using Terraform to turn off Email Obfuscation and Browser Integrity Check for API requests in a given zone. -products: - - Configuration Rules +products: [configuration-rules] title: Define a single configuration rule using Terraform description: Create a configuration rule using Terraform to turn off Email Obfuscation and Browser Integrity Check for API requests in a given zone. diff --git a/src/content/docs/rules/origin-rules/examples/change-http-host-header.mdx b/src/content/docs/rules/origin-rules/examples/change-http-host-header.mdx index 612e210490bd33f..670bc66aa187ae4 100644 --- a/src/content/docs/rules/origin-rules/examples/change-http-host-header.mdx +++ b/src/content/docs/rules/origin-rules/examples/change-http-host-header.mdx @@ -1,8 +1,7 @@ --- pcx_content_type: example summary: Create an origin rule to change the HTTP `Host` header and DNS record. -products: - - Origin Rules +products: [origin-rules] title: Change the HTTP Host header and DNS record description: Create an origin rule to change the HTTP `Host` header and the resolved DNS record. --- diff --git a/src/content/docs/rules/origin-rules/examples/change-port.mdx b/src/content/docs/rules/origin-rules/examples/change-port.mdx index 42fbd79fc09603c..66c812e9ff8e201 100644 --- a/src/content/docs/rules/origin-rules/examples/change-port.mdx +++ b/src/content/docs/rules/origin-rules/examples/change-port.mdx @@ -1,8 +1,7 @@ --- pcx_content_type: example summary: Create an origin rule to change the destination port. -products: - - Origin Rules +products: [origin-rules] title: Change the destination port description: Create an origin rule to change the destination port. --- diff --git a/src/content/docs/rules/origin-rules/examples/define-single-origin-terraform.mdx b/src/content/docs/rules/origin-rules/examples/define-single-origin-terraform.mdx index 3b9d01e05a21e2f..1e6c2fd5a976517 100644 --- a/src/content/docs/rules/origin-rules/examples/define-single-origin-terraform.mdx +++ b/src/content/docs/rules/origin-rules/examples/define-single-origin-terraform.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create an origin rule using Terraform to override the `Host` header, the resolved hostname, and the destination port of API requests. -products: - - Origin Rules +products: [origin-rules] title: Define a single origin rule using Terraform description: Create an origin rule using Terraform to override the `Host` header, the resolved hostname, and the destination port of API requests. diff --git a/src/content/docs/rules/origin-rules/tutorials/change-uri-path-and-host-header.mdx b/src/content/docs/rules/origin-rules/tutorials/change-uri-path-and-host-header.mdx index bc6deb8c841b26f..7a4a68ef2d09222 100644 --- a/src/content/docs/rules/origin-rules/tutorials/change-uri-path-and-host-header.mdx +++ b/src/content/docs/rules/origin-rules/tutorials/change-uri-path-and-host-header.mdx @@ -3,9 +3,7 @@ reviewed: 2025-02-26 difficulty: Beginner pcx_content_type: tutorial title: Change URI path and Host header -products: - - Transform Rules - - Origin Rules +products: [transform-rules, origin-rules] description: >- This tutorial shows you how to modify both the URI path and the Host header of incoming requests using Transform Rules and Origin Rules. --- diff --git a/src/content/docs/rules/origin-rules/tutorials/point-to-pages-with-custom-domain.mdx b/src/content/docs/rules/origin-rules/tutorials/point-to-pages-with-custom-domain.mdx index 06387a4f173cb9e..978ad5ff5c4d4c7 100644 --- a/src/content/docs/rules/origin-rules/tutorials/point-to-pages-with-custom-domain.mdx +++ b/src/content/docs/rules/origin-rules/tutorials/point-to-pages-with-custom-domain.mdx @@ -3,9 +3,7 @@ reviewed: 2025-04-12 difficulty: Beginner pcx_content_type: tutorial title: Point to Pages with a custom domain -products: - - Pages - - Origin Rules +products: [pages, origin-rules] description: >- This tutorial will instruct you how to configure an origin rule and a DNS record to point to a Pages deployment with a custom domain. --- diff --git a/src/content/docs/rules/origin-rules/tutorials/point-to-r2-bucket-with-custom-domain.mdx b/src/content/docs/rules/origin-rules/tutorials/point-to-r2-bucket-with-custom-domain.mdx index ab95f6e579dc313..6eda6067db6c6b3 100644 --- a/src/content/docs/rules/origin-rules/tutorials/point-to-r2-bucket-with-custom-domain.mdx +++ b/src/content/docs/rules/origin-rules/tutorials/point-to-r2-bucket-with-custom-domain.mdx @@ -3,9 +3,7 @@ reviewed: 2025-04-12 difficulty: Beginner pcx_content_type: tutorial title: Point to R2 bucket with a custom domain -products: - - R2 - - Origin Rules +products: [r2, origin-rules] description: >- This tutorial will instruct you how to configure an origin rule and a DNS record to point to an R2 bucket configured with a custom domain. --- diff --git a/src/content/docs/rules/snippets/examples/ab-testing-same-url.mdx b/src/content/docs/rules/snippets/examples/ab-testing-same-url.mdx index 155a8942f43411d..7e885bda23f31a6 100644 --- a/src/content/docs/rules/snippets/examples/ab-testing-same-url.mdx +++ b/src/content/docs/rules/snippets/examples/ab-testing-same-url.mdx @@ -4,8 +4,7 @@ tags: - A/B testing - Cookies - URL rewrite -products: - - Snippets +products: [snippets] pcx_content_type: example title: A/B testing with same-URL direct access description: Set up an A/B test by controlling what response is served based on cookies. diff --git a/src/content/docs/rules/snippets/examples/append-dates-to-cookies.mdx b/src/content/docs/rules/snippets/examples/append-dates-to-cookies.mdx index 3c930455366cb02..eee507aef49bd22 100644 --- a/src/content/docs/rules/snippets/examples/append-dates-to-cookies.mdx +++ b/src/content/docs/rules/snippets/examples/append-dates-to-cookies.mdx @@ -3,8 +3,7 @@ summary: Dynamically set a cookie expiration and test group. tags: - A/B testing - Cookies -products: - - Snippets +products: [snippets] pcx_content_type: example title: Append dates to cookies to use with A/B testing description: Dynamically set a cookie expiration and test group. diff --git a/src/content/docs/rules/snippets/examples/auth-with-headers.mdx b/src/content/docs/rules/snippets/examples/auth-with-headers.mdx index 86de059b11588b7..99d4481bfd58bba 100644 --- a/src/content/docs/rules/snippets/examples/auth-with-headers.mdx +++ b/src/content/docs/rules/snippets/examples/auth-with-headers.mdx @@ -5,8 +5,7 @@ summary: Allow or deny a request based on a known pre-shared key in a header. tags: - Authentication - Request modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Auth with headers description: Allow or deny a request based on a known pre-shared key in a diff --git a/src/content/docs/rules/snippets/examples/bot-data-to-origin.mdx b/src/content/docs/rules/snippets/examples/bot-data-to-origin.mdx index 003caa8f536df0b..a101345fa75cb57 100644 --- a/src/content/docs/rules/snippets/examples/bot-data-to-origin.mdx +++ b/src/content/docs/rules/snippets/examples/bot-data-to-origin.mdx @@ -5,8 +5,7 @@ summary: Send [Bots](/bots/) information to your origin. Refer to [Bot tags: - Headers - Request modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Send Bot Management information to origin description: Send [Bots](/bots/) information to your origin. Refer to [Bot diff --git a/src/content/docs/rules/snippets/examples/bots-to-honeypot.mdx b/src/content/docs/rules/snippets/examples/bots-to-honeypot.mdx index 7b3d413c8cb5a8f..afea4f4f009dd4b 100644 --- a/src/content/docs/rules/snippets/examples/bots-to-honeypot.mdx +++ b/src/content/docs/rules/snippets/examples/bots-to-honeypot.mdx @@ -4,8 +4,7 @@ summary: Use the [bot score bots to a honeypot. tags: - Redirects -products: - - Snippets +products: [snippets] pcx_content_type: example title: Send suspect bots to a honeypot description: Use the [bot score diff --git a/src/content/docs/rules/snippets/examples/bulk-redirect-map.mdx b/src/content/docs/rules/snippets/examples/bulk-redirect-map.mdx index 1a11aa49a3d3bee..56ca5e62ae826bc 100644 --- a/src/content/docs/rules/snippets/examples/bulk-redirect-map.mdx +++ b/src/content/docs/rules/snippets/examples/bulk-redirect-map.mdx @@ -3,8 +3,7 @@ summary: Redirect requests to certain URLs based on a mapped object to the request's URL. tags: - Redirects -products: - - Snippets +products: [snippets] pcx_content_type: example title: Bulk redirect based on a map object description: Redirect requests to certain URLs based on a mapped object to the diff --git a/src/content/docs/rules/snippets/examples/country-code-redirect.mdx b/src/content/docs/rules/snippets/examples/country-code-redirect.mdx index 1a3de77de39a3d9..0f323b7bdc746c2 100644 --- a/src/content/docs/rules/snippets/examples/country-code-redirect.mdx +++ b/src/content/docs/rules/snippets/examples/country-code-redirect.mdx @@ -3,8 +3,7 @@ summary: Redirect a response based on the country code in the header of a visito tags: - Localization - Redirects -products: - - Snippets +products: [snippets] preview: - true pcx_content_type: example diff --git a/src/content/docs/rules/snippets/examples/custom-cache.mdx b/src/content/docs/rules/snippets/examples/custom-cache.mdx index 96efb294a9d4072..68a003bf02f30a6 100644 --- a/src/content/docs/rules/snippets/examples/custom-cache.mdx +++ b/src/content/docs/rules/snippets/examples/custom-cache.mdx @@ -2,8 +2,7 @@ summary: Control cache programmatically. Use this template to optimize performance and implement custom caching strategies. tags: - Caching -products: - - Snippets +products: [snippets] pcx_content_type: example title: Custom cache description: Store, retrieve, and remove assets from cache programmatically. Use this template to optimize performance and implement custom caching strategies. diff --git a/src/content/docs/rules/snippets/examples/debugging-logs.mdx b/src/content/docs/rules/snippets/examples/debugging-logs.mdx index d02fdfc623da67d..e2a8b4944a47f53 100644 --- a/src/content/docs/rules/snippets/examples/debugging-logs.mdx +++ b/src/content/docs/rules/snippets/examples/debugging-logs.mdx @@ -3,8 +3,7 @@ summary: Send debugging information in an errored response to a logging service. tags: - Logging - Response modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Debugging logs description: Send debugging information in an errored response to a logging service. diff --git a/src/content/docs/rules/snippets/examples/define-cors-headers.mdx b/src/content/docs/rules/snippets/examples/define-cors-headers.mdx index 37c28457ee3315b..ac834f50d418670 100644 --- a/src/content/docs/rules/snippets/examples/define-cors-headers.mdx +++ b/src/content/docs/rules/snippets/examples/define-cors-headers.mdx @@ -6,8 +6,7 @@ tags: - Headers - Request modification - Response modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Define CORS headers description: Adjust [Cross-Origin Resource Sharing diff --git a/src/content/docs/rules/snippets/examples/follow-redirects.mdx b/src/content/docs/rules/snippets/examples/follow-redirects.mdx index 445af1754b78f0d..f50d98b55445657 100644 --- a/src/content/docs/rules/snippets/examples/follow-redirects.mdx +++ b/src/content/docs/rules/snippets/examples/follow-redirects.mdx @@ -2,8 +2,7 @@ summary: Modify the fetch request to follow redirects from the origin, ensuring the client receives the final response. tags: - Redirects -products: - - Snippets +products: [snippets] pcx_content_type: example title: Follow redirects from the origin description: Modify the fetch request to follow redirects from the origin, ensuring the client receives the final response. diff --git a/src/content/docs/rules/snippets/examples/hex-timestamp.mdx b/src/content/docs/rules/snippets/examples/hex-timestamp.mdx index c04e1624b03d465..6f796c89eb1cc48 100644 --- a/src/content/docs/rules/snippets/examples/hex-timestamp.mdx +++ b/src/content/docs/rules/snippets/examples/hex-timestamp.mdx @@ -3,8 +3,7 @@ summary: Add a custom header to requests sent to the origin server with the curr tags: - Headers - Request modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Add HEX timestamp to a request header description: Add a custom header to requests sent to the origin server with the current timestamp in hexadecimal format for debugging, tracking, or custom routing purposes. diff --git a/src/content/docs/rules/snippets/examples/jwt-validation.mdx b/src/content/docs/rules/snippets/examples/jwt-validation.mdx index b2f24d71051aac7..fd6864a84a63d6f 100644 --- a/src/content/docs/rules/snippets/examples/jwt-validation.mdx +++ b/src/content/docs/rules/snippets/examples/jwt-validation.mdx @@ -4,8 +4,7 @@ summary: Extract the JWT token from a header, decode it, and implement tags: - Authentication - Request modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Validate JSON web tokens (JWT) description: Extract the JWT token from a header, decode it, and implement diff --git a/src/content/docs/rules/snippets/examples/maintenance.mdx b/src/content/docs/rules/snippets/examples/maintenance.mdx index 097250156c8c806..3c6e431df13e834 100644 --- a/src/content/docs/rules/snippets/examples/maintenance.mdx +++ b/src/content/docs/rules/snippets/examples/maintenance.mdx @@ -2,8 +2,7 @@ summary: Serve a custom maintenance page. Ideal for downtime notifications, planned maintenance, or emergency messages. tags: - Redirects -products: - - Snippets +products: [snippets] pcx_content_type: example title: Maintenance page description: Serve a custom maintenance page instead of fetching content from the origin server or cache. Ideal for downtime notifications, planned maintenance, or emergency messages. diff --git a/src/content/docs/rules/snippets/examples/override-set-cookies-value.mdx b/src/content/docs/rules/snippets/examples/override-set-cookies-value.mdx index 3a8b4958ff411e0..57aa47f5ce9d721 100644 --- a/src/content/docs/rules/snippets/examples/override-set-cookies-value.mdx +++ b/src/content/docs/rules/snippets/examples/override-set-cookies-value.mdx @@ -4,8 +4,7 @@ tags: - Headers - Cookies - Response modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Override a Set-Cookie header with a certain value description: Get a specific `Set-Cookie` header and update it with a certain value. diff --git a/src/content/docs/rules/snippets/examples/redirect-forbidden-status.mdx b/src/content/docs/rules/snippets/examples/redirect-forbidden-status.mdx index 34280fa18811b7b..4c54e3ea846bc81 100644 --- a/src/content/docs/rules/snippets/examples/redirect-forbidden-status.mdx +++ b/src/content/docs/rules/snippets/examples/redirect-forbidden-status.mdx @@ -3,8 +3,7 @@ summary: If origin responded with `403 Forbidden` error code, redirect to different page. tags: - Redirects -products: - - Snippets +products: [snippets] pcx_content_type: example title: Redirect 403 Forbidden to a different page description: If origin responded with `403 Forbidden` error code, redirect to diff --git a/src/content/docs/rules/snippets/examples/redirect-replaced-domain.mdx b/src/content/docs/rules/snippets/examples/redirect-replaced-domain.mdx index 53bf112aaf690c7..e2b586a9814aad8 100644 --- a/src/content/docs/rules/snippets/examples/redirect-replaced-domain.mdx +++ b/src/content/docs/rules/snippets/examples/redirect-replaced-domain.mdx @@ -2,8 +2,7 @@ summary: Redirect all requests from one domain to another domain. tags: - Redirects -products: - - Snippets +products: [snippets] pcx_content_type: example title: Redirect from one domain to another description: Redirect all requests from one domain to another domain. diff --git a/src/content/docs/rules/snippets/examples/remove-fields-api-response.mdx b/src/content/docs/rules/snippets/examples/remove-fields-api-response.mdx index 90ee8eebf033834..c6ee059dea5a022 100644 --- a/src/content/docs/rules/snippets/examples/remove-fields-api-response.mdx +++ b/src/content/docs/rules/snippets/examples/remove-fields-api-response.mdx @@ -3,8 +3,7 @@ summary: If origin responds with `JSON`, parse the response and delete fields to return a modified response. tags: - Response modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Remove fields from API response description: If origin responds with `JSON`, parse the response and delete diff --git a/src/content/docs/rules/snippets/examples/remove-query-strings.mdx b/src/content/docs/rules/snippets/examples/remove-query-strings.mdx index 32bbb01f7807653..8995d0da911323a 100644 --- a/src/content/docs/rules/snippets/examples/remove-query-strings.mdx +++ b/src/content/docs/rules/snippets/examples/remove-query-strings.mdx @@ -2,8 +2,7 @@ summary: Remove certain query strings from a request before passing to the origin. tags: - Request modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Remove query strings before sending request to origin description: Remove certain query strings from a request before passing to the origin. diff --git a/src/content/docs/rules/snippets/examples/remove-response-headers.mdx b/src/content/docs/rules/snippets/examples/remove-response-headers.mdx index 7ca3d571dfbdd93..b2b44f389d121ca 100644 --- a/src/content/docs/rules/snippets/examples/remove-response-headers.mdx +++ b/src/content/docs/rules/snippets/examples/remove-response-headers.mdx @@ -2,8 +2,7 @@ summary: Remove from response all headers that start with a certain name. tags: - Response modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Remove response headers description: Remove from response all headers that start with a certain name. diff --git a/src/content/docs/rules/snippets/examples/return-incoming-request-properties.mdx b/src/content/docs/rules/snippets/examples/return-incoming-request-properties.mdx index 6113d00a69921e4..b901933b598af37 100644 --- a/src/content/docs/rules/snippets/examples/return-incoming-request-properties.mdx +++ b/src/content/docs/rules/snippets/examples/return-incoming-request-properties.mdx @@ -4,8 +4,7 @@ summary: Respond with information about the incoming request provided by tags: - Logging - Response modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Return information about the incoming request description: Respond with information about the incoming request provided by diff --git a/src/content/docs/rules/snippets/examples/rewrite-site-links.mdx b/src/content/docs/rules/snippets/examples/rewrite-site-links.mdx index 1ac12fc17aaeefd..a410cd84b299f67 100644 --- a/src/content/docs/rules/snippets/examples/rewrite-site-links.mdx +++ b/src/content/docs/rules/snippets/examples/rewrite-site-links.mdx @@ -2,8 +2,7 @@ summary: Dynamically rewrite links in HTML responses. tags: - Response modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Rewrite links on HTML pages description: Dynamically rewrite links in HTML responses. This is useful for site migrations and branding updates. diff --git a/src/content/docs/rules/snippets/examples/route-and-rewrite.mdx b/src/content/docs/rules/snippets/examples/route-and-rewrite.mdx index ec4750ce9248d0c..8ae58bcd2f54ec4 100644 --- a/src/content/docs/rules/snippets/examples/route-and-rewrite.mdx +++ b/src/content/docs/rules/snippets/examples/route-and-rewrite.mdx @@ -2,8 +2,7 @@ summary: Reroute a request to a different origin and modify the URL path. tags: - URL rewrite -products: - - Snippets +products: [snippets] pcx_content_type: example title: Change origin and modify paths description: Route requests to a different origin, prepend a directory to the URL path, and remove specific segments. diff --git a/src/content/docs/rules/snippets/examples/security-headers.mdx b/src/content/docs/rules/snippets/examples/security-headers.mdx index c172871a5f0b417..50494c0a591b6b3 100644 --- a/src/content/docs/rules/snippets/examples/security-headers.mdx +++ b/src/content/docs/rules/snippets/examples/security-headers.mdx @@ -4,8 +4,7 @@ summary: Set common security headers such as X-XSS-Protection, X-Frame-Options, tags: - Headers - Response modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Set security headers description: Set common security headers such as X-XSS-Protection, diff --git a/src/content/docs/rules/snippets/examples/send-timestamp-to-origin.mdx b/src/content/docs/rules/snippets/examples/send-timestamp-to-origin.mdx index 41b12f808b0beeb..5207bdcff43dea7 100644 --- a/src/content/docs/rules/snippets/examples/send-timestamp-to-origin.mdx +++ b/src/content/docs/rules/snippets/examples/send-timestamp-to-origin.mdx @@ -4,8 +4,7 @@ summary: Convert timestamp to hexadecimal format and send it as a custom header tags: - Headers - Request modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Send timestamp to origin as a custom header description: Convert timestamp to hexadecimal format and send it as a custom diff --git a/src/content/docs/rules/snippets/examples/serve-different-origin.mdx b/src/content/docs/rules/snippets/examples/serve-different-origin.mdx index d7173d4a9ce303c..6b8529506d58753 100644 --- a/src/content/docs/rules/snippets/examples/serve-different-origin.mdx +++ b/src/content/docs/rules/snippets/examples/serve-different-origin.mdx @@ -3,8 +3,7 @@ summary: If response to the original request is not `200 OK` or a redirect, send to another origin. tags: - Redirects -products: - - Snippets +products: [snippets] pcx_content_type: example title: Route to a different origin based on origin response description: If response to the original request is not `200 OK` or a redirect, diff --git a/src/content/docs/rules/snippets/examples/signing-requests.mdx b/src/content/docs/rules/snippets/examples/signing-requests.mdx index 07d5cea04259867..7d50e3971fe40b9 100644 --- a/src/content/docs/rules/snippets/examples/signing-requests.mdx +++ b/src/content/docs/rules/snippets/examples/signing-requests.mdx @@ -3,8 +3,7 @@ summary: Verify a signed request using the HMAC and SHA-256 algorithms or return tags: - Authentication - Request modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Sign requests description: Verify a signed request using the HMAC and SHA-256 algorithms or return a 403. diff --git a/src/content/docs/rules/snippets/examples/slow-suspicious-requests.mdx b/src/content/docs/rules/snippets/examples/slow-suspicious-requests.mdx index 0f1935a86270107..91fc4a67b31e48d 100644 --- a/src/content/docs/rules/snippets/examples/slow-suspicious-requests.mdx +++ b/src/content/docs/rules/snippets/examples/slow-suspicious-requests.mdx @@ -3,8 +3,7 @@ summary: Define a delay to be used when incoming requests match a rule you consider suspicious based on the bot score. tags: - Request modification -products: - - Snippets +products: [snippets] pcx_content_type: example title: Slow down suspicious requests description: Define a delay to be used when incoming requests match a rule you diff --git a/src/content/docs/rules/transform/examples/add-request-header-bot-score.mdx b/src/content/docs/rules/transform/examples/add-request-header-bot-score.mdx index c6f071ec2008f48..67e9d962de1afa6 100644 --- a/src/content/docs/rules/transform/examples/add-request-header-bot-score.mdx +++ b/src/content/docs/rules/transform/examples/add-request-header-bot-score.mdx @@ -1,8 +1,7 @@ --- pcx_content_type: example summary: Create a request header transform rule to add a `X-Bot-Score` HTTP header to the request with the current bot score. -products: - - Transform Rules +products: [transform-rules] tags: - Request modification title: Add a request header with the current bot score diff --git a/src/content/docs/rules/transform/examples/add-request-header-static-value.mdx b/src/content/docs/rules/transform/examples/add-request-header-static-value.mdx index 7900b252bc9e7aa..151c928103cd9c6 100644 --- a/src/content/docs/rules/transform/examples/add-request-header-static-value.mdx +++ b/src/content/docs/rules/transform/examples/add-request-header-static-value.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Create a request header transform rule to add an `X-Source` HTTP header to the request with a static value (`Cloudflare`). -products: - - Transform Rules +products: [transform-rules] tags: - Request modification title: Add request header with a static value diff --git a/src/content/docs/rules/transform/examples/add-request-header-subrequest-other-zone.mdx b/src/content/docs/rules/transform/examples/add-request-header-subrequest-other-zone.mdx index 1b6320a1f4acf40..c23aff52fc9770a 100644 --- a/src/content/docs/rules/transform/examples/add-request-header-subrequest-other-zone.mdx +++ b/src/content/docs/rules/transform/examples/add-request-header-subrequest-other-zone.mdx @@ -1,8 +1,7 @@ --- pcx_content_type: example summary: Create a request header transform rule to add an HTTP header when the Workers subrequest comes from a different zone. -products: - - Transform Rules +products: [transform-rules] tags: - Request modification title: Add a request header for subrequests from other zones diff --git a/src/content/docs/rules/transform/examples/add-response-header-static-value.mdx b/src/content/docs/rules/transform/examples/add-response-header-static-value.mdx index 691aff86becce3e..1cece09fe520bc2 100644 --- a/src/content/docs/rules/transform/examples/add-response-header-static-value.mdx +++ b/src/content/docs/rules/transform/examples/add-response-header-static-value.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Create a response header transform rule to add a `set-cookie` HTTP header to the response with a static value (`cookiename=value`). -products: - - Transform Rules +products: [transform-rules] tags: - Response modification title: Add a response header with a static value diff --git a/src/content/docs/rules/transform/examples/normalize-encoded-slash.mdx b/src/content/docs/rules/transform/examples/normalize-encoded-slash.mdx index fa389bc217881ad..df40dadeb31f7ff 100644 --- a/src/content/docs/rules/transform/examples/normalize-encoded-slash.mdx +++ b/src/content/docs/rules/transform/examples/normalize-encoded-slash.mdx @@ -1,8 +1,7 @@ --- pcx_content_type: example summary: Create a URL rewrite rule (part of Transform Rules) to normalize encoded forward slashes (`%2F`) in the request path to standard slashes (`/`). -products: - - Transform Rules +products: [transform-rules] tags: - URL rewrite title: Normalize encoded slashes in URL path diff --git a/src/content/docs/rules/transform/examples/remove-request-header.mdx b/src/content/docs/rules/transform/examples/remove-request-header.mdx index eb85a295dd47343..1be3a11507e7cdc 100644 --- a/src/content/docs/rules/transform/examples/remove-request-header.mdx +++ b/src/content/docs/rules/transform/examples/remove-request-header.mdx @@ -1,8 +1,7 @@ --- pcx_content_type: example summary: Create a request header transform rule (part of Transform Rules) to remove the `cf-connecting-ip` HTTP header from the request. -products: - - Transform Rules +products: [transform-rules] tags: - Request modification title: Remove a request header diff --git a/src/content/docs/rules/transform/examples/remove-response-header.mdx b/src/content/docs/rules/transform/examples/remove-response-header.mdx index 0dcf87d3d03a51e..90d6f12caaff287 100644 --- a/src/content/docs/rules/transform/examples/remove-response-header.mdx +++ b/src/content/docs/rules/transform/examples/remove-response-header.mdx @@ -1,8 +1,7 @@ --- pcx_content_type: example summary: Create a response header transform rule (part of Transform Rules) to remove the `cf-connecting-ip` HTTP header from the response. -products: - - Transform Rules +products: [transform-rules] tags: - Response modification title: Remove a response header diff --git a/src/content/docs/rules/transform/examples/rewrite-archive-urls-new-format.mdx b/src/content/docs/rules/transform/examples/rewrite-archive-urls-new-format.mdx index 9b5d4cc896da5dd..00a768f84ecaf0f 100644 --- a/src/content/docs/rules/transform/examples/rewrite-archive-urls-new-format.mdx +++ b/src/content/docs/rules/transform/examples/rewrite-archive-urls-new-format.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Create a transform rule to rewrite the URL format `/posts/--
-` to the new format `/posts/<YYYY>/<MM>/<DD>/<TITLE>`. -products: - - Transform Rules +products: [transform-rules] tags: - URL rewrite title: Rewrite blog archive URLs diff --git a/src/content/docs/rules/transform/examples/rewrite-moved-section.mdx b/src/content/docs/rules/transform/examples/rewrite-moved-section.mdx index 546014948b3a1f6..01d1a944536db9c 100644 --- a/src/content/docs/rules/transform/examples/rewrite-moved-section.mdx +++ b/src/content/docs/rules/transform/examples/rewrite-moved-section.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a URL rewrite rule (part of Transform Rules) to rewrite everything under `/blog/<PATH>` to `/marketing/<PATH>`. -products: - - Transform Rules +products: [transform-rules] tags: - URL rewrite title: Rewrite path of moved section of a website diff --git a/src/content/docs/rules/transform/examples/rewrite-path-archived-posts.mdx b/src/content/docs/rules/transform/examples/rewrite-path-archived-posts.mdx index 6d732e17d937149..a61f9fce5e99d86 100644 --- a/src/content/docs/rules/transform/examples/rewrite-path-archived-posts.mdx +++ b/src/content/docs/rules/transform/examples/rewrite-path-archived-posts.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a URL rewrite rule (part of Transform Rules) to rewrite any requests for `/news/2012/...` URI paths to `/archive/news/2012/...`. -products: - - Transform Rules +products: [transform-rules] tags: - URL rewrite title: Rewrite path of archived blog posts diff --git a/src/content/docs/rules/transform/examples/rewrite-path-object-storage.mdx b/src/content/docs/rules/transform/examples/rewrite-path-object-storage.mdx index 0abf811b829e67a..e5ab48d5e84e7aa 100644 --- a/src/content/docs/rules/transform/examples/rewrite-path-object-storage.mdx +++ b/src/content/docs/rules/transform/examples/rewrite-path-object-storage.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a URL rewrite rule (part of Transform Rules) to remove `/files/` from URI paths before routing request to your object storage bucket. -products: - - Transform Rules +products: [transform-rules] tags: - URL rewrite title: Rewrite path for object storage bucket diff --git a/src/content/docs/rules/transform/examples/rewrite-several-url-different-url.mdx b/src/content/docs/rules/transform/examples/rewrite-several-url-different-url.mdx index e837c22c9ac66ae..bf90f2d8f3595db 100644 --- a/src/content/docs/rules/transform/examples/rewrite-several-url-different-url.mdx +++ b/src/content/docs/rules/transform/examples/rewrite-several-url-different-url.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a URL rewrite rule (part of Transform Rules) to rewrite any requests for `/images/<FOLDER1>/<FOLDER2>/<FILENAME>` to `/img/<FILENAME>`. -products: - - Transform Rules +products: [transform-rules] tags: - URL rewrite title: Rewrite image paths with several URL segments diff --git a/src/content/docs/rules/transform/examples/rewrite-url-string-visitors.mdx b/src/content/docs/rules/transform/examples/rewrite-url-string-visitors.mdx index 2bfaeeba929e62b..d9664145a17a4d5 100644 --- a/src/content/docs/rules/transform/examples/rewrite-url-string-visitors.mdx +++ b/src/content/docs/rules/transform/examples/rewrite-url-string-visitors.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a transform rule to rewrite the request path from `/blog` to `/blog?sort-by=date`. -products: - - Transform Rules +products: [transform-rules] tags: - URL rewrite title: Rewrite URL query string diff --git a/src/content/docs/rules/transform/examples/rewrite-welcome-for-countries.mdx b/src/content/docs/rules/transform/examples/rewrite-welcome-for-countries.mdx index d4ca9a4f8f324b5..a3e868c09799ac6 100644 --- a/src/content/docs/rules/transform/examples/rewrite-welcome-for-countries.mdx +++ b/src/content/docs/rules/transform/examples/rewrite-welcome-for-countries.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create two URL rewrite rules (part of Transform Rules) to rewrite the path of the welcome page for visitors in specific countries. -products: - - Transform Rules +products: [transform-rules] tags: - URL rewrite title: Rewrite page path for visitors in specific countries diff --git a/src/content/docs/rules/transform/examples/set-response-header-bot-score.mdx b/src/content/docs/rules/transform/examples/set-response-header-bot-score.mdx index 21822844adc91eb..48a7864e96db5cf 100644 --- a/src/content/docs/rules/transform/examples/set-response-header-bot-score.mdx +++ b/src/content/docs/rules/transform/examples/set-response-header-bot-score.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a response header transform rule (part of Transform Rules) to set an `X-Bot-Score` HTTP header in the response with the current bot score. -products: - - Transform Rules +products: [transform-rules] tags: - Response modification title: Set a response header with the current bot score diff --git a/src/content/docs/rules/transform/examples/set-response-header-static-value.mdx b/src/content/docs/rules/transform/examples/set-response-header-static-value.mdx index 7e774d30a56f9a1..b2fbbeee3f7de0f 100644 --- a/src/content/docs/rules/transform/examples/set-response-header-static-value.mdx +++ b/src/content/docs/rules/transform/examples/set-response-header-static-value.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a response header transform rule (part of Transform Rules) to set an `X-Bot-Score` HTTP header in the response to a static value (`Cloudflare`). -products: - - Transform Rules +products: [transform-rules] tags: - Response modification title: Set response header with a static value diff --git a/src/content/docs/rules/url-forwarding/examples/perform-mobile-redirects.mdx b/src/content/docs/rules/url-forwarding/examples/perform-mobile-redirects.mdx index 22db876ec3a03aa..4d32b7afef82285 100644 --- a/src/content/docs/rules/url-forwarding/examples/perform-mobile-redirects.mdx +++ b/src/content/docs/rules/url-forwarding/examples/perform-mobile-redirects.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a redirect rule to redirect visitors using mobile devices to a different hostname. -products: - - Redirect Rules +products: [redirect-rules] title: Perform mobile redirects description: Create a redirect rule to redirect visitors using mobile devices to a different hostname. diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-admin-https.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-admin-https.mdx index 8a668fd0d0e02c8..870e50b09c8ddc0 100644 --- a/src/content/docs/rules/url-forwarding/examples/redirect-admin-https.mdx +++ b/src/content/docs/rules/url-forwarding/examples/redirect-admin-https.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a redirect rule to redirect requests for the administration area of `store.example.com` to HTTPS, keeping the original path and query string. -products: - - Redirect Rules +products: [redirect-rules] title: Redirect admin area requests to HTTPS description: Create a redirect rule to redirect requests for the administration area of `store.example.com` to HTTPS, keeping the original path and query diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-all-another-domain.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-all-another-domain.mdx index e8f71be4fc80ffa..897c5f6c681ff0d 100644 --- a/src/content/docs/rules/url-forwarding/examples/redirect-all-another-domain.mdx +++ b/src/content/docs/rules/url-forwarding/examples/redirect-all-another-domain.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Create a redirect rule to redirect all requests to a different domain, maintaining all functionality, except for the discontinued HTTP service (port 80). -products: - - Redirect Rules +products: [redirect-rules] title: Redirect requests from one domain to another description: Create a redirect rule to redirect all requests to a different domain, maintaining all functionality, except for the discontinued HTTP diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-all-country.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-all-country.mdx index def38402fc261ec..79d4a8866831ac1 100644 --- a/src/content/docs/rules/url-forwarding/examples/redirect-all-country.mdx +++ b/src/content/docs/rules/url-forwarding/examples/redirect-all-country.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Create a redirect rule to redirect all website visitors from the United Kingdom to a different domain, maintaining the current functionality in the same paths. -products: - - Redirect Rules +products: [redirect-rules] title: Redirect requests from one country to a domain description: Create a redirect rule to redirect all website visitors from the United Kingdom to a different domain, maintaining the current functionality in diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-all-different-domain-root.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-all-different-domain-root.mdx index cd77b921e74f59e..87409c0499810bc 100644 --- a/src/content/docs/rules/url-forwarding/examples/redirect-all-different-domain-root.mdx +++ b/src/content/docs/rules/url-forwarding/examples/redirect-all-different-domain-root.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a redirect rule to redirect all URLs for a domain to point to the root of a new domain, including any subdomains of the old domain. -products: - - Redirect Rules +products: [redirect-rules] title: Redirect requests for a domain to a new domain description: Create a redirect rule to redirect all URLs for a domain to point to the root of a new domain, including any subdomains of the old domain. diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-all-different-hostname.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-all-different-hostname.mdx index 273930f479b6b3b..631691a2a1ed821 100644 --- a/src/content/docs/rules/url-forwarding/examples/redirect-all-different-hostname.mdx +++ b/src/content/docs/rules/url-forwarding/examples/redirect-all-different-hostname.mdx @@ -3,8 +3,7 @@ pcx_content_type: example summary: Create a redirect rule to redirect all requests for `smallshop.example.com` to a different hostname using HTTPS, keeping the original path and query string. -products: - - Redirect Rules +products: [redirect-rules] title: Redirect requests to a different hostname description: Create a redirect rule to redirect all requests for `smallshop.example.com` to a different hostname using HTTPS, keeping the diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-country-subdomains.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-country-subdomains.mdx index f0b0c1e4f5e0dd5..a4001b263d28d35 100644 --- a/src/content/docs/rules/url-forwarding/examples/redirect-country-subdomains.mdx +++ b/src/content/docs/rules/url-forwarding/examples/redirect-country-subdomains.mdx @@ -4,8 +4,7 @@ summary: Create a redirect rule to redirect United Kingdom and France visitors from the `example.com` website's root path (`/`) to their localized subdomains `https://gb.example.com` and `https://fr.example.com`, respectively. -products: - - Redirect Rules +products: [redirect-rules] title: Redirect local visitors to specific subdomains description: Create a redirect rule to redirect United Kingdom and France visitors from the `example.com` website's root path (`/`) to their localized diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-new-url.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-new-url.mdx index 4722032a641bf9e..cf7b8f84822a2f8 100644 --- a/src/content/docs/rules/url-forwarding/examples/redirect-new-url.mdx +++ b/src/content/docs/rules/url-forwarding/examples/redirect-new-url.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a redirect rule to redirect visitors from `/contact-us/` to the page's new path `/contacts/`. -products: - - Redirect Rules +products: [redirect-rules] title: Redirect visitors to a new page URL description: Create a redirect rule to redirect visitors from `/contact-us/` to the page's new path `/contacts/`. diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-root-to-www.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-root-to-www.mdx index 1e72d7b7921f3ba..21a9af13071e0d7 100644 --- a/src/content/docs/rules/url-forwarding/examples/redirect-root-to-www.mdx +++ b/src/content/docs/rules/url-forwarding/examples/redirect-root-to-www.mdx @@ -1,8 +1,7 @@ --- pcx_content_type: example summary: Create a redirect rule to forward HTTPS requests from the root (also known as the “apex” or “naked” domain) to the WWW subdomain. -products: - - Redirect Rules +products: [redirect-rules] title: Redirect from root to WWW description: Create a redirect rule to forward HTTPS requests from the root (also known as the “apex” or “naked” domain) to the WWW subdomain. --- diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-www-to-root.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-www-to-root.mdx index fb03aeb5487b999..67efe25c932dc6b 100644 --- a/src/content/docs/rules/url-forwarding/examples/redirect-www-to-root.mdx +++ b/src/content/docs/rules/url-forwarding/examples/redirect-www-to-root.mdx @@ -1,8 +1,7 @@ --- pcx_content_type: example summary: Create a redirect rule to forward HTTPS requests from the WWW subdomain to the root (also known as the “apex” or “naked” domain). -products: - - Redirect Rules +products: [redirect-rules] title: Redirect from WWW to root description: Create a redirect rule to forward HTTPS requests from the WWW subdomain to the root (also known as the “apex” or “naked” domain). --- diff --git a/src/content/docs/rules/url-forwarding/examples/remove-locale-url.mdx b/src/content/docs/rules/url-forwarding/examples/remove-locale-url.mdx index 7dd3cc0289a67fa..cbf0eb365437268 100644 --- a/src/content/docs/rules/url-forwarding/examples/remove-locale-url.mdx +++ b/src/content/docs/rules/url-forwarding/examples/remove-locale-url.mdx @@ -2,8 +2,7 @@ pcx_content_type: example summary: Create a redirect rule to redirect visitors from an old URL format with locale information to a new URL format. -products: - - Redirect Rules +products: [redirect-rules] title: Remove locale from URL path description: Create a redirect rule to redirect visitors from an old URL format with locale information to a new URL format. diff --git a/src/content/docs/smart-shield/get-started.mdx b/src/content/docs/smart-shield/get-started.mdx index 4f643b571fc6c9e..9431251f7ac4a25 100644 --- a/src/content/docs/smart-shield/get-started.mdx +++ b/src/content/docs/smart-shield/get-started.mdx @@ -5,7 +5,7 @@ sidebar: order: 2 --- -import { GlossaryTooltip, ResourcesBySelector, DirectoryListing } from "~/components"; +import { GlossaryTooltip, DirectoryListing } from "~/components"; Smart Shield is available to all customers as an opt-in configuration. diff --git a/src/content/docs/turnstile/tutorials/integrating-turnstile-waf-and-bot-management.mdx b/src/content/docs/turnstile/tutorials/integrating-turnstile-waf-and-bot-management.mdx index be2ca69dacc5114..5156a648cb8a4a5 100644 --- a/src/content/docs/turnstile/tutorials/integrating-turnstile-waf-and-bot-management.mdx +++ b/src/content/docs/turnstile/tutorials/integrating-turnstile-waf-and-bot-management.mdx @@ -3,9 +3,7 @@ title: Integrate Turnstile, WAF, & Bot Management pcx_content_type: tutorial reviewed: 2024-09-17 difficulty: Beginner -products: - - Web Application Firewall - - Bot Management +products: [waf, bots] tags: - JavaScript sidebar: diff --git a/src/content/docs/vectorize/demos.mdx b/src/content/docs/vectorize/demos.mdx index a4378d1c677b4a6..b82c7511dfd1410 100644 --- a/src/content/docs/vectorize/demos.mdx +++ b/src/content/docs/vectorize/demos.mdx @@ -14,4 +14,4 @@ Learn how you can use Vectorize within your existing architecture. Explore the following <GlossaryTooltip term="reference architecture">reference architectures</GlossaryTooltip> that use Vectorize: -<ResourcesBySelector types={["reference-architecture","design-guide","reference-architecture-diagram"]} products={["Vectorize"]} /> +<ResourcesBySelector types={["reference-architecture","design-guide","reference-architecture-diagram"]} products={["vectorize"]} /> diff --git a/src/content/docs/workers-ai/features/function-calling/embedded/examples/kv.mdx b/src/content/docs/workers-ai/features/function-calling/embedded/examples/kv.mdx index fb9a86f19d0e0b7..f70be9e51f5b064 100644 --- a/src/content/docs/workers-ai/features/function-calling/embedded/examples/kv.mdx +++ b/src/content/docs/workers-ai/features/function-calling/embedded/examples/kv.mdx @@ -1,8 +1,7 @@ --- pcx_content_type: navigation title: Use KV API -products: - - KV +products: [kv] tags: - AI sidebar: diff --git a/src/content/docs/workers-ai/guides/demos-architectures.mdx b/src/content/docs/workers-ai/guides/demos-architectures.mdx index b8d09655662434f..e6b340af95d7521 100644 --- a/src/content/docs/workers-ai/guides/demos-architectures.mdx +++ b/src/content/docs/workers-ai/guides/demos-architectures.mdx @@ -29,5 +29,5 @@ Explore the following <GlossaryTooltip term="reference architecture">reference a "design-guide", "reference-architecture-diagram", ]} - products={["Workers AI"]} + products={["workers-ai"]} /> diff --git a/src/content/docs/workers-ai/guides/tutorials/build-a-retrieval-augmented-generation-ai.mdx b/src/content/docs/workers-ai/guides/tutorials/build-a-retrieval-augmented-generation-ai.mdx index bb374add1e8bcec..789e040a69aecad 100644 --- a/src/content/docs/workers-ai/guides/tutorials/build-a-retrieval-augmented-generation-ai.mdx +++ b/src/content/docs/workers-ai/guides/tutorials/build-a-retrieval-augmented-generation-ai.mdx @@ -3,10 +3,7 @@ reviewed: 2024-11-21 difficulty: Beginner pcx_content_type: tutorial title: Build a Retrieval Augmented Generation (RAG) AI -products: - - Workers - - D1 - - Vectorize +products: [workers, d1, vectorize] tags: - AI - Hono diff --git a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux-newmodels.mdx b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux-newmodels.mdx index bd814c2873a3359..8e87fb19dccc4c5 100644 --- a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux-newmodels.mdx +++ b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux-newmodels.mdx @@ -5,8 +5,7 @@ pcx_content_type: tutorial title: Add New AI Models to your Playground (Part 2) sidebar: order: 2 -products: - - Workers +products: [workers] tags: - AI - TypeScript diff --git a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux.mdx b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux.mdx index 0a0855441124dca..24cb8a4a1c4d3a3 100644 --- a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux.mdx +++ b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux.mdx @@ -6,8 +6,7 @@ title: Build an AI Image Generator Playground (Part 1) tableOfContents: false sidebar: order: 1 -products: - - Workers +products: [workers] tags: - AI - TypeScript diff --git a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-store-and-catalog.mdx b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-store-and-catalog.mdx index 505be69f66c3b2e..cd1708d66f86e93 100644 --- a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-store-and-catalog.mdx +++ b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-store-and-catalog.mdx @@ -5,8 +5,7 @@ pcx_content_type: tutorial title: Store and Catalog AI Generated Images with R2 (Part 3) sidebar: order: 3 -products: - - Workers +products: [workers] tags: - AI - TypeScript diff --git a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/index.mdx b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/index.mdx index db85475b2a5330d..4ea2e333d7ca7bf 100644 --- a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/index.mdx +++ b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/index.mdx @@ -3,8 +3,7 @@ reviewed: 2024-10-17 difficulty: Beginner pcx_content_type: tutorial title: How to Build an Image Generator using Workers AI -products: - - Workers +products: [workers] tags: - AI - TypeScript diff --git a/src/content/docs/workers-ai/guides/tutorials/using-bigquery-with-workers-ai.mdx b/src/content/docs/workers-ai/guides/tutorials/using-bigquery-with-workers-ai.mdx index 2ac240e5b6be843..038d940f21802d9 100644 --- a/src/content/docs/workers-ai/guides/tutorials/using-bigquery-with-workers-ai.mdx +++ b/src/content/docs/workers-ai/guides/tutorials/using-bigquery-with-workers-ai.mdx @@ -3,9 +3,7 @@ reviewed: 2024-10-21 difficulty: Beginner pcx_content_type: tutorial title: Using BigQuery with Workers AI -products: - - Workers - - Workers AI +products: [workers, workers-ai] tags: - AI - JavaScript diff --git a/src/content/docs/workers/demos.mdx b/src/content/docs/workers/demos.mdx index b2d57d598b45917..ea9f624b4c4fdc7 100644 --- a/src/content/docs/workers/demos.mdx +++ b/src/content/docs/workers/demos.mdx @@ -20,4 +20,4 @@ Explore the following <GlossaryTooltip term="demo application">demo applications Explore the following <GlossaryTooltip term="reference architecture">reference architectures</GlossaryTooltip> that use Workers: -<ResourcesBySelector types={["reference-architecture","design-guide","reference-architecture-diagram"]} products={["Workers"]} /> +<ResourcesBySelector types={["reference-architecture","design-guide","reference-architecture-diagram"]} products={["workers"]} /> diff --git a/src/content/docs/workers/examples/index.mdx b/src/content/docs/workers/examples/index.mdx index cfe975a9e03e706..47e8b646bb5d66e 100644 --- a/src/content/docs/workers/examples/index.mdx +++ b/src/content/docs/workers/examples/index.mdx @@ -1,5 +1,4 @@ --- - hideChildren: true pcx_content_type: navigation title: Examples @@ -11,4 +10,8 @@ import { GlossaryTooltip, ResourcesBySelector } from "~/components"; Explore the following <GlossaryTooltip term="code example">examples</GlossaryTooltip> for Workers. -<ResourcesBySelector directory="workers/examples/" types={["example"]} filterables={["tags"]} /> +<ResourcesBySelector + directory="workers/examples/" + types={["example"]} + filterables={["tags"]} +/> diff --git a/src/content/docs/workers/tutorials/build-a-jamstack-app.mdx b/src/content/docs/workers/tutorials/build-a-jamstack-app.mdx index da95233fbebeb12..9a8d66aaf84d015 100644 --- a/src/content/docs/workers/tutorials/build-a-jamstack-app.mdx +++ b/src/content/docs/workers/tutorials/build-a-jamstack-app.mdx @@ -3,8 +3,7 @@ reviewed: 2024-05-14 difficulty: Beginner pcx_content_type: tutorial title: Build a todo list Jamstack application -products: - - KV +products: [kv] tags: - JavaScript description: >- diff --git a/src/content/docs/workers/tutorials/create-finetuned-chatgpt-ai-models-with-r2.mdx b/src/content/docs/workers/tutorials/create-finetuned-chatgpt-ai-models-with-r2.mdx index d68efadaf95ebaf..b350f85625c7d36 100644 --- a/src/content/docs/workers/tutorials/create-finetuned-chatgpt-ai-models-with-r2.mdx +++ b/src/content/docs/workers/tutorials/create-finetuned-chatgpt-ai-models-with-r2.mdx @@ -3,8 +3,7 @@ difficulty: Intermediate pcx_content_type: tutorial title: Create a fine-tuned OpenAI model with R2 reviewed: 2024-06-07 -products: - - R2 +products: [r2] tags: - AI - Hono diff --git a/src/content/docs/workers/tutorials/deploy-a-realtime-chat-app.mdx b/src/content/docs/workers/tutorials/deploy-a-realtime-chat-app.mdx index 269a7eabb7214a0..cb1978608046319 100644 --- a/src/content/docs/workers/tutorials/deploy-a-realtime-chat-app.mdx +++ b/src/content/docs/workers/tutorials/deploy-a-realtime-chat-app.mdx @@ -3,8 +3,7 @@ reviewed: 2023-09-13 difficulty: Intermediate pcx_content_type: tutorial title: Deploy a real-time chat application -products: - - Durable Objects +products: [durable-objects] tags: - JavaScript description: >- diff --git a/src/content/docs/workers/tutorials/generate-youtube-thumbnails-with-workers-and-images.mdx b/src/content/docs/workers/tutorials/generate-youtube-thumbnails-with-workers-and-images.mdx index 8fd38ce4aa58344..1af393460a1113f 100644 --- a/src/content/docs/workers/tutorials/generate-youtube-thumbnails-with-workers-and-images.mdx +++ b/src/content/docs/workers/tutorials/generate-youtube-thumbnails-with-workers-and-images.mdx @@ -3,8 +3,7 @@ reviewed: 2023-03-27 difficulty: Intermediate pcx_content_type: tutorial title: Generate YouTube thumbnails with Workers and Cloudflare Image Resizing -products: - - Images +products: [images] tags: - JavaScript - Rust diff --git a/src/content/docs/workers/tutorials/mysql.mdx b/src/content/docs/workers/tutorials/mysql.mdx index 3a434d1dc321463..e94e9443989a927 100644 --- a/src/content/docs/workers/tutorials/mysql.mdx +++ b/src/content/docs/workers/tutorials/mysql.mdx @@ -3,8 +3,7 @@ reviewed: 2025-04-02 difficulty: Beginner pcx_content_type: tutorial title: Connect to a MySQL database with Cloudflare Workers -products: - - Hyperdrive +products: [hyperdrive] tags: - MySQL - TypeScript diff --git a/src/content/docs/workers/tutorials/postgres.mdx b/src/content/docs/workers/tutorials/postgres.mdx index bb209e67d3327a3..1bdd73dc12178ba 100644 --- a/src/content/docs/workers/tutorials/postgres.mdx +++ b/src/content/docs/workers/tutorials/postgres.mdx @@ -3,8 +3,7 @@ reviewed: 2025-07-01 difficulty: Beginner pcx_content_type: tutorial title: Connect to a PostgreSQL database with Cloudflare Workers -products: - - Hyperdrive +products: [hyperdrive] tags: - PostgreSQL - TypeScript diff --git a/src/content/docs/workers/tutorials/upload-assets-with-r2.mdx b/src/content/docs/workers/tutorials/upload-assets-with-r2.mdx index 28805cf2c8902d3..223fa98d4e243fa 100644 --- a/src/content/docs/workers/tutorials/upload-assets-with-r2.mdx +++ b/src/content/docs/workers/tutorials/upload-assets-with-r2.mdx @@ -3,8 +3,7 @@ reviewed: 2023-06-15 difficulty: Beginner pcx_content_type: tutorial title: Securely access and upload assets with Cloudflare R2 -products: - - R2 +products: [r2] tags: - TypeScript description: >- diff --git a/src/content/docs/workers/tutorials/workers-kv-from-rust.mdx b/src/content/docs/workers/tutorials/workers-kv-from-rust.mdx index 6887baf0ac9dd9f..20d6c9e6db7dd9a 100644 --- a/src/content/docs/workers/tutorials/workers-kv-from-rust.mdx +++ b/src/content/docs/workers/tutorials/workers-kv-from-rust.mdx @@ -3,8 +3,7 @@ reviewed: 2024-05-15 difficulty: Intermediate pcx_content_type: tutorial title: Use Workers KV directly from Rust -products: - - KV +products: [kv] tags: - Rust description: >- diff --git a/src/content/docs/workflows/examples/backup-d1.mdx b/src/content/docs/workflows/examples/backup-d1.mdx index 786dcc895654ebe..6b0435ba36283f0 100644 --- a/src/content/docs/workflows/examples/backup-d1.mdx +++ b/src/content/docs/workflows/examples/backup-d1.mdx @@ -1,12 +1,9 @@ --- summary: Export a D1 database into R2 storage with Workflows -products: - - Workflows - - D1 - - R2 +products: [d1, r2] tags: - - Typescript + - TypeScript pcx_content_type: example title: Export and save D1 database sidebar: diff --git a/src/content/docs/workflows/examples/send-invoices.mdx b/src/content/docs/workflows/examples/send-invoices.mdx index a937ffaa00c5cd5..960ee8d5403684a 100644 --- a/src/content/docs/workflows/examples/send-invoices.mdx +++ b/src/content/docs/workflows/examples/send-invoices.mdx @@ -1,10 +1,9 @@ --- summary: Send invoice when shopping cart is checked out and paid for -products: - - Workflows - - D1 - - Email Routing +products: [d1, email-routing] +tags: + - TypeScript pcx_content_type: example title: Pay cart and send invoice sidebar: diff --git a/src/content/docs/workflows/examples/twilio.mdx b/src/content/docs/workflows/examples/twilio.mdx index f628e9e19be2cb0..fab000b5aa83d1b 100644 --- a/src/content/docs/workflows/examples/twilio.mdx +++ b/src/content/docs/workflows/examples/twilio.mdx @@ -1,8 +1,7 @@ --- summary: Integrate Workflows with Twilio. Learn how to receive and send text messages and phone calls via APIs and Webhooks. -products: - - Workers +products: [workers] pcx_content_type: example title: Integrate Workflows with Twilio sidebar: diff --git a/src/content/docs/workflows/examples/wait-for-event.mdx b/src/content/docs/workflows/examples/wait-for-event.mdx index 09066d250e1f1ff..a0d3963f43a46c1 100644 --- a/src/content/docs/workflows/examples/wait-for-event.mdx +++ b/src/content/docs/workflows/examples/wait-for-event.mdx @@ -1,8 +1,6 @@ --- summary: Implement a Cloudflare Workflow that processes user-uploaded images, awaits human approval, and performs AI-based image tagging upon approval. -products: - - Workflows tags: - Typescript pcx_content_type: example diff --git a/src/content/learning-paths/application-security.json b/src/content/learning-paths/application-security.json index 79e18fd0822599d..aa547fcfe07f6a1 100644 --- a/src/content/learning-paths/application-security.json +++ b/src/content/learning-paths/application-security.json @@ -3,13 +3,8 @@ "path": "/learning-paths/application-security/account-security/", "priority": 6, "description": "Learn more about the tools Cloudflare offers to protect your website against malicious traffic and bad actors.", - "products": [ - "Cloudflare Essentials", - "SSL/TLS", - "WAF", - "DDoS protection", - "Bots" - ], + "pcx_content_type": "learning-path", + "products": ["fundamentals", "ssl", "waf", "ddos-protection", "bots"], "product_group": "Application security", "additional_groups": ["Application security"] } diff --git a/src/content/learning-paths/china-network-overview.json b/src/content/learning-paths/china-network-overview.json index 7f7f420ae2f67b7..f47b4567524a8b2 100644 --- a/src/content/learning-paths/china-network-overview.json +++ b/src/content/learning-paths/china-network-overview.json @@ -3,7 +3,8 @@ "path": "/learning-paths/china-network-overview/series/china-network-main-features-1/", "priority": 1, "description": "Watch to learn how Cloudflare's China Network can help you improve performance, compliance, and connectivity for your users in mainland China.", - "products": ["China Network"], + "pcx_content_type": "learning-path", + "products": ["china-network"], "product_group": "Application performance", "additional_groups": ["Application security"], "video": true diff --git a/src/content/learning-paths/clientless-access.json b/src/content/learning-paths/clientless-access.json index ea51e2ce9d60b1e..cb3f8a7cef8803d 100644 --- a/src/content/learning-paths/clientless-access.json +++ b/src/content/learning-paths/clientless-access.json @@ -2,12 +2,9 @@ "title": "Deploy clientless access", "path": "/learning-paths/clientless-access/concepts/", "priority": 2, - "description": "Secure access to internal web applications without a device client.", - "products": [ - "Cloudflare Access", - "Cloudflare Tunnel", - "Remote Browser Isolation" - ], + "description": "Learn how to set up clientless access to internal applications with Cloudflare Zero Trust.", + "pcx_content_type": "learning-path", + "products": ["access", "cloudflare-tunnel", "browser-isolation"], "product_group": "Cloudflare One", "additional_groups": ["Application security", "Application performance"] } diff --git a/src/content/learning-paths/cybersafe.json b/src/content/learning-paths/cybersafe.json index 8087d7865c9ce1d..736ae574a63d076 100644 --- a/src/content/learning-paths/cybersafe.json +++ b/src/content/learning-paths/cybersafe.json @@ -2,8 +2,9 @@ "title": "Project Cybersafe Schools", "path": "/learning-paths/cybersafe/concepts/", "priority": 5, - "description": "Prevent children from accessing obscene or harmful content over the Internet. Go to [Project Cybersafe Schools](https://www.cloudflare.com/lp/cybersafe-schools/) to apply.", - "products": ["Cloudflare Gateway", "WARP", "DNS"], + "description": "Prevent children from accessing obscene or harmful content over the Internet.", + "pcx_content_type": "learning-path", + "products": ["gateway", "zero-trust-warp", "dns"], "product_group": "Cloudflare One", "additional_groups": ["Application security"] } diff --git a/src/content/learning-paths/data-center-protection.json b/src/content/learning-paths/data-center-protection.json index 7a389cd5c9272df..8ce0d1fdaae848d 100644 --- a/src/content/learning-paths/data-center-protection.json +++ b/src/content/learning-paths/data-center-protection.json @@ -3,6 +3,7 @@ "path": "/learning-paths/data-center-protection/concepts/", "priority": 2, "description": "Learn how to use Magic Transit to protect your data centers from distributed denial-of-service (DDoS) attacks.", - "products": ["Magic Transit"], + "pcx_content_type": "learning-path", + "products": ["magic-transit"], "product_group": "Network security" } diff --git a/src/content/learning-paths/durable-objects-course.json b/src/content/learning-paths/durable-objects-course.json index 08ba05bc9320c4a..bd073ad5bfab256 100644 --- a/src/content/learning-paths/durable-objects-course.json +++ b/src/content/learning-paths/durable-objects-course.json @@ -2,8 +2,9 @@ "title": "Introduction to Durable Objects", "path": "/learning-paths/durable-objects-course/series/introduction-to-series-1/", "priority": 2, + "pcx_content_type": "learning-path", "description": "Dive into a hands-on Durable Objects project and learn how to build stateful apps using serverless architecture", - "products": ["Durable Objects", "Workers"], + "products": ["durable-objects", "workers"], "product_group": "Developer platform", "video": true } diff --git a/src/content/learning-paths/holistic-ai-security.json b/src/content/learning-paths/holistic-ai-security.json index 7d125aae75d0e89..f87b49d36be169a 100644 --- a/src/content/learning-paths/holistic-ai-security.json +++ b/src/content/learning-paths/holistic-ai-security.json @@ -3,6 +3,7 @@ "path": "/learning-paths/holistic-ai-security/concepts/", "priority": 18, "description": "Address new security challenges and mitigate risks like shadow AI and data loss.", - "products": ["CASB", "Access", "Secure Gateway"], + "pcx_content_type": "learning-path", + "products": ["casb", "access", "gateway"], "product_group": "Cloudflare One" } diff --git a/src/content/learning-paths/load-balancing.json b/src/content/learning-paths/load-balancing.json index 3ef01a3b174f8a2..e0d36e41530582e 100644 --- a/src/content/learning-paths/load-balancing.json +++ b/src/content/learning-paths/load-balancing.json @@ -3,6 +3,7 @@ "path": "/learning-paths/load-balancing/concepts/", "priority": 2, "description": "Maximize application performance and availability.", - "products": ["Load balancing"], + "pcx_content_type": "learning-path", + "products": ["load-balancing"], "product_group": "Application performance" } diff --git a/src/content/learning-paths/mtls.json b/src/content/learning-paths/mtls.json index 2f71a34f40a8042..8443efbe600e6de 100644 --- a/src/content/learning-paths/mtls.json +++ b/src/content/learning-paths/mtls.json @@ -3,7 +3,8 @@ "path": "/learning-paths/mtls/concepts/", "priority": 5, "description": "Safeguard APIs and Devices on Cloudflare's network.", - "products": ["API Shield", "Access", "SSL/TLS"], + "pcx_content_type": "learning-path", + "products": ["api-shield", "access", "ssl"], "product_group": "Cloudflare One", "additional_groups": ["Application security"] } diff --git a/src/content/learning-paths/prevent-ddos-attacks.json b/src/content/learning-paths/prevent-ddos-attacks.json index 3036863293e1b02..7712efb47aedc21 100644 --- a/src/content/learning-paths/prevent-ddos-attacks.json +++ b/src/content/learning-paths/prevent-ddos-attacks.json @@ -2,7 +2,8 @@ "title": "Prevent DDoS attacks", "path": "/learning-paths/prevent-ddos-attacks/concepts/", "priority": 2, + "pcx_content_type": "learning-path", "description": "Protect your application from distributed (DDoS) and regular denial of service (DoS) attacks.", - "products": ["Cache", "DDoS protection", "SSL/TLS", "WAF"], + "products": ["cache", "ddos-protection", "ssl", "waf"], "product_group": "Application security" } diff --git a/src/content/learning-paths/r2-intro.json b/src/content/learning-paths/r2-intro.json index ca12249bb21869c..06e062f30635c8b 100644 --- a/src/content/learning-paths/r2-intro.json +++ b/src/content/learning-paths/r2-intro.json @@ -2,8 +2,9 @@ "title": "Introduction to R2", "path": "/learning-paths/r2-intro/series/r2-1/", "priority": 2, + "pcx_content_type": "learning-path", "description": "Learn about Cloudflare R2, an object storage solution designed to handle your data and files efficiently. It is ideal for storing large media files, creating data lakes, or delivering web assets.", - "products": ["R2", "Workers"], + "products": ["r2", "workers"], "product_group": "Developer platform", "video": true } diff --git a/src/content/learning-paths/replace-vpn.json b/src/content/learning-paths/replace-vpn.json index 246fc535f3f4d5a..f92632d9e62d1ce 100644 --- a/src/content/learning-paths/replace-vpn.json +++ b/src/content/learning-paths/replace-vpn.json @@ -2,8 +2,9 @@ "title": "Replace your VPN", "path": "/learning-paths/replace-vpn/concepts/", "priority": 1, - "description": "Give users secure, auditable network and application access.", - "products": ["Cloudflare Gateway", "Cloudflare Tunnel", "WARP"], + "description": "Learn how to replace your VPN with Cloudflare Zero Trust.", + "pcx_content_type": "learning-path", + "products": ["gateway", "cloudflare-tunnel", "zero-trust-warp"], "product_group": "Cloudflare One", "additional_groups": ["Application security", "Application performance"] } diff --git a/src/content/learning-paths/sase-overview-course.json b/src/content/learning-paths/sase-overview-course.json index 87441d86996b7e0..67fe1a5459a7f70 100644 --- a/src/content/learning-paths/sase-overview-course.json +++ b/src/content/learning-paths/sase-overview-course.json @@ -2,8 +2,9 @@ "title": "Build and secure your SASE corporate network", "path": "/learning-paths/sase-overview-course/series/evolution-corporate-networks-1/", "priority": 1, + "pcx_content_type": "learning-path", "description": "Watch this series and learn all about Cloudflare's Secure Access Service Edge (SASE) platform to learn how it can revolutionize your corporate network.", - "products": ["Cloudflare One"], + "products": ["cloudflare-one"], "product_group": "Cloudflare One", "additional_groups": ["Cloudflare One", "Core platform"], "video": true diff --git a/src/content/learning-paths/secure-internet-traffic.json b/src/content/learning-paths/secure-internet-traffic.json index 6a4b6695c7ebfb5..114b660a9bc8def 100644 --- a/src/content/learning-paths/secure-internet-traffic.json +++ b/src/content/learning-paths/secure-internet-traffic.json @@ -2,7 +2,8 @@ "title": "Secure your Internet traffic and SaaS apps", "path": "/learning-paths/secure-internet-traffic/concepts/", "priority": 2, + "pcx_content_type": "learning-path", "description": "Provide your users and networks with a secure, performant, and flexible path to the Internet.", - "products": ["DNS", "Gateway", "CASB", "DLP", "Browser Isolation"], + "products": ["dns", "gateway", "casb", "dlp", "browser-isolation"], "product_group": "Cloudflare One" } diff --git a/src/content/learning-paths/secure-o365-email.json b/src/content/learning-paths/secure-o365-email.json index 07a86a08bd342e1..c268f9c1a1f7fbd 100644 --- a/src/content/learning-paths/secure-o365-email.json +++ b/src/content/learning-paths/secure-o365-email.json @@ -2,7 +2,8 @@ "title": "Secure Microsoft 365 email with Email Security", "path": "/learning-paths/secure-o365-email/concepts/", "priority": 2, + "pcx_content_type": "learning-path", "description": "Use Cloudflare's Email Security to protect your Microsoft 365 email inbox from phishing and malware attacks.", - "products": ["Email Security"], + "products": ["email-security-cf1"], "product_group": "Cloudflare One" } diff --git a/src/content/learning-paths/surge-readiness.json b/src/content/learning-paths/surge-readiness.json index b12fdc72088096e..075f3c9000ba1ca 100644 --- a/src/content/learning-paths/surge-readiness.json +++ b/src/content/learning-paths/surge-readiness.json @@ -2,7 +2,8 @@ "title": "Prepare for surges or spikes in web traffic", "path": "/learning-paths/surge-readiness/concepts/", "priority": 5, + "pcx_content_type": "learning-path", "description": "Learn how to protect your website for potential surges or spikes in web traffic.", - "products": ["Cache", "WAF"], + "products": ["cache", "waf"], "product_group": "Application security" } diff --git a/src/content/learning-paths/warp-overview-course.json b/src/content/learning-paths/warp-overview-course.json index 1c35c0586844bff..930158c573831b5 100644 --- a/src/content/learning-paths/warp-overview-course.json +++ b/src/content/learning-paths/warp-overview-course.json @@ -2,8 +2,9 @@ "title": "Understand and troubleshoot Cloudflare WARP", "path": "/learning-paths/warp-overview-course/series/warp-basics-1/", "priority": 1, + "pcx_content_type": "learning-path", "description": "In this series, we cover the basics of Cloudflare WARP, share useful troubleshooting tips, and explain the warp-diag logs in detail.", - "products": ["Cloudflare One"], + "products": ["cloudflare-one"], "product_group": "Cloudflare One", "additional_groups": ["Cloudflare One", "Core platform"], "video": true diff --git a/src/content/learning-paths/workers.json b/src/content/learning-paths/workers.json index 401eef67bce1598..02641c7aec61646 100644 --- a/src/content/learning-paths/workers.json +++ b/src/content/learning-paths/workers.json @@ -3,7 +3,8 @@ "uid": "workers-intro", "path": "/learning-paths/workers/concepts/", "priority": 4, + "pcx_content_type": "learning-path", "description": "Deploy serverless code, globally with exceptional performance, reliability, and scale.", - "products": ["Workers"], + "products": ["workers"], "product_group": "Developer platform" } diff --git a/src/content/learning-paths/workflows-course.json b/src/content/learning-paths/workflows-course.json index 08c206e841fb6c6..9c0e6ce72d70527 100644 --- a/src/content/learning-paths/workflows-course.json +++ b/src/content/learning-paths/workflows-course.json @@ -2,8 +2,9 @@ "title": "Introduction to Cloudflare Workflows", "path": "/learning-paths/workflows-course/series/workflows-1/", "priority": 2, + "pcx_content_type": "learning-path", "description": "In this series, we introduce Cloudflare Workflows and the term 'Durable Execution' which comes from the desire to run applications that can resume execution from where they left off, even if the underlying host or compute fails.", - "products": ["Durable Objects", "Workers"], + "products": ["durable-objects", "workers", "workflows"], "product_group": "Developer platform", "video": true } diff --git a/src/content/products/cache-rules.yaml b/src/content/products/cache-rules.yaml new file mode 100644 index 000000000000000..89865b0ea812851 --- /dev/null +++ b/src/content/products/cache-rules.yaml @@ -0,0 +1,11 @@ +name: Cache Rules + +product: + title: Cache Rules + group: Application performance + url: /cache/how-to/cache-rules/ + show: false + +meta: + title: Cloudflare Cache Rules docs + author: "@cloudflare" \ No newline at end of file diff --git a/src/content/products/cloud-connector.yaml b/src/content/products/cloud-connector.yaml new file mode 100644 index 000000000000000..99381210de79eed --- /dev/null +++ b/src/content/products/cloud-connector.yaml @@ -0,0 +1,11 @@ +name: Cloud Connector + +product: + title: Cloud Connector + group: Application performance + url: /rules/cloud-connector/ + show: false + +meta: + title: Cloudflare Cloud Connector docs + author: "@cloudflare" \ No newline at end of file diff --git a/src/content/products/compression-rules.yaml b/src/content/products/compression-rules.yaml new file mode 100644 index 000000000000000..b4b20d8c29f7df6 --- /dev/null +++ b/src/content/products/compression-rules.yaml @@ -0,0 +1,11 @@ +name: Compression Rules + +product: + title: Compression Rules + group: Application performance + url: /rules/compression-rules/ + show: false + +meta: + title: Cloudflare Compression Rules docs + author: "@cloudflare" \ No newline at end of file diff --git a/src/content/products/configuration-rules.yaml b/src/content/products/configuration-rules.yaml new file mode 100644 index 000000000000000..49d441ebc33fcb6 --- /dev/null +++ b/src/content/products/configuration-rules.yaml @@ -0,0 +1,11 @@ +name: Configuration Rules + +product: + title: Configuration Rules + group: Application performance + url: /rules/configuration-rules/ + show: false + +meta: + title: Cloudflare Configuration Rules docs + author: "@cloudflare" \ No newline at end of file diff --git a/src/content/products/origin-rules.yaml b/src/content/products/origin-rules.yaml new file mode 100644 index 000000000000000..d395daa9aceb30b --- /dev/null +++ b/src/content/products/origin-rules.yaml @@ -0,0 +1,11 @@ +name: Origin Rules + +product: + title: Origin Rules + group: Application performance + url: /rules/origin-rules/ + show: false + +meta: + title: Cloudflare Origin Rules docs + author: "@cloudflare" \ No newline at end of file diff --git a/src/content/products/redirect-rules.yaml b/src/content/products/redirect-rules.yaml new file mode 100644 index 000000000000000..9f6945cd223bb9b --- /dev/null +++ b/src/content/products/redirect-rules.yaml @@ -0,0 +1,11 @@ +name: Redirect Rules + +product: + title: Redirect Rules + group: Application performance + url: /rules/url-forwarding/ + show: false + +meta: + title: Cloudflare Redirect Rules docs + author: "@cloudflare" \ No newline at end of file diff --git a/src/content/products/snippets.yaml b/src/content/products/snippets.yaml new file mode 100644 index 000000000000000..5fc5fc15f836495 --- /dev/null +++ b/src/content/products/snippets.yaml @@ -0,0 +1,11 @@ +name: Snippets + +product: + title: Snippets + group: Application performance + url: /rules/snippets/ + show: false + +meta: + title: Cloudflare Snippets docs + author: "@cloudflare" \ No newline at end of file diff --git a/src/content/products/transform-rules.yaml b/src/content/products/transform-rules.yaml new file mode 100644 index 000000000000000..220cb78eb71c347 --- /dev/null +++ b/src/content/products/transform-rules.yaml @@ -0,0 +1,11 @@ +name: Transform Rules + +product: + title: Transform Rules + group: Application performance + url: /rules/transform/ + show: false + +meta: + title: Cloudflare Transform Rules docs + author: "@cloudflare" \ No newline at end of file diff --git a/src/content/stream/app-sec-dashboard/index.yaml b/src/content/stream/app-sec-dashboard/index.yaml index 2b4d22d71cf305e..5fd6d770e8a54f2 100644 --- a/src/content/stream/app-sec-dashboard/index.yaml +++ b/src/content/stream/app-sec-dashboard/index.yaml @@ -5,6 +5,7 @@ title: Application Security - Dashboard walkthrough description: In this video, learn how to navigate the Cloudflare Application Security dashboard and how to use each page to monitor, investigate, and manage security protections. products: - dns +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Application%20security%20demo.png transcript: | diff --git a/src/content/stream/app-sec-get-started/index.yaml b/src/content/stream/app-sec-get-started/index.yaml index 8ae299408e0f905..53b75d1afb428ff 100644 --- a/src/content/stream/app-sec-get-started/index.yaml +++ b/src/content/stream/app-sec-get-started/index.yaml @@ -5,6 +5,7 @@ title: Application Security - Get started guide description: In this video, learn how to get immediate protection against the most common attacks. products: - dns +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/appsec-get-started-guide.png transcript: | diff --git a/src/content/stream/china-network-acceleration/index.yaml b/src/content/stream/china-network-acceleration/index.yaml index ce5f66a4a3fb64f..915c2c86e90e499 100644 --- a/src/content/stream/china-network-acceleration/index.yaml +++ b/src/content/stream/china-network-acceleration/index.yaml @@ -5,6 +5,7 @@ title: China network - CDN global acceleration for Mainland China description: In this video, Jess Liu discusses Cloudflares CDN Global Acceleration (formerly China Express), including solutions for high latency on dynamic content, accelerating API calls, accessing Cloudflare One services like WARP and Magic WAN from within mainland China, and securely connecting private enterprise networks. products: - china-network +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/2-China-Express-thumbnail.png chapters: diff --git a/src/content/stream/china-network-inside-china/index.yaml b/src/content/stream/china-network-inside-china/index.yaml index db1666afc1790ac..747e2102222b805 100644 --- a/src/content/stream/china-network-inside-china/index.yaml +++ b/src/content/stream/china-network-inside-china/index.yaml @@ -5,6 +5,7 @@ title: China network - How to speed up your web traffic inside mainland China description: In this video, Jess Liu walks us through the main features of Cloudflares China Network. They cover how the China Network works, including integrated caching, in-country China name servers, and compliance with ICP regulations. They also briefly discuss Cloudflare's CDN Global Acceleration (formerly China Express), an option for accelerating dynamic content that cannot be cached. products: - china-network +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/1-China-network-thumbnail.png chapters: diff --git a/src/content/stream/content-compression/index.yaml b/src/content/stream/content-compression/index.yaml index 6de2812410a24d2..ba51205ba1844cb 100644 --- a/src/content/stream/content-compression/index.yaml +++ b/src/content/stream/content-compression/index.yaml @@ -5,5 +5,6 @@ title: Content compression description: In this video, learn how Cloudflare compresses content between Cloudflare and your website visitors and between Cloudflare and your origin server. products: - speed +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Mermaid%20thumbnail_Content%20Compression.png diff --git a/src/content/stream/create-api-tokens/index.yaml b/src/content/stream/create-api-tokens/index.yaml index 82307734bd427ef..0a78c7e57b32dce 100644 --- a/src/content/stream/create-api-tokens/index.yaml +++ b/src/content/stream/create-api-tokens/index.yaml @@ -5,6 +5,7 @@ title: Create an API token description: In this video, learn the difference between account and user API tokens how to create one. products: - fundamentals +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/API%20token.png transcript: | diff --git a/src/content/stream/full-ssl-encryption/index.yaml b/src/content/stream/full-ssl-encryption/index.yaml index 6709a6dd8d40bea..402a9fde51a4bb8 100644 --- a/src/content/stream/full-ssl-encryption/index.yaml +++ b/src/content/stream/full-ssl-encryption/index.yaml @@ -5,5 +5,6 @@ title: Configure Full encryption mode description: In this video, learn how to configure your site to use Full encryption mode. products: - ssl +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Mermaid%20thumbnail_Full.png diff --git a/src/content/stream/load-balancing/index.yaml b/src/content/stream/load-balancing-setup/index.yaml similarity index 97% rename from src/content/stream/load-balancing/index.yaml rename to src/content/stream/load-balancing-setup/index.yaml index d57066d98e402db..82a5d5f43e211a7 100644 --- a/src/content/stream/load-balancing/index.yaml +++ b/src/content/stream/load-balancing-setup/index.yaml @@ -5,6 +5,7 @@ title: How to set up a load balancer description: Unexpected traffic spikes can crash your website, but Cloudflare Load Balancing helps keep your apps online and fast. In this step-by-step tutorial, learn how to create a public load balancer in just five steps - select a hostname, add an origin pool, attach a health monitor, choose a traffic steering method, and configure custom rules. We'll also explain the difference between public and private load balancers and guide you through using session affinity, fallback pools, and proxy modes. products: - load-balancing +pcx_content_type: video thumbnail: timestamp: 26s chapters: { diff --git a/src/content/stream/manage-account-members/index.yaml b/src/content/stream/manage-account-members/index.yaml index 2fef20fa6c4a179..5de9cec658436ef 100644 --- a/src/content/stream/manage-account-members/index.yaml +++ b/src/content/stream/manage-account-members/index.yaml @@ -5,6 +5,7 @@ title: Manage account members description: In this video, learn how to define the roles and permission scope for members associated with an account. products: - fundamentals +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/manage%20account%20members.png transcript: | diff --git a/src/content/stream/onboard-domain-cf/index.yaml b/src/content/stream/onboard-domain-cf/index.yaml index 2de221336e6201d..179adcc5f17c33c 100644 --- a/src/content/stream/onboard-domain-cf/index.yaml +++ b/src/content/stream/onboard-domain-cf/index.yaml @@ -4,7 +4,8 @@ url: onboard-domain-cf title: Onboard your domain to Cloudflare description: Learn how Cloudflare secures and accelerates your website using its global network and reverse proxy technology. In this video, we explain how connecting your domain to Cloudflare protects your origin server, enhances performance, and keeps your site online—even during attacks. You'll see how DNS, nameservers, and proxy status work together to route and safeguard traffic. Whether you're self-hosting or using serverless platforms like Cloudflare Workers, this guide helps you understand the onboarding process and why Cloudflare is essential for modern web infrastructure. products: - - dns + - fundamentals +pcx_content_type: video thumbnail: timestamp: 2s chapters: { diff --git a/src/content/stream/sase-1-evolution-corp-networks/index.yaml b/src/content/stream/sase-1-evolution-corp-networks/index.yaml index 9bb4d8a91bdc50e..8cd3d0cb2045cd2 100644 --- a/src/content/stream/sase-1-evolution-corp-networks/index.yaml +++ b/src/content/stream/sase-1-evolution-corp-networks/index.yaml @@ -4,24 +4,26 @@ url: sase-1-evolution-corp-networks title: SASE - The evolution of corporate networks description: In this video, we discuss Cloudflare One, our Secure Access Service Edge (SASE) platform and how it has been designed to revolutionize the corporate network and enable companies with their Zero Trust strategy. Legacy network design is struggling to address today's challenges of security, performance, and monitoring needs. Many IT teams are trying to evolve their corporate network with point solutions and finding the lack of integration and performance an issue. products: - - sase + - cloudflare-one +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Video-1-The-evolution-of-corporate-networks.jpg -chapters: { - "Introduction to SASE and Modern Corporate Networking": "0s", - "The Evolution of Corporate Networks and Security Challenges": "01m08s", - "Why Legacy Solutions Like VPNs and SD-WAN Are Insufficient": "03m05s", - "How Cloudflare's Global Network Powers SASE Solutions": "04m13s", - "The Role of Cloudflare's Connectivity Cloud in Securing Enterprises": "05m28s", - "Simplified Security, Network Optimization, and Cost Savings with Cloudflare": "06m15s" -} +chapters: + { + "Introduction to SASE and Modern Corporate Networking": "0s", + "The Evolution of Corporate Networks and Security Challenges": "01m08s", + "Why Legacy Solutions Like VPNs and SD-WAN Are Insufficient": "03m05s", + "How Cloudflare's Global Network Powers SASE Solutions": "04m13s", + "The Role of Cloudflare's Connectivity Cloud in Securing Enterprises": "05m28s", + "Simplified Security, Network Optimization, and Cost Savings with Cloudflare": "06m15s", + } transcript: | WEBVTT 1 00:00:07.310 --> 00:00:12.080 - Hi, I'm Simon here at Cloudflare, + Hi, I'm Simon here at Cloudflare, and I'm going to talk about our SASE platform 2 @@ -30,42 +32,42 @@ transcript: | 3 00:00:14.720 --> 00:00:18.920 - Many company networks have been built on + Many company networks have been built on technology that simply can't cope with 4 00:00:18.920 --> 00:00:21.620 - today's security, performance and monitoring + today's security, performance and monitoring needs. 5 00:00:21.650 --> 00:00:25.910 - The demands on a corporate network have + The demands on a corporate network have evolved dramatically over the past few years. 6 00:00:25.910 --> 00:00:29.660 - Those working in IT and networking are really + Those working in IT and networking are really struggling with the fact that users, 7 00:00:29.660 --> 00:00:34.670 - their devices, and the applications and data + their devices, and the applications and data they need to access are distributed all over 8 00:00:34.670 --> 00:00:38.000 - the place, beyond the perimeter of the + the place, beyond the perimeter of the classic corporate network. 9 00:00:38.030 --> 00:00:41.840 - They're trying to address this problem with + They're trying to address this problem with legacy approaches, which increase cost and 10 00:00:41.840 --> 00:00:45.350 - complexity, and can result in a solution that + complexity, and can result in a solution that doesn't perform that well, 11 @@ -74,7 +76,7 @@ transcript: | 12 00:00:47.390 --> 00:00:50.990 - So in response to these challenges, + So in response to these challenges, the concept of SASE has evolved. 13 @@ -83,17 +85,17 @@ transcript: | 14 00:00:54.260 --> 00:00:56.630 - It's a new approach to networking and + It's a new approach to networking and security, 15 00:00:56.630 --> 00:01:00.770 - which reduces complexity, + which reduces complexity, as well as bringing stronger access controls 16 00:01:00.770 --> 00:01:04.100 - and improved performance for the protection + and improved performance for the protection of applications, 17 @@ -102,47 +104,47 @@ transcript: | 18 00:01:06.950 --> 00:01:10.790 - But how does it work? First, + But how does it work? First, let's go back and let's look at how 19 00:01:10.820 --> 00:01:13.790 - networking and security solutions used to be + networking and security solutions used to be designed. 20 00:01:13.820 --> 00:01:18.920 - Decades ago, employees would travel into an + Decades ago, employees would travel into an office and use the company's local network, 21 00:01:18.920 --> 00:01:23.420 - which was made up of that network, + which was made up of that network, plus also connections to branch offices, 22 00:01:23.420 --> 00:01:28.790 - maybe a data center, and various other + maybe a data center, and various other locations via private leased lines using 23 00:01:28.820 --> 00:01:33.470 - technologies such as MultiProtocol Label + technologies such as MultiProtocol Label Switching or MPLS. 24 00:01:33.500 --> 00:01:37.880 - You are paying for expensive private + You are paying for expensive private connectivity with dedicated bandwidth, 25 00:01:37.880 --> 00:01:42.380 - and typically all Internet access was + and typically all Internet access was backhauled through these connections to a 26 00:01:42.380 --> 00:01:46.310 - single data center, where firewalls and + single data center, where firewalls and proxies would then inspect the traffic and 27 @@ -151,87 +153,87 @@ transcript: | 28 00:01:47.630 --> 00:01:52.790 - But over time, as the available Internet + But over time, as the available Internet bandwidth increased for less cost, 29 00:01:52.790 --> 00:01:57.320 - the need for these dedicated lines diminished + the need for these dedicated lines diminished and software defined networks, 30 00:01:57.320 --> 00:02:02.780 - commonly known as SD-WAN became popular, + commonly known as SD-WAN became popular, helping businesses better manage traffic and 31 00:02:02.810 --> 00:02:08.400 - optimize usage of cheaper Internet based + optimize usage of cheaper Internet based IPsec tunnels versus these expensive leased 32 00:02:08.400 --> 00:02:15.120 - lines. However, SD-WAN still left businesses + lines. However, SD-WAN still left businesses managing complex on premises appliances and 33 00:02:15.120 --> 00:02:18.690 - having to deal with configuration changes and + having to deal with configuration changes and software updates. 34 00:02:18.720 --> 00:02:24.210 - Also, firewalls associated with these SD-WAN + Also, firewalls associated with these SD-WAN appliances were relatively limited and often 35 00:02:24.210 --> 00:02:27.870 - paired with extra hardware for a more + paired with extra hardware for a more complete security solution. 36 00:02:27.900 --> 00:02:31.860 - While all this was going on, + While all this was going on, the proliferation of devices such as laptops 37 00:02:31.860 --> 00:02:35.550 - and smartphones were allowing employees to + and smartphones were allowing employees to work from anywhere, 38 00:02:35.550 --> 00:02:40.140 - so VPNs were added into the mix, + so VPNs were added into the mix, where people could dial up to the VPN and 39 00:02:40.140 --> 00:02:44.130 - access their company network. Often all their + access their company network. Often all their Internet access was also funneled through 40 00:02:44.130 --> 00:02:47.880 - these VPN connections, + these VPN connections, so the same security policies office users 41 00:02:47.880 --> 00:02:51.870 - had would also be applied to the remote user + had would also be applied to the remote user traffic and it all came back through that 42 00:02:51.870 --> 00:02:56.370 - company data center. And this approach is + company data center. And this approach is really hard to manage with multiple vendors 43 00:02:56.370 --> 00:02:59.880 - and different appliances and different + and different appliances and different dashboards to configure the policies across 44 00:02:59.880 --> 00:03:03.090 - all these technologies, + all these technologies, and they're not really designed to work well 45 @@ -240,37 +242,37 @@ transcript: | 46 00:03:05.130 --> 00:03:08.970 - But today, it's not just users and devices + But today, it's not just users and devices that have left the office and company 47 00:03:09.000 --> 00:03:12.840 - network, but the applications and data live + network, but the applications and data live all over the place as well. 48 00:03:12.840 --> 00:03:18.480 - They've migrated out of the data center into + They've migrated out of the data center into cloud infrastructure such as AWS, 49 00:03:18.510 --> 00:03:23.100 - Azure and Google. Some applications have been + Azure and Google. Some applications have been completely reimagined as SaaS apps, 50 00:03:23.100 --> 00:03:27.240 - where companies no longer run the servers, + where companies no longer run the servers, but just rent access to tenants in large 51 00:03:27.240 --> 00:03:30.150 - software deployments, + software deployments, you know, such as Salesforce or Workday and 52 00:03:30.150 --> 00:03:33.750 - Zoom. And users are not just taking a short + Zoom. And users are not just taking a short trip away from the office anymore. 53 @@ -279,27 +281,27 @@ transcript: | 54 00:03:35.850 --> 00:03:39.210 - They're working from home, + They're working from home, in coffee shops, even on airplanes. 55 00:03:39.210 --> 00:03:43.320 - And sometimes they might visit an office, + And sometimes they might visit an office, yet the same needs still exist: 56 00:03:43.320 --> 00:03:47.340 - the right person should get access to the + the right person should get access to the right applications and data. 57 00:03:47.370 --> 00:03:52.770 - Latency or the performance of the application + Latency or the performance of the application should be really high quality and all while 58 00:03:52.770 --> 00:03:57.360 - using secure devices and being protected from + using secure devices and being protected from Internet threats such as phishing campaigns 59 @@ -308,17 +310,17 @@ transcript: | 60 00:03:58.500 --> 00:04:03.090 - Because of this constant need for everyone to + Because of this constant need for everyone to access anything from anywhere, 61 00:04:03.120 --> 00:04:08.280 - SASE architectures evolved where the + SASE architectures evolved where the intelligence in the network has migrated out 62 00:04:08.280 --> 00:04:13.860 - of these on premises appliances and now into + of these on premises appliances and now into massively scalable global cloud networks. 63 @@ -327,22 +329,22 @@ transcript: | 64 00:04:16.710 --> 00:04:22.320 - Well, first, and probably most importantly, + Well, first, and probably most importantly, we've built a massive network spread all over 65 00:04:22.320 --> 00:04:26.760 - the globe. We've deployed thousands of + the globe. We've deployed thousands of servers in data centers in hundreds of 66 00:04:26.760 --> 00:04:30.720 - cities, creating peering relationships with + cities, creating peering relationships with thousands of other networks. 67 00:04:30.750 --> 00:04:34.620 - On top of all of that, + On top of all of that, we've ensured that we have connectivity in 68 @@ -351,32 +353,32 @@ transcript: | 69 00:04:36.810 --> 00:04:40.980 - These are places where all the big + These are places where all the big connectivity of the Internet is shared. 70 00:04:41.010 --> 00:04:43.800 - To give you an idea of the scale of this huge + To give you an idea of the scale of this huge network, 71 00:04:43.800 --> 00:04:47.400 - it handles around 20% of all Internet web + it handles around 20% of all Internet web traffic, 72 00:04:47.400 --> 00:04:50.880 - and it can deal with the largest denial of + and it can deal with the largest denial of service attacks that have ever been seen. 73 00:04:50.910 --> 00:04:54.900 - The scale and performance of this network is + The scale and performance of this network is really important because from a SASE 74 00:04:54.930 --> 00:04:57.600 - perspective, you're going to be routing all + perspective, you're going to be routing all your user, 75 @@ -385,42 +387,42 @@ transcript: | 76 00:05:00.360 --> 00:05:05.070 - Every server in our network runs all the + Every server in our network runs all the capabilities you need to inspect and secure 77 00:05:05.070 --> 00:05:07.740 - traffic. So access controls, + traffic. So access controls, traffic routing, 78 00:05:07.740 --> 00:05:11.640 - caching, all run on the server that your user + caching, all run on the server that your user or network is connecting to. 79 00:05:11.730 --> 00:05:15.870 - So now, instead of all the security controls + So now, instead of all the security controls and network logic spread across a variety of 80 00:05:15.870 --> 00:05:19.620 - different vendors and appliances and services + different vendors and appliances and services that you're having to maintain, 81 00:05:19.620 --> 00:05:24.960 - it's centralized in a cloud service that + it's centralized in a cloud service that operates and points all over the globe, 82 00:05:24.960 --> 00:05:28.980 - so that each user or network is connected to + so that each user or network is connected to a fast local data center. 83 00:05:28.980 --> 00:05:33.210 - And Cloudflare SASE platform is part of a + And Cloudflare SASE platform is part of a greater connectivity cloud. 84 @@ -429,12 +431,12 @@ transcript: | 85 00:05:35.130 --> 00:05:40.080 - It's a unified platform of cloud native + It's a unified platform of cloud native services that spans networking, 86 00:05:40.080 --> 00:05:44.970 - security and application performance, + security and application performance, and it's designed to help companies regain 87 @@ -443,77 +445,77 @@ transcript: | 88 00:05:47.460 --> 00:05:52.140 - Our connectivity cloud goes way beyond just + Our connectivity cloud goes way beyond just protecting employees and their access to 89 00:05:52.170 --> 00:05:57.090 - company resources. It's also used to protect + company resources. It's also used to protect public assets like websites and APIs. 90 00:05:57.090 --> 00:06:00.090 - In fact, we run one of the world's fastest + In fact, we run one of the world's fastest DNS servers. 91 00:06:00.090 --> 00:06:03.660 - We've even exposed the underlying components + We've even exposed the underlying components of our platform, 92 00:06:03.660 --> 00:06:07.170 - letting developers write and run their code + letting developers write and run their code directly on our network. 93 00:06:07.260 --> 00:06:11.700 - Then they can extend our existing services or + Then they can extend our existing services or build entirely new applications, 94 00:06:11.730 --> 00:06:14.520 - leading you to an infinite amount of things + leading you to an infinite amount of things you can build. 95 00:06:15.180 --> 00:06:20.080 - So to summarize Cloudflare SASE platform, + So to summarize Cloudflare SASE platform, which runs in our connectivity cloud, 96 00:06:20.080 --> 00:06:22.960 - allows companies to reimagine their company + allows companies to reimagine their company network. 97 00:06:22.990 --> 00:06:27.220 - Users connect to Cloudflare's global network + Users connect to Cloudflare's global network via a data center that's close to them, 98 00:06:27.220 --> 00:06:30.670 - and that server then ensures that they don't + and that server then ensures that they don't access phishing sites on the Internet, or it 99 00:06:30.700 --> 00:06:33.820 - gives them secure access to an internal + gives them secure access to an internal company application. 100 00:06:33.850 --> 00:06:37.150 - All of this is happening in milliseconds + All of this is happening in milliseconds across our vast network. 101 00:06:37.150 --> 00:06:41.290 - Because we can deliver all these capabilities + Because we can deliver all these capabilities in a single platform instead of different 102 00:06:41.290 --> 00:06:45.550 - vendor solutions, it means that companies can + vendor solutions, it means that companies can centralize all that management into a single, 103 @@ -522,17 +524,17 @@ transcript: | 104 00:06:46.900 --> 00:06:51.040 - This ultimately drives down your cost less + This ultimately drives down your cost less time used to manage the services, 105 00:06:51.070 --> 00:06:54.280 - less or often no hardware to purchase and + less or often no hardware to purchase and maintain, 106 00:06:54.280 --> 00:06:57.220 - and it's cheaper to purchase the actual final + and it's cheaper to purchase the actual final solution. 107 @@ -541,7 +543,7 @@ transcript: | 108 00:06:58.450 --> 00:07:02.650 - This video is part of a series which explains + This video is part of a series which explains how to build your new corporate network using 109 @@ -550,7 +552,7 @@ transcript: | 110 00:07:04.390 --> 00:07:06.610 - Watch other videos in this series to learn + Watch other videos in this series to learn more. 111 @@ -563,15 +565,15 @@ transcript: | 113 00:07:11.710 --> 00:07:15.490 - We also cover a wide variety of topics + We also cover a wide variety of topics including application security, 114 00:07:15.490 --> 00:07:18.220 - corporate networking, + corporate networking, and all the developer content the Internet 115 00:07:18.220 --> 00:07:20.800 - can hold. Follow us online and thanks for - watching! \ No newline at end of file + can hold. Follow us online and thanks for + watching! diff --git a/src/content/stream/sase-2-stop-hosting-own-vpn/index.yaml b/src/content/stream/sase-2-stop-hosting-own-vpn/index.yaml index e9e3636e6fb2746..f5bf61662a45c95 100644 --- a/src/content/stream/sase-2-stop-hosting-own-vpn/index.yaml +++ b/src/content/stream/sase-2-stop-hosting-own-vpn/index.yaml @@ -4,29 +4,31 @@ url: sase-2-stop-your-own-vpn title: SASE - Stop hosting your VPN service description: Cloudflare's SASE platform can replace your traditional, expensive VPN appliances, which deliver poor performance for users and create more security risks than solve them. Cloudflare's Zero Trust Network Access (ZTNA) service is a more secure, highly scalable cloud solution. In this video, we look at how easily you can deploy Cloudflare to secure access to internal resources. products: - - sase + - cloudflare-one +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Video-2-Stop-hosting-your-own-VPN-service.jpg -chapters: { - "Introduction to Corporate Network Security and Access Challenges": "0s", - "Cloudflare's SASE Approach to Securing Internal Applications": "01m15s", - "Connecting Internal Applications to Cloudflare with Secure Tunnels": "01m54s", - "Implementing Identity-Based, Clientless Access Control Access Control": "02m42s", - "Leveraging Anycast Networking for Faster and More Secure Application Access": "05m36s", - "Enhancing Security with Micro-Segmentation and Cloudflare's Global Network": "06m59s" -} +chapters: + { + "Introduction to Corporate Network Security and Access Challenges": "0s", + "Cloudflare's SASE Approach to Securing Internal Applications": "01m15s", + "Connecting Internal Applications to Cloudflare with Secure Tunnels": "01m54s", + "Implementing Identity-Based, Clientless Access Control Access Control": "02m42s", + "Leveraging Anycast Networking for Faster and More Secure Application Access": "05m36s", + "Enhancing Security with Micro-Segmentation and Cloudflare's Global Network": "06m59s", + } transcript: | WEBVTT 1 00:00:07.160 --> 00:00:12.140 - Corporate networks are often used to allow + Corporate networks are often used to allow employees to access sensitive information in 2 00:00:12.140 --> 00:00:15.920 - private, self-hosted applications, + private, self-hosted applications, such as an internal wiki, 3 @@ -35,42 +37,42 @@ transcript: | 4 00:00:18.530 --> 00:00:22.040 - While some applications have migrated into + While some applications have migrated into the cloud as SaaS apps, 5 00:00:22.040 --> 00:00:25.160 - there are still applications that are run and + there are still applications that are run and maintained by IT. 6 00:00:25.490 --> 00:00:29.510 - These days, most of these self-hosted + These days, most of these self-hosted applications run in a web server and are 7 00:00:29.510 --> 00:00:33.980 - deployed either in a private data center or + deployed either in a private data center or in a public cloud such as AWS, 8 00:00:34.010 --> 00:00:38.390 - Azure, or Google. Access to these + Azure, or Google. Access to these applications is usually limited to internal 9 00:00:38.390 --> 00:00:42.290 - employees, but it's common to allow some form + employees, but it's common to allow some form of restricted access to partners or 10 00:00:42.290 --> 00:00:46.370 - contractors. The old way of doing things was + contractors. The old way of doing things was to have users either come into a physical 11 00:00:46.400 --> 00:00:51.140 - office or connect remotely via a VPN, + office or connect remotely via a VPN, giving them access to that corporate network 12 @@ -79,27 +81,27 @@ transcript: | 13 00:00:52.760 --> 00:00:57.890 - But these VPN solutions use on premises + But these VPN solutions use on premises hardware appliances through which every user 14 00:00:57.890 --> 00:01:00.960 - request passes, creating a bottleneck and a + request passes, creating a bottleneck and a security risk. 15 00:01:00.990 --> 00:01:04.980 - In fact, recently, many on premises VPN + In fact, recently, many on premises VPN vendors such as Cisco, 16 00:01:05.010 --> 00:01:10.380 - Checkpoint, and Fortinet have reported a wide + Checkpoint, and Fortinet have reported a wide range of vulnerabilities which requires IT 17 00:01:10.380 --> 00:01:13.500 - and security teams to scramble to update + and security teams to scramble to update their systems. 18 @@ -108,12 +110,12 @@ transcript: | 19 00:01:15.660 --> 00:01:19.440 - Did you know that Cloudflare can be used to + Did you know that Cloudflare can be used to easily create secure access to these 20 00:01:19.440 --> 00:01:22.410 - self-hosted applications using our SASE + self-hosted applications using our SASE platform? 21 @@ -122,7 +124,7 @@ transcript: | 22 00:01:24.570 --> 00:01:28.470 - Well, similar to how a legacy VPN works, + Well, similar to how a legacy VPN works, but using a much, 23 @@ -131,97 +133,97 @@ transcript: | 24 00:01:30.300 --> 00:01:33.600 - Let's take a look at how we improve on the + Let's take a look at how we improve on the old way of doing things, 25 00:01:33.600 --> 00:01:36.360 - and create greater security for application + and create greater security for application access. 26 00:01:36.360 --> 00:01:40.920 - The first objective is to create connectivity + The first objective is to create connectivity between the user's browser and the 27 00:01:40.920 --> 00:01:44.550 - application. Right. So there are two parts to + application. Right. So there are two parts to this. The connection from Cloudflare to the 28 00:01:44.550 --> 00:01:47.400 - app and the connection between the user and + app and the connection between the user and Cloudflare. 29 00:01:47.430 --> 00:01:51.270 - Cloudflare is going to sit in the middle and + Cloudflare is going to sit in the middle and apply security policies and use its vast 30 00:01:51.270 --> 00:01:54.660 - network to protect the application and + network to protect the application and improve response times. 31 00:01:54.660 --> 00:01:57.870 - For the first part, to create connectivity + For the first part, to create connectivity from Cloudflare to the app, 32 00:01:57.870 --> 00:02:01.530 - we use tunnels that a variety of different + we use tunnels that a variety of different methods you can use. 33 00:02:01.530 --> 00:02:06.270 - You can connect on premises networks to + You can connect on premises networks to Cloudflare via IPsec or GRE tunnels, 34 00:02:06.270 --> 00:02:08.700 - typically using your existing network + typically using your existing network hardware, 35 00:02:08.700 --> 00:02:13.200 - or if your applications are running at a data + or if your applications are running at a data center where Cloudflare already has its 36 00:02:13.200 --> 00:02:18.300 - servers, we can connect directly from your + servers, we can connect directly from your servers to our servers inside that data 37 00:02:18.330 --> 00:02:21.990 - center. But for this example, + center. But for this example, we're going to talk about using a software 38 00:02:22.020 --> 00:02:26.250 - agent. It's just a small daemon that is + agent. It's just a small daemon that is installed either directly on the application 39 00:02:26.250 --> 00:02:29.970 - server or runs on a dedicated server on the + server or runs on a dedicated server on the same local network. 40 00:02:30.000 --> 00:02:33.030 - The software then creates a secure tunnel + The software then creates a secure tunnel back to Cloudflare. 41 00:02:33.060 --> 00:02:36.990 - This tunnel maintains a constant connection + This tunnel maintains a constant connection to two Cloudflare data centers, 42 00:02:36.990 --> 00:02:40.140 - so it's always available, + so it's always available, and now your traffic can flow between your 43 @@ -230,107 +232,107 @@ transcript: | 44 00:02:42.930 --> 00:02:46.200 - Now for the second part, + Now for the second part, we need to connect your users to Cloudflare, 45 00:02:46.200 --> 00:02:48.960 - which we're going to do in this example using + which we're going to do in this example using public DNS. 46 00:02:48.990 --> 00:02:51.720 - We'll associate a public hostname with the + We'll associate a public hostname with the application. 47 00:02:51.720 --> 00:02:54.480 - Request to this hostname will resolve to + Request to this hostname will resolve to Cloudflare, 48 00:02:54.480 --> 00:02:58.150 - which in turn proxies and routes traffic down + which in turn proxies and routes traffic down the tunnel to the application, 49 00:02:58.150 --> 00:03:02.710 - but hold on a second. A public DNS record and + but hold on a second. A public DNS record and a tunnel directly to the server? 50 00:03:02.740 --> 00:03:06.700 - If we didn't take this any further, + If we didn't take this any further, we could now access this internal application 51 00:03:06.700 --> 00:03:09.310 - from anywhere just by heading to the new + from anywhere just by heading to the new public hostname. 52 00:03:09.340 --> 00:03:13.270 - What we need to do is add authentication and + What we need to do is add authentication and authorization into the mix. 53 00:03:13.270 --> 00:03:16.270 - Because Cloudflare is now in front of access + Because Cloudflare is now in front of access to the application, 54 00:03:16.270 --> 00:03:19.750 - we can integrate with your existing company + we can integrate with your existing company identity providers. 55 00:03:19.750 --> 00:03:23.770 - So anyone attempting to access is first + So anyone attempting to access is first redirected to your identity provider to 56 00:03:23.800 --> 00:03:28.060 - authenticate. Now this is where it gets + authenticate. Now this is where it gets interesting because you can add multiple 57 00:03:28.060 --> 00:03:30.880 - identity providers in front of the same + identity providers in front of the same application. 58 00:03:30.880 --> 00:03:35.620 - So for example, you might use your main + So for example, you might use your main company directory where all your employee 59 00:03:35.620 --> 00:03:39.880 - accounts reside, but you might also integrate + accounts reside, but you might also integrate a separate identity service just for 60 00:03:39.880 --> 00:03:42.460 - contractors, partners and other third party + contractors, partners and other third party users. 61 00:03:42.490 --> 00:03:45.700 - We also support consumer identity providers + We also support consumer identity providers such as Facebook, 62 00:03:45.700 --> 00:03:50.620 - Google or GitHub. In fact, + Google or GitHub. In fact, any SAML or OAuth identity service can be 63 00:03:50.620 --> 00:03:55.300 - used. Now, these identity integrations don't + used. Now, these identity integrations don't just provide authentication. 64 00:03:55.300 --> 00:03:57.940 - It's possible to import user and group + It's possible to import user and group information. 65 @@ -339,17 +341,17 @@ transcript: | 66 00:03:59.830 --> 00:04:02.710 - Now that we've ensured a user has + Now that we've ensured a user has authenticated, 67 00:04:02.710 --> 00:04:07.270 - we can start to leverage their identity + we can start to leverage their identity information and other data to create an 68 00:04:07.270 --> 00:04:12.100 - access policy that defines who should and + access policy that defines who should and should not get access to the application. 69 @@ -358,27 +360,27 @@ transcript: | 70 00:04:13.960 --> 00:04:18.910 - A range of different attributes can be used + A range of different attributes can be used that define who is allowed or denied access. 71 00:04:18.910 --> 00:04:23.320 - We started by adding an identity provider, + We started by adding an identity provider, so users first need to authenticate. 72 00:04:23.350 --> 00:04:27.040 - Let's take it a little further and leverage + Let's take it a little further and leverage group information from the same identity 73 00:04:27.070 --> 00:04:32.410 - service. We can say only users in the full + service. We can say only users in the full time employees group have access to the 74 00:04:32.410 --> 00:04:37.360 - internal wiki. The identity service can also + internal wiki. The identity service can also tell us how they authenticated. 75 @@ -387,12 +389,12 @@ transcript: | 76 00:04:39.100 --> 00:04:43.300 - The requirement that they must have + The requirement that they must have authenticated using MFA or multi-factor 77 00:04:43.300 --> 00:04:46.930 - authentication. In fact, + authentication. In fact, let's say that they have to specifically use 78 @@ -401,7 +403,7 @@ transcript: | 79 00:04:50.320 --> 00:04:53.320 - Finally, we only want users working from + Finally, we only want users working from Canada, 80 @@ -410,27 +412,27 @@ transcript: | 81 00:04:56.150 --> 00:05:01.160 - So let's add to the policy that only traffic + So let's add to the policy that only traffic coming from IP addresses geolocated in those 82 00:05:01.160 --> 00:05:06.200 - countries is allowed. Now, + countries is allowed. Now, full time employees working from somewhere in 83 00:05:06.200 --> 00:05:11.060 - Canada who have authenticated using a strong + Canada who have authenticated using a strong set of credentials will be able to access the 84 00:05:11.060 --> 00:05:13.160 - company wiki. Let's take a look at this in + company wiki. Let's take a look at this in action. 85 00:05:13.190 --> 00:05:15.710 - The user just needs to navigate to the public + The user just needs to navigate to the public hostname, 86 @@ -439,112 +441,112 @@ transcript: | 87 00:05:17.330 --> 00:05:22.160 - They have access from anywhere in the world + They have access from anywhere in the world with only a browser to our privately hosted 88 00:05:22.160 --> 00:05:26.330 - application. Simple. What a difference from + application. Simple. What a difference from the old way of doing things. 89 00:05:26.360 --> 00:05:31.700 - Also, it's important to note that all traffic + Also, it's important to note that all traffic from browser to application is secured using 90 00:05:31.700 --> 00:05:36.410 - standard TLS and SSL encryption, + standard TLS and SSL encryption, keeping the application data safe. 91 00:05:36.440 --> 00:05:38.780 - Let's turn our attention a little bit to + Let's turn our attention a little bit to performance. 92 00:05:38.810 --> 00:05:42.890 - We already mentioned that Cloudflare is a lot + We already mentioned that Cloudflare is a lot more efficient than a traditional VPN. 93 00:05:42.920 --> 00:05:45.950 - Let's think about somebody in Germany trying + Let's think about somebody in Germany trying to access the wiki. 94 00:05:45.980 --> 00:05:48.680 - Cloudflare uses something called Anycast + Cloudflare uses something called Anycast networking, 95 00:05:48.680 --> 00:05:53.700 - which means that a request to the hostname + which means that a request to the hostname will resolve to the nearest Cloudflare data 96 00:05:53.700 --> 00:05:56.690 - center, of which we have many in over 300 + center, of which we have many in over 300 cities. 97 00:05:56.690 --> 00:06:00.620 - We also have 12,000 network peering + We also have 12,000 network peering relationships, 98 00:06:00.620 --> 00:06:03.860 - allowing us to ensure fast connectivity from + allowing us to ensure fast connectivity from user to application. 99 00:06:03.860 --> 00:06:09.140 - So our user in Germany might on ramp to + So our user in Germany might on ramp to Cloudflare at a data center in Berlin, 100 00:06:09.140 --> 00:06:12.590 - whereas our Canadian user might on ramp in + whereas our Canadian user might on ramp in Vancouver, 101 00:06:12.950 --> 00:06:17.930 - and their requests are authenticated and the + and their requests are authenticated and the policy evaluated all close to the end user 102 00:06:17.930 --> 00:06:22.700 - and if authorized, their request is then + and if authorized, their request is then routed via the most efficient network path to 103 00:06:22.730 --> 00:06:25.777 - the Cloudflare data center that is then + the Cloudflare data center that is then nearest the application. 104 00:06:25.777 --> 00:06:28.910 - To further improve performance, + To further improve performance, there are many more things we can do. 105 00:06:28.940 --> 00:06:33.140 - Any of Cloudflare's existing performance + Any of Cloudflare's existing performance services and network benefits apply to your 106 00:06:33.140 --> 00:06:37.040 - application traffic. So, + application traffic. So, for example, we can leverage Cloudflare's 107 00:06:37.040 --> 00:06:41.150 - caching technologies so that any static data + caching technologies so that any static data from the wiki such as images, 108 00:06:41.150 --> 00:06:47.540 - files, videos is all cached locally at the + files, videos is all cached locally at the data center that the user is accessing. 109 @@ -553,42 +555,42 @@ transcript: | 110 00:06:50.150 --> 00:06:53.750 - Setting up access like this can be typically + Setting up access like this can be typically done in less than an hour, 111 00:06:53.750 --> 00:06:58.010 - and it doesn't take long to migrate an entire + and it doesn't take long to migrate an entire company's internal application 112 00:06:58.010 --> 00:07:03.470 - infrastructure. Unlike your VPN, + infrastructure. Unlike your VPN, access to each application only exposes that 113 00:07:03.470 --> 00:07:08.120 - specific service. You don't need to worry + specific service. You don't need to worry about firewalling off SSH and RDP, 114 00:07:08.150 --> 00:07:13.430 - because Cloudflare is only allowing access to + because Cloudflare is only allowing access to the specific application over HTTPS. 115 00:07:13.430 --> 00:07:18.920 - This is called network micro-segmentation and + This is called network micro-segmentation and really reduces concerns of access gained by 116 00:07:18.920 --> 00:07:23.840 - lateral movement. Changes to authentication + lateral movement. Changes to authentication policies can easily be made in our dashboard 117 00:07:23.840 --> 00:07:27.530 - and in just a matter of seconds, + and in just a matter of seconds, the entire global network is updated. 118 @@ -597,7 +599,7 @@ transcript: | 119 00:07:28.940 --> 00:07:33.380 - This video is part of a series which explains + This video is part of a series which explains how to build your new corporate network using 120 @@ -606,7 +608,7 @@ transcript: | 121 00:07:35.030 --> 00:07:37.430 - Watch the other videos in this series to + Watch the other videos in this series to learn more. 122 @@ -619,15 +621,15 @@ transcript: | 124 00:07:42.620 --> 00:07:46.430 - We also cover a wide variety of topics + We also cover a wide variety of topics including application security, 125 00:07:46.430 --> 00:07:49.130 - corporate networking, + corporate networking, and all the developer content the Internet 126 00:07:49.130 --> 00:07:51.620 - can hold. Follow us online and thanks for - watching! \ No newline at end of file + can hold. Follow us online and thanks for + watching! diff --git a/src/content/stream/sase-3-secure-remote-access/index.yaml b/src/content/stream/sase-3-secure-remote-access/index.yaml index ab37beca899a136..b2ff71ee58ade47 100644 --- a/src/content/stream/sase-3-secure-remote-access/index.yaml +++ b/src/content/stream/sase-3-secure-remote-access/index.yaml @@ -4,34 +4,36 @@ url: sase-3-secure-remote-access title: SASE - Secure remote access to your critical infrastructure description: In this video, learn how Cloudflare's SASE platform can provide highly secure access to your critical infrastructure by leveraging a modern ZTNA service to implement Zero Trust principles Applications, databases and their servers are running in a variety of locations from on-premises data centers to cloud hyperscalers, making the need to secure administrative access more important than ever. products: - - sase + - cloudflare-one +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Video-3-Secure-remote-access-to-your-critical-infrastructure.jpg -chapters: { - "Introduction to SASE and Securing Access to Critical Infrastructure": "0s", - "Connecting and Securing Private Servers with Cloudflare Tunnels": "50s", - "Using Internal DNS to Securely Resolve Private Network Resources": "02m12s", - "Connecting User Devices Securely with Cloudflare's Device Agent": "03m01s", - "Enforcing Access Control with Identity, Network and Device Based Security Policies": "03m48s", - "Auditing and Logging Access to Critical Infrastructure": "05m03s" -} +chapters: + { + "Introduction to SASE and Securing Access to Critical Infrastructure": "0s", + "Connecting and Securing Private Servers with Cloudflare Tunnels": "50s", + "Using Internal DNS to Securely Resolve Private Network Resources": "02m12s", + "Connecting User Devices Securely with Cloudflare's Device Agent": "03m01s", + "Enforcing Access Control with Identity, Network and Device Based Security Policies": "03m48s", + "Auditing and Logging Access to Critical Infrastructure": "05m03s", + } transcript: | WEBVTT 1 00:00:07.220 --> 00:00:14.450 - Secure Access Service Edge or SASE solutions + Secure Access Service Edge or SASE solutions incorporate Zero Trust Network Access or ZTNA 2 00:00:14.660 --> 00:00:19.610 - to provide access to applications such as an + to provide access to applications such as an internal wiki or a HR system. 3 00:00:19.640 --> 00:00:25.190 - But what about critical high risk services + But what about critical high risk services such as a database administration tool or 4 @@ -40,22 +42,22 @@ transcript: | 5 00:00:28.370 --> 00:00:33.800 - In these cases, it's important to be able to + In these cases, it's important to be able to ensure tight security from the device all the 6 00:00:33.800 --> 00:00:39.020 - way to the application and allow authorized + way to the application and allow authorized users who are using strong authentication on 7 00:00:39.020 --> 00:00:44.240 - trusted devices. Let's say we need to secure + trusted devices. Let's say we need to secure access to a database admin app such as 8 00:00:44.270 --> 00:00:47.810 - pgAdmin, a common web interface for Postgres + pgAdmin, a common web interface for Postgres databases, 9 @@ -64,42 +66,42 @@ transcript: | 10 00:00:50.390 --> 00:00:54.530 - Imagine we have an example environment, + Imagine we have an example environment, and in it we've already created connectivity 11 00:00:54.560 --> 00:00:57.800 - from the server to Cloudflare, + from the server to Cloudflare, using a software agent that maintains a 12 00:00:57.800 --> 00:01:02.230 - secure tunnel from the private network where + secure tunnel from the private network where the Pgadmin server is running back to the 13 00:01:02.230 --> 00:01:06.700 - Cloudflare network. No private server IP + Cloudflare network. No private server IP addresses are going to be exposed to the 14 00:01:06.700 --> 00:01:10.960 - Internet. We're essentially connecting this + Internet. We're essentially connecting this server to our new corporate network managed 15 00:01:10.960 --> 00:01:15.400 - by Cloudflare. Once connected, + by Cloudflare. Once connected, there are two methods by which we can access 16 00:01:15.400 --> 00:01:21.040 - our private server. Method one is to create a + our private server. Method one is to create a public hostname which resolves to Cloudflare, 17 00:01:21.040 --> 00:01:25.150 - which in turn proxies and routes the traffic + which in turn proxies and routes the traffic for that specific hostname to that 18 @@ -108,7 +110,7 @@ transcript: | 19 00:01:26.950 --> 00:01:31.450 - And this method allows anyone, + And this method allows anyone, anywhere, on any device to easily access the 20 @@ -117,17 +119,17 @@ transcript: | 21 00:01:33.760 --> 00:01:36.970 - In this scenario we want to implement even + In this scenario we want to implement even tighter security. 22 00:01:36.970 --> 00:01:42.970 - So method two is to configure the tunnel to + So method two is to configure the tunnel to proxy access only to the server IP with no 23 00:01:42.970 --> 00:01:48.340 - public DNS record, and only for trusted users + public DNS record, and only for trusted users with managed devices that are connected to 24 @@ -136,12 +138,12 @@ transcript: | 25 00:01:49.630 --> 00:01:52.780 - So none of this server has any public + So none of this server has any public exposure. 26 00:01:53.830 --> 00:01:57.280 - Now, to provide access to only database + Now, to provide access to only database admins, 27 @@ -150,92 +152,92 @@ transcript: | 28 00:01:59.290 --> 00:02:03.010 - We need to use an internal hostname that + We need to use an internal hostname that resolves to our server. 29 00:02:03.040 --> 00:02:07.000 - We need to connect to the user device to the + We need to connect to the user device to the Cloudflare managed network. 30 00:02:07.030 --> 00:02:12.640 - And we need to identify who the user is and + And we need to identify who the user is and if their device has a good security posture. 31 00:02:12.670 --> 00:02:15.910 - So let's first look at how we do the internal + So let's first look at how we do the internal DNS resolution. 32 00:02:15.910 --> 00:02:20.860 - Because nobody likes using IP addresses to + Because nobody likes using IP addresses to access services with the exception of 33 00:02:20.860 --> 00:02:25.690 - 1.1.1.1, because it's the easiest IP address + 1.1.1.1, because it's the easiest IP address on the Internet to remember. 34 00:02:25.690 --> 00:02:28.960 - So we really should always be using + So we really should always be using hostnames. 35 00:02:29.110 --> 00:02:33.520 - With Cloudflare, it's as simple as connecting + With Cloudflare, it's as simple as connecting a private DNS service to the network, 36 00:02:33.520 --> 00:02:37.630 - and then building a policy that says any + and then building a policy that says any request from a user or a network, 37 00:02:37.630 --> 00:02:40.660 - anywhere on the Cloudflare network, + anywhere on the Cloudflare network, for an internal domain, 38 00:02:40.660 --> 00:02:43.540 - should be answered by that specific DNS + should be answered by that specific DNS service. 39 00:02:43.570 --> 00:02:47.860 - In this example, we're going to connect it to + In this example, we're going to connect it to Cloudflare using exactly the same tunnel 40 00:02:47.860 --> 00:02:50.350 - software that we're using for the database + software that we're using for the database server. 41 00:02:50.380 --> 00:02:55.450 - So at this point we have our database admin + So at this point we have our database admin tool that's connected to Cloudflare and we 42 00:02:55.450 --> 00:03:00.770 - have an ability to resolve the IP address of + have an ability to resolve the IP address of that private network using an internal 43 00:03:00.800 --> 00:03:05.720 - hostname. Next, we need to securely connect + hostname. Next, we need to securely connect the user device to Cloudflare so that all 44 00:03:05.720 --> 00:03:09.080 - traffic destined for our database server is + traffic destined for our database server is over secure channels. 45 00:03:09.110 --> 00:03:12.890 - We do this using a similar piece of software + We do this using a similar piece of software we used on the server, 46 @@ -244,7 +246,7 @@ transcript: | 47 00:03:15.110 --> 00:03:20.030 - It supports macOS, windows, + It supports macOS, windows, Linux, iOS and Android and connects the 48 @@ -253,27 +255,27 @@ transcript: | 49 00:03:22.370 --> 00:03:26.000 - But the agent can actually provide + But the agent can actually provide information about the security posture of the 50 00:03:26.000 --> 00:03:29.510 - device, and we'll talk about that later when + device, and we'll talk about that later when we look at the policy itself. 51 00:03:29.510 --> 00:03:32.180 - So once the user device is connected to + So once the user device is connected to Cloudflare, 52 00:03:32.180 --> 00:03:36.710 - requests for private applications are + requests for private applications are resolved using the internal DNS service, 53 00:03:36.710 --> 00:03:42.230 - and traffic is routed from the device through + and traffic is routed from the device through Cloudflare through secure tunnels down to the 54 @@ -282,17 +284,17 @@ transcript: | 55 00:03:45.050 --> 00:03:48.710 - Now we have secured connectivity all the way + Now we have secured connectivity all the way from the device to the server. 56 00:03:48.740 --> 00:03:53.600 - The last thing we need to do is actually + The last thing we need to do is actually write a policy which enforces access only to 57 00:03:53.630 --> 00:03:57.290 - users that you authorize, + users that you authorize, and that the device they're on meets a 58 @@ -301,7 +303,7 @@ transcript: | 59 00:03:58.820 --> 00:04:03.690 - We use information from our device agent, + We use information from our device agent, and also leverage your existing identity and 60 @@ -310,12 +312,12 @@ transcript: | 61 00:04:06.030 --> 00:04:09.690 - Cloudflare is typically integrated with one + Cloudflare is typically integrated with one or more identity providers. 62 00:04:09.690 --> 00:04:13.020 - Usually, your company has a central directory + Usually, your company has a central directory for employees, 63 @@ -324,97 +326,97 @@ transcript: | 64 00:04:14.370 --> 00:04:17.460 - For example, you might manage contractors in + For example, you might manage contractors in a different directory. 65 00:04:17.490 --> 00:04:22.260 - Cloudflare can also integrate with XDR + Cloudflare can also integrate with XDR platforms such as CrowdStrike and 66 00:04:22.260 --> 00:04:27.150 - SentinelOne, and these give us information we + SentinelOne, and these give us information we can use in the policy regards to the security 67 00:04:27.150 --> 00:04:31.170 - posture of the device, + posture of the device, such as if the device is free of malware. 68 00:04:31.200 --> 00:04:34.590 - For our own agent, we can provide information + For our own agent, we can provide information about the device, 69 00:04:34.590 --> 00:04:38.190 - such as is the hard disk encrypted or if the + such as is the hard disk encrypted or if the local firewall is enabled. 70 00:04:38.190 --> 00:04:40.680 - So now we have all the information about the + So now we have all the information about the user, 71 00:04:40.680 --> 00:04:43.200 - their device, and how they're connected to + their device, and how they're connected to Cloudflare. 72 00:04:43.230 --> 00:04:47.880 - A policy can be created which only allows + A policy can be created which only allows users who have authenticated using a strong 73 00:04:47.910 --> 00:04:53.340 - factor, such as MFA using a hard token, + factor, such as MFA using a hard token, that they also exist in a group such as IT 74 00:04:53.370 --> 00:04:57.750 - administrators, and they're using a secure + administrators, and they're using a secure device free of malware. 75 00:04:58.110 --> 00:05:03.390 - This policy sits in front of access to both + This policy sits in front of access to both the database admin tool and the SSH service. 76 00:05:03.510 --> 00:05:07.410 - Finally, because you might want to record of + Finally, because you might want to record of all access to the database administration 77 00:05:07.410 --> 00:05:13.020 - tool, you can optionally inject a page after + tool, you can optionally inject a page after authentication asking for justification for 78 00:05:13.020 --> 00:05:16.170 - access to the app and that gets audited and + access to the app and that gets audited and logged in Cloudflare. 79 00:05:16.170 --> 00:05:20.760 - So in summary, you've seen an example of how + So in summary, you've seen an example of how Cloudflare can protect access to some of your 80 00:05:20.760 --> 00:05:24.000 - critical infrastructure using our SASE + critical infrastructure using our SASE platform. 81 00:05:24.000 --> 00:05:29.490 - We can help lock down access to servers only + We can help lock down access to servers only from highly authenticated users on tightly 82 00:05:29.490 --> 00:05:34.020 - managed devices that must be connected to + managed devices that must be connected to your new corporate network or managed by 83 @@ -423,7 +425,7 @@ transcript: | 84 00:05:36.510 --> 00:05:41.250 - This video is part of a series which explains + This video is part of a series which explains how to build your new corporate network using 85 @@ -432,7 +434,7 @@ transcript: | 86 00:05:42.930 --> 00:05:45.630 - You can watch the other videos in this series + You can watch the other videos in this series to learn more. 87 @@ -445,15 +447,15 @@ transcript: | 89 00:05:50.700 --> 00:05:54.480 - We also cover a wide variety of topics + We also cover a wide variety of topics including application security, 90 00:05:54.480 --> 00:05:57.210 - corporate networking, + corporate networking, and all the developer content the Internet 91 00:05:57.210 --> 00:05:59.700 - can hold. Follow us online and thanks for - watching! \ No newline at end of file + can hold. Follow us online and thanks for + watching! diff --git a/src/content/stream/sase-4-connect-secure/index.yaml b/src/content/stream/sase-4-connect-secure/index.yaml index 5f41f800c3b81b9..c51580ef54c8208 100644 --- a/src/content/stream/sase-4-connect-secure/index.yaml +++ b/src/content/stream/sase-4-connect-secure/index.yaml @@ -4,33 +4,35 @@ url: sase-4-connect-secure title: SASE - Connect and secure from any network to anywhere description: Build your new corporate network with Cloudflare, connecting any network into our modern SASE platform and secure applications, users, devices and your company data. In this video, you will learn all of the different methods of connecting networks to Cloudflare and what services can be used to improve security and performance. products: - - sase + - cloudflare-one +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Video-4-Connect-and-secure-from-any-network-to-anywhere.jpg -chapters: { - "Introduction to SASE and the Need for Modern, Secure Corporate Networking": "0s", - "Using Cloudflare to Unify and Secure Corporate Networks Across Multiple Locations": "01m57s", - "Enabling Secure Remote Access for Distributed Teams with Cloudflare's Zero Trust Approach": "02m47s", - "Integrating Private Networks and Data Centers using various methods": "04m17s", - "Cloudflare's Connectivity Cloud: Security, Performance, and Simplified Network Management": "05m17s" -} +chapters: + { + "Introduction to SASE and the Need for Modern, Secure Corporate Networking": "0s", + "Using Cloudflare to Unify and Secure Corporate Networks Across Multiple Locations": "01m57s", + "Enabling Secure Remote Access for Distributed Teams with Cloudflare's Zero Trust Approach": "02m47s", + "Integrating Private Networks and Data Centers using various methods": "04m17s", + "Cloudflare's Connectivity Cloud: Security, Performance, and Simplified Network Management": "05m17s", + } transcript: | WEBVTT 1 00:00:07.070 --> 00:00:10.970 - When looking at Secure Access Service Edge or + When looking at Secure Access Service Edge or SASE platforms, 2 00:00:10.970 --> 00:00:15.260 - we often talk about a user getting remote + we often talk about a user getting remote access into some privately hosted 3 00:00:15.260 --> 00:00:19.070 - application. The focus is often user to + application. The focus is often user to application, 4 @@ -39,42 +41,42 @@ transcript: | 5 00:00:21.830 --> 00:00:25.970 - and a user can only access an application + and a user can only access an application over a specific address and port. 6 00:00:26.000 --> 00:00:29.570 - But corporate networks exist to carry traffic + But corporate networks exist to carry traffic in many other ways. 7 00:00:29.600 --> 00:00:33.230 - Let's take, for example, + Let's take, for example, a retail coffee company with many coffee 8 00:00:33.230 --> 00:00:37.790 - shops each providing customers free access to + shops each providing customers free access to the Internet with their guest Wi-Fi, 9 00:00:37.790 --> 00:00:40.940 - but also connecting employees to internal + but also connecting employees to internal applications. 10 00:00:40.970 --> 00:00:45.200 - Each shop also houses point of sale devices, + Each shop also houses point of sale devices, security cameras, 11 00:00:45.200 --> 00:00:48.980 - and other network enabled equipment that need + and other network enabled equipment that need access to the Internet, 12 00:00:48.980 --> 00:00:53.240 - but also might require access to other + but also might require access to other private networks to back up data or be 13 @@ -83,42 +85,42 @@ transcript: | 14 00:00:54.890 --> 00:01:00.440 - IT staff also need to remotely access these + IT staff also need to remotely access these devices from a corporate office network. 15 00:01:00.470 --> 00:01:04.760 - A lot of this traffic is private and should + A lot of this traffic is private and should only remain on the corporate network. 16 00:01:04.790 --> 00:01:08.660 - This is where Cloudflare's Connectivity Cloud + This is where Cloudflare's Connectivity Cloud really comes into its own. 17 00:01:08.690 --> 00:01:11.180 - The ability to mesh together different + The ability to mesh together different networks, 18 00:01:11.180 --> 00:01:14.120 - applications and users no matter where they + applications and users no matter where they are. 19 00:01:14.150 --> 00:01:17.180 - Let's dive deeper into our coffee company + Let's dive deeper into our coffee company example. 20 00:01:17.210 --> 00:01:20.630 - Right. First, they have their main + Right. First, they have their main headquarters in Seattle. 21 00:01:20.630 --> 00:01:24.770 - Most HQ employees live locally and about half + Most HQ employees live locally and about half travel into the office, 22 @@ -127,7 +129,7 @@ transcript: | 23 00:01:27.080 --> 00:01:31.310 - Second, they have around 40 coffee shops down + Second, they have around 40 coffee shops down the west coast of America, 24 @@ -136,22 +138,22 @@ transcript: | 25 00:01:33.170 --> 00:01:37.910 - And then they have an internal company wiki, + And then they have an internal company wiki, which is running in a virtual environment in 26 00:01:37.910 --> 00:01:41.150 - Amazon Web Services with its own virtual + Amazon Web Services with its own virtual private network. 27 00:01:41.150 --> 00:01:46.340 - And then finally, the security cameras at all + And then finally, the security cameras at all their coffee shops need to back up data to a 28 00:01:46.340 --> 00:01:52.310 - central service that you've got running on + central service that you've got running on servers that you run and host in a rack in a 29 @@ -160,177 +162,177 @@ transcript: | 30 00:01:54.470 --> 00:01:57.890 - You see how these network locations are all + You see how these network locations are all quite different. 31 00:01:57.950 --> 00:02:02.330 - Cloudflare has a variety of ways all these + Cloudflare has a variety of ways all these networks can be connected together. 32 00:02:02.660 --> 00:02:05.960 - Let's start by connecting the headquarters + Let's start by connecting the headquarters network in Seattle. 33 00:02:05.960 --> 00:02:10.640 - We can use something called Magic WAN, + We can use something called Magic WAN, which is our service that creates IPsec 34 00:02:10.670 --> 00:02:14.920 - tunnels from the headquarters office back to + tunnels from the headquarters office back to the Cloudflare network and assign a private 35 00:02:14.950 --> 00:02:19.720 - network range to it. This is using regular + network range to it. This is using regular standard IPsec protocols and can easily 36 00:02:19.720 --> 00:02:22.630 - leverage functionality in a network, + leverage functionality in a network, router or firewall that exists at 37 00:02:22.630 --> 00:02:25.870 - headquarters. Next, let's look at each coffee + headquarters. Next, let's look at each coffee shop. 38 00:02:26.260 --> 00:02:31.600 - You can ship out to each location a physical + You can ship out to each location a physical device running Cloudflare's Magic WAN 39 00:02:31.600 --> 00:02:35.830 - connector. It's essentially a lightweight + connector. It's essentially a lightweight appliance that can be plugged into the local 40 00:02:35.830 --> 00:02:40.780 - ISP router. Each connector creates an IPsec + ISP router. Each connector creates an IPsec connection back to Cloudflare, 41 00:02:40.780 --> 00:02:45.340 - and each device can be administered remotely + and each device can be administered remotely via the Cloudflare dashboard private network. 42 00:02:45.340 --> 00:02:47.920 - Ranges can then be assigned to each coffee + Ranges can then be assigned to each coffee shop. 43 00:02:47.920 --> 00:02:51.460 - And now we have the beginnings of a new + And now we have the beginnings of a new modern corporate network. 44 00:02:51.670 --> 00:02:56.920 - So IT admins in the Seattle office can now + So IT admins in the Seattle office can now remotely access point of sale devices in each 45 00:02:56.920 --> 00:03:00.850 - coffee shop location. Also, + coffee shop location. Also, because we want to provide customers in each 46 00:03:00.850 --> 00:03:03.670 - shop free Internet access using the guest + shop free Internet access using the guest WiFi, 47 00:03:03.700 --> 00:03:06.580 - all traffic from that location is now routed + all traffic from that location is now routed through Cloudflare, 48 00:03:06.580 --> 00:03:11.320 - and we can use our secure web gateway to + and we can use our secure web gateway to block any access to malicious websites, 49 00:03:11.320 --> 00:03:14.710 - and this keeps customers safe while they sip + and this keeps customers safe while they sip their cappuccinos. 50 00:03:17.740 --> 00:03:20.230 - But what about the IT staff working from + But what about the IT staff working from home? 51 00:03:20.230 --> 00:03:23.110 - They're not connected to any of these + They're not connected to any of these networks. No worries! 52 00:03:23.110 --> 00:03:26.050 - They can use our device agent, + They can use our device agent, which connects them to Cloudflare, 53 00:03:26.050 --> 00:03:29.680 - and in turn gives them access to this new + and in turn gives them access to this new corporate network as if they were connected 54 00:03:29.680 --> 00:03:33.940 - in headquarters. Now it can manage the + in headquarters. Now it can manage the devices in each coffee shop, 55 00:03:33.940 --> 00:03:36.820 - no matter if they're on a plane, + no matter if they're on a plane, sitting in an office, 56 00:03:36.820 --> 00:03:41.650 - or in a coffee shop. When each network or + or in a coffee shop. When each network or user connects, 57 00:03:41.650 --> 00:03:44.590 - it does so to the nearest Cloudflare data + it does so to the nearest Cloudflare data center, 58 00:03:44.590 --> 00:03:50.290 - which is a key feature of our network where + which is a key feature of our network where we use Anycast IP networking to ensure secure 59 00:03:50.320 --> 00:03:55.540 - connections to users and offices are made to + connections to users and offices are made to the geographically nearest Cloudflare data 60 00:03:55.570 --> 00:04:00.610 - center, so that traffic is then secured and + center, so that traffic is then secured and optimized as close as possible to the user or 61 00:04:00.610 --> 00:04:06.760 - to that network. And we have data centers in + to that network. And we have data centers in over 300 cities and have over 12,000 network 62 00:04:06.790 --> 00:04:10.360 - peering relationships, + peering relationships, allowing us to ensure fast connectivity from 63 00:04:10.360 --> 00:04:14.410 - user to the network. Think of it like having + user to the network. Think of it like having a coffee shop in every neighborhood so 64 00:04:14.410 --> 00:04:16.960 - everyone doesn't have to walk far to get a + everyone doesn't have to walk far to get a cup of coffee. 65 @@ -339,17 +341,17 @@ transcript: | 66 00:04:19.450 --> 00:04:23.200 - Remember, the backup service is running in a + Remember, the backup service is running in a data center in San Jose. 67 00:04:23.230 --> 00:04:28.120 - Most likely than not. Cloudflare is also + Most likely than not. Cloudflare is also running our own servers in the same data 68 00:04:28.150 --> 00:04:33.250 - center, and you can offer direct connections + center, and you can offer direct connections from Cloudflare to your network switches, 69 @@ -358,12 +360,12 @@ transcript: | 70 00:04:35.410 --> 00:04:38.470 - And even if your servers are not in the exact + And even if your servers are not in the exact same data center, 71 00:04:38.470 --> 00:04:42.610 - we can create a virtual connection directly + we can create a virtual connection directly from your rack to the nearest Cloudflare data 72 @@ -376,37 +378,37 @@ transcript: | 74 00:04:47.290 --> 00:04:50.380 - Let's say the company is launching a new + Let's say the company is launching a new internal company wiki, 75 00:04:50.380 --> 00:04:54.220 - and they're running the service in AWS, + and they're running the service in AWS, Amazon Web Services. 76 00:04:54.220 --> 00:04:57.640 - We don't need to connect the entire AWS + We don't need to connect the entire AWS private network. 77 00:04:57.640 --> 00:05:02.590 - We just install a software agent on the wiki + We just install a software agent on the wiki server that creates a secure tunnel back to 78 00:05:02.620 --> 00:05:05.890 - Cloudflare, and connects that application to + Cloudflare, and connects that application to the network, 79 00:05:05.920 --> 00:05:10.390 - that anyone on that network can now access + that anyone on that network can now access the application policies and Cloudflare 80 00:05:10.390 --> 00:05:14.320 - control who can access the wiki, + control who can access the wiki, ensuring users authenticate with valid 81 @@ -415,57 +417,57 @@ transcript: | 82 00:05:16.360 --> 00:05:19.930 - You can see that Cloudflare is able to + You can see that Cloudflare is able to connect to a wide variety of networks, 83 00:05:19.930 --> 00:05:24.430 - from the physical office locations to virtual + from the physical office locations to virtual application networks in the cloud, 84 00:05:24.430 --> 00:05:27.580 - as well as direct your servers running in + as well as direct your servers running in your data centers. 85 00:05:27.580 --> 00:05:32.730 - So much of the complexity from legacy network + So much of the complexity from legacy network architectures is abstracted into our 86 00:05:32.730 --> 00:05:36.840 - Connectivity Cloud , making life much easier + Connectivity Cloud , making life much easier for IT and network admins. 87 00:05:36.870 --> 00:05:41.040 - And once connected to Cloudflare, + And once connected to Cloudflare, it's not just about routing traffic. 88 00:05:41.040 --> 00:05:45.660 - Firewalling, DNS, Load Balancing, + Firewalling, DNS, Load Balancing, protecting from denial of service attacks, 89 00:05:45.660 --> 00:05:49.440 - content caching, and a lot more are all + content caching, and a lot more are all easily enabled. 90 00:05:49.440 --> 00:05:53.760 - Any traffic destined for the Internet can + Any traffic destined for the Internet can also be filtered to ensure only access to 91 00:05:53.790 --> 00:05:57.540 - legitimate sites, and blocking any unsafe + legitimate sites, and blocking any unsafe transfer of company data. 92 00:05:57.570 --> 00:06:01.890 - The flexibility of Cloudflare's Connectivity + The flexibility of Cloudflare's Connectivity Cloud allows you to connect all sorts of 93 @@ -474,12 +476,12 @@ transcript: | 94 00:06:03.540 --> 00:06:08.070 - It's possible to recreate your classic + It's possible to recreate your classic corporate network and then apply on top of it 95 00:06:08.070 --> 00:06:13.320 - all the modern Zero Trust services to ensure + all the modern Zero Trust services to ensure high security without compromising the user 96 @@ -488,7 +490,7 @@ transcript: | 97 00:06:15.360 --> 00:06:19.590 - This video is part of a series which explains + This video is part of a series which explains how to build your new corporate network using 98 @@ -497,7 +499,7 @@ transcript: | 99 00:06:21.360 --> 00:06:23.670 - Watch the other videos in this series to + Watch the other videos in this series to learn more. 100 @@ -510,15 +512,15 @@ transcript: | 102 00:06:28.710 --> 00:06:32.520 - We also cover a wide variety of topics + We also cover a wide variety of topics including application security, 103 00:06:32.520 --> 00:06:35.250 - corporate networking, + corporate networking, and all the developer content the Internet 104 00:06:35.250 --> 00:06:37.680 - can hold. Follow us online and thanks for - watching! \ No newline at end of file + can hold. Follow us online and thanks for + watching! diff --git a/src/content/stream/sase-5-protect-users/index.yaml b/src/content/stream/sase-5-protect-users/index.yaml index 75a4de371c0dc3d..903cb5283cd8544 100644 --- a/src/content/stream/sase-5-protect-users/index.yaml +++ b/src/content/stream/sase-5-protect-users/index.yaml @@ -4,74 +4,76 @@ url: sase-5-protect-users title: SASE - Protect your users from Internet risks description: The Internet has become part of your corporate network; however, browsing the web comes with hidden risks including malware, phishing attacks, and malicious websites. In this video, we will explore how Cloudflare's Secure Web Gateway (SWG) helps keep users safe by filtering and inspecting Internet traffic in real time. Whether you are protecting a remote workforce or securing an entire organization, Cloudflare ensures that users can access the web securely — without sacrificing speed or productivity. products: - - sase + - cloudflare-one +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Video-5-Protect-your-users-from-Internet-risks.jpg -chapters: { - "Introduction to Cloudflare's SASE and the Importance of Secure Corporate Networking": "1s", - "Using Secure Web Gateway to Inspect and Control Internet Traffic": "01m06s", - "Protecting Users with DNS Filtering and Threat Intelligence": "02m04s" , - "Implementing Network-Level Security Policies for Private and Public Traffic": "03m37s", - "Advanced HTTP Filtering and Data Loss Prevention with Cloudflare": "04m23s", - "Isolating Risky Websites and Preventing Data Leaks with Browser Isolation": "05m48s" -} +chapters: + { + "Introduction to Cloudflare's SASE and the Importance of Secure Corporate Networking": "1s", + "Using Secure Web Gateway to Inspect and Control Internet Traffic": "01m06s", + "Protecting Users with DNS Filtering and Threat Intelligence": "02m04s", + "Implementing Network-Level Security Policies for Private and Public Traffic": "03m37s", + "Advanced HTTP Filtering and Data Loss Prevention with Cloudflare": "04m23s", + "Isolating Risky Websites and Preventing Data Leaks with Browser Isolation": "05m48s", + } transcript: | WEBVTT 1 00:00:07.100 --> 00:00:11.540 - Cloudflare's Connectivity Cloud hosts a + Cloudflare's Connectivity Cloud hosts a complete Secure Access Service Edge, 2 00:00:11.540 --> 00:00:16.790 - or SASE platform, which allows organizations + or SASE platform, which allows organizations to create a new corporate network leveraging 3 00:00:16.790 --> 00:00:20.930 - the latest in zero trust security approaches + the latest in zero trust security approaches and cloud based networking. 4 00:00:21.110 --> 00:00:24.320 - Many companies start by connecting + Many companies start by connecting applications, 5 00:00:24.350 --> 00:00:28.970 - networks and user devices to Cloudflare to + networks and user devices to Cloudflare to use Zero Trust Network Access, 6 00:00:28.970 --> 00:00:33.800 - or ZTNA to authorize users to connect to + or ZTNA to authorize users to connect to self-hosted applications and private 7 00:00:33.830 --> 00:00:39.560 - networks. But connecting devices and networks + networks. But connecting devices and networks into Cloudflare can also help secure public 8 00:00:39.560 --> 00:00:43.130 - Internet access and increase visibility and + Internet access and increase visibility and control over company data. 9 00:00:43.160 --> 00:00:47.240 - Let's take a look at an example of a company + Let's take a look at an example of a company that has already connected its corporate HQ 10 00:00:47.240 --> 00:00:51.800 - network, along with a few branch offices and + network, along with a few branch offices and many remote user devices. 11 00:00:51.800 --> 00:00:56.780 - You can see that all these methods of on + You can see that all these methods of on ramping traffic to Cloudflare result in user 12 @@ -80,17 +82,17 @@ transcript: | 13 00:00:58.960 --> 00:01:02.740 - Sometimes the traffic is destined for a + Sometimes the traffic is destined for a private application or network, 14 00:01:02.740 --> 00:01:06.370 - but a lot of the traffic is just heading for + but a lot of the traffic is just heading for the public Internet. 15 00:01:06.400 --> 00:01:10.810 - Cloudflare has the ability to inspect that + Cloudflare has the ability to inspect that traffic using another part of our SASE 16 @@ -99,22 +101,22 @@ transcript: | 17 00:01:13.600 --> 00:01:16.420 - It can examine traffic either at the DNS + It can examine traffic either at the DNS request, 18 00:01:16.420 --> 00:01:21.070 - the network level, or we can even inspect the + the network level, or we can even inspect the contents of a HTTP request. 19 00:01:21.850 --> 00:01:26.020 - Do you want to deny users from accessing + Do you want to deny users from accessing websites known to be part of a phishing 20 00:01:26.020 --> 00:01:29.770 - campaign or ransomware attack, + campaign or ransomware attack, or only allow users coming from IP addresses 21 @@ -123,57 +125,57 @@ transcript: | 22 00:01:32.140 --> 00:01:36.970 - Or more seriously, do you want to prevent + Or more seriously, do you want to prevent employees from sending sensitive information 23 00:01:36.970 --> 00:01:41.050 - like financial data or source code to AI + like financial data or source code to AI sites like ChatGPT? 24 00:01:41.140 --> 00:01:43.990 - Policies in the Secure Web Gateway allow you + Policies in the Secure Web Gateway allow you to achieve this, 25 00:01:43.990 --> 00:01:46.780 - and they can be written using a wide variety + and they can be written using a wide variety of attributes. 26 00:01:46.780 --> 00:01:50.800 - We can even isolate a website by running not + We can even isolate a website by running not in the user's browser, 27 00:01:50.800 --> 00:01:54.460 - but by rendering it in our headless browser, + but by rendering it in our headless browser, running on our own network. 28 00:01:54.460 --> 00:01:56.740 - And then we send the results down to the user + And then we send the results down to the user device, 29 00:01:56.740 --> 00:02:00.670 - and this protects them from any nasty code + and this protects them from any nasty code running in that website. 30 00:02:00.700 --> 00:02:03.970 - Let's take a look at the different ways our + Let's take a look at the different ways our Secure Web Gateway can help protect your 31 00:02:03.970 --> 00:02:08.350 - organization. The first method to protect any + organization. The first method to protect any user or device is to look at their DNS 32 00:02:08.350 --> 00:02:12.940 - requests. Some of the most common policies + requests. Some of the most common policies are simply designed to prevent access to 33 @@ -182,7 +184,7 @@ transcript: | 34 00:02:14.680 --> 00:02:18.910 - To make your life easier, + To make your life easier, Cloudflare manages large lists of sites that 35 @@ -191,12 +193,12 @@ transcript: | 36 00:02:20.140 --> 00:02:23.380 - Either they've been found to distribute + Either they've been found to distribute malware or they're part of a phishing 37 00:02:23.380 --> 00:02:27.730 - campaign. All you need to do is include that + campaign. All you need to do is include that category in the deny policy, 38 @@ -205,32 +207,32 @@ transcript: | 39 00:02:29.830 --> 00:02:32.950 - Cloudflare keeps the sites in each category + Cloudflare keeps the sites in each category up to date. 40 00:02:32.950 --> 00:02:38.260 - In fact, we block an average of 158 billion + In fact, we block an average of 158 billion cyber threats a day. 41 00:02:38.260 --> 00:02:41.710 - So we have an amazing view into what's bad + So we have an amazing view into what's bad out there on the Internet. 42 00:02:41.710 --> 00:02:44.500 - You could never maintain this amount of data + You could never maintain this amount of data yourself. 43 00:02:44.530 --> 00:02:48.820 - Policies can be applied at the user level or + Policies can be applied at the user level or be based on network location. 44 00:02:48.820 --> 00:02:52.870 - You might wish to implement a policy that + You might wish to implement a policy that limits certain websites depending on the 45 @@ -239,27 +241,27 @@ transcript: | 46 00:02:54.850 --> 00:02:59.580 - You can even subscribe to government cyber + You can even subscribe to government cyber defense lists of known malicious websites. 47 00:03:00.510 --> 00:03:05.250 - You can also use a DNS policy to simplify + You can also use a DNS policy to simplify some of your IT infrastructure. 48 00:03:05.280 --> 00:03:10.320 - A policy can override the IP address returned + A policy can override the IP address returned from a DNS request and point to a service 49 00:03:10.320 --> 00:03:15.450 - that might be local. For example, + that might be local. For example, you might configure all employee laptops to 50 00:03:15.480 --> 00:03:18.300 - use a single hostname for connecting to the + use a single hostname for connecting to the office printer. 51 @@ -268,22 +270,22 @@ transcript: | 52 00:03:21.180 --> 00:03:24.720 - Then, if a user is attempting to print in the + Then, if a user is attempting to print in the Seattle office, 53 00:03:24.750 --> 00:03:29.400 - Cloudflare will replace the IP address for + Cloudflare will replace the IP address for that host with the local office printer. 54 00:03:29.400 --> 00:03:32.100 - But if the same user then travels to the + But if the same user then travels to the London office, 55 00:03:32.100 --> 00:03:36.258 - the same laptop makes the same request to + the same laptop makes the same request to print and Cloudflare replaces the IP address 56 @@ -292,152 +294,152 @@ transcript: | 57 00:03:37.440 --> 00:03:40.800 - The second method of protection is by using + The second method of protection is by using network policies. 58 00:03:40.800 --> 00:03:43.890 - So for all your networks connected Cloudflare + So for all your networks connected Cloudflare SASE platform, 59 00:03:43.890 --> 00:03:47.280 - it's possible to write simple + it's possible to write simple firewall-like-rules. 60 00:03:47.370 --> 00:03:52.200 - These are often used to allow access to + These are often used to allow access to specific services on private IP addresses. 61 00:03:52.230 --> 00:03:56.160 - Say for example, you have a lot of windows + Say for example, you have a lot of windows servers running in your corporate network and 62 00:03:56.160 --> 00:03:59.760 - you want to ensure only IT admins are allowed + you want to ensure only IT admins are allowed to connect to them over RDP. 63 00:04:00.330 --> 00:04:05.160 - How? Well, when users access Cloudflare using + How? Well, when users access Cloudflare using our device agent, 64 00:04:05.190 --> 00:04:09.330 - network access policies can use identity + network access policies can use identity information such as the method of 65 00:04:09.330 --> 00:04:12.990 - authentication, what groups the user is in as + authentication, what groups the user is in as part of the policy. 66 00:04:13.020 --> 00:04:16.350 - Device security posture can also be taken + Device security posture can also be taken from that device agent, 67 00:04:16.350 --> 00:04:21.480 - making sure that IT admins access Windows + making sure that IT admins access Windows servers only using secured company managed 68 00:04:21.480 --> 00:04:27.660 - devices. The third and the one with the most + devices. The third and the one with the most control is HTTP policies, 69 00:04:27.660 --> 00:04:31.260 - since it allows you to inspect the actual + since it allows you to inspect the actual HTTP traffic. 70 00:04:31.320 --> 00:04:34.500 - For devices where a Cloudflare certificate + For devices where a Cloudflare certificate has been deployed, 71 00:04:34.500 --> 00:04:38.070 - the TLS and SSL connection terminates at + the TLS and SSL connection terminates at Cloudflare, 72 00:04:38.070 --> 00:04:41.520 - where you can inspect the traffic and apply + where you can inspect the traffic and apply your policies. 73 00:04:41.670 --> 00:04:45.900 - You can build policies that limit the + You can build policies that limit the uploading or downloading of files based on 74 00:04:45.930 --> 00:04:52.220 - their file type, or prevent HTTP POST or PUT + their file type, or prevent HTTP POST or PUT to prevent the certain upload of content to 75 00:04:52.250 --> 00:04:57.890 - any websites. We also have a sandboxing + any websites. We also have a sandboxing feature where we can use AV scanning to 76 00:04:57.920 --> 00:05:02.060 - examine certain files being downloaded and + examine certain files being downloaded and quarantine them if they contain malicious 77 00:05:02.060 --> 00:05:07.880 - content. But the true power of inspecting + content. But the true power of inspecting HTTP traffic is when it's combined with our 78 00:05:07.880 --> 00:05:12.410 - DLP policies. Here, we can match any part of + DLP policies. Here, we can match any part of the HTTP request, 79 00:05:12.410 --> 00:05:16.610 - either the body of the request or if a file + either the body of the request or if a file contains specific content, 80 00:05:16.610 --> 00:05:21.260 - and then protect that data from leaving your + and then protect that data from leaving your organization or being downloaded to insecure 81 00:05:21.290 --> 00:05:25.250 - devices. We have built-in DLP profiles for + devices. We have built-in DLP profiles for matching common data, 82 00:05:25.280 --> 00:05:29.480 - such as health or financial information, + such as health or financial information, source code or privately identifiable 83 00:05:29.480 --> 00:05:32.960 - information such as social security or tax + information such as social security or tax identifiers. 84 00:05:32.990 --> 00:05:38.390 - You can also create your own DLP profiles by + You can also create your own DLP profiles by either defining patterns to match sensitive 85 00:05:38.390 --> 00:05:42.140 - data, or just by uploading a list of known + data, or just by uploading a list of known customer accounts. 86 00:05:42.170 --> 00:05:46.700 - Now, when users attempt to download or upload + Now, when users attempt to download or upload any content that matches these profiles, 87 @@ -446,67 +448,67 @@ transcript: | 88 00:05:48.530 --> 00:05:51.460 - Sometimes the risk for a website isn't well + Sometimes the risk for a website isn't well known. 89 00:05:51.490 --> 00:05:55.150 - For example, you might deem social media + For example, you might deem social media websites to be a little risky, 90 00:05:55.150 --> 00:05:58.030 - but your marketing department still requires + but your marketing department still requires access. 91 00:05:58.060 --> 00:06:01.900 - Newly registered domains might sometimes be + Newly registered domains might sometimes be part of a phishing campaign, 92 00:06:01.900 --> 00:06:04.300 - or they might just be a legitimate new + or they might just be a legitimate new website. 93 00:06:04.330 --> 00:06:07.990 - In these examples, Cloudflare has a really + In these examples, Cloudflare has a really cool capability. 94 00:06:08.020 --> 00:06:13.360 - You can write a policy that when a user makes + You can write a policy that when a user makes a request for a website you think is a little 95 00:06:13.360 --> 00:06:16.960 - risky, instead of their machine receiving all + risky, instead of their machine receiving all the content directly, 96 00:06:16.960 --> 00:06:21.250 - we spin up a headless browser on our network + we spin up a headless browser on our network and render the content first. 97 00:06:21.280 --> 00:06:25.090 - Here we isolate any potential bad behavior in + Here we isolate any potential bad behavior in a secure, 98 00:06:25.120 --> 00:06:29.680 - isolated environment. We then send the + isolated environment. We then send the results of the render page down to the user's 99 00:06:29.680 --> 00:06:33.820 - device, and you can optionally turn on and + device, and you can optionally turn on and off certain capabilities, 100 00:06:33.820 --> 00:06:37.660 - such as the ability to enter text into the + such as the ability to enter text into the web page or download files. 101 @@ -515,42 +517,42 @@ transcript: | 102 00:06:40.780 --> 00:06:45.580 - You can also use this service to limit access + You can also use this service to limit access to SaaS application data for a certain set of 103 00:06:45.580 --> 00:06:49.510 - users. You might, for example, + users. You might, for example, want to allow contractors or partners to have 104 00:06:49.510 --> 00:06:53.410 - access to your Salesforce instance, + access to your Salesforce instance, and you can use our Browser Isolation to 105 00:06:53.440 --> 00:06:56.830 - prevent copy and paste, + prevent copy and paste, printing or downloading of Salesforce data. 106 00:06:56.860 --> 00:07:01.330 - So in summary, Cloudflare has a powerful + So in summary, Cloudflare has a powerful range of capabilities to protect users from 107 00:07:01.330 --> 00:07:05.980 - the threat of bad actors on the Internet, + the threat of bad actors on the Internet, while also identifying company data and 108 00:07:05.980 --> 00:07:10.720 - protecting its use. You can ensure safe + protecting its use. You can ensure safe browsing by blocking known malicious 109 00:07:10.720 --> 00:07:15.190 - websites, detect when company data is being + websites, detect when company data is being uploaded to unapproved cloud storage, 110 @@ -559,7 +561,7 @@ transcript: | 111 00:07:17.350 --> 00:07:22.030 - You can even isolate the entire website so + You can even isolate the entire website so that users are protected from any dangerous 112 @@ -568,7 +570,7 @@ transcript: | 113 00:07:24.400 --> 00:07:28.750 - This video is part of a series which explains + This video is part of a series which explains how to build your new corporate network using 114 @@ -577,7 +579,7 @@ transcript: | 115 00:07:30.370 --> 00:07:32.740 - Watch the other videos in this series to + Watch the other videos in this series to learn more. 116 @@ -590,15 +592,15 @@ transcript: | 118 00:07:37.900 --> 00:07:41.680 - We also cover a wide variety of topics + We also cover a wide variety of topics including application security, 119 00:07:41.680 --> 00:07:44.410 - corporate networking, + corporate networking, and all the developer content the Internet 120 00:07:44.410 --> 00:07:46.960 - can hold. Follow us online and thanks for - watching! \ No newline at end of file + can hold. Follow us online and thanks for + watching! diff --git a/src/content/stream/ssl-cipher-mismatch/index.yaml b/src/content/stream/ssl-cipher-mismatch/index.yaml index 130df9eca3bd33a..6aaf3bf239714ec 100644 --- a/src/content/stream/ssl-cipher-mismatch/index.yaml +++ b/src/content/stream/ssl-cipher-mismatch/index.yaml @@ -5,5 +5,6 @@ title: Manage SSL version or cipher mismatch errors description: In this video, learn how to manage an SSL version or cipher mismatch error. products: - ssl +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Mermaid%20thumbnail_Cipher.png diff --git a/src/content/stream/ssl-concepts/index.yaml b/src/content/stream/ssl-concepts/index.yaml index 834ff68b0ad8d06..647fb86a9c0de16 100644 --- a/src/content/stream/ssl-concepts/index.yaml +++ b/src/content/stream/ssl-concepts/index.yaml @@ -5,5 +5,6 @@ title: SSL/TLS concepts description: In this video, learn the key concepts relevant to Cloudflare SSL/TLS. products: - ssl +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Mermaid%20thumbnail_Concepts.png diff --git a/src/content/stream/strict-ssl-encryption/index.yaml b/src/content/stream/strict-ssl-encryption/index.yaml index d6694185333e5c7..885bdb4e20c2a2d 100644 --- a/src/content/stream/strict-ssl-encryption/index.yaml +++ b/src/content/stream/strict-ssl-encryption/index.yaml @@ -5,5 +5,6 @@ title: Configure Strict encryption mode description: In this video, learn how to configure your site to use Strict (SSL-Only Origin Pull) encryption mode. products: - ssl +pcx_content_type: video thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Mermaid%20thumbnail_Strict.png diff --git a/src/content/stream/warp-1-basics/index.yaml b/src/content/stream/warp-1-basics/index.yaml index 932beaacb9f9c1e..9b6ab9cf79d1f70 100644 --- a/src/content/stream/warp-1-basics/index.yaml +++ b/src/content/stream/warp-1-basics/index.yaml @@ -3,18 +3,21 @@ id: 31178cc41d0ec56d42ef892160589635 url: warp-1-basics title: WARP - Understand Cloudflare WARP basics description: In this episode, we explain the core features of the Cloudflare WARP client and how to troubleshoot common issues. After watching, you will have an understanding of the GUI, the differences between the consumer and corporate WARP, device profiles, the various operating modes of WARP, split tunneling, and more. -products: - - warp, zero-trust +pcx_content_type: video +products: + - zero-trust-warp + - cloudflare-one thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Understand-Cloudflare-WARP-Basics%20thumbnail.png -chapters: { - "Introduction and WARP GUI Basics": "0s", - "Consumer vs Corporate WARP": "57s", - "Device Profiles Explained": "01m35s", - "WARP Operating Modes": "02m12s", - "Split Tunneling": "03m4s", - "Conclusion": "04m56s" -} +chapters: + { + "Introduction and WARP GUI Basics": "0s", + "Consumer vs Corporate WARP": "57s", + "Device Profiles Explained": "01m35s", + "WARP Operating Modes": "02m12s", + "Split Tunneling": "03m4s", + "Conclusion": "04m56s", + } transcript: | WEBVTT @@ -28,7 +31,7 @@ transcript: | 2 00:00:06.240 --> 00:00:10.200 - <v Speaker1>Welcome. In this video, + <v Speaker1>Welcome. In this video, you'll learn the basics of Cloudflare WARP.</v> 3 @@ -37,57 +40,57 @@ transcript: | 4 00:00:12.480 --> 00:00:17.240 - <v Speaker1>but this guide is all about empowering you to + <v Speaker1>but this guide is all about empowering you to understand and solve issues faster on your</v> 5 00:00:17.240 --> 00:00:22.120 - <v Speaker1>own. We will learn the Cloudflare WARP client + <v Speaker1>own. We will learn the Cloudflare WARP client and how it differs from the consumer version</v> 6 00:00:22.120 --> 00:00:27.240 - <v Speaker1>of WARP, also known as the app 1.1.1.1, + <v Speaker1>of WARP, also known as the app 1.1.1.1, device profiles,</v> 7 00:00:27.520 --> 00:00:32.800 - <v Speaker1>the different operating modes of WARP, + <v Speaker1>the different operating modes of WARP, split tunneling exclude versus include modes,</v> 8 00:00:32.960 --> 00:00:36.000 - <v Speaker1>and the WARP GUI and its intended versus + <v Speaker1>and the WARP GUI and its intended versus actual state.</v> 9 00:00:36.560 --> 00:00:40.360 - <v Speaker1>These are the basic concepts that will + <v Speaker1>These are the basic concepts that will prepare you to troubleshoot any issues you</v> 10 00:00:40.360 --> 00:00:44.640 - <v Speaker1>may encounter. Let's get started with What is + <v Speaker1>may encounter. Let's get started with What is the Cloudflare WARP client?</v> 11 00:00:45.040 --> 00:00:49.920 - <v Speaker1>Cloudflare WARP client allows you to protect + <v Speaker1>Cloudflare WARP client allows you to protect corporate devices by securely and privately</v> 12 00:00:49.920 --> 00:00:53.800 - <v Speaker1>sending traffic from those devices to + <v Speaker1>sending traffic from those devices to Cloudflare's global network,</v> 13 00:00:54.040 --> 00:00:57.120 - <v Speaker1>where Cloudflare Gateway can apply advanced + <v Speaker1>where Cloudflare Gateway can apply advanced web filtering.</v> 14 00:00:57.440 --> 00:01:00.800 - <v Speaker1>The consumer version of WARP, + <v Speaker1>The consumer version of WARP, or the app 1.1.1.1,</v> 15 @@ -96,22 +99,22 @@ transcript: | 16 00:01:03.140 --> 00:01:06.220 - <v Speaker1>The corporate version integrates with + <v Speaker1>The corporate version integrates with Cloudflare Zero Trust,</v> 17 00:01:06.380 --> 00:01:09.940 - <v Speaker1>giving your IT team the ability to manage + <v Speaker1>giving your IT team the ability to manage security policies,</v> 18 00:01:10.180 --> 00:01:12.940 - <v Speaker1>control traffic routing, + <v Speaker1>control traffic routing, and monitor usage.</v> 19 00:01:13.060 --> 00:01:16.100 - <v Speaker1>If you're not sure which version of WARP + <v Speaker1>If you're not sure which version of WARP you're currently using,</v> 20 @@ -120,22 +123,22 @@ transcript: | 21 00:01:19.020 --> 00:01:21.820 - <v Speaker1>The consumer version will display WARP in + <v Speaker1>The consumer version will display WARP in red,</v> 22 00:01:21.980 --> 00:01:25.220 - <v Speaker1>whereas the corporate version will display + <v Speaker1>whereas the corporate version will display Zero Trust in blue.</v> 23 00:01:25.740 --> 00:01:28.500 - <v Speaker1>If your intention is to use the corporate + <v Speaker1>If your intention is to use the corporate version,</v> 24 00:01:28.660 --> 00:01:32.900 - <v Speaker1>make sure you're seeing a blue Zero Trust + <v Speaker1>make sure you're seeing a blue Zero Trust WARP banner by authenticating with your</v> 25 @@ -148,72 +151,72 @@ transcript: | 27 00:01:37.940 --> 00:01:42.380 - <v Speaker1>A device profile represents a different set + <v Speaker1>A device profile represents a different set of parameters assigned to your device,</v> 28 00:01:42.380 --> 00:01:45.220 - <v Speaker1>based on its relationship with the policy + <v Speaker1>based on its relationship with the policy attributes.</v> 29 00:01:45.220 --> 00:01:49.540 - <v Speaker1>You can create multiple profiles and apply + <v Speaker1>You can create multiple profiles and apply different settings based on your user's</v> 30 00:01:49.540 --> 00:01:53.140 - <v Speaker1>identity, the device location, + <v Speaker1>identity, the device location, and other criteria.</v> 31 00:01:53.180 --> 00:01:57.140 - <v Speaker1>IT administrators can assign different device + <v Speaker1>IT administrators can assign different device profiles to their users.</v> 32 00:01:57.540 --> 00:02:01.220 - <v Speaker1>For example, depending on office locations, + <v Speaker1>For example, depending on office locations, teams,</v> 33 00:02:01.220 --> 00:02:05.100 - <v Speaker1>device types, operating systems, + <v Speaker1>device types, operating systems, or other attributes,</v> 34 00:02:05.310 --> 00:02:09.230 - <v Speaker1>users might have different routes that need + <v Speaker1>users might have different routes that need to be excluded from their WARP Tunnel,</v> 35 00:02:09.470 --> 00:02:13.070 - <v Speaker1>or different DNS settings to accommodate + <v Speaker1>or different DNS settings to accommodate local development services.</v> 36 00:02:16.070 --> 00:02:20.470 - <v Speaker1>All right, it's important to know that WARP + <v Speaker1>All right, it's important to know that WARP client can operate in different modes,</v> 37 00:02:20.470 --> 00:02:24.390 - <v Speaker1>because each mode controls the types of + <v Speaker1>because each mode controls the types of traffic sent to Cloudflare Gateway</v> 38 00:02:24.390 --> 00:02:29.430 - <v Speaker1>differently. The WARP mode determines which + <v Speaker1>differently. The WARP mode determines which Zero Trust features are available on the</v> 39 00:02:29.430 --> 00:02:33.590 - <v Speaker1>device. Selecting the right mode depends on + <v Speaker1>device. Selecting the right mode depends on your organization's needs.</v> 40 00:02:33.870 --> 00:02:39.520 - <v Speaker1>For example, for Internet security or remote + <v Speaker1>For example, for Internet security or remote access gateway with WARP or Secure Web</v> 41 @@ -222,7 +225,7 @@ transcript: | 42 00:02:42.910 --> 00:02:47.470 - <v Speaker1>and the latter should only be used in cases + <v Speaker1>and the latter should only be used in cases where Cloudflare cannot control DNS</v> 43 @@ -231,27 +234,27 @@ transcript: | 44 00:02:49.590 --> 00:02:53.550 - <v Speaker1>Both Gateway with DoH and Proxy Mode are used + <v Speaker1>Both Gateway with DoH and Proxy Mode are used for Internet filtering.</v> 45 00:02:54.150 --> 00:02:59.710 - <v Speaker1>Gateway with DoH is only DNS traffic, + <v Speaker1>Gateway with DoH is only DNS traffic, while Proxy Mode is only HTTP traffic.</v> 46 00:02:59.870 --> 00:03:05.150 - <v Speaker1>Lastly, Device Information Only mode would be + <v Speaker1>Lastly, Device Information Only mode would be useful for clientless access or browser based</v> 47 00:03:05.150 --> 00:03:09.530 - <v Speaker1>remote access to use device posture without + <v Speaker1>remote access to use device posture without proxying traffic to Cloudflare.</v> 48 00:03:09.570 --> 00:03:13.050 - <v Speaker1>If you encounter a problem, + <v Speaker1>If you encounter a problem, understanding which mode you're in will help</v> 49 @@ -260,32 +263,32 @@ transcript: | 50 00:03:15.210 --> 00:03:19.290 - <v Speaker1>And that's because WARP modes are + <v Speaker1>And that's because WARP modes are combinations or absences of particular</v> 51 00:03:19.290 --> 00:03:24.250 - <v Speaker1>features. For example, + <v Speaker1>features. For example, Gateway with WARP includes both DNS and</v> 52 00:03:24.250 --> 00:03:26.810 - <v Speaker1>Tunnel components. So when you're + <v Speaker1>Tunnel components. So when you're troubleshooting,</v> 53 00:03:26.810 --> 00:03:31.770 - <v Speaker1>you have to look at both the DNS and Tunnel + <v Speaker1>you have to look at both the DNS and Tunnel components as opposed to Gateway with DoH</v> 54 00:03:32.090 --> 00:03:34.890 - <v Speaker1>where you will only have to look at the DNS + <v Speaker1>where you will only have to look at the DNS component.</v> 55 00:03:35.170 --> 00:03:38.050 - <v Speaker1>But don't worry, you don't have to memorize + <v Speaker1>But don't worry, you don't have to memorize all of this.</v> 56 @@ -294,12 +297,12 @@ transcript: | 57 00:03:40.450 --> 00:03:45.730 - <v Speaker1>Next up, split tunneling, + <v Speaker1>Next up, split tunneling, a feature that allows you to control what IP</v> 58 00:03:45.770 --> 00:03:48.850 - <v Speaker1>traffic goes through the WARP virtual + <v Speaker1>traffic goes through the WARP virtual interface or tunnel.</v> 59 @@ -316,37 +319,37 @@ transcript: | 62 00:03:57.090 --> 00:04:01.330 - <v Speaker1>All traffic will be sent to Cloudflare + <v Speaker1>All traffic will be sent to Cloudflare Gateway except for IPs and domains you</v> 63 00:04:01.330 --> 00:04:05.970 - <v Speaker1>specify. The second mode is include IPs and + <v Speaker1>specify. The second mode is include IPs and domains.</v> 64 00:04:06.290 --> 00:04:11.300 - <v Speaker1>Only traffic destined to IPs or domains you + <v Speaker1>Only traffic destined to IPs or domains you specify will be sent to Cloudflare Gateway.</v> 65 00:04:11.780 --> 00:04:16.700 - <v Speaker1>All other traffic will bypass Gateway and + <v Speaker1>All other traffic will bypass Gateway and will no longer be filtered by your network or</v> 66 00:04:16.740 --> 00:04:22.340 - <v Speaker1>HTTP policies. Secure Web Gateway without DNS + <v Speaker1>HTTP policies. Secure Web Gateway without DNS filtering and Device Information Only mode</v> 67 00:04:22.340 --> 00:04:25.420 - <v Speaker1>will automatically disable domain based split + <v Speaker1>will automatically disable domain based split tunneling.</v> 68 00:04:25.420 --> 00:04:28.180 - <v Speaker1>So if you're experiencing issues related to + <v Speaker1>So if you're experiencing issues related to domains,</v> 69 @@ -355,40 +358,40 @@ transcript: | 70 00:04:30.340 --> 00:04:33.380 - <v Speaker1>And lastly, here's a common point of + <v Speaker1>And lastly, here's a common point of confusion.</v> 71 00:04:33.620 --> 00:04:36.940 - <v Speaker1>The toggle button in the WARP GUI shows the + <v Speaker1>The toggle button in the WARP GUI shows the intended state,</v> 72 00:04:36.980 --> 00:04:41.060 - <v Speaker1>not the actual state. For example, + <v Speaker1>not the actual state. For example, if the toggle is on,</v> 73 00:04:41.100 --> 00:04:46.140 - <v Speaker1>it means that the client intends to connect, + <v Speaker1>it means that the client intends to connect, but the actual status may show disconnected</v> 74 00:04:46.140 --> 00:04:51.100 - <v Speaker1>if there's an issue. So always check the + <v Speaker1>if there's an issue. So always check the message below the toggle for the current</v> 75 00:04:51.100 --> 00:04:55.900 - <v Speaker1>connection state. You now understand the + <v Speaker1>connection state. You now understand the foundation of WARP client components.</v> 76 00:04:55.900 --> 00:04:59.140 - <v Speaker1>If you want to learn more, + <v Speaker1>If you want to learn more, we also have additional resources on</v> 77 00:04:59.140 --> 00:05:02.380 - <v Speaker1>Cloudflare docs. Thanks for watching and see - you soon!</v> \ No newline at end of file + <v Speaker1>Cloudflare docs. Thanks for watching and see + you soon!</v> diff --git a/src/content/stream/warp-2-diagonostic-logs/index.yaml b/src/content/stream/warp-2-diagonostic-logs/index.yaml index e642ac967a12a81..43caee9329c3675 100644 --- a/src/content/stream/warp-2-diagonostic-logs/index.yaml +++ b/src/content/stream/warp-2-diagonostic-logs/index.yaml @@ -3,20 +3,23 @@ id: c29964ab3dcf7c3432ebb2b4e93c3aca url: warp-2-diagnostic-logs title: WARP - Understand Cloudflare WARP through diagnostic logs description: In this more advanced episode, we explain how to use warp-diag files to identify and resolve connection issues with the WARP client. You will learn how to locate and interpret three key files - warp-status, warp-settings, and daemonlog. The video also provides troubleshooting tips, including specific keyword searches and guidance on how to cross-reference logs to identify a bigger picture of the problem. +pcx_content_type: video products: - - warp, zero-trust + - zero-trust-warp + - cloudflare-one thumbnail: url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Warp-diagnostics%20thumbnail.png -chapters: { - 00:00 Introduction": "0s", - "What are warp-diag files?": "44s", - "How to download and navigate warp-diag files": "01m16s", - "warp-statustxt": "02m06s", - "warp-settingstxt": "02m29s", - "daemonlog": "03m37s", - "Additonal tips": "08m07s", - "Conclusion": "08m43s" -} +chapters: + { + 00:00 Introduction": "0s", + "What are warp-diag files?": "44s", + "How to download and navigate warp-diag files": "01m16s", + "warp-statustxt": "02m06s", + "warp-settingstxt": "02m29s", + "daemonlog": "03m37s", + "Additonal tips": "08m07s", + "Conclusion": "08m43s", + } transcript: | WEBVTT @@ -30,22 +33,22 @@ transcript: | 2 00:00:09.440 --> 00:00:14.320 - <v Speaker1>Welcome. This is a WARP troubleshooting video + <v Speaker1>Welcome. This is a WARP troubleshooting video where you'll learn how to interpret warp-diag</v> 3 00:00:14.640 --> 00:00:19.600 - <v Speaker1>files. This is a more advanced episode, + <v Speaker1>files. This is a more advanced episode, so if you come across any concepts you aren't</v> 4 00:00:19.600 --> 00:00:24.560 - <v Speaker1>fully familiar with, we also have a WARP + <v Speaker1>fully familiar with, we also have a WARP basics video that brings you up to speed.</v> 5 00:00:24.680 --> 00:00:27.520 - <v Speaker1>And as always, our support team will be here + <v Speaker1>And as always, our support team will be here to help.</v> 6 @@ -58,12 +61,12 @@ transcript: | 8 00:00:31.640 --> 00:00:34.360 - <v Speaker1>How to download and navigate the warp-diag + <v Speaker1>How to download and navigate the warp-diag files,</v> 9 00:00:35.000 --> 00:00:39.920 - <v Speaker1>warp-status file, warp-settings file, + <v Speaker1>warp-status file, warp-settings file, daemon.log file,</v> 10 @@ -72,12 +75,12 @@ transcript: | 11 00:00:42.800 --> 00:00:50.680 - <v Speaker1>Let's get started. So what are warp-diag + <v Speaker1>Let's get started. So what are warp-diag files?</v> 12 00:00:51.040 --> 00:00:55.120 - <v Speaker1>They contain valuable information about the + <v Speaker1>They contain valuable information about the device connection status,</v> 13 @@ -86,17 +89,17 @@ transcript: | 14 00:00:57.880 --> 00:01:01.920 - <v Speaker1>These files are your first line of defense + <v Speaker1>These files are your first line of defense when troubleshooting any issues.</v> 15 00:01:02.830 --> 00:01:07.390 - <v Speaker1>Each of these files serves different purposes + <v Speaker1>Each of these files serves different purposes and contains specific information,</v> 16 00:01:07.390 --> 00:01:11.670 - <v Speaker1>such as combination of logs and outputs + <v Speaker1>such as combination of logs and outputs created when warp-diag runs.</v> 17 @@ -105,12 +108,12 @@ transcript: | 18 00:01:20.350 --> 00:01:24.270 - <v Speaker1>When WARP is installed, + <v Speaker1>When WARP is installed, a command line tool called warp-diag is also</v> 19 00:01:24.270 --> 00:01:30.270 - <v Speaker1>installed. Simply running the command + <v Speaker1>installed. Simply running the command warp-diag in a terminal will generate a zip</v> 20 @@ -119,32 +122,32 @@ transcript: | 21 00:01:33.270 --> 00:01:37.510 - <v Speaker1>Each time warp-diag is run, + <v Speaker1>Each time warp-diag is run, a new set of logs will be generated,</v> 22 00:01:37.510 --> 00:01:42.710 - <v Speaker1>and now we can start by unzipping the file + <v Speaker1>and now we can start by unzipping the file produced by warp-diag and opening its content</v> 23 00:01:42.710 --> 00:01:48.510 - <v Speaker1>in a text editor. I'm using VS Code here, + <v Speaker1>in a text editor. I'm using VS Code here, but any other text editor will also work.</v> 24 00:01:48.870 --> 00:01:53.190 - <v Speaker1>In this video, we'll only look at three + <v Speaker1>In this video, we'll only look at three particularly useful ones for initial</v> 25 00:01:53.190 --> 00:01:57.030 - <v Speaker1>troubleshooting: warp-status, + <v Speaker1>troubleshooting: warp-status, warp-settings,</v> 26 00:01:57.150 --> 00:02:02.190 - <v Speaker1>and daemon.log. So now I'll walk you through + <v Speaker1>and daemon.log. So now I'll walk you through each of these files and tell you why they're</v> 27 @@ -161,32 +164,32 @@ transcript: | 30 00:02:13.620 --> 00:02:17.100 - <v Speaker1>It contains the status of the client when + <v Speaker1>It contains the status of the client when warp-diag was executed.</v> 31 00:02:17.300 --> 00:02:21.780 - <v Speaker1>The connection status is useful to know when + <v Speaker1>The connection status is useful to know when you're analyzing any files that are outputs</v> 32 00:02:21.780 --> 00:02:25.340 - <v Speaker1>of common command line tools such as listing + <v Speaker1>of common command line tools such as listing interfaces,</v> 33 00:02:25.460 --> 00:02:28.620 - <v Speaker1>printing the routing table, + <v Speaker1>printing the routing table, and current DNS configuration.</v> 34 00:02:28.820 --> 00:02:31.020 - <v Speaker1>And that's it! On to warp- + <v Speaker1>And that's it! On to warp- settings.</v> 35 00:02:32.860 --> 00:02:37.660 - <v Speaker1>This file contains all of the currently + <v Speaker1>This file contains all of the currently active settings configured for the device,</v> 36 @@ -195,7 +198,7 @@ transcript: | 37 00:02:40.500 --> 00:02:45.020 - <v Speaker1>This file can help verify if the settings + <v Speaker1>This file can help verify if the settings you're making in a dashboard are actually</v> 38 @@ -204,32 +207,32 @@ transcript: | 39 00:02:46.860 --> 00:02:50.940 - <v Speaker1>We should always check this file to see if + <v Speaker1>We should always check this file to see if there are any unexpected values.</v> 40 00:02:51.420 --> 00:02:55.700 - <v Speaker1>For example, let's say the user you're + <v Speaker1>For example, let's say the user you're troubleshooting for is expected to have a</v> 41 00:02:55.700 --> 00:03:01.180 - <v Speaker1>specific device profile like office users, + <v Speaker1>specific device profile like office users, meaning their devices should be connected to</v> 42 00:03:01.220 --> 00:03:05.180 - <v Speaker1>a corporate network. First, + <v Speaker1>a corporate network. First, confirm that warp -settings has the correct</v> 43 00:03:05.180 --> 00:03:09.090 - <v Speaker1>profile ID. If the profile ID is not the + <v Speaker1>profile ID. If the profile ID is not the expected value,</v> 44 00:03:09.330 --> 00:03:13.210 - <v Speaker1>this might be an indication that the user + <v Speaker1>this might be an indication that the user isn't matching the rules you've defined in</v> 45 @@ -238,32 +241,32 @@ transcript: | 46 00:03:15.290 --> 00:03:19.770 - <v Speaker1>Also, if any specific changes have been made + <v Speaker1>Also, if any specific changes have been made to the device profile settings,</v> 47 00:03:19.770 --> 00:03:23.930 - <v Speaker1>you can use this file to ensure the user is + <v Speaker1>you can use this file to ensure the user is receiving those updates.</v> 48 00:03:23.970 --> 00:03:28.770 - <v Speaker1>For example, if you've updated a device + <v Speaker1>For example, if you've updated a device profile to use the MASQUE tunneling type</v> 49 00:03:28.770 --> 00:03:32.730 - <v Speaker1>instead of WireGuard, + <v Speaker1>instead of WireGuard, you can verify that the user has received</v> 50 00:03:32.730 --> 00:03:36.130 - <v Speaker1>that update and will indeed attempt to + <v Speaker1>that update and will indeed attempt to connect via MASQUE.</v> 51 00:03:40.850 --> 00:03:45.410 - <v Speaker1>Daemon.log is a fairly detailed file that + <v Speaker1>Daemon.log is a fairly detailed file that contains everything going on in WARP,</v> 52 @@ -272,12 +275,12 @@ transcript: | 53 00:03:47.370 --> 00:03:50.890 - <v Speaker1>But before we open the file, + <v Speaker1>But before we open the file, what is the WARP daemon?</v> 54 00:03:51.010 --> 00:03:54.490 - <v Speaker1>It's the background process of WARP, + <v Speaker1>It's the background process of WARP, also known as service,</v> 55 @@ -286,27 +289,27 @@ transcript: | 56 00:03:56.254 --> 00:03:59.546 - <v Speaker1>When WARP is installed, + <v Speaker1>When WARP is installed, it's installed as both daemon,</v> 57 00:03:59.546 --> 00:04:03.690 - <v Speaker1>the background process, + <v Speaker1>the background process, and as a GUI, which is the interface you see</v> 58 00:04:03.730 --> 00:04:09.680 - <v Speaker1>here. The GUI, warp-diag and warp-cli can all + <v Speaker1>here. The GUI, warp-diag and warp-cli can all communicate with the Daemon.</v> 59 00:04:10.360 --> 00:04:13.680 - <v Speaker1>There are multiple Daemon.log files and their + <v Speaker1>There are multiple Daemon.log files and their name chronologically.</v> 60 00:04:14.240 --> 00:04:18.640 - <v Speaker1>Daemon.log is the most recent, + <v Speaker1>Daemon.log is the most recent, and daemon.3 .log is the oldest.</v> 61 @@ -315,22 +318,22 @@ transcript: | 62 00:04:20.560 --> 00:04:24.600 - <v Speaker1>Line by line, we'll look at how daemon.log + <v Speaker1>Line by line, we'll look at how daemon.log should look like when WARP connects as</v> 63 00:04:24.600 --> 00:04:28.600 - <v Speaker1>expected. When WARP starts, + <v Speaker1>expected. When WARP starts, it prints out its version information,</v> 64 00:04:28.600 --> 00:04:33.760 - <v Speaker1>so we'll start there. Search for the string + <v Speaker1>so we'll start there. Search for the string "warp _ service :</v> 65 00:04:33.760 --> 00:04:37.200 - <v Speaker1>Version :" and look for the most recent + <v Speaker1>Version :" and look for the most recent entry.</v> 66 @@ -339,7 +342,7 @@ transcript: | 67 00:04:39.360 --> 00:04:43.680 - <v Speaker1>Our team is optimizing warp-diag constantly, + <v Speaker1>Our team is optimizing warp-diag constantly, so the string we mentioned in this video</v> 68 @@ -348,7 +351,7 @@ transcript: | 69 00:04:45.760 --> 00:04:50.360 - <v Speaker1>The registration contains all the necessary + <v Speaker1>The registration contains all the necessary information to connect the WARP client,</v> 70 @@ -357,47 +360,47 @@ transcript: | 71 00:04:53.520 --> 00:04:58.480 - <v Speaker1>If the GUI detects a missing registration, + <v Speaker1>If the GUI detects a missing registration, it may attempt to obtain one if configured to</v> 72 00:04:58.520 --> 00:05:02.680 - <v Speaker1>do so. Otherwise, it'll display missing + <v Speaker1>do so. Otherwise, it'll display missing registration.</v> 73 00:05:03.960 --> 00:05:07.400 - <v Speaker1>Once the registration is loaded, + <v Speaker1>Once the registration is loaded, WARP will attempt to connect,</v> 74 00:05:07.400 --> 00:05:10.000 - <v Speaker1>but only if configured to do so + <v Speaker1>but only if configured to do so automatically.</v> 75 00:05:10.560 --> 00:05:14.680 - <v Speaker1>Otherwise, it will only attempt to connect if + <v Speaker1>Otherwise, it will only attempt to connect if it was previously connected.</v> 76 00:05:15.360 --> 00:05:20.440 - <v Speaker1>After registration, WARP will then retrieve + <v Speaker1>After registration, WARP will then retrieve the device profile remotely via an API.</v> 77 00:05:21.040 --> 00:05:24.960 - <v Speaker1>This includes the device configurations and + <v Speaker1>This includes the device configurations and mode that will be used.</v> 78 00:05:26.000 --> 00:05:30.120 - <v Speaker1>It's very important to be aware that the + <v Speaker1>It's very important to be aware that the device profile can be further influenced by a</v> 79 00:05:30.120 --> 00:05:33.840 - <v Speaker1>local configuration file, + <v Speaker1>local configuration file, which is used by an MDM provider,</v> 80 @@ -406,7 +409,7 @@ transcript: | 81 00:05:36.120 --> 00:05:39.480 - <v Speaker1>For more information on Cloudflare MDM + <v Speaker1>For more information on Cloudflare MDM configuration,</v> 82 @@ -415,17 +418,17 @@ transcript: | 83 00:05:41.680 --> 00:05:45.280 - <v Speaker1>At this point, which components connect is + <v Speaker1>At this point, which components connect is determined by the mode.</v> 84 00:05:46.480 --> 00:05:51.640 - <v Speaker1>If the mode contains the Tunnel component, + <v Speaker1>If the mode contains the Tunnel component, for example Secure web gateway without DNS</v> 85 00:05:51.680 --> 00:05:58.080 - <v Speaker1>filtering, we'll see "Initiate WARP." if the + <v Speaker1>filtering, we'll see "Initiate WARP." if the mode contains the DNS component like Gateway</v> 86 @@ -434,7 +437,7 @@ transcript: | 87 00:06:01.640 --> 00:06:06.120 - <v Speaker1>If it contains both, like Gateway with WARP + <v Speaker1>If it contains both, like Gateway with WARP will eventually see both.</v> 88 @@ -443,7 +446,7 @@ transcript: | 89 00:06:10.000 --> 00:06:13.480 - <v Speaker1>Starting with initiate WARP for modes with + <v Speaker1>Starting with initiate WARP for modes with the Tunnel component.</v> 90 @@ -452,12 +455,12 @@ transcript: | 91 00:06:16.990 --> 00:06:21.550 - <v Speaker1>It starts off by allowing the tunnel endpoint + <v Speaker1>It starts off by allowing the tunnel endpoint through the firewall and attempting to</v> 92 00:06:21.550 --> 00:06:28.150 - <v Speaker1>connect it. When connecting the tunnel, + <v Speaker1>connect it. When connecting the tunnel, WARP attempts to connect to both IPv4 and</v> 93 @@ -466,7 +469,7 @@ transcript: | 94 00:06:30.350 --> 00:06:34.150 - <v Speaker1>This makes sure the end user will be + <v Speaker1>This makes sure the end user will be connected as fast as possible,</v> 95 @@ -475,27 +478,27 @@ transcript: | 96 00:06:37.430 --> 00:06:42.230 - <v Speaker1>Once connected, a network interface is + <v Speaker1>Once connected, a network interface is created and it begins the task of updating</v> 97 00:06:42.230 --> 00:06:46.710 - <v Speaker1>the routing table and the firewall according + <v Speaker1>the routing table and the firewall according to the exclude or include split tunnel</v> 98 00:06:46.710 --> 00:06:50.470 - <v Speaker1>entries. These entries can be either domains + <v Speaker1>entries. These entries can be either domains or IPs.</v> 99 00:06:50.910 --> 00:06:54.310 - <v Speaker1>WARP will update the routing table + <v Speaker1>WARP will update the routing table immediately for any IPs,</v> 100 00:06:54.310 --> 00:06:59.030 - <v Speaker1>but for domains, it will rely on a DNS + <v Speaker1>but for domains, it will rely on a DNS resolution for these domains and will update</v> 101 @@ -504,7 +507,7 @@ transcript: | 102 00:07:01.110 --> 00:07:05.030 - <v Speaker1>Once that's completed, + <v Speaker1>Once that's completed, WARP performs two connectivity tests,</v> 103 @@ -513,57 +516,57 @@ transcript: | 104 00:07:08.470 --> 00:07:12.710 - <v Speaker1>Moving on to initiate DNS and this is for + <v Speaker1>Moving on to initiate DNS and this is for modes with DNS component.</v> 105 00:07:13.270 --> 00:07:17.740 - <v Speaker1>For DNS, WARP will set itself as the default + <v Speaker1>For DNS, WARP will set itself as the default DNS global provider,</v> 106 00:07:17.740 --> 00:07:23.620 - <v Speaker1>and forward all DNS requests to Cloudflare + <v Speaker1>and forward all DNS requests to Cloudflare via DNS over HTTPS or DoH.</v> 107 00:07:24.340 --> 00:07:27.300 - <v Speaker1>And in order to do that, + <v Speaker1>And in order to do that, the following sequence needs to complete</v> 108 00:07:27.300 --> 00:07:31.820 - <v Speaker1>successfully. First, attempt to connect to + <v Speaker1>successfully. First, attempt to connect to the DoH endpoint.</v> 109 00:07:32.900 --> 00:07:36.900 - <v Speaker1>Second, receive a DNS response from that DoH + <v Speaker1>Second, receive a DNS response from that DoH endpoint.</v> 110 00:07:38.060 --> 00:07:43.740 - <v Speaker1>Third, bind to localhost on 127.0.2.2 and + <v Speaker1>Third, bind to localhost on 127.0.2.2 and 127.0.2.3.</v> 111 00:07:44.860 --> 00:07:49.460 - <v Speaker1>Fourth, update the system to use these IP's + <v Speaker1>Fourth, update the system to use these IP's as the DNS provider.</v> 112 00:07:50.220 --> 00:07:54.540 - <v Speaker1>If all four steps happen without error, + <v Speaker1>If all four steps happen without error, WARP then performs a series of DNS</v> 113 00:07:54.540 --> 00:07:59.340 - <v Speaker1>connectivity checks. These are end to end + <v Speaker1>connectivity checks. These are end to end tests which confirm that WARP is successfully</v> 114 00:07:59.340 --> 00:08:03.780 - <v Speaker1>receiving DNS requests, + <v Speaker1>receiving DNS requests, forwarding them to Cloudflare for resolution,</v> 115 @@ -572,12 +575,12 @@ transcript: | 116 00:08:06.380 --> 00:08:09.140 - <v Speaker1>Here are some additional tips to make + <v Speaker1>Here are some additional tips to make troubleshooting easier.</v> 117 00:08:11.060 --> 00:08:15.340 - <v Speaker1>You should use the search function in your + <v Speaker1>You should use the search function in your text editor to quickly locate terms like</v> 118 @@ -586,7 +589,7 @@ transcript: | 119 00:08:18.530 --> 00:08:21.570 - <v Speaker1>Also look for patterns such as repeated + <v Speaker1>Also look for patterns such as repeated entries.</v> 120 @@ -595,52 +598,52 @@ transcript: | 121 00:08:24.450 --> 00:08:27.850 - <v Speaker1>And finally cross-referencing files from warp + <v Speaker1>And finally cross-referencing files from warp -settings,</v> 122 00:08:28.010 --> 00:08:31.930 - <v Speaker1>warp-s tatus and daemon.log can reveal + <v Speaker1>warp-s tatus and daemon.log can reveal insights and a bigger picture.</v> 123 00:08:32.690 --> 00:08:36.170 - <v Speaker1>For example, if warp -status shows + <v Speaker1>For example, if warp -status shows disconnected,</v> 124 00:08:36.410 --> 00:08:41.090 - <v Speaker1>check daemon.log for error details and warp + <v Speaker1>check daemon.log for error details and warp -settings for potential misconfigurations.</v> 125 00:08:45.930 --> 00:08:49.890 - <v Speaker1>There are other files that provide more + <v Speaker1>There are other files that provide more specific information depending on your issue.</v> 126 00:08:50.290 --> 00:08:55.050 - <v Speaker1>Our team is optimizing warp-diag constantly, + <v Speaker1>Our team is optimizing warp-diag constantly, so you might find more files in the future.</v> 127 00:08:55.410 --> 00:08:58.250 - <v Speaker1>For an updated view on what you can find in + <v Speaker1>For an updated view on what you can find in which file,</v> 128 00:08:58.370 --> 00:09:02.610 - <v Speaker1>check out our troubleshooting guide. You now + <v Speaker1>check out our troubleshooting guide. You now understand the basics of warp-diag .</v> 129 00:09:02.770 --> 00:09:05.850 - <v Speaker1>If you're still experiencing issues after + <v Speaker1>If you're still experiencing issues after following these steps,</v> 130 00:09:05.850 --> 00:09:08.250 - <v Speaker1>don't hesitate to reach out to our support + <v Speaker1>don't hesitate to reach out to our support team.</v> 131 @@ -649,4 +652,4 @@ transcript: | 132 00:09:09.930 --> 00:09:11.930 - <v Speaker1>Thanks for watching and see you soon.</v> \ No newline at end of file + <v Speaker1>Thanks for watching and see you soon.</v> diff --git a/src/pages/learning-paths.astro b/src/pages/learning-paths.astro deleted file mode 100644 index 6b9543019fa21e1..000000000000000 --- a/src/pages/learning-paths.astro +++ /dev/null @@ -1,46 +0,0 @@ ---- -import StarlightPage, { - type StarlightPageProps, -} from "@astrojs/starlight/components/StarlightPage.astro"; -import { getCollection } from "astro:content"; -import LearningPathCatalog from "~/components/LearningPathCatalog.tsx"; - -// @ts-expect-error virtual module -import iconCollection from "virtual:astro-icon"; -import { getIconData, iconToSVG } from "@iconify/utils"; - -const props = { - frontmatter: { - title: "Learning paths", - description: - "Learning paths guide you through modules and projects so you can get started with Cloudflare as quickly as possible.", - template: "splash", - }, - hideBreadcrumbs: true, -} as StarlightPageProps; - -const learningPaths = await getCollection("learning-paths"); - -const data = learningPaths.map((lp) => lp.data); - -const iconToSvg = (id: string) => { - const data = getIconData(iconCollection.local, id); - - if (!data) throw new Error(`Icon ${id} does not exist.`); - - return iconToSVG(data); -}; - -const icons = { - "Core platform": iconToSvg("fundamentals"), - "Application performance": iconToSvg("speed"), - "Application security": iconToSvg("ddos-protection"), - "Cloudflare One": iconToSvg("cloudflare-one"), - "Developer platform": iconToSvg("workers"), - "Network security": iconToSvg("magic-transit"), -}; ---- - -<StarlightPage {...props}> - <LearningPathCatalog paths={data} icons={icons} client:load /> -</StarlightPage> diff --git a/src/pages/resources/index.astro b/src/pages/resources/index.astro new file mode 100644 index 000000000000000..0118f4804210691 --- /dev/null +++ b/src/pages/resources/index.astro @@ -0,0 +1,35 @@ +--- +import StarlightPage, { + type StarlightPageProps, +} from "@astrojs/starlight/components/StarlightPage.astro"; + +import { ResourcesBySelector } from "~/components"; + +const props = { + frontmatter: { + title: "Resources", + template: "splash", + description: + "Explore our resources to learn more about Cloudflare products and services", + }, + hideBreadcrumbs: true, +} as StarlightPageProps; +--- + +<StarlightPage {...props}> + <ResourcesBySelector + directory="" + types={[ + "tutorial", + "video", + "reference-architecture", + "reference-architecture-diagram", + "implementation-guide", + "design-guide", + "learning-path", + ]} + filterables={["pcx_content_type", "products"]} + filterPlacement="left" + columns={1} + /> +</StarlightPage> diff --git a/src/pages/videos/index.astro b/src/pages/videos/index.astro index d8cb9130da81466..792c17b7143f4d8 100644 --- a/src/pages/videos/index.astro +++ b/src/pages/videos/index.astro @@ -15,5 +15,5 @@ const props = { --- <StarlightPage {...props}> - <ResourcesBySelector types={["stream"]} columns={3} /> + <ResourcesBySelector types={["video"]} columns={3} /> </StarlightPage> diff --git a/src/schemas/base.ts b/src/schemas/base.ts index 6655bce2e1e0f4e..69672463e1a028f 100644 --- a/src/schemas/base.ts +++ b/src/schemas/base.ts @@ -1,5 +1,5 @@ import { z } from "astro:schema"; -import type { SchemaContext } from "astro:content"; +import { reference, type SchemaContext } from "astro:content"; import { sidebar, SidebarIconSchema } from "./types/sidebar"; @@ -89,11 +89,10 @@ export const baseSchema = ({ image }: SchemaContext) => "Required for the [`ProductReleaseNotes`](/style-guide/components/usage/#productreleasenotes) component.", ), products: z - .string() - .array() - .optional() + .array(reference("products")) + .default([]) .describe( - "The names of related products, which show on some grids for Examples, [Tutorials](/style-guide/documentation-content-strategy/content-types/tutorial/), and [Reference Architectures](/style-guide/documentation-content-strategy/content-types/reference-architecture/)", + "The names of related products (according to their file name in `src/content/products`). Usually, these correspond to file paths, but not always, such as with `cloudflare-tunnel`", ), summary: z .string() diff --git a/src/schemas/learning-paths.ts b/src/schemas/learning-paths.ts index 555df50c2b4cd32..af1d3d5206cb565 100644 --- a/src/schemas/learning-paths.ts +++ b/src/schemas/learning-paths.ts @@ -1,4 +1,5 @@ import { z } from "astro:schema"; +import { reference } from "astro:content"; export const learningPathsSchema = z .object({ @@ -7,8 +8,15 @@ export const learningPathsSchema = z path: z.string(), priority: z.number(), description: z.string(), - products: z.string().array(), + pcx_content_type: z.string().default("learning-path"), + products: z + .array(reference("products")) + .default([]) + .describe( + "The names of related products (according to their file name in `src/content/products`). Usually, these correspond to file paths, but not always, such as with `cloudflare-tunnel`", + ), product_group: z.string(), + tags: z.string().array().optional(), additional_groups: z.string().array().optional(), video: z.boolean().default(false), }) diff --git a/src/schemas/stream.ts b/src/schemas/stream.ts index 1738eff10a81c59..d23096fc8dab3a5 100644 --- a/src/schemas/stream.ts +++ b/src/schemas/stream.ts @@ -6,11 +6,17 @@ export const streamSchema = z.object({ url: z.string(), title: z.string(), description: z.string(), - products: z.array(reference("products")), + products: z + .array(reference("products")) + .default([]) + .describe( + "The names of related products (according to their file name in `src/content/products`). Usually, these correspond to file paths, but not always, such as with `cloudflare-tunnel`", + ), transcript: z.string().optional(), chapters: z.record(z.string(), z.string()).optional(), tags: z.array(z.string()).optional(), updated: z.date().optional(), + pcx_content_type: z.string().default("video"), thumbnail: z .object({ url: z.string(), diff --git a/src/util/content-type.ts b/src/util/content-type.ts new file mode 100644 index 000000000000000..1a3b9b03cfe0c92 --- /dev/null +++ b/src/util/content-type.ts @@ -0,0 +1,13 @@ +/** + * Formats a content type string by capitalizing the first letter and replacing hyphens with spaces + * @param contentType - The content type string to format + * @returns The formatted content type string + */ +export function formatContentType(contentType: string): string { + return contentType + ? (contentType.charAt(0).toUpperCase() + contentType.slice(1)).replaceAll( + "-", + " ", + ) + : ""; +}