Skip to content

Commit

Permalink
add do not follow redirect to form
Browse files Browse the repository at this point in the history
  • Loading branch information
simlarsen committed Oct 16, 2024
1 parent b9b5ca3 commit 5e85e73
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 5 deletions.
13 changes: 13 additions & 0 deletions Common/Types/Monitor/MonitorStep.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ export interface MonitorStepType {
requestHeaders?: Dictionary<string> | undefined;
requestBody?: string | undefined;

// this is used for API and Website monitor
doNotFollowRedirects?: boolean | undefined;

// this is for port monitors.
monitorDestinationPort?: Port | undefined;

Expand All @@ -58,6 +61,7 @@ export default class MonitorStep extends DatabaseProperty {
this.data = {
id: ObjectID.generate().toString(),
monitorDestination: undefined,
doNotFollowRedirects: undefined,
monitorDestinationPort: undefined,
monitorCriteria: new MonitorCriteria(),
requestType: HTTPMethod.GET,
Expand All @@ -84,6 +88,7 @@ export default class MonitorStep extends DatabaseProperty {
monitorStep.data = {
id: ObjectID.generate().toString(),
monitorDestination: undefined,
doNotFollowRedirects: undefined,
monitorDestinationPort: undefined,
monitorCriteria: MonitorCriteria.getDefaultMonitorCriteria(arg),
requestType: HTTPMethod.GET,
Expand Down Expand Up @@ -133,6 +138,11 @@ export default class MonitorStep extends DatabaseProperty {
return this;
}

public setDoNotFollowRedirects(doNotFollowRedirects: boolean): MonitorStep {
this.data!.doNotFollowRedirects = doNotFollowRedirects;
return this;
}

public setPort(monitorDestinationPort: Port): MonitorStep {
this.data!.monitorDestinationPort = monitorDestinationPort;
return this;
Expand Down Expand Up @@ -176,6 +186,7 @@ export default class MonitorStep extends DatabaseProperty {
value: {
id: ObjectID.generate().toString(),
monitorDestination: undefined,
doNotFollowRedirects: undefined,
monitorDestinationPort: undefined,
monitorCriteria: MonitorCriteria.getNewMonitorCriteriaAsJSON(),
requestType: HTTPMethod.GET,
Expand Down Expand Up @@ -259,6 +270,7 @@ export default class MonitorStep extends DatabaseProperty {
id: this.data.id,
monitorDestination:
this.data?.monitorDestination?.toJSON() || undefined,
doNotFollowRedirects: this.data.doNotFollowRedirects || undefined,
monitorDestinationPort:
this.data?.monitorDestinationPort?.toJSON() || undefined,
monitorCriteria: this.data.monitorCriteria.toJSON(),
Expand Down Expand Up @@ -355,6 +367,7 @@ export default class MonitorStep extends DatabaseProperty {
monitorStep.data = JSONFunctions.deserialize({
id: json["id"] as string,
monitorDestination: monitorDestination || undefined,
doNotFollowRedirects: json["doNotFollowRedirects"] || undefined,
monitorDestinationPort: monitorDestinationPort || undefined,
monitorCriteria: MonitorCriteria.fromJSON(
json["monitorCriteria"] as JSONObject,
Expand Down
37 changes: 36 additions & 1 deletion Dashboard/src/Components/Form/Monitor/MonitorStep.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ import { PromiseVoidFunction } from "Common/Types/FunctionTypes";
import MonitorStepTraceMonitor, {
MonitorStepTraceMonitorUtil,
} from "Common/Types/Monitor/MonitorStepTraceMonitor";
import CheckboxElement from "Common/UI/Components/Checkbox/Checkbox";

export interface ComponentProps {
monitorStatusDropdownOptions: Array<DropdownOption>;
Expand All @@ -75,6 +76,9 @@ const MonitorStepElement: FunctionComponent<ComponentProps> = (
setShowAdvancedOptionsRequestBodyAndHeaders,
] = useState<boolean>(false);

const [showDoNotFollowRedirects, setShowDoNotFollowRedirects] =
useState<boolean>(false);

const [monitorStep, setMonitorStep] = useState<MonitorStep>(
props.initialValue || new MonitorStep(),
);
Expand Down Expand Up @@ -436,14 +440,28 @@ const MonitorStepElement: FunctionComponent<ComponentProps> = (
props.monitorType === MonitorType.API && (
<div className="mt-1 -ml-3">
<Button
title="Advanced: Add Request Headers and Body"
title="Advanced: Add Request Headers, Body and more."
buttonStyle={ButtonStyleType.SECONDARY_LINK}
onClick={() => {
setShowAdvancedOptionsRequestBodyAndHeaders(true);
}}
/>
</div>
)}

{!showDoNotFollowRedirects &&
props.monitorType === MonitorType.Website && (
<div className="mt-1 -ml-3">
<Button
title="Advanced: More Options"
buttonStyle={ButtonStyleType.SECONDARY_LINK}
onClick={() => {
setShowDoNotFollowRedirects(true);
}}
/>
</div>
)}

{showAdvancedOptionsRequestBodyAndHeaders &&
props.monitorType === MonitorType.API && (
<div className="mt-5">
Expand Down Expand Up @@ -533,6 +551,23 @@ const MonitorStepElement: FunctionComponent<ComponentProps> = (
/>
</div>
)}

{(showDoNotFollowRedirects ||
showAdvancedOptionsRequestBodyAndHeaders) &&
(props.monitorType === MonitorType.API ||
props.monitorType === MonitorType.Website) && (
<div className="mt-5">
<CheckboxElement
initialValue={monitorStep.data?.doNotFollowRedirects || false}
title={"Do not follow redirects"}
description="Please check this if you do not want to follow redirects."
onChange={(value: boolean) => {
monitorStep.setDoNotFollowRedirects(value);
setMonitorStep(MonitorStep.clone(monitorStep));
}}
/>
</div>
)}
</div>
)}

Expand Down
14 changes: 14 additions & 0 deletions Dashboard/src/Components/Monitor/MonitorSteps/MonitorStep.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,13 @@ const MonitorStepElement: FunctionComponent<ComponentProps> = (
fieldType: FieldType.DictionaryOfStrings,
placeholder: "No data entered",
},
{
key: "doNotFollowRedirects",
title: "Do Not Follow Redirects",
description: "When set, we will not follow redirects.",
fieldType: FieldType.Boolean,
placeholder: "No",
},
];
} else if (props.monitorType === MonitorType.Website) {
fields = [
Expand All @@ -208,6 +215,13 @@ const MonitorStepElement: FunctionComponent<ComponentProps> = (
fieldType: FieldType.Text,
placeholder: "No data entered",
},
{
key: "doNotFollowRedirects",
title: "Do Not Follow Redirects",
description: "Do not follow redirects.",
fieldType: FieldType.Boolean,
placeholder: "No",
},
];
} else if (props.monitorType === MonitorType.Ping) {
fields = [
Expand Down
2 changes: 2 additions & 0 deletions Probe/Utils/Monitors/Monitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,7 @@ export default class MonitorUtil {
monitorId: monitor.id!,
retry: 10,
timeout: new PositiveNumber(60000), // 60 seconds
doNotFollowRedirects: monitorStep.data?.doNotFollowRedirects || false,
},
);

Expand Down Expand Up @@ -352,6 +353,7 @@ export default class MonitorUtil {
requestType: monitorStep.data?.requestType || HTTPMethod.GET,
retry: 10,
timeout: new PositiveNumber(60000), // 60 seconds
doNotFollowRedirects: monitorStep.data?.doNotFollowRedirects || false,
},
);

Expand Down
5 changes: 3 additions & 2 deletions Probe/Utils/Monitors/MonitorTypes/ApiMonitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export default class ApiMonitor {
monitorId?: ObjectID | undefined;
isOnlineCheckRequest?: boolean | undefined;
timeout?: PositiveNumber; // timeout in milliseconds
doNotFollowRedirects?: boolean | undefined;
},
): Promise<APIResponse | null> {
if (!options) {
Expand Down Expand Up @@ -66,7 +67,7 @@ export default class ApiMonitor {
undefined,
{
timeout: options.timeout?.toNumber() || 5000,
doNotFollowRedirects: false,
doNotFollowRedirects: options.doNotFollowRedirects || false,
},
);

Expand All @@ -84,7 +85,7 @@ export default class ApiMonitor {
undefined,
{
timeout: options.timeout?.toNumber() || 5000,
doNotFollowRedirects: false,
doNotFollowRedirects: options.doNotFollowRedirects || false,
},
);
}
Expand Down
5 changes: 3 additions & 2 deletions Probe/Utils/Monitors/MonitorTypes/WebsiteMonitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ export default class WebsiteMonitor {
monitorId?: ObjectID | undefined;
isOnlineCheckRequest?: boolean | undefined;
timeout?: PositiveNumber; // timeout in milliseconds
doNotFollowRedirects?: boolean | undefined;
},
): Promise<ProbeWebsiteResponse | null> {
if (!options) {
Expand Down Expand Up @@ -61,7 +62,7 @@ export default class WebsiteMonitor {
let result: WebsiteResponse = await WebsiteRequest.fetch(url, {
isHeadRequest: options.isHeadRequest,
timeout: options.timeout?.toNumber() || 5000,
doNotFollowRedirects: false,
doNotFollowRedirects: options.doNotFollowRedirects || false,
});

if (
Expand All @@ -73,7 +74,7 @@ export default class WebsiteMonitor {
result = await WebsiteRequest.fetch(url, {
isHeadRequest: false,
timeout: options.timeout?.toNumber() || 5000,
doNotFollowRedirects: false,
doNotFollowRedirects: options.doNotFollowRedirects || false,
});
}

Expand Down

0 comments on commit 5e85e73

Please sign in to comment.