From 9ac2ac2fcbe1e9da69e0608e161c341ff430c564 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 7 Jun 2024 11:34:09 -0500 Subject: [PATCH] feat(web): send test email button (#10011) * feat(web): test email button * openapi * UI button * Show notification * pr feedback * remove jobs * send email directly from repository and add feedback * avoid sending many emails * linter * pr feedback * lint * lint * lint --- docs/static/img/ios-app-store-badge.png | Bin 15634 -> 72110 bytes mobile/openapi/README.md | 1 + mobile/openapi/lib/api.dart | 1 + mobile/openapi/lib/api/notifications_api.dart | 57 ++++++++ open-api/immich-openapi-specs.json | 35 +++++ open-api/typescript-sdk/src/fetch-client.ts | 35 +++-- server/src/controllers/index.ts | 2 + .../controllers/notification.controller.ts | 19 +++ server/src/dtos/system-config.dto.ts | 2 +- server/src/emails/test.email.tsx | 134 ++++++++++++++++++ .../src/interfaces/notification.interface.ts | 10 ++ .../repositories/notification.repository.ts | 6 + server/src/services/notification.service.ts | 35 ++++- .../notification-settings.svelte | 57 +++++++- web/src/lib/i18n/en.json | 3 + 15 files changed, 380 insertions(+), 17 deletions(-) create mode 100644 mobile/openapi/lib/api/notifications_api.dart create mode 100644 server/src/controllers/notification.controller.ts create mode 100644 server/src/emails/test.email.tsx diff --git a/docs/static/img/ios-app-store-badge.png b/docs/static/img/ios-app-store-badge.png index df5df80eeec5a2b32babba84a41146f2ec0604cc..817c13af0d88f22b1983d9e2ace7034772b9c13c 100644 GIT binary patch literal 72110 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

SXJq} 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 S)$Y@cL9diF6e02!q5lU~zOkwR diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index 914d291e1e..a2acbc12f6 100644 --- a/mobile/openapi/README.md +++ b/mobile/openapi/README.md @@ -144,6 +144,7 @@ Class | Method | HTTP request | Description *MemoriesApi* | [**removeMemoryAssets**](doc//MemoriesApi.md#removememoryassets) | **DELETE** /memories/{id}/assets | *MemoriesApi* | [**searchMemories**](doc//MemoriesApi.md#searchmemories) | **GET** /memories | *MemoriesApi* | [**updateMemory**](doc//MemoriesApi.md#updatememory) | **PUT** /memories/{id} | +*NotificationsApi* | [**sendTestEmail**](doc//NotificationsApi.md#sendtestemail) | **POST** /notifications/test-email | *OAuthApi* | [**finishOAuth**](doc//OAuthApi.md#finishoauth) | **POST** /oauth/callback | *OAuthApi* | [**linkOAuthAccount**](doc//OAuthApi.md#linkoauthaccount) | **POST** /oauth/link | *OAuthApi* | [**redirectOAuthToMobile**](doc//OAuthApi.md#redirectoauthtomobile) | **GET** /oauth/mobile-redirect | diff --git a/mobile/openapi/lib/api.dart b/mobile/openapi/lib/api.dart index 4d7a4a533d..2591de491a 100644 --- a/mobile/openapi/lib/api.dart +++ b/mobile/openapi/lib/api.dart @@ -43,6 +43,7 @@ part 'api/jobs_api.dart'; part 'api/libraries_api.dart'; part 'api/map_api.dart'; part 'api/memories_api.dart'; +part 'api/notifications_api.dart'; part 'api/o_auth_api.dart'; part 'api/partners_api.dart'; part 'api/people_api.dart'; diff --git a/mobile/openapi/lib/api/notifications_api.dart b/mobile/openapi/lib/api/notifications_api.dart new file mode 100644 index 0000000000..a3506b9bc1 --- /dev/null +++ b/mobile/openapi/lib/api/notifications_api.dart @@ -0,0 +1,57 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.18 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +part of openapi.api; + + +class NotificationsApi { + NotificationsApi([ApiClient? apiClient]) : apiClient = apiClient ?? defaultApiClient; + + final ApiClient apiClient; + + /// Performs an HTTP 'POST /notifications/test-email' operation and returns the [Response]. + /// Parameters: + /// + /// * [SystemConfigSmtpDto] systemConfigSmtpDto (required): + Future sendTestEmailWithHttpInfo(SystemConfigSmtpDto systemConfigSmtpDto,) async { + // ignore: prefer_const_declarations + final path = r'/notifications/test-email'; + + // ignore: prefer_final_locals + Object? postBody = systemConfigSmtpDto; + + final queryParams = []; + final headerParams = {}; + final formParams = {}; + + const contentTypes = ['application/json']; + + + return apiClient.invokeAPI( + path, + 'POST', + queryParams, + postBody, + headerParams, + formParams, + contentTypes.isEmpty ? null : contentTypes.first, + ); + } + + /// Parameters: + /// + /// * [SystemConfigSmtpDto] systemConfigSmtpDto (required): + Future sendTestEmail(SystemConfigSmtpDto systemConfigSmtpDto,) async { + final response = await sendTestEmailWithHttpInfo(systemConfigSmtpDto,); + if (response.statusCode >= HttpStatus.badRequest) { + throw ApiException(response.statusCode, await _decodeBodyBytes(response)); + } + } +} diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index c53f30527c..ed3f1ce403 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -3466,6 +3466,41 @@ ] } }, + "/notifications/test-email": { + "post": { + "operationId": "sendTestEmail", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemConfigSmtpDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "security": [ + { + "bearer": [] + }, + { + "cookie": [] + }, + { + "api_key": [] + } + ], + "tags": [ + "Notifications" + ] + } + }, "/oauth/authorize": { "post": { "operationId": "startOAuth", diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index d294110be1..3929afc0bb 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -554,6 +554,19 @@ export type MemoryUpdateDto = { memoryAt?: string; seenAt?: string; }; +export type SystemConfigSmtpTransportDto = { + host: string; + ignoreCert: boolean; + password: string; + port: number; + username: string; +}; +export type SystemConfigSmtpDto = { + enabled: boolean; + "from": string; + replyTo: string; + transport: SystemConfigSmtpTransportDto; +}; export type OAuthConfigDto = { redirectUri: string; }; @@ -990,19 +1003,6 @@ export type SystemConfigMapDto = { export type SystemConfigNewVersionCheckDto = { enabled: boolean; }; -export type SystemConfigSmtpTransportDto = { - host: string; - ignoreCert: boolean; - password: string; - port: number; - username: string; -}; -export type SystemConfigSmtpDto = { - enabled: boolean; - "from": string; - replyTo: string; - transport: SystemConfigSmtpTransportDto; -}; export type SystemConfigNotificationsDto = { smtp: SystemConfigSmtpDto; }; @@ -2022,6 +2022,15 @@ export function addMemoryAssets({ id, bulkIdsDto }: { body: bulkIdsDto }))); } +export function sendTestEmail({ systemConfigSmtpDto }: { + systemConfigSmtpDto: SystemConfigSmtpDto; +}, opts?: Oazapfts.RequestOpts) { + return oazapfts.ok(oazapfts.fetchText("/notifications/test-email", oazapfts.json({ + ...opts, + method: "POST", + body: systemConfigSmtpDto + }))); +} export function startOAuth({ oAuthConfigDto }: { oAuthConfigDto: OAuthConfigDto; }, opts?: Oazapfts.RequestOpts) { diff --git a/server/src/controllers/index.ts b/server/src/controllers/index.ts index 221e382cfe..ba52f9d7b9 100644 --- a/server/src/controllers/index.ts +++ b/server/src/controllers/index.ts @@ -14,6 +14,7 @@ import { JobController } from 'src/controllers/job.controller'; import { LibraryController } from 'src/controllers/library.controller'; import { MapController } from 'src/controllers/map.controller'; import { MemoryController } from 'src/controllers/memory.controller'; +import { NotificationController } from 'src/controllers/notification.controller'; import { OAuthController } from 'src/controllers/oauth.controller'; import { PartnerController } from 'src/controllers/partner.controller'; import { PersonController } from 'src/controllers/person.controller'; @@ -46,6 +47,7 @@ export const controllers = [ LibraryController, MapController, MemoryController, + NotificationController, OAuthController, PartnerController, PersonController, diff --git a/server/src/controllers/notification.controller.ts b/server/src/controllers/notification.controller.ts new file mode 100644 index 0000000000..cc07022a93 --- /dev/null +++ b/server/src/controllers/notification.controller.ts @@ -0,0 +1,19 @@ +import { Body, Controller, HttpCode, Post } from '@nestjs/common'; +import { ApiTags } from '@nestjs/swagger'; +import { AuthDto } from 'src/dtos/auth.dto'; +import { SystemConfigSmtpDto } from 'src/dtos/system-config.dto'; +import { Auth, Authenticated } from 'src/middleware/auth.guard'; +import { NotificationService } from 'src/services/notification.service'; + +@ApiTags('Notifications') +@Controller('notifications') +export class NotificationController { + constructor(private service: NotificationService) {} + + @Post('test-email') + @HttpCode(200) + @Authenticated({ admin: true }) + sendTestEmail(@Auth() auth: AuthDto, @Body() dto: SystemConfigSmtpDto) { + return this.service.sendTestEmail(auth.user.id, dto); + } +} diff --git a/server/src/dtos/system-config.dto.ts b/server/src/dtos/system-config.dto.ts index b593c0edbf..33166215a0 100644 --- a/server/src/dtos/system-config.dto.ts +++ b/server/src/dtos/system-config.dto.ts @@ -394,7 +394,7 @@ class SystemConfigSmtpTransportDto { password!: string; } -class SystemConfigSmtpDto { +export class SystemConfigSmtpDto { @IsBoolean() enabled!: boolean; diff --git a/server/src/emails/test.email.tsx b/server/src/emails/test.email.tsx new file mode 100644 index 0000000000..d419cddf99 --- /dev/null +++ b/server/src/emails/test.email.tsx @@ -0,0 +1,134 @@ +import { + Body, + Button, + Column, + Container, + Head, + Hr, + Html, + Img, + Link, + Preview, + Row, + Section, + Text, +} from '@react-email/components'; +import * as CSS from 'csstype'; +import * as React from 'react'; +import { TestEmailProps } from 'src/interfaces/notification.interface'; + +export const TestEmail = ({ baseUrl, displayName }: TestEmailProps) => ( + + + This is a test email from Immich + + +

+ Immich + + + Hey {displayName}, this is the test email from your Immich Instance + + + + + {baseUrl} + + +
+ +
+ +
+ + + + Immich + + + Immich + + + +
+ + + Immich project is available under GNU AGPL v3 license. + + + + +); + +TestEmail.PreviewProps = { + baseUrl: 'https://demo.immich.app/auth/login', + displayName: 'Alan Turing', +} as TestEmailProps; + +export default TestEmail; + +const text = { + margin: '0 0 24px 0', + textAlign: 'left' as const, + fontSize: '18px', + lineHeight: '24px', +}; + +const button: CSS.Properties = { + backgroundColor: 'rgb(66, 80, 175)', + margin: '1em 0', + padding: '0.75em 3em', + color: '#fff', + fontSize: '1em', + fontWeight: 700, + lineHeight: 1.5, + textTransform: 'uppercase', + borderRadius: '9999px', +}; diff --git a/server/src/interfaces/notification.interface.ts b/server/src/interfaces/notification.interface.ts index d34173915c..c0ba4e209d 100644 --- a/server/src/interfaces/notification.interface.ts +++ b/server/src/interfaces/notification.interface.ts @@ -26,6 +26,8 @@ export type SmtpOptions = { }; export enum EmailTemplate { + TEST_EMAIL = 'test', + // AUTH WELCOME = 'welcome', RESET_PASSWORD = 'reset-password', @@ -39,6 +41,10 @@ interface BaseEmailProps { baseUrl: string; } +export interface TestEmailProps extends BaseEmailProps { + displayName: string; +} + export interface WelcomeEmailProps extends BaseEmailProps { displayName: string; username: string; @@ -61,6 +67,10 @@ export interface AlbumUpdateEmailProps extends BaseEmailProps { } export type EmailRenderRequest = + | { + template: EmailTemplate.TEST_EMAIL; + data: TestEmailProps; + } | { template: EmailTemplate.WELCOME; data: WelcomeEmailProps; diff --git a/server/src/repositories/notification.repository.ts b/server/src/repositories/notification.repository.ts index 13f9a46bad..ef6c8c2f39 100644 --- a/server/src/repositories/notification.repository.ts +++ b/server/src/repositories/notification.repository.ts @@ -4,6 +4,7 @@ import { createTransport } from 'nodemailer'; import React from 'react'; import { AlbumInviteEmail } from 'src/emails/album-invite.email'; import { AlbumUpdateEmail } from 'src/emails/album-update.email'; +import { TestEmail } from 'src/emails/test.email'; import { WelcomeEmail } from 'src/emails/welcome.email'; import { ILoggerRepository } from 'src/interfaces/logger.interface'; import { @@ -58,6 +59,10 @@ export class NotificationRepository implements INotificationRepository { private render({ template, data }: EmailRenderRequest): React.FunctionComponentElement { switch (template) { + case EmailTemplate.TEST_EMAIL: { + return React.createElement(TestEmail, data); + } + case EmailTemplate.WELCOME: { return React.createElement(WelcomeEmail, data); } @@ -84,6 +89,7 @@ export class NotificationRepository implements INotificationRepository { pass: options.password, } : undefined, + connectionTimeout: 5000, }); } } diff --git a/server/src/services/notification.service.ts b/server/src/services/notification.service.ts index 8efc6a6c33..dab9dd91b3 100644 --- a/server/src/services/notification.service.ts +++ b/server/src/services/notification.service.ts @@ -1,7 +1,8 @@ -import { Inject, Injectable } from '@nestjs/common'; +import { HttpException, HttpStatus, Inject, Injectable } from '@nestjs/common'; import { DEFAULT_EXTERNAL_DOMAIN } from 'src/constants'; import { SystemConfigCore } from 'src/cores/system-config.core'; import { OnServerEvent } from 'src/decorators'; +import { SystemConfigSmtpDto } from 'src/dtos/system-config.dto'; import { AlbumEntity } from 'src/entities/album.entity'; import { IAlbumRepository } from 'src/interfaces/album.interface'; import { IAssetRepository } from 'src/interfaces/asset.interface'; @@ -55,6 +56,38 @@ export class NotificationService { } } + async sendTestEmail(id: string, dto: SystemConfigSmtpDto) { + const user = await this.userRepository.get(id, { withDeleted: false }); + if (!user) { + throw new Error('User not found'); + } + + try { + await this.notificationRepository.verifySmtp(dto.transport); + } catch (error) { + throw new HttpException('Failed to verify SMTP configuration', HttpStatus.BAD_REQUEST, { cause: error }); + } + + const { server } = await this.configCore.getConfig(); + const { html, text } = this.notificationRepository.renderEmail({ + template: EmailTemplate.TEST_EMAIL, + data: { + baseUrl: server.externalDomain || DEFAULT_EXTERNAL_DOMAIN, + displayName: user.name, + }, + }); + + await this.notificationRepository.sendEmail({ + to: user.email, + subject: 'Test email from Immich', + html, + text, + from: dto.from, + replyTo: dto.replyTo || dto.from, + smtp: dto.transport, + }); + } + async handleUserSignup({ id, tempPassword }: INotifySignupJob) { const user = await this.userRepository.get(id, { withDeleted: false }); if (!user) { diff --git a/web/src/lib/components/admin-page/settings/notification-settings/notification-settings.svelte b/web/src/lib/components/admin-page/settings/notification-settings/notification-settings.svelte index d189262960..bf7e336e52 100644 --- a/web/src/lib/components/admin-page/settings/notification-settings/notification-settings.svelte +++ b/web/src/lib/components/admin-page/settings/notification-settings/notification-settings.svelte @@ -1,5 +1,5 @@
@@ -93,6 +137,15 @@ bind:value={config.notifications.smtp.from} isEdited={config.notifications.smtp.from !== savedConfig.notifications.smtp.from} /> + +
+ + {#if isSending} + + {/if} +
diff --git a/web/src/lib/i18n/en.json b/web/src/lib/i18n/en.json index 36eec57f17..5cdd5086ca 100644 --- a/web/src/lib/i18n/en.json +++ b/web/src/lib/i18n/en.json @@ -102,6 +102,9 @@ "notification_email_password_description": "Password to use when authenticating with the email server", "notification_email_port_description": "Port of the email server (e.g 25, 465, or 587)", "notification_email_setting_description": "Settings for sending email notifications", + "notification_email_test_email_failed": "Failed to send test email, check your values", + "notification_email_test_email_sent": "A test email has been sent to {email}. Please check your inbox.", + "notification_email_sent_test_email_button": "Send test email and save", "notification_email_username_description": "Username to use when authenticating with the email server", "notification_enable_email_notifications": "Enable email notifications", "notification_settings": "Notification Settings",