add ownership email columns

This commit is contained in:
Simon Larsen
2023-05-18 13:03:40 +01:00
parent 759ffe72c8
commit 435c8f083b
36 changed files with 687 additions and 7 deletions

View File

@@ -17,6 +17,20 @@ enum EmailTemplateType {
StatusPageWelcomeEmail = 'StatusPageWelcomeEmail.hbs',
SubscriberScheduledMaintenanceEventNoteCreated = 'SubscriberScheduledMaintenanceEventNoteCreated.hbs',
SMTPTest = 'SMTPTest.hbs',
MonitorOwnerCreated = 'MonitorOwnerCreated.hbs',
MonitorOwnerResourceCreated = 'MonitorOwnerResourceCreated.hbs',
MonitorOwnerStatusChanged = 'MonitorOwnerStatusChanged.hbs',
IncidentOwnerCreated = 'IncidentOwnerCreated.hbs',
IncidentOwnerStateChanged = 'IncidentOwnerStateChanged.hbs',
IncidentOwnerNotePosted = 'IncidentOwnerNotePosted.hbs',
IncidentOwnerResourceCreated = 'IncidentOwnerResourceCreated.hbs',
ScheduledMaintenanceOwnerNotePosted = 'ScheduledMaintenanceOwnerNotePosted.hbs',
ScheduledMaintenanceOwnerCreated = 'ScheduledMaintenanceOwnerCreated.hbs',
ScheduledMaintenanceOwnerStateChanged = 'ScheduledMaintenanceOwnerStateChanged.hbs',
ScheduledMaintenanceOwnerResourceCreated = 'ScheduledMaintenanceOwnerResourceCreated.hbs',
StatusPageOwnerResourceCreated = 'StatusPageOwnerResourceCreated.hbs',
StatusPageOwnerCreated = 'StatusPageOwnerCreated.hbs',
StatusPageOwnerAnnouncementPosted = 'StatusPageOwnerAnnouncementPosted.hbs',
}
export default EmailTemplateType;

View File

View File

View File

