Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
cf1a4f7
[Ruleset Engine] Fields reference PoC
pedrosousa Dec 5, 2024
eef4f30
Add search (text, categories)
pedrosousa Dec 6, 2024
f8e4e45
Add geolocation field
pedrosousa Dec 9, 2024
dadadcf
Small changes to fields
pedrosousa Dec 9, 2024
7e6eba9
Remove Keywords filter
pedrosousa Dec 9, 2024
90e3791
Add more fields
pedrosousa Dec 30, 2024
79e3a7c
Fix fields
pedrosousa Dec 30, 2024
3149aaf
Add more fields
pedrosousa Dec 31, 2024
8133070
Add JWT validation fields
pedrosousa Dec 31, 2024
decf46d
Add field requirements
pedrosousa Dec 31, 2024
ad9797e
Add request header fields
pedrosousa Dec 31, 2024
3c455c7
Add request body fields
pedrosousa Dec 31, 2024
daa74ac
Disable conversion of relative links to absolute links
pedrosousa Jan 2, 2025
7622de5
Add note about body fields
pedrosousa Jan 2, 2025
47a35b2
Order fields and categories in field catalog
pedrosousa Jan 2, 2025
4a68d2e
Don't use details in individual field pages
pedrosousa Jan 2, 2025
234d0aa
Add response fields
pedrosousa Jan 2, 2025
3d58109
Move test field to the end of the list
pedrosousa Jan 2, 2025
8c0ff01
Update geolocation fields
pedrosousa Jan 2, 2025
152571b
Update formatting
pedrosousa Jan 2, 2025
5db1607
Move FieldBadges file
pedrosousa Jan 2, 2025
b449e9d
Show plan requirement in FieldCatalog
pedrosousa Jan 2, 2025
37823e5
Small updates to field content
pedrosousa Jan 2, 2025
7205cd4
Catalog: Add tooltip with name & data type
pedrosousa Jan 2, 2025
177ff46
Adjust required plans
pedrosousa Jan 2, 2025
f9df7ea
Remove commented code
pedrosousa Jan 2, 2025
4417c48
Remove unused property from fields schema
pedrosousa Jan 3, 2025
5a9495d
Merge branch 'production' into pedro/PCX-14693-ruleset-engine-new-fie…
pedrosousa Jan 7, 2025
e66ebd1
Update CSS based on ModelCatalog changes
pedrosousa Jan 7, 2025
06439b8
Fix field description
pedrosousa Jan 7, 2025
d779260
Stretch items vertically
pedrosousa Jan 7, 2025
410a22c
Add "mTLS" category
pedrosousa Jan 7, 2025
27493db
Add expression example for multipart.content_dispositions
pedrosousa Jan 10, 2025
e82ae12
Rename Example >> Example usage
pedrosousa Jan 10, 2025
c0c9bea
Quote string examples; add some example usages
pedrosousa Jan 10, 2025
b6d4d0e
Update field links (scripted)
pedrosousa Jan 14, 2025
74782fb
Manual link updates (point to reference when appropriate)
pedrosousa Jan 14, 2025
16c46b5
Move Magic Firewall fields page to MFW tile
pedrosousa Jan 14, 2025
8b63feb
Remove old pages with fields
pedrosousa Jan 15, 2025
8f9d7bb
Merge branch 'production' into pedro/PCX-14693-ruleset-engine-new-fie…
pedrosousa Jan 15, 2025
449f7ec
Update a few more links
pedrosousa Jan 15, 2025
05a91c2
Add new api_gateway fields
pedrosousa Jan 15, 2025
8768d8e
Fix field description
pedrosousa Jan 15, 2025
0827ac1
Ignore individual field pages in link checker (existing issue with dots)
pedrosousa Jan 15, 2025
4d4c9fd
Remove link
pedrosousa Jan 15, 2025
425fe58
Small text update
pedrosousa Jan 15, 2025
a8b9add
Merge branch 'production' into pedro/PCX-14693-ruleset-engine-new-fie…
pedrosousa Jan 16, 2025
b0b71f9
Fix nested anchor tags in Markdown
KianNH Jan 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions astro.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ export default defineConfig({
"/products/",
"/rules/snippets/examples/?operation=*",
"/rules/transform/examples/?operation=*",
"/ruleset-engine/rules-language/fields/reference/**",
"/workers/examples/?languages=*",
"/workers/examples/?tags=*",
"/workers-ai/models/**",
Expand Down
39 changes: 39 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
"puppeteer": "^24.0.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-markdown": "^9.0.3",
"react-textarea-autosize": "^8.5.7",
"redirects-in-workers": "^0.0.5",
"rehype-autolink-headings": "^7.1.0",
Expand Down
11 changes: 9 additions & 2 deletions public/_redirects
Original file line number Diff line number Diff line change
Expand Up @@ -750,7 +750,6 @@
/logs/reference/logpush-api-configuration/examples/example-logpush-curl/ /logs/tutorials/examples/example-logpush-curl/ 301

# magic-firewall
/magic-firewall/reference/magic-firewall-fields/ /ruleset-engine/rules-language/fields/magic-firewall/ 301
Copy link
Contributor Author

@pedrosousa pedrosousa Jan 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR moves this page back to the Magic Firewall tile. There's a separate (inverse) redirect handling this change.

/magic-firewall/reference/examples/ /magic-firewall/how-to/add-rules/ 301
/magic-firewall/how-to/pcaps-bucket-setup/ /magic-firewall/packet-captures/pcaps-bucket-setup/ 301
/magic-firewall/how-to/collect-pcaps/ /magic-firewall/packet-captures/collect-pcaps/ 301
Expand Down Expand Up @@ -934,7 +933,6 @@
/reference-architecture/load-balancing-reference-architecture/ /reference-architecture/architectures/load-balancing/ 301
/reference-architecture/magic-transit-reference-architecture/ /reference-architecture/architectures/magic-transit/ 301
/reference-architecture/multi-vendor-architecture/ /reference-architecture/architectures/multi-vendor/ 301

/reference-architecture/secure-application-delivery-design-guide/ /reference-architecture/design-guides/secure-application-delivery/ 301

# radar
Expand Down Expand Up @@ -973,6 +971,15 @@
/rules/url-forwarding/single-redirects/examples/ /rules/url-forwarding/examples/ 301
/rules/url-forwarding/dynamic-redirects/parameters/ /rules/url-forwarding/single-redirects/settings/ 301

# ruleset engine
/ruleset-engine/rules-language/fields/standard-fields/ /ruleset-engine/rules-language/fields/reference/ 301
/ruleset-engine/rules-language/fields/dynamic-fields/ /ruleset-engine/rules-language/fields/reference/ 301
/ruleset-engine/rules-language/fields/uri/ /ruleset-engine/rules-language/fields/reference/ 301
/ruleset-engine/rules-language/fields/http-request-header/ /ruleset-engine/rules-language/fields/reference/ 301
/ruleset-engine/rules-language/fields/http-request-body/ /ruleset-engine/rules-language/fields/reference/ 301
/ruleset-engine/rules-language/fields/http-request-response/ /ruleset-engine/rules-language/fields/reference/ 301
/ruleset-engine/rules-language/fields/magic-firewall/ /magic-firewall/reference/magic-firewall-fields/ 301

# security center
/security-center/indicator-feeds/getting-started/ /security-center/indicator-feeds/ 301
/security-center/indicator-feeds/get-started/ /security-center/indicator-feeds/ 301
Expand Down
140 changes: 140 additions & 0 deletions src/components/FieldCatalog.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
import { useState } from "react";
import FieldBadges from "./fields/FieldBadges";
import Markdown from "react-markdown";

const FieldCatalog = ({ fields }) => {
const [filters, setFilters] = useState({
search: "",
categories: [],
keywords: [],
});
const mapped = fields.sort((f1, f2) => {
return f1.name < f2.name ? -1 : 1;
});

const categories = [
...new Set(
fields
.map((field) => field.categories)
.flat()
.sort(),
),
];

// apply filters to the fields list
const fieldList = mapped.filter((field) => {
if (filters.categories.length > 0) {
if (!field.categories?.some((c) => filters.categories.includes(c))) {
return false;
}
}

if (filters.search) {
// search keywords
let keywordFound = field.keywords?.some(
(kw) => kw.indexOf(filters.search) >= 0,
);

if (
!field.name.toLowerCase().includes(filters.search.toLowerCase()) &&
!field.summary.toLowerCase().includes(filters.search.toLowerCase()) &&
!keywordFound
) {
return false;
}
}

return true;
});

return (
<div className="md:flex">
<div className="mr-8 w-full md:w-1/4">
<input
type="text"
className="mb-8 w-full rounded-md border-2 border-gray-200 bg-white px-2 py-2 dark:border-gray-700 dark:bg-gray-800"
placeholder="Search fields"
value={filters.search}
onChange={(e) => setFilters({ ...filters, search: e.target.value })}
/>

<div className="!mb-8 hidden md:block">
<span className="text-sm font-bold uppercase text-gray-600 dark:text-gray-200">
▼ Categories
</span>

{categories.map((category) => (
<label key={category} className="!my-2 block">
<input
type="checkbox"
className="mr-2"
value={category}
onClick={(e) => {
if (e.target.checked) {
setFilters({
...filters,
categories: [...filters.categories, e.target.value],
});
} else {
setFilters({
...filters,
categories: filters.categories.filter(
(f) => f !== e.target.value,
),
});
}
}}
/>{" "}
{category}
</label>
))}
</div>
</div>

<div className="!mt-0 flex w-full flex-wrap items-stretch gap-[1%] self-start md:w-3/4">
{fieldList.length === 0 && (
<div className="flex w-full flex-col justify-center rounded-md border bg-gray-50 py-6 text-center align-middle dark:border-gray-500 dark:bg-gray-800">
<span className="text-lg !font-bold">No fields found</span>
<p>
Try a different search term, or broaden your search by removing
filters.
</p>
</div>
)}
{fieldList.map((field) => {
return (
<a
key={field.name}
className="mb-3 block w-full self-stretch rounded-md border border-solid border-gray-200 p-3 !text-inherit no-underline hover:bg-gray-50 dark:border-gray-700 dark:hover:bg-gray-800 lg:w-[48%]"
href={`/ruleset-engine/rules-language/fields/reference/${field.name}/`}
>
<div className="-mb-1 flex items-center">
<span
className="font-semibold text-lg text-ellipsis overflow-hidden whitespace-nowrap"
title={`${field.name}: ${field.data_type}`}
>
{field.name}
</span>
</div>
<Markdown
className="!mt-2 line-clamp-2 text-sm leading-6"
disallowedElements={["a"]}
unwrapDisallowed={true}
>
{field.summary}
</Markdown>

{field.plan_info_label && (
<div className="!mt-2 text-xs">
<FieldBadges badges={[field.plan_info_label]} />
</div>
)}
</a>
);
})}
</div>
</div>
);
};

export default FieldCatalog;
16 changes: 16 additions & 0 deletions src/components/fields/FieldBadges.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const FieldBadges = ({ badges }) => {
return (
<ul className="list-none m-0 p-0 inline-flex items-center gap-2 text-xs">
{badges.map((badge) => (
<li
key={badge}
className="bg-gray-100 dark:bg-gray-700 px-2 py-1 rounded-md block !mt-0"
>
{badge}
</li>
))}
</ul>
);
};

export default FieldBadges;
6 changes: 6 additions & 0 deletions src/content/config.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { z, defineCollection } from "astro:content";
import { docsSchema, i18nSchema } from "@astrojs/starlight/schema";
import { file } from "astro/loaders";
import {
appsSchema,
changelogsSchema,
Expand All @@ -13,6 +14,7 @@ import {
videosSchema,
workersAiSchema,
changelogsNextSchema,
fieldsSchema,
} from "~/schemas";

const partialSchema = z.object({
Expand Down Expand Up @@ -78,4 +80,8 @@ export const collections = {
"changelogs-next": defineCollection({
schema: changelogsNextSchema,
}),
fields: defineCollection({
schema: fieldsSchema,
type: "data",
}),
};
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,4 @@ As an example, to send the `x-send-jwt-claim-user` request header to the origin,
4. Enter a rule name and a filter expression, if applicable.
5. Choose **Set dynamic**.
6. Set the header name to `x-send-jwt-claim-user`.
7. Set the value to `lookup_json_string(http.request.jwt.claims["<TOKEN_CONFIGURATION_ID>"][0], "claim_name")`, where `<TOKEN_CONFIGURATION_ID>` is your token configuration ID found in JWT Validation and `claim_name` is the [JWT claim](/ruleset-engine/rules-language/fields/dynamic-fields/#json-web-tokens-validation-claims) you want to add to the header.
7. Set the value to `lookup_json_string(http.request.jwt.claims["<TOKEN_CONFIGURATION_ID>"][0], "claim_name")`, where `<TOKEN_CONFIGURATION_ID>` is your token configuration ID found in JWT Validation and `claim_name` is the JWT claim you want to add to the header.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed link because we're not yet documenting the http.request.jwt.claims field.

2 changes: 1 addition & 1 deletion src/content/docs/bots/troubleshooting.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ Cloudflare has built an allowlist of good, automated bots, e.g. Google Search En

This allowlist is large based on reverse DNS verification, meaning that the IPs we allow really match the requesting service. In addition to this, Cloudflare uses multiple validation methods including ASN blocks and public lists. If none of these validation types are available for a customer, we use internal Cloudflare data and machine learning to identify legitimate IP addresses from good bots.

To allow traffic from good bots, use the [Verified Bot](/ruleset-engine/rules-language/fields/dynamic-fields/#cfbot_managementverified_bot) field in your WAF custom rule.
To allow traffic from good bots, use the [Verified Bot](/ruleset-engine/rules-language/fields/reference/cf.bot_management.verified_bot/) field in your WAF custom rule.

---

Expand Down
Loading
Loading