mirror of
https://github.com/OneUptime/oneuptime.git
synced 2026-04-06 00:32:12 +02:00
fix lint.
This commit is contained in:
@@ -1,18 +1,17 @@
|
||||
import Email from '../Types/Email';
|
||||
import { JSONObject } from '../Types/JSON'
|
||||
import posthog from 'posthog-js'
|
||||
|
||||
export default class Analytics {
|
||||
import { JSONObject } from '../Types/JSON';
|
||||
import posthog from 'posthog-js';
|
||||
|
||||
export default class Analytics {
|
||||
public constructor(apiHost: string, apiKey: string) {
|
||||
posthog.init(apiKey, { api_host: apiHost})
|
||||
posthog.init(apiKey, { api_host: apiHost });
|
||||
}
|
||||
|
||||
public userAuth(email: Email): void {
|
||||
public userAuth(email: Email): void {
|
||||
posthog.identify(email.toString());
|
||||
}
|
||||
|
||||
public capture(eventName: string, data: JSONObject): void {
|
||||
posthog.capture(eventName, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,8 +120,6 @@ export default class StatusPageAPI extends BaseAPI<
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
|
||||
this.router.post(
|
||||
`/${new this.entityType()
|
||||
.getCrudApiPath()
|
||||
@@ -404,7 +402,6 @@ export default class StatusPageAPI extends BaseAPI<
|
||||
return monitor.monitorId!;
|
||||
});
|
||||
|
||||
|
||||
const startDate: Date = OneUptimeDate.getSomeDaysAgo(90);
|
||||
const endDate: Date = OneUptimeDate.getCurrentDate();
|
||||
|
||||
@@ -445,8 +442,6 @@ export default class StatusPageAPI extends BaseAPI<
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
// check if status page has active incident.
|
||||
let activeIncidents: Array<Incident> = [];
|
||||
if (monitorsOnStatusPage.length > 0) {
|
||||
@@ -520,7 +515,7 @@ export default class StatusPageAPI extends BaseAPI<
|
||||
|
||||
let incidentStateTimelines: Array<IncidentStateTimeline> =
|
||||
[];
|
||||
console.log("HERE");
|
||||
console.log('HERE');
|
||||
if (incidentsOnStausPage.length > 0) {
|
||||
incidentStateTimelines =
|
||||
await IncidentStateTimelineService.findBy({
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
import StatusPageSubscriber from 'Model/Models/StatusPageSubscriber';
|
||||
import StatusPageSubscriberService, {
|
||||
Service as StatusPageSubscriberServiceType,
|
||||
@@ -19,14 +18,15 @@ export default class StatusPageSubscriberAPI extends BaseAPI<
|
||||
super(StatusPageSubscriber, StatusPageSubscriberService);
|
||||
|
||||
this.router.get(
|
||||
`/${new this.entityType().getCrudApiPath()?.toString()}/unsubscribe/:id`,
|
||||
`/${new this.entityType()
|
||||
.getCrudApiPath()
|
||||
?.toString()}/unsubscribe/:id`,
|
||||
async (
|
||||
req: ExpressRequest,
|
||||
res: ExpressResponse,
|
||||
next: NextFunction
|
||||
) => {
|
||||
try {
|
||||
|
||||
await this.service.updateOneBy({
|
||||
query: {
|
||||
_id: req.params['id'] as string,
|
||||
@@ -37,18 +37,18 @@ export default class StatusPageSubscriberAPI extends BaseAPI<
|
||||
props: {
|
||||
isRoot: true,
|
||||
ignoreHooks: true,
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
return Response.sendHtmlResponse(req, res, '<html><body><p> You have been unsubscribed.</p><body><html>');
|
||||
return Response.sendHtmlResponse(
|
||||
req,
|
||||
res,
|
||||
'<html><body><p> You have been unsubscribed.</p><body><html>'
|
||||
);
|
||||
} catch (err) {
|
||||
next(err);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,4 +147,4 @@ export const SubscriptionPlans: Array<SubscriptionPlan> =
|
||||
SubscriptionPlan.getSubscriptionPlans();
|
||||
|
||||
export const AnalyticsKey: string = process.env['ANALYTICS_KEY'] || '';
|
||||
export const AnalyticsHost: string = process.env['ANALYTICS_HOST'] || '';
|
||||
export const AnalyticsHost: string = process.env['ANALYTICS_HOST'] || '';
|
||||
|
||||
@@ -25,6 +25,7 @@ export default class Database {
|
||||
username: DatabaseUsername,
|
||||
password: DatabasePassword,
|
||||
database: DatabaseName,
|
||||
migrationsTableName: 'migrations',
|
||||
entities: Entities,
|
||||
//logging: 'all',
|
||||
synchronize:
|
||||
|
||||
@@ -20,9 +20,8 @@ export class Service extends DatabaseService<Model> {
|
||||
protected override async onBeforeCreate(
|
||||
data: CreateBy<Model>
|
||||
): Promise<OnCreate<Model>> {
|
||||
|
||||
if (!data.data.statusPageId) {
|
||||
throw new BadDataException("Status Page ID is required.")
|
||||
throw new BadDataException('Status Page ID is required.');
|
||||
}
|
||||
|
||||
const statuspage = await StatusPageService.findOneById({
|
||||
@@ -31,33 +30,33 @@ export class Service extends DatabaseService<Model> {
|
||||
projectId: true,
|
||||
pageTitle: true,
|
||||
name: true,
|
||||
isPublicStatusPage: true
|
||||
isPublicStatusPage: true,
|
||||
},
|
||||
props: {
|
||||
isRoot: true,
|
||||
ignoreHooks: true,
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
if (!statuspage || !statuspage.projectId) {
|
||||
throw new BadDataException("Status Page not found");
|
||||
throw new BadDataException('Status Page not found');
|
||||
}
|
||||
|
||||
data.data.projectId = statuspage.projectId;
|
||||
|
||||
return { createBy: data, carryForward: statuspage };
|
||||
|
||||
}
|
||||
|
||||
|
||||
protected override async onCreateSuccess(
|
||||
onCreate: OnCreate<Model>,
|
||||
createdItem: Model
|
||||
): Promise<Model> {
|
||||
|
||||
if (createdItem.statusPageId && createdItem.subscriberEmail && createdItem._id) {
|
||||
// Call mail service and send an email.
|
||||
|
||||
if (
|
||||
createdItem.statusPageId &&
|
||||
createdItem.subscriberEmail &&
|
||||
createdItem._id
|
||||
) {
|
||||
// Call mail service and send an email.
|
||||
|
||||
// get status page domain for this status page.
|
||||
// if the domain is not found, use the internal sttaus page preview link.
|
||||
@@ -65,28 +64,38 @@ export class Service extends DatabaseService<Model> {
|
||||
const domains = await StatusPageDomainService.findBy({
|
||||
query: {
|
||||
statusPageId: createdItem.statusPageId,
|
||||
isSslProvisioned: true
|
||||
isSslProvisioned: true,
|
||||
},
|
||||
select: {
|
||||
fullDomain: true
|
||||
fullDomain: true,
|
||||
},
|
||||
skip: 0,
|
||||
limit: LIMIT_PER_PROJECT,
|
||||
props: {
|
||||
isRoot: true,
|
||||
ignoreHooks: true,
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
let statusPageURL: string = domains.map((d) => d.fullDomain).join(", ");
|
||||
let statusPageURL: string = domains
|
||||
.map((d) => {
|
||||
return d.fullDomain;
|
||||
})
|
||||
.join(', ');
|
||||
|
||||
if (domains.length === 0) {
|
||||
// 'https://local.oneuptime.com/status-page/40092fb5-cc33-4995-b532-b4e49c441c98'
|
||||
statusPageURL = new URL(HttpProtocol, Domain).addRoute("/status-page/" + createdItem.statusPageId.toString()).toString();
|
||||
statusPageURL = new URL(HttpProtocol, Domain)
|
||||
.addRoute(
|
||||
'/status-page/' + createdItem.statusPageId.toString()
|
||||
)
|
||||
.toString();
|
||||
}
|
||||
|
||||
const statusPageName: string = onCreate.carryForward.pageTitle || onCreate.carryForward.name || 'Status Page';
|
||||
const statusPageName: string =
|
||||
onCreate.carryForward.pageTitle ||
|
||||
onCreate.carryForward.name ||
|
||||
'Status Page';
|
||||
|
||||
MailService.sendMail({
|
||||
toEmail: createdItem.subscriberEmail,
|
||||
@@ -94,8 +103,14 @@ export class Service extends DatabaseService<Model> {
|
||||
vars: {
|
||||
statusPageName: statusPageName,
|
||||
statusPageUrl: statusPageURL,
|
||||
isPublicStatusPage: onCreate.carryForward.isPublicStatusPage,
|
||||
unsubscribeUrl: new URL(HttpProtocol, Domain).addRoute("/api/status-page-subscriber/unsubscribe/" + createdItem._id.toString()).toString()
|
||||
isPublicStatusPage:
|
||||
onCreate.carryForward.isPublicStatusPage,
|
||||
unsubscribeUrl: new URL(HttpProtocol, Domain)
|
||||
.addRoute(
|
||||
'/api/status-page-subscriber/unsubscribe/' +
|
||||
createdItem._id.toString()
|
||||
)
|
||||
.toString(),
|
||||
},
|
||||
subject: 'You have been subscribed to ' + statusPageName,
|
||||
}).catch((err: Error) => {
|
||||
|
||||
@@ -264,7 +264,6 @@ export default class Response {
|
||||
this.logResponse(req, res, { text: text as string });
|
||||
}
|
||||
|
||||
|
||||
public static sendHtmlResponse(
|
||||
req: ExpressRequest,
|
||||
res: ExpressResponse,
|
||||
@@ -281,7 +280,7 @@ export default class Response {
|
||||
oneUptimeResponse.set('Pod-Id', process.env['POD_NAME']);
|
||||
|
||||
oneUptimeResponse.logBody = { html: html as string };
|
||||
oneUptimeResponse.writeHead(200, { 'Content-Type':'text/html'});
|
||||
oneUptimeResponse.writeHead(200, { 'Content-Type': 'text/html' });
|
||||
oneUptimeResponse.end(html);
|
||||
this.logResponse(req, res, { html: html as string });
|
||||
}
|
||||
|
||||
@@ -66,7 +66,6 @@ const Footer: FunctionComponent<ComponentProps> = (
|
||||
props.links.filter((link: FooterLink) => {
|
||||
return !link.showOnRightIfNoCopyright;
|
||||
}).length > 0 && (
|
||||
|
||||
<p>
|
||||
{props.links &&
|
||||
props.links
|
||||
@@ -101,7 +100,6 @@ const Footer: FunctionComponent<ComponentProps> = (
|
||||
}
|
||||
)}
|
||||
</p>
|
||||
|
||||
)}
|
||||
</div>
|
||||
{props.links &&
|
||||
|
||||
@@ -9,7 +9,8 @@ export const env: Function = (key: string): string => {
|
||||
return process.env[key] || '';
|
||||
};
|
||||
|
||||
export const HTTP_PROTOCOL: Protocol = env('HTTP_PROTOCOL') === "http" ? Protocol.HTTP : Protocol.HTTPS;
|
||||
export const HTTP_PROTOCOL: Protocol =
|
||||
env('HTTP_PROTOCOL') === 'http' ? Protocol.HTTP : Protocol.HTTPS;
|
||||
|
||||
export const DOMAIN: string = env('DOMAIN') || '';
|
||||
|
||||
@@ -41,46 +42,32 @@ export const ACCOUNTS_ROUTE: Route = new Route(env('ACCOUNTS_ROUTE'));
|
||||
export const HOME_ROUTE: Route = new Route(env('HOME_ROUTE'));
|
||||
|
||||
export const DASHBOARD_API_HOSTNAME: Hostname = Hostname.fromString(
|
||||
env('DOMAIN')
|
||||
env('DOMAIN')
|
||||
);
|
||||
|
||||
export const IDENTITY_HOSTNAME: Hostname = Hostname.fromString(
|
||||
env('DOMAIN')
|
||||
);
|
||||
export const IDENTITY_HOSTNAME: Hostname = Hostname.fromString(env('DOMAIN'));
|
||||
|
||||
export const DASHBOARD_HOSTNAME: Hostname = Hostname.fromString(
|
||||
env('DOMAIN')
|
||||
);
|
||||
export const DASHBOARD_HOSTNAME: Hostname = Hostname.fromString(env('DOMAIN'));
|
||||
|
||||
export const INTEGRATION_HOSTNAME: Hostname = Hostname.fromString(
|
||||
env('DOMAIN')
|
||||
env('DOMAIN')
|
||||
);
|
||||
|
||||
export const STATUS_PAGE_HOSTNAME: Hostname = Hostname.fromString(
|
||||
env('DOMAIN')
|
||||
env('DOMAIN')
|
||||
);
|
||||
|
||||
export const HELM_HOSTNAME: Hostname = Hostname.fromString(
|
||||
env('DOMAIN')
|
||||
);
|
||||
export const HELM_HOSTNAME: Hostname = Hostname.fromString(env('DOMAIN'));
|
||||
|
||||
export const API_DOCS_HOSTNAME: Hostname = Hostname.fromString(
|
||||
env('DOMAIN')
|
||||
);
|
||||
export const API_DOCS_HOSTNAME: Hostname = Hostname.fromString(env('DOMAIN'));
|
||||
|
||||
export const ADMIN_DASHBOARD_HOSTNAME: Hostname = Hostname.fromString(
|
||||
env('DOMAIN')
|
||||
);
|
||||
export const ACCOUNTS_HOSTNAME: Hostname = Hostname.fromString(
|
||||
env('DOMAIN')
|
||||
);
|
||||
export const HOME_HOSTNAME: Hostname = Hostname.fromString(
|
||||
env('DOMAIN')
|
||||
env('DOMAIN')
|
||||
);
|
||||
export const ACCOUNTS_HOSTNAME: Hostname = Hostname.fromString(env('DOMAIN'));
|
||||
export const HOME_HOSTNAME: Hostname = Hostname.fromString(env('DOMAIN'));
|
||||
|
||||
export const FILE_HOSTNAME: Hostname = Hostname.fromString(
|
||||
env('DOMAIN')
|
||||
);
|
||||
export const FILE_HOSTNAME: Hostname = Hostname.fromString(env('DOMAIN'));
|
||||
|
||||
export const DASHBOARD_API_URL: URL = new URL(
|
||||
HTTP_PROTOCOL,
|
||||
@@ -141,4 +128,4 @@ export const StatusPageCNameRecord: string =
|
||||
env('STATUS_PAGE_CNAME_RECORD') || '';
|
||||
|
||||
export const AnalyticsKey: string = env('ANALYTICS_KEY') || '';
|
||||
export const AnalyticsHost: string = env('ANALYTICS_HOST');
|
||||
export const AnalyticsHost: string = env('ANALYTICS_HOST');
|
||||
|
||||
@@ -32,27 +32,26 @@ const DashboardProjectPicker: FunctionComponent<ComponentProps> = (
|
||||
);
|
||||
|
||||
const getFooter = (): ReactElement => {
|
||||
|
||||
if (!BILLING_ENABLED) {
|
||||
return <></>;
|
||||
}
|
||||
|
||||
return (<div
|
||||
className="show-as-link"
|
||||
onClick={() => {
|
||||
setIsSubscriptionPlanYearly(
|
||||
!isSubsriptionPlanYearly
|
||||
);
|
||||
refreshFields();
|
||||
}}
|
||||
>
|
||||
{isSubsriptionPlanYearly ? (
|
||||
<span>Switch to monthly pricing?</span>
|
||||
) : (
|
||||
<span> Switch to yearly pricing?</span>
|
||||
)}
|
||||
</div>);
|
||||
}
|
||||
return (
|
||||
<div
|
||||
className="show-as-link"
|
||||
onClick={() => {
|
||||
setIsSubscriptionPlanYearly(!isSubsriptionPlanYearly);
|
||||
refreshFields();
|
||||
}}
|
||||
>
|
||||
{isSubsriptionPlanYearly ? (
|
||||
<span>Switch to monthly pricing?</span>
|
||||
) : (
|
||||
<span> Switch to yearly pricing?</span>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const [isSubsriptionPlanYearly, setIsSubscriptionPlanYearly] =
|
||||
useState<boolean>(true);
|
||||
@@ -238,9 +237,7 @@ const DashboardProjectPicker: FunctionComponent<ComponentProps> = (
|
||||
fields: [...fields],
|
||||
formType: FormType.Create,
|
||||
}}
|
||||
footer={
|
||||
getFooter()
|
||||
}
|
||||
footer={getFooter()}
|
||||
/>
|
||||
) : (
|
||||
<></>
|
||||
|
||||
@@ -131,27 +131,10 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
getElement: (item: JSONObject): ReactElement => {
|
||||
if (item['isUnsubscribed']) {
|
||||
return (
|
||||
<Pill
|
||||
color={
|
||||
Red
|
||||
}
|
||||
text={
|
||||
"Unsubscribed"
|
||||
}
|
||||
/>
|
||||
);
|
||||
} else {
|
||||
return (
|
||||
<Pill
|
||||
color={
|
||||
Green
|
||||
}
|
||||
text={
|
||||
"Subscribed"
|
||||
}
|
||||
/>
|
||||
<Pill color={Red} text={'Unsubscribed'} />
|
||||
);
|
||||
}
|
||||
return <Pill color={Green} text={'Subscribed'} />;
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -30,7 +30,6 @@ import StatusPagePrivateUserService, {
|
||||
Service as StatusPagePrivateUserServiceType,
|
||||
} from 'CommonServer/Services/StatusPagePrivateUserService';
|
||||
|
||||
|
||||
import StatusPageFooterLink from 'Model/Models/StatusPageFooterLink';
|
||||
import StatusPageFooterLinkService, {
|
||||
Service as StatusPageFooterLinkServiceType,
|
||||
@@ -287,7 +286,6 @@ app.use(
|
||||
).getRouter()
|
||||
);
|
||||
|
||||
|
||||
app.use(
|
||||
new BaseAPI<StatusPagePrivateUser, StatusPagePrivateUserServiceType>(
|
||||
StatusPagePrivateUser,
|
||||
|
||||
@@ -24,7 +24,11 @@ import CanAccessIfCanReadOn from 'Common/Types/Database/CanAccessIfCanReadOn';
|
||||
@CanAccessIfCanReadOn('statusPage')
|
||||
@TenantColumn('projectId')
|
||||
@TableAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageSubscriber, Permission.Public],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageSubscriber,
|
||||
Permission.Public,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageSubscriber],
|
||||
delete: [Permission.ProjectOwner, Permission.CanDeleteStatusPageSubscriber],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditStatusPageSubscriber],
|
||||
@@ -132,7 +136,7 @@ export default class StatusPageSubscriber extends BaseModel {
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageSubscriber,
|
||||
Permission.Public
|
||||
Permission.Public,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageSubscriber],
|
||||
update: [
|
||||
@@ -153,7 +157,7 @@ export default class StatusPageSubscriber extends BaseModel {
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageSubscriber,
|
||||
Permission.Public
|
||||
Permission.Public,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageSubscriber],
|
||||
update: [
|
||||
@@ -174,7 +178,7 @@ export default class StatusPageSubscriber extends BaseModel {
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageSubscriber,
|
||||
Permission.Public
|
||||
Permission.Public,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageSubscriber],
|
||||
update: [
|
||||
@@ -257,7 +261,6 @@ export default class StatusPageSubscriber extends BaseModel {
|
||||
@JoinColumn({ name: 'deletedByUserId' })
|
||||
public deletedByUser?: User = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [],
|
||||
read: [Permission.CurrentUser],
|
||||
|
||||
@@ -14,9 +14,8 @@ export interface ComponentProps {
|
||||
const StatusPageHeader: FunctionComponent<ComponentProps> = (
|
||||
props: ComponentProps
|
||||
): ReactElement => {
|
||||
|
||||
if (!props.banner && !props.logo && props.links.length === 0) {
|
||||
return <></>
|
||||
return <></>;
|
||||
}
|
||||
|
||||
return (
|
||||
|
||||
@@ -49,22 +49,21 @@ const DashboardMasterPage: FunctionComponent<ComponentProps> = (
|
||||
);
|
||||
if (id) {
|
||||
return new ObjectID(id);
|
||||
} else {
|
||||
// get status page id by hostname.
|
||||
const response: HTTPResponse<JSONObject> =
|
||||
await BaseAPI.post<JSONObject>(
|
||||
URL.fromString(DASHBOARD_API_URL.toString()).addRoute(
|
||||
`/status-page/domain`
|
||||
),
|
||||
{
|
||||
domain: Navigation.getHostname().toString()
|
||||
},
|
||||
{}
|
||||
);
|
||||
}
|
||||
// get status page id by hostname.
|
||||
const response: HTTPResponse<JSONObject> =
|
||||
await BaseAPI.post<JSONObject>(
|
||||
URL.fromString(DASHBOARD_API_URL.toString()).addRoute(
|
||||
`/status-page/domain`
|
||||
),
|
||||
{
|
||||
domain: Navigation.getHostname().toString(),
|
||||
},
|
||||
{}
|
||||
);
|
||||
|
||||
if (response.data && response.data['statusPageId']) {
|
||||
return new ObjectID(response.data['statusPageId'] as string);
|
||||
}
|
||||
if (response.data && response.data['statusPageId']) {
|
||||
return new ObjectID(response.data['statusPageId'] as string);
|
||||
}
|
||||
|
||||
throw new BadDataException('Status Page ID not found');
|
||||
|
||||
@@ -575,12 +575,12 @@ const Overview: FunctionComponent<PageComponentProps> = (
|
||||
eventViewRoute={RouteUtil.populateRouteParams(
|
||||
props.isPreviewPage
|
||||
? (RouteMap[
|
||||
PageMap
|
||||
.PREVIEW_INCIDENT_DETAIL
|
||||
] as Route)
|
||||
PageMap
|
||||
.PREVIEW_INCIDENT_DETAIL
|
||||
] as Route)
|
||||
: (RouteMap[
|
||||
PageMap.INCIDENT_DETAIL
|
||||
] as Route),
|
||||
PageMap.INCIDENT_DETAIL
|
||||
] as Route),
|
||||
incidentGroup.incident.id!
|
||||
)}
|
||||
/>
|
||||
@@ -621,12 +621,12 @@ const Overview: FunctionComponent<PageComponentProps> = (
|
||||
eventViewRoute={RouteUtil.populateRouteParams(
|
||||
props.isPreviewPage
|
||||
? (RouteMap[
|
||||
PageMap
|
||||
.PREVIEW_SCHEDULED_EVENT_DETAIL
|
||||
] as Route)
|
||||
PageMap
|
||||
.PREVIEW_SCHEDULED_EVENT_DETAIL
|
||||
] as Route)
|
||||
: (RouteMap[
|
||||
PageMap.SCHEDULED_EVENT_DETAIL
|
||||
] as Route),
|
||||
PageMap.SCHEDULED_EVENT_DETAIL
|
||||
] as Route),
|
||||
scheduledEventGroup.scheduledMaintenance
|
||||
.id!
|
||||
)}
|
||||
@@ -638,10 +638,11 @@ const Overview: FunctionComponent<PageComponentProps> = (
|
||||
<div>
|
||||
{currentStatus && statusPageResources.length > 0 && (
|
||||
<Alert
|
||||
title={`${currentStatus.isOperationalState
|
||||
title={`${
|
||||
currentStatus.isOperationalState
|
||||
? `All`
|
||||
: 'Some'
|
||||
} Resources are ${currentStatus.name}`}
|
||||
} Resources are ${currentStatus.name}`}
|
||||
color={currentStatus.color}
|
||||
doNotShowIcon={true}
|
||||
size={AlertSize.Large}
|
||||
@@ -649,64 +650,75 @@ const Overview: FunctionComponent<PageComponentProps> = (
|
||||
)}
|
||||
</div>
|
||||
|
||||
{statusPageResources.length > 0 && <div>
|
||||
<AccordianGroup>
|
||||
{statusPageResources.filter(
|
||||
(resources: StatusPageResource) => {
|
||||
return !resources.statusPageGroupId;
|
||||
}
|
||||
).length > 0 ? (
|
||||
<Accordian
|
||||
key={Math.random()}
|
||||
title={undefined}
|
||||
isLastElement={resourceGroups.length === 0}
|
||||
>
|
||||
{getMonitorOverviewListInGroup(null)}
|
||||
</Accordian>
|
||||
) : (
|
||||
<></>
|
||||
)}
|
||||
<div
|
||||
key={Math.random()}
|
||||
style={{
|
||||
padding: '0px',
|
||||
}}
|
||||
>
|
||||
{resourceGroups.length > 0 &&
|
||||
resourceGroups.map(
|
||||
(
|
||||
resourceGroup: StatusPageGroup,
|
||||
i: number
|
||||
) => {
|
||||
return (
|
||||
<Accordian
|
||||
key={i}
|
||||
rightElement={getRightAccordianElement(
|
||||
resourceGroup
|
||||
)}
|
||||
isInitiallyExpanded={
|
||||
resourceGroup.isExpandedByDefault
|
||||
}
|
||||
isLastElement={
|
||||
resourceGroups.length -
|
||||
1 ===
|
||||
i
|
||||
}
|
||||
title={resourceGroup.name!}
|
||||
>
|
||||
{getMonitorOverviewListInGroup(
|
||||
resourceGroup
|
||||
)}
|
||||
</Accordian>
|
||||
);
|
||||
{statusPageResources.length > 0 && (
|
||||
<div>
|
||||
<AccordianGroup>
|
||||
{statusPageResources.filter(
|
||||
(resources: StatusPageResource) => {
|
||||
return !resources.statusPageGroupId;
|
||||
}
|
||||
).length > 0 ? (
|
||||
<Accordian
|
||||
key={Math.random()}
|
||||
title={undefined}
|
||||
isLastElement={
|
||||
resourceGroups.length === 0
|
||||
}
|
||||
)}
|
||||
</div>
|
||||
</AccordianGroup>
|
||||
</div>}
|
||||
|
||||
{statusPageResources.length === 0 && <p> No resources added to this Status Page, please add some resources from OneUptime dashboard.</p>}
|
||||
>
|
||||
{getMonitorOverviewListInGroup(null)}
|
||||
</Accordian>
|
||||
) : (
|
||||
<></>
|
||||
)}
|
||||
<div
|
||||
key={Math.random()}
|
||||
style={{
|
||||
padding: '0px',
|
||||
}}
|
||||
>
|
||||
{resourceGroups.length > 0 &&
|
||||
resourceGroups.map(
|
||||
(
|
||||
resourceGroup: StatusPageGroup,
|
||||
i: number
|
||||
) => {
|
||||
return (
|
||||
<Accordian
|
||||
key={i}
|
||||
rightElement={getRightAccordianElement(
|
||||
resourceGroup
|
||||
)}
|
||||
isInitiallyExpanded={
|
||||
resourceGroup.isExpandedByDefault
|
||||
}
|
||||
isLastElement={
|
||||
resourceGroups.length -
|
||||
1 ===
|
||||
i
|
||||
}
|
||||
title={
|
||||
resourceGroup.name!
|
||||
}
|
||||
>
|
||||
{getMonitorOverviewListInGroup(
|
||||
resourceGroup
|
||||
)}
|
||||
</Accordian>
|
||||
);
|
||||
}
|
||||
)}
|
||||
</div>
|
||||
</AccordianGroup>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{statusPageResources.length === 0 && (
|
||||
<p>
|
||||
{' '}
|
||||
No resources added to this Status Page, please add
|
||||
some resources from OneUptime dashboard.
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
) : (
|
||||
<></>
|
||||
|
||||
@@ -16,10 +16,7 @@ const PageNotFound: FunctionComponent<PageComponentProps> = (
|
||||
|
||||
return (
|
||||
<Page>
|
||||
|
||||
<div
|
||||
className='justify-center'
|
||||
>
|
||||
<div className="justify-center">
|
||||
<div>
|
||||
<p>Subscribe.</p>
|
||||
|
||||
@@ -30,8 +27,6 @@ const PageNotFound: FunctionComponent<PageComponentProps> = (
|
||||
}}
|
||||
/> */}
|
||||
|
||||
|
||||
|
||||
{currentTab === 'Email' ? (
|
||||
<ModelForm<StatusPageSubscriber>
|
||||
modelType={StatusPageSubscriber}
|
||||
@@ -51,7 +46,9 @@ const PageNotFound: FunctionComponent<PageComponentProps> = (
|
||||
]}
|
||||
formType={FormType.Create}
|
||||
submitButtonText={'Subscribe'}
|
||||
onBeforeCreate={async (item: StatusPageSubscriber) => {
|
||||
onBeforeCreate={async (
|
||||
item: StatusPageSubscriber
|
||||
) => {
|
||||
const id: ObjectID = LocalStorage.getItem(
|
||||
'statusPageId'
|
||||
) as ObjectID;
|
||||
|
||||
@@ -365,25 +365,23 @@ RunCron(
|
||||
const key: string = JSON.parse(cert.blob || '{}').privateKeyPem;
|
||||
let crt: string = JSON.parse(certBlob.blob || '{}').cert;
|
||||
|
||||
// Add chain to crt.
|
||||
console.log("Lookign for chain");
|
||||
// Add chain to crt.
|
||||
console.log('Lookign for chain');
|
||||
console.log(JSON.parse(certBlob.blob || '{}'));
|
||||
|
||||
if (JSON.parse(certBlob.blob || '{}').chain) {
|
||||
console.log("Chain found");
|
||||
crt += '\n' +
|
||||
'\n' +
|
||||
JSON.parse(certBlob.blob || '{}').chain;
|
||||
console.log('Chain found');
|
||||
crt += '\n' + '\n' + JSON.parse(certBlob.blob || '{}').chain;
|
||||
}
|
||||
|
||||
// Write to disk.
|
||||
fs.writeFileSync(
|
||||
`/usr/src/Certs/StatusPageCerts/${cert.key}.crt`,
|
||||
crt,
|
||||
crt
|
||||
);
|
||||
fs.writeFileSync(
|
||||
`/usr/src/Certs/StatusPageCerts/${cert.key}.key`,
|
||||
key,
|
||||
key
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -452,7 +450,6 @@ const checkCnameValidation: Function = async (
|
||||
fulldomain: string,
|
||||
token: string
|
||||
): Promise<boolean> => {
|
||||
|
||||
try {
|
||||
const agent: https.Agent = new https.Agent({
|
||||
rejectUnauthorized: false,
|
||||
@@ -460,9 +457,9 @@ const checkCnameValidation: Function = async (
|
||||
|
||||
const result: AxiosResponse = await axios.get(
|
||||
'https://' +
|
||||
fulldomain +
|
||||
'/status-page-api/cname-verification/' +
|
||||
token,
|
||||
fulldomain +
|
||||
'/status-page-api/cname-verification/' +
|
||||
token,
|
||||
{ httpsAgent: agent }
|
||||
);
|
||||
|
||||
@@ -482,9 +479,9 @@ const isSslProvisioned: Function = async (
|
||||
try {
|
||||
const result: AxiosResponse = await axios.get(
|
||||
'https://' +
|
||||
fulldomain +
|
||||
'/status-page-api/cname-verification/' +
|
||||
token
|
||||
fulldomain +
|
||||
'/status-page-api/cname-verification/' +
|
||||
token
|
||||
);
|
||||
|
||||
if (result.status === 200) {
|
||||
|
||||
Reference in New Issue
Block a user