@@ -0,0 +1,6 @@
{{> TitleBlock title="Why am I receiving this email?"}}
{{#if isOwner}}
{{> InfoBlock info="You are receiving this email because you are the owner of this resource."}}
{{else}}
{{> InfoBlock info="You are receiving this email because no owners have been added to this resource and you are the owner of the project."}}
{{/if}}

View File

@@ -0,0 +1,29 @@
<table class="st-Copy st-Width st-Width--mobile" border="0" cellpadding="0" cellspacing="0"
width="600" style="min-width: 600px;">
<tbody>
<tr>
<td class="st-Spacer st-Spacer--gutter"
style="border: 0; margin:0; padding: 0; font-size: 1px; line-height: 1px; mso-line-height-rule: exactly;"
width="64">
<div class="st-Spacer st-Spacer--filler"></div>
</td>
<td class="st-Font st-Font--body"
style="border: 0; margin: 0; padding: 0; color: #000000 !important; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Ubuntu, sans-serif; font-size: 16px; line-height: 24px;">
<strong>{{{title}}}</strong>
</td>
<td class="st-Spacer st-Spacer--gutter"
style="border: 0; margin:0; padding: 0; font-size: 1px; line-height: 1px; mso-line-height-rule: exactly;"
width="64">
<div class="st-Spacer st-Spacer--filler"></div>
</td>
</tr>
<tr>
<td class="st-Spacer st-Spacer--stacked" colspan="3" height="12"
style="border: 0; margin: 0; padding: 0; font-size: 1px; line-height: 1px; mso-line-height-rule: exactly;">
<div class="st-Spacer st-Spacer--filler"></div>
</td>
</tr>
</tbody>
</table>

View File

@@ -677,7 +677,12 @@ export default class Incident extends BaseModel {
@ColumnAccessControl({
create: [],
read: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadProjectIncident,
],
update: [],
})
@TableColumn({
@@ -724,4 +729,34 @@ export default class Incident extends BaseModel {
nullable: true,
})
public customFields?: JSONObject = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanCreateProjectIncident,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadProjectIncident,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified Of Resource Creation?',
description: 'Are owners notified of when this resource is created?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotifiedOfResourceCreation?: ObjectID = undefined;
}

View File

@@ -340,4 +340,34 @@ export default class IncidentInternalNote extends BaseModel {
unique: false,
})
public note?: string = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanCreateIncidentInternalNote,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadIncidentInternalNote,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of this resource ownership?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -376,4 +376,33 @@ export default class IncidentOwnerTeam extends AccessControlModel {
transformer: ObjectID.getDatabaseTransformer(),
})
public deletedByUserId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.CanCreateIncidentOwnerTeam,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadIncidentOwnerTeam,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of this resource ownership?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -375,4 +375,33 @@ export default class IncidentOwnerUser extends AccessControlModel {
transformer: ObjectID.getDatabaseTransformer(),
})
public deletedByUserId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.CanCreateIncidentOwnerUser,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadIncidentOwnerUser,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of this resource ownership?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -343,7 +343,12 @@ export default class IncidentPublicNote extends BaseModel {
@ColumnAccessControl({
create: [],
read: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadIncidentPublicNote,
],
update: [],
})
@TableColumn({
@@ -357,4 +362,34 @@ export default class IncidentPublicNote extends BaseModel {
default: false,
})
public isStatusPageSubscribersNotifiedOnNoteCreated?: boolean = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanCreateIncidentPublicNote,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadIncidentPublicNote,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of this resource ownership?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -389,7 +389,12 @@ export default class IncidentStateTimeline extends BaseModel {
@ColumnAccessControl({
create: [],
read: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadIncidentStateTimeline,
],
update: [],
})
@TableColumn({
@@ -404,4 +409,34 @@ export default class IncidentStateTimeline extends BaseModel {
default: false,
})
public isStatusPageSubscribersNotified?: boolean = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanCreateIncidentStateTimeline,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadIncidentStateTimeline,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of state change?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -608,4 +608,34 @@ export default class Monitor extends BaseModel {
nullable: true,
})
public customFields?: JSONObject = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanCreateProjectMonitor,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadProjectMonitor,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified Of Resource Creation?',
description: 'Are owners notified of when this resource is created?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotifiedOfResourceCreation?: ObjectID = undefined;
}

View File

@@ -376,4 +376,33 @@ export default class MonitorOwnerTeam extends AccessControlModel {
transformer: ObjectID.getDatabaseTransformer(),
})
public deletedByUserId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.CanCreateMonitorOwnerTeam,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadMonitorOwnerTeam,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of this resource ownership?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -375,4 +375,33 @@ export default class MonitorOwnerUser extends AccessControlModel {
transformer: ObjectID.getDatabaseTransformer(),
})
public deletedByUserId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.CanCreateMonitorOwnerUser,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadMonitorOwnerUser,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of this resource ownership?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -390,4 +390,34 @@ export default class MonitorStatusTimeline extends BaseModel {
transformer: ObjectID.getDatabaseTransformer(),
})
public monitorStatusId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanCreateProjectMonitor,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadProjectMonitor,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of status change?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -713,7 +713,12 @@ export default class ScheduledMaintenance extends BaseModel {
@ColumnAccessControl({
create: [],
read: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadProjectScheduledMaintenance,
],
update: [],
})
@TableColumn({
@@ -760,4 +765,34 @@ export default class ScheduledMaintenance extends BaseModel {
nullable: true,
})
public customFields?: JSONObject = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanCreateProjectScheduledMaintenance,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadProjectScheduledMaintenance,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified Of Resource Creation?',
description: 'Are owners notified of when this resource is created?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotifiedOfResourceCreation?: ObjectID = undefined;
}

View File

