diff --git a/assets/email/error.html b/assets/email/error.html deleted file mode 100644 index 8541e870..00000000 --- a/assets/email/error.html +++ /dev/null @@ -1,7 +0,0 @@ -

The following error occurred at {{ time }}:

- -

- Code: {{ code }}
- Message: {{ message }}
- Event ID: {{ eventId }}` -

diff --git a/assets/email/error.txt b/assets/email/error.txt deleted file mode 100644 index c46754f9..00000000 --- a/assets/email/error.txt +++ /dev/null @@ -1,5 +0,0 @@ -The following error occurred at {{ time }}: - -Code: {{ code }} -Message: {{ message }} -Event ID: {{ eventId }}` \ No newline at end of file diff --git a/assets/email/plain.html b/assets/email/plain.html new file mode 100644 index 00000000..4d9c1001 --- /dev/null +++ b/assets/email/plain.html @@ -0,0 +1,5 @@ +

+

+{{ message }}
+    
+

diff --git a/assets/email/plain.txt b/assets/email/plain.txt new file mode 100644 index 00000000..414c17f2 --- /dev/null +++ b/assets/email/plain.txt @@ -0,0 +1 @@ +{{ message }} diff --git a/packages/core/src/error.ts b/packages/core/src/error.ts index 7a1c720e..f163dffd 100644 --- a/packages/core/src/error.ts +++ b/packages/core/src/error.ts @@ -99,8 +99,10 @@ export class Err extends Error { } toString() { - return `Time: ${this.time.toISOString()}\nError Code: ${this.code}:\nError Message: ${ - this.message - }\nStack Trace:\n${this.originalError ? this.originalError.stack : this.stack}`; + return `Time: ${this.time.toISOString()} +Error Code: ${this.code} +Error Message: ${this.message}${this.originalError ? `\nOriginal Error Message: ${this.originalError.message}` : ""} +Stack Trace:\n${this.originalError ? this.originalError.stack : this.stack} +`; } } diff --git a/packages/core/src/messenger.ts b/packages/core/src/messenger.ts index dabc78ed..ff628754 100644 --- a/packages/core/src/messenger.ts +++ b/packages/core/src/messenger.ts @@ -60,8 +60,8 @@ export class JoinOrgInviteCompletedMessage extends Message<{ orgName: string; op } } -export class ErrorMessage extends Message<{ code: string; message: string; time: string; eventId: string }> { - template = "error"; +export class PlainMessage extends Message<{ message: string }> { + template = "plain"; get title() { return "Padloc Error Notification"; diff --git a/packages/core/src/server.ts b/packages/core/src/server.ts index 7c4ea431..547254bb 100644 --- a/packages/core/src/server.ts +++ b/packages/core/src/server.ts @@ -44,7 +44,7 @@ import { Org, OrgID, OrgMember, OrgMemberStatus, OrgRole, ScimSettings } from ". import { Invite } from "./invite"; import { ConfirmMembershipInviteMessage, - ErrorMessage, + PlainMessage, JoinOrgInviteAcceptedMessage, JoinOrgInviteCompletedMessage, JoinOrgInviteMessage, @@ -2078,8 +2078,6 @@ export class Server { } private async _handleError(error: Error, req: Request, res: Response, context: Context) { - console.error(error); - const e = error instanceof Err ? error @@ -2096,6 +2094,8 @@ export class Server { }; if (e.report) { + console.error(error); + const evt = this.log("error", context, { error: e.toRaw(), request: { @@ -2108,13 +2108,12 @@ export class Server { try { await this.messenger.send( this.config.reportErrors, - new ErrorMessage({ - time: e.time.toISOString(), - code: e.code, - message: `Endpoint: ${req.method}\nMessage: ${e.message}\nDevice Info:\n${ + new PlainMessage({ + message: `The following error occured at ${e.time.toISOString()}:\n\nEndpoint: ${ + req.method + }\nDevice Info:\n${ req.device && JSON.stringify(req.device?.toRaw(), null, 4) - }\nStack Trace:\n${e.stack}`, - eventId: evt.id, + }\n${e.toString()}${evt?.id ? `Event ID: ${evt.id}` : ""}`, }) ); } catch (e) {} diff --git a/packages/server/src/init.ts b/packages/server/src/init.ts index 11c62578..260b59a2 100644 --- a/packages/server/src/init.ts +++ b/packages/server/src/init.ts @@ -11,7 +11,7 @@ import { AuthServer, AuthType } from "@padloc/core/src/auth"; import { WebAuthnConfig, WebAuthnServer } from "./auth/webauthn"; import { SMTPSender } from "./email/smtp"; import { MongoDBStorage } from "./storage/mongodb"; -import { ConsoleMessenger, ErrorMessage } from "@padloc/core/src/messenger"; +import { ConsoleMessenger, PlainMessage } from "@padloc/core/src/messenger"; import { FSAttachmentStorage, FSAttachmentStorageConfig } from "./attachments/fs"; import { AttachmentStorageConfig, @@ -302,7 +302,7 @@ async function init(config: PadlocConfig) { try { await emailSender.send( config.server.reportErrors, - new ErrorMessage({ + new PlainMessage({ code: ErrorCode.UNKNOWN_ERROR, message: `${err.message}\n${err.stack}`, time: new Date().toISOString(),