@@ -340,4 +340,34 @@ export default class ScheduledMaintenanceInternalNote extends BaseModel {
unique: false,
})
public note?: string = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanCreateScheduledMaintenanceInternalNote,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadScheduledMaintenanceInternalNote,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of this resource ownership?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -377,4 +377,33 @@ export default class ScheduledMaintenanceOwnerTeam extends AccessControlModel {
transformer: ObjectID.getDatabaseTransformer(),
})
public deletedByUserId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.CanCreateScheduledMaintenanceOwnerTeam,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadScheduledMaintenanceOwnerTeam,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of this resource ownership?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -376,4 +376,33 @@ export default class ScheduledMaintenanceOwnerUser extends AccessControlModel {
transformer: ObjectID.getDatabaseTransformer(),
})
public deletedByUserId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.CanCreateScheduledMaintenanceOwnerUser,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadScheduledMaintenanceOwnerUser,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of this resource ownership?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -344,7 +344,12 @@ export default class ScheduledMaintenancePublicNote extends BaseModel {
@ColumnAccessControl({
create: [],
read: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadScheduledMaintenancePublicNote,
],
update: [],
})
@TableColumn({
@@ -358,4 +363,34 @@ export default class ScheduledMaintenancePublicNote extends BaseModel {
default: false,
})
public isStatusPageSubscribersNotifiedOnNoteCreated?: boolean = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanCreateScheduledMaintenancePublicNote,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadScheduledMaintenancePublicNote,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of this resource ownership?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -389,7 +389,12 @@ export default class ScheduledMaintenanceStateTimeline extends BaseModel {
@ColumnAccessControl({
create: [],
read: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadScheduledMaintenanceStateTimeline,
],
update: [],
})
@TableColumn({
@@ -404,4 +409,34 @@ export default class ScheduledMaintenanceStateTimeline extends BaseModel {
default: false,
})
public isStatusPageSubscribersNotified?: boolean = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanCreateScheduledMaintenanceStateTimeline,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadScheduledMaintenanceStateTimeline,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of state change?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -1064,4 +1064,34 @@ export default class StatusPage extends BaseModel {
transformer: ObjectID.getDatabaseTransformer(),
})
public smtpConfigId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanCreateProjectStatusPage,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadProjectStatusPage,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified Of Resource Creation?',
description: 'Are owners notified of when this resource is created?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotifiedOfResourceCreation?: ObjectID = undefined;
}

View File

@@ -414,7 +414,12 @@ export default class StatusPageAnnouncement extends BaseModel {
@ColumnAccessControl({
create: [],
read: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadStatusPageAnnouncement,
],
update: [],
})
@TableColumn({ isDefaultValueColumn: true, type: TableColumnType.Boolean })
@@ -423,4 +428,38 @@ export default class StatusPageAnnouncement extends BaseModel {
default: false,
})
public isStatusPageSubscribersNotified?: boolean = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanCreateStatusPageAnnouncement,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadStatusPageAnnouncement,
],
update: [
],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description:
'Are owners notified of this announcement?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -376,4 +376,33 @@ export default class StatusPageOwnerTeam extends AccessControlModel {
transformer: ObjectID.getDatabaseTransformer(),
})
public deletedByUserId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.CanCreateStatusPageOwnerTeam,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadStatusPageOwnerTeam,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of this resource ownership?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}

View File

@@ -375,4 +375,33 @@ export default class StatusPageOwnerUser extends AccessControlModel {
transformer: ObjectID.getDatabaseTransformer(),
})
public deletedByUserId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.CanCreateStatusPageOwnerUser,
],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CanReadStatusPageOwnerUser,
],
update: [],
})
@Index()
@TableColumn({
type: TableColumnType.Boolean,
required: true,
isDefaultValueColumn: true,
title: 'Are Owners Notified',
description: 'Are owners notified of this resource ownership?',
})
@Column({
type: ColumnType.Boolean,
nullable: false,
default: false,
})
public isOwnerNotified?: ObjectID = undefined;
}