From 292182fa7f895688a63b970bb33866ee358a3e7f Mon Sep 17 00:00:00 2001 From: Tim Van Onckelen <2817556+TimVanOnckelen@users.noreply.github.com> Date: Wed, 4 Dec 2024 21:26:02 +0100 Subject: [PATCH] feat: Notification Email Templates (#13940) --- .../administration/email-notification.mdx | 6 + .../img/user-notifications-templates.png | Bin 0 -> 199469 bytes docs/docs/administration/system-settings.md | 4 + i18n/en.json | 12 +- i18n/nl.json | 10 ++ mobile/openapi/README.md | 5 + mobile/openapi/lib/api.dart | 4 + mobile/openapi/lib/api/notifications_api.dart | 52 +++++++ mobile/openapi/lib/api_client.dart | 8 ++ .../openapi/lib/model/system_config_dto.dart | 10 +- .../system_config_template_emails_dto.dart | 115 +++++++++++++++ .../model/system_config_templates_dto.dart | 99 +++++++++++++ mobile/openapi/lib/model/template_dto.dart | 99 +++++++++++++ .../lib/model/template_response_dto.dart | 107 ++++++++++++++ open-api/immich-openapi-specs.json | 111 +++++++++++++++ open-api/typescript-sdk/src/fetch-client.ts | 29 ++++ server/src/config.ts | 14 ++ .../controllers/notification.controller.ts | 16 ++- server/src/dtos/notification.dto.ts | 10 ++ server/src/dtos/system-config.dto.ts | 23 +++ server/src/emails/album-invite.email.tsx | 84 +++++++---- server/src/emails/album-update.email.tsx | 93 +++++++++---- server/src/emails/welcome.email.tsx | 74 ++++++---- .../src/interfaces/notification.interface.ts | 5 + .../notification.repository.spec.ts | 4 + .../repositories/notification.repository.ts | 10 +- server/src/services/notification.service.ts | 76 +++++++++- .../services/system-config.service.spec.ts | 7 + server/src/utils/replace-template-tags.ts | 5 + web/package-lock.json | 2 +- .../notification-settings.svelte | 16 ++- .../template-settings.svelte | 131 ++++++++++++++++++ 32 files changed, 1136 insertions(+), 105 deletions(-) create mode 100644 docs/docs/administration/img/user-notifications-templates.png create mode 100644 mobile/openapi/lib/model/system_config_template_emails_dto.dart create mode 100644 mobile/openapi/lib/model/system_config_templates_dto.dart create mode 100644 mobile/openapi/lib/model/template_dto.dart create mode 100644 mobile/openapi/lib/model/template_response_dto.dart create mode 100644 server/src/utils/replace-template-tags.ts create mode 100644 web/src/lib/components/admin-page/settings/template-settings/template-settings.svelte diff --git a/docs/docs/administration/email-notification.mdx b/docs/docs/administration/email-notification.mdx index 93b1051053..2f244f3352 100644 --- a/docs/docs/administration/email-notification.mdx +++ b/docs/docs/administration/email-notification.mdx @@ -19,3 +19,9 @@ You can use [this guide](/docs/guides/smtp-gmail) to use Gmail's SMTP server. Users can manage their email notification settings from their account settings page on the web. They can choose to turn email notifications on or off for the following events: + +## Notification templates + +You can override the default notification text with custom templates in HTML format. You can use tags to show dynamic tags in your templates. + + diff --git a/docs/docs/administration/img/user-notifications-templates.png b/docs/docs/administration/img/user-notifications-templates.png new file mode 100644 index 0000000000000000000000000000000000000000..150d39b7a6a2a0e499bd7d5e793f07179495afd7 GIT binary patch literal 199469 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

6~#=|P$bc} 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 is the user's Storage Label", "system_settings": "System Settings", "tag_cleanup_job": "Tag cleanup", + "template_email_preview": "Preview", + "template_email_settings": "Email Templates", + "template_email_settings_description": "Manage custom email notification templates", + "template_email_welcome": "Welcome email template", + "template_email_invite_album": "Invite Album Template", + "template_email_update_album": "Update Album Template", + "template_settings": "Notification Templates", + "template_settings_description": "Manage custom templates for notifications.", + "template_email_if_empty": "If the template is empty, the default email will be used.", + "template_email_available_tags": "You can use the following variables in your template: {tags}", "theme_custom_css_settings": "Custom CSS", "theme_custom_css_settings_description": "Cascading Style Sheets allow the design of Immich to be customized.", "theme_settings": "Theme Settings", @@ -1325,4 +1335,4 @@ "zoom_image": "Zoom Image", "timeline": "Timeline", "total": "Total" -} +} \ No newline at end of file diff --git a/i18n/nl.json b/i18n/nl.json index ade7a50925..3420c5d105 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -247,6 +247,16 @@ "storage_template_user_label": "{label} is het opslaglabel van de gebruiker", "system_settings": "Systeeminstellingen", "tag_cleanup_job": "Tag opschoning", + "template_email_settings": "Email", + "template_email_settings_description": "Beheer aangepaste email melding sjablonen", + "template_email_preview": "Voorbeeld", + "template_email_welcome": "Welkom email sjabloon", + "template_email_invite_album": "Uitgenodigd in album sjabloon", + "template_email_update_album": "Update in album sjabloon", + "template_settings": "Melding sjablonen", + "template_settings_description": "Beheer aangepast sjablonen voor meldingen.", + "template_email_if_empty": "Wanneer het sjabloon leeg is, wordt de standaard mail gebruikt.", + "template_email_available_tags": "Je kan de volgende tags gebruiken in een template: {tags}", "theme_custom_css_settings": "Aangepaste CSS", "theme_custom_css_settings_description": "Met Cascading Style Sheets kan het ontwerp van Immich worden aangepast.", "theme_settings": "Thema instellingen", diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index 7780935902..b97ff5411c 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* | [**getNotificationTemplate**](doc//NotificationsApi.md#getnotificationtemplate) | **POST** /notifications/templates/{name} | *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 | @@ -436,7 +437,9 @@ Class | Method | HTTP request | Description - [SystemConfigSmtpDto](doc//SystemConfigSmtpDto.md) - [SystemConfigSmtpTransportDto](doc//SystemConfigSmtpTransportDto.md) - [SystemConfigStorageTemplateDto](doc//SystemConfigStorageTemplateDto.md) + - [SystemConfigTemplateEmailsDto](doc//SystemConfigTemplateEmailsDto.md) - [SystemConfigTemplateStorageOptionDto](doc//SystemConfigTemplateStorageOptionDto.md) + - [SystemConfigTemplatesDto](doc//SystemConfigTemplatesDto.md) - [SystemConfigThemeDto](doc//SystemConfigThemeDto.md) - [SystemConfigTrashDto](doc//SystemConfigTrashDto.md) - [SystemConfigUserDto](doc//SystemConfigUserDto.md) @@ -448,6 +451,8 @@ Class | Method | HTTP request | Description - [TagUpsertDto](doc//TagUpsertDto.md) - [TagsResponse](doc//TagsResponse.md) - [TagsUpdate](doc//TagsUpdate.md) + - [TemplateDto](doc//TemplateDto.md) + - [TemplateResponseDto](doc//TemplateResponseDto.md) - [TestEmailResponseDto](doc//TestEmailResponseDto.md) - [TimeBucketResponseDto](doc//TimeBucketResponseDto.md) - [TimeBucketSize](doc//TimeBucketSize.md) diff --git a/mobile/openapi/lib/api.dart b/mobile/openapi/lib/api.dart index e1c343ad50..73eb02d89e 100644 --- a/mobile/openapi/lib/api.dart +++ b/mobile/openapi/lib/api.dart @@ -250,7 +250,9 @@ part 'model/system_config_server_dto.dart'; part 'model/system_config_smtp_dto.dart'; part 'model/system_config_smtp_transport_dto.dart'; part 'model/system_config_storage_template_dto.dart'; +part 'model/system_config_template_emails_dto.dart'; part 'model/system_config_template_storage_option_dto.dart'; +part 'model/system_config_templates_dto.dart'; part 'model/system_config_theme_dto.dart'; part 'model/system_config_trash_dto.dart'; part 'model/system_config_user_dto.dart'; @@ -262,6 +264,8 @@ part 'model/tag_update_dto.dart'; part 'model/tag_upsert_dto.dart'; part 'model/tags_response.dart'; part 'model/tags_update.dart'; +part 'model/template_dto.dart'; +part 'model/template_response_dto.dart'; part 'model/test_email_response_dto.dart'; part 'model/time_bucket_response_dto.dart'; part 'model/time_bucket_size.dart'; diff --git a/mobile/openapi/lib/api/notifications_api.dart b/mobile/openapi/lib/api/notifications_api.dart index 0681d58247..323fbcc3d6 100644 --- a/mobile/openapi/lib/api/notifications_api.dart +++ b/mobile/openapi/lib/api/notifications_api.dart @@ -16,6 +16,58 @@ class NotificationsApi { final ApiClient apiClient; + /// Performs an HTTP 'POST /notifications/templates/{name}' operation and returns the [Response]. + /// Parameters: + /// + /// * [String] name (required): + /// + /// * [TemplateDto] templateDto (required): + Future getNotificationTemplateWithHttpInfo(String name, TemplateDto templateDto,) async { + // ignore: prefer_const_declarations + final path = r'/notifications/templates/{name}' + .replaceAll('{name}', name); + + // ignore: prefer_final_locals + Object? postBody = templateDto; + + 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: + /// + /// * [String] name (required): + /// + /// * [TemplateDto] templateDto (required): + Future getNotificationTemplate(String name, TemplateDto templateDto,) async { + final response = await getNotificationTemplateWithHttpInfo(name, templateDto,); + if (response.statusCode >= HttpStatus.badRequest) { + throw ApiException(response.statusCode, await _decodeBodyBytes(response)); + } + // When a remote server returns no body with a status of 204, we shall not decode it. + // At the time of writing this, `dart:convert` will throw an "Unexpected end of input" + // FormatException when trying to decode an empty string. + if (response.body.isNotEmpty && response.statusCode != HttpStatus.noContent) { + return await apiClient.deserializeAsync(await _decodeBodyBytes(response), 'TemplateResponseDto',) as TemplateResponseDto; + + } + return null; + } + /// Performs an HTTP 'POST /notifications/test-email' operation and returns the [Response]. /// Parameters: /// diff --git a/mobile/openapi/lib/api_client.dart b/mobile/openapi/lib/api_client.dart index b71e6f45f7..a6f8d551da 100644 --- a/mobile/openapi/lib/api_client.dart +++ b/mobile/openapi/lib/api_client.dart @@ -554,8 +554,12 @@ class ApiClient { return SystemConfigSmtpTransportDto.fromJson(value); case 'SystemConfigStorageTemplateDto': return SystemConfigStorageTemplateDto.fromJson(value); + case 'SystemConfigTemplateEmailsDto': + return SystemConfigTemplateEmailsDto.fromJson(value); case 'SystemConfigTemplateStorageOptionDto': return SystemConfigTemplateStorageOptionDto.fromJson(value); + case 'SystemConfigTemplatesDto': + return SystemConfigTemplatesDto.fromJson(value); case 'SystemConfigThemeDto': return SystemConfigThemeDto.fromJson(value); case 'SystemConfigTrashDto': @@ -578,6 +582,10 @@ class ApiClient { return TagsResponse.fromJson(value); case 'TagsUpdate': return TagsUpdate.fromJson(value); + case 'TemplateDto': + return TemplateDto.fromJson(value); + case 'TemplateResponseDto': + return TemplateResponseDto.fromJson(value); case 'TestEmailResponseDto': return TestEmailResponseDto.fromJson(value); case 'TimeBucketResponseDto': diff --git a/mobile/openapi/lib/model/system_config_dto.dart b/mobile/openapi/lib/model/system_config_dto.dart index 4215953906..59d5f09fc9 100644 --- a/mobile/openapi/lib/model/system_config_dto.dart +++ b/mobile/openapi/lib/model/system_config_dto.dart @@ -29,6 +29,7 @@ class SystemConfigDto { required this.reverseGeocoding, required this.server, required this.storageTemplate, + required this.templates, required this.theme, required this.trash, required this.user, @@ -66,6 +67,8 @@ class SystemConfigDto { SystemConfigStorageTemplateDto storageTemplate; + SystemConfigTemplatesDto templates; + SystemConfigThemeDto theme; SystemConfigTrashDto trash; @@ -90,6 +93,7 @@ class SystemConfigDto { other.reverseGeocoding == reverseGeocoding && other.server == server && other.storageTemplate == storageTemplate && + other.templates == templates && other.theme == theme && other.trash == trash && other.user == user; @@ -113,12 +117,13 @@ class SystemConfigDto { (reverseGeocoding.hashCode) + (server.hashCode) + (storageTemplate.hashCode) + + (templates.hashCode) + (theme.hashCode) + (trash.hashCode) + (user.hashCode); @override - String toString() => 'SystemConfigDto[backup=$backup, ffmpeg=$ffmpeg, image=$image, job=$job, library_=$library_, logging=$logging, machineLearning=$machineLearning, map=$map, metadata=$metadata, newVersionCheck=$newVersionCheck, notifications=$notifications, oauth=$oauth, passwordLogin=$passwordLogin, reverseGeocoding=$reverseGeocoding, server=$server, storageTemplate=$storageTemplate, theme=$theme, trash=$trash, user=$user]'; + String toString() => 'SystemConfigDto[backup=$backup, ffmpeg=$ffmpeg, image=$image, job=$job, library_=$library_, logging=$logging, machineLearning=$machineLearning, map=$map, metadata=$metadata, newVersionCheck=$newVersionCheck, notifications=$notifications, oauth=$oauth, passwordLogin=$passwordLogin, reverseGeocoding=$reverseGeocoding, server=$server, storageTemplate=$storageTemplate, templates=$templates, theme=$theme, trash=$trash, user=$user]'; Map toJson() { final json = {}; @@ -138,6 +143,7 @@ class SystemConfigDto { json[r'reverseGeocoding'] = this.reverseGeocoding; json[r'server'] = this.server; json[r'storageTemplate'] = this.storageTemplate; + json[r'templates'] = this.templates; json[r'theme'] = this.theme; json[r'trash'] = this.trash; json[r'user'] = this.user; @@ -169,6 +175,7 @@ class SystemConfigDto { reverseGeocoding: SystemConfigReverseGeocodingDto.fromJson(json[r'reverseGeocoding'])!, server: SystemConfigServerDto.fromJson(json[r'server'])!, storageTemplate: SystemConfigStorageTemplateDto.fromJson(json[r'storageTemplate'])!, + templates: SystemConfigTemplatesDto.fromJson(json[r'templates'])!, theme: SystemConfigThemeDto.fromJson(json[r'theme'])!, trash: SystemConfigTrashDto.fromJson(json[r'trash'])!, user: SystemConfigUserDto.fromJson(json[r'user'])!, @@ -235,6 +242,7 @@ class SystemConfigDto { 'reverseGeocoding', 'server', 'storageTemplate', + 'templates', 'theme', 'trash', 'user', diff --git a/mobile/openapi/lib/model/system_config_template_emails_dto.dart b/mobile/openapi/lib/model/system_config_template_emails_dto.dart new file mode 100644 index 0000000000..9db85509f5 --- /dev/null +++ b/mobile/openapi/lib/model/system_config_template_emails_dto.dart @@ -0,0 +1,115 @@ +// +// 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 SystemConfigTemplateEmailsDto { + /// Returns a new [SystemConfigTemplateEmailsDto] instance. + SystemConfigTemplateEmailsDto({ + required this.albumInviteTemplate, + required this.albumUpdateTemplate, + required this.welcomeTemplate, + }); + + String albumInviteTemplate; + + String albumUpdateTemplate; + + String welcomeTemplate; + + @override + bool operator ==(Object other) => identical(this, other) || other is SystemConfigTemplateEmailsDto && + other.albumInviteTemplate == albumInviteTemplate && + other.albumUpdateTemplate == albumUpdateTemplate && + other.welcomeTemplate == welcomeTemplate; + + @override + int get hashCode => + // ignore: unnecessary_parenthesis + (albumInviteTemplate.hashCode) + + (albumUpdateTemplate.hashCode) + + (welcomeTemplate.hashCode); + + @override + String toString() => 'SystemConfigTemplateEmailsDto[albumInviteTemplate=$albumInviteTemplate, albumUpdateTemplate=$albumUpdateTemplate, welcomeTemplate=$welcomeTemplate]'; + + Map toJson() { + final json = {}; + json[r'albumInviteTemplate'] = this.albumInviteTemplate; + json[r'albumUpdateTemplate'] = this.albumUpdateTemplate; + json[r'welcomeTemplate'] = this.welcomeTemplate; + return json; + } + + /// Returns a new [SystemConfigTemplateEmailsDto] instance and imports its values from + /// [value] if it's a [Map], null otherwise. + // ignore: prefer_constructors_over_static_methods + static SystemConfigTemplateEmailsDto? fromJson(dynamic value) { + upgradeDto(value, "SystemConfigTemplateEmailsDto"); + if (value is Map) { + final json = value.cast(); + + return SystemConfigTemplateEmailsDto( + albumInviteTemplate: mapValueOfType(json, r'albumInviteTemplate')!, + albumUpdateTemplate: mapValueOfType(json, r'albumUpdateTemplate')!, + welcomeTemplate: mapValueOfType(json, r'welcomeTemplate')!, + ); + } + return null; + } + + static List listFromJson(dynamic json, {bool growable = false,}) { + final result = []; + if (json is List && json.isNotEmpty) { + for (final row in json) { + final value = SystemConfigTemplateEmailsDto.fromJson(row); + if (value != null) { + result.add(value); + } + } + } + return result.toList(growable: growable); + } + + static Map mapFromJson(dynamic json) { + final map = {}; + if (json is Map && json.isNotEmpty) { + json = json.cast(); // ignore: parameter_assignments + for (final entry in json.entries) { + final value = SystemConfigTemplateEmailsDto.fromJson(entry.value); + if (value != null) { + map[entry.key] = value; + } + } + } + return map; + } + + // maps a json object with a list of SystemConfigTemplateEmailsDto-objects as value to a dart map + static Map> mapListFromJson(dynamic json, {bool growable = false,}) { + final map = >{}; + if (json is Map && json.isNotEmpty) { + // ignore: parameter_assignments + json = json.cast(); + for (final entry in json.entries) { + map[entry.key] = SystemConfigTemplateEmailsDto.listFromJson(entry.value, growable: growable,); + } + } + return map; + } + + /// The list of required keys that must be present in a JSON. + static const requiredKeys = { + 'albumInviteTemplate', + 'albumUpdateTemplate', + 'welcomeTemplate', + }; +} + diff --git a/mobile/openapi/lib/model/system_config_templates_dto.dart b/mobile/openapi/lib/model/system_config_templates_dto.dart new file mode 100644 index 0000000000..a5e8834978 --- /dev/null +++ b/mobile/openapi/lib/model/system_config_templates_dto.dart @@ -0,0 +1,99 @@ +// +// 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 SystemConfigTemplatesDto { + /// Returns a new [SystemConfigTemplatesDto] instance. + SystemConfigTemplatesDto({ + required this.email, + }); + + SystemConfigTemplateEmailsDto email; + + @override + bool operator ==(Object other) => identical(this, other) || other is SystemConfigTemplatesDto && + other.email == email; + + @override + int get hashCode => + // ignore: unnecessary_parenthesis + (email.hashCode); + + @override + String toString() => 'SystemConfigTemplatesDto[email=$email]'; + + Map toJson() { + final json = {}; + json[r'email'] = this.email; + return json; + } + + /// Returns a new [SystemConfigTemplatesDto] instance and imports its values from + /// [value] if it's a [Map], null otherwise. + // ignore: prefer_constructors_over_static_methods + static SystemConfigTemplatesDto? fromJson(dynamic value) { + upgradeDto(value, "SystemConfigTemplatesDto"); + if (value is Map) { + final json = value.cast(); + + return SystemConfigTemplatesDto( + email: SystemConfigTemplateEmailsDto.fromJson(json[r'email'])!, + ); + } + return null; + } + + static List listFromJson(dynamic json, {bool growable = false,}) { + final result = []; + if (json is List && json.isNotEmpty) { + for (final row in json) { + final value = SystemConfigTemplatesDto.fromJson(row); + if (value != null) { + result.add(value); + } + } + } + return result.toList(growable: growable); + } + + static Map mapFromJson(dynamic json) { + final map = {}; + if (json is Map && json.isNotEmpty) { + json = json.cast(); // ignore: parameter_assignments + for (final entry in json.entries) { + final value = SystemConfigTemplatesDto.fromJson(entry.value); + if (value != null) { + map[entry.key] = value; + } + } + } + return map; + } + + // maps a json object with a list of SystemConfigTemplatesDto-objects as value to a dart map + static Map> mapListFromJson(dynamic json, {bool growable = false,}) { + final map = >{}; + if (json is Map && json.isNotEmpty) { + // ignore: parameter_assignments + json = json.cast(); + for (final entry in json.entries) { + map[entry.key] = SystemConfigTemplatesDto.listFromJson(entry.value, growable: growable,); + } + } + return map; + } + + /// The list of required keys that must be present in a JSON. + static const requiredKeys = { + 'email', + }; +} + diff --git a/mobile/openapi/lib/model/template_dto.dart b/mobile/openapi/lib/model/template_dto.dart new file mode 100644 index 0000000000..f818e0508a --- /dev/null +++ b/mobile/openapi/lib/model/template_dto.dart @@ -0,0 +1,99 @@ +// +// 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 TemplateDto { + /// Returns a new [TemplateDto] instance. + TemplateDto({ + required this.template, + }); + + String template; + + @override + bool operator ==(Object other) => identical(this, other) || other is TemplateDto && + other.template == template; + + @override + int get hashCode => + // ignore: unnecessary_parenthesis + (template.hashCode); + + @override + String toString() => 'TemplateDto[template=$template]'; + + Map toJson() { + final json = {}; + json[r'template'] = this.template; + return json; + } + + /// Returns a new [TemplateDto] instance and imports its values from + /// [value] if it's a [Map], null otherwise. + // ignore: prefer_constructors_over_static_methods + static TemplateDto? fromJson(dynamic value) { + upgradeDto(value, "TemplateDto"); + if (value is Map) { + final json = value.cast(); + + return TemplateDto( + template: mapValueOfType(json, r'template')!, + ); + } + return null; + } + + static List listFromJson(dynamic json, {bool growable = false,}) { + final result = []; + if (json is List && json.isNotEmpty) { + for (final row in json) { + final value = TemplateDto.fromJson(row); + if (value != null) { + result.add(value); + } + } + } + return result.toList(growable: growable); + } + + static Map mapFromJson(dynamic json) { + final map = {}; + if (json is Map && json.isNotEmpty) { + json = json.cast(); // ignore: parameter_assignments + for (final entry in json.entries) { + final value = TemplateDto.fromJson(entry.value); + if (value != null) { + map[entry.key] = value; + } + } + } + return map; + } + + // maps a json object with a list of TemplateDto-objects as value to a dart map + static Map> mapListFromJson(dynamic json, {bool growable = false,}) { + final map = >{}; + if (json is Map && json.isNotEmpty) { + // ignore: parameter_assignments + json = json.cast(); + for (final entry in json.entries) { + map[entry.key] = TemplateDto.listFromJson(entry.value, growable: growable,); + } + } + return map; + } + + /// The list of required keys that must be present in a JSON. + static const requiredKeys = { + 'template', + }; +} + diff --git a/mobile/openapi/lib/model/template_response_dto.dart b/mobile/openapi/lib/model/template_response_dto.dart new file mode 100644 index 0000000000..3c3224a54b --- /dev/null +++ b/mobile/openapi/lib/model/template_response_dto.dart @@ -0,0 +1,107 @@ +// +// 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 TemplateResponseDto { + /// Returns a new [TemplateResponseDto] instance. + TemplateResponseDto({ + required this.html, + required this.name, + }); + + String html; + + String name; + + @override + bool operator ==(Object other) => identical(this, other) || other is TemplateResponseDto && + other.html == html && + other.name == name; + + @override + int get hashCode => + // ignore: unnecessary_parenthesis + (html.hashCode) + + (name.hashCode); + + @override + String toString() => 'TemplateResponseDto[html=$html, name=$name]'; + + Map toJson() { + final json = {}; + json[r'html'] = this.html; + json[r'name'] = this.name; + return json; + } + + /// Returns a new [TemplateResponseDto] instance and imports its values from + /// [value] if it's a [Map], null otherwise. + // ignore: prefer_constructors_over_static_methods + static TemplateResponseDto? fromJson(dynamic value) { + upgradeDto(value, "TemplateResponseDto"); + if (value is Map) { + final json = value.cast(); + + return TemplateResponseDto( + html: mapValueOfType(json, r'html')!, + name: mapValueOfType(json, r'name')!, + ); + } + return null; + } + + static List listFromJson(dynamic json, {bool growable = false,}) { + final result = []; + if (json is List && json.isNotEmpty) { + for (final row in json) { + final value = TemplateResponseDto.fromJson(row); + if (value != null) { + result.add(value); + } + } + } + return result.toList(growable: growable); + } + + static Map mapFromJson(dynamic json) { + final map = {}; + if (json is Map && json.isNotEmpty) { + json = json.cast(); // ignore: parameter_assignments + for (final entry in json.entries) { + final value = TemplateResponseDto.fromJson(entry.value); + if (value != null) { + map[entry.key] = value; + } + } + } + return map; + } + + // maps a json object with a list of TemplateResponseDto-objects as value to a dart map + static Map> mapListFromJson(dynamic json, {bool growable = false,}) { + final map = >{}; + if (json is Map && json.isNotEmpty) { + // ignore: parameter_assignments + json = json.cast(); + for (final entry in json.entries) { + map[entry.key] = TemplateResponseDto.listFromJson(entry.value, growable: growable,); + } + } + return map; + } + + /// The list of required keys that must be present in a JSON. + static const requiredKeys = { + 'html', + 'name', + }; +} + diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index bc32a32e04..43985cae81 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -3430,6 +3430,57 @@ ] } }, + "/notifications/templates/{name}": { + "post": { + "operationId": "getNotificationTemplate", + "parameters": [ + { + "name": "name", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TemplateDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TemplateResponseDto" + } + } + }, + "description": "" + } + }, + "security": [ + { + "bearer": [] + }, + { + "cookie": [] + }, + { + "api_key": [] + } + ], + "tags": [ + "Notifications" + ] + } + }, "/notifications/test-email": { "post": { "operationId": "sendTestEmail", @@ -11538,6 +11589,9 @@ "storageTemplate": { "$ref": "#/components/schemas/SystemConfigStorageTemplateDto" }, + "templates": { + "$ref": "#/components/schemas/SystemConfigTemplatesDto" + }, "theme": { "$ref": "#/components/schemas/SystemConfigThemeDto" }, @@ -11565,6 +11619,7 @@ "reverseGeocoding", "server", "storageTemplate", + "templates", "theme", "trash", "user" @@ -12111,6 +12166,25 @@ ], "type": "object" }, + "SystemConfigTemplateEmailsDto": { + "properties": { + "albumInviteTemplate": { + "type": "string" + }, + "albumUpdateTemplate": { + "type": "string" + }, + "welcomeTemplate": { + "type": "string" + } + }, + "required": [ + "albumInviteTemplate", + "albumUpdateTemplate", + "welcomeTemplate" + ], + "type": "object" + }, "SystemConfigTemplateStorageOptionDto": { "properties": { "dayOptions": { @@ -12174,6 +12248,17 @@ ], "type": "object" }, + "SystemConfigTemplatesDto": { + "properties": { + "email": { + "$ref": "#/components/schemas/SystemConfigTemplateEmailsDto" + } + }, + "required": [ + "email" + ], + "type": "object" + }, "SystemConfigThemeDto": { "properties": { "customCss": { @@ -12352,6 +12437,32 @@ }, "type": "object" }, + "TemplateDto": { + "properties": { + "template": { + "type": "string" + } + }, + "required": [ + "template" + ], + "type": "object" + }, + "TemplateResponseDto": { + "properties": { + "html": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "html", + "name" + ], + "type": "object" + }, "TestEmailResponseDto": { "properties": { "messageId": { diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index d786139ab5..20d0c5715f 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -634,6 +634,13 @@ export type MemoryUpdateDto = { memoryAt?: string; seenAt?: string; }; +export type TemplateDto = { + template: string; +}; +export type TemplateResponseDto = { + html: string; + name: string; +}; export type SystemConfigSmtpTransportDto = { host: string; ignoreCert: boolean; @@ -1232,6 +1239,14 @@ export type SystemConfigStorageTemplateDto = { hashVerificationEnabled: boolean; template: string; }; +export type SystemConfigTemplateEmailsDto = { + albumInviteTemplate: string; + albumUpdateTemplate: string; + welcomeTemplate: string; +}; +export type SystemConfigTemplatesDto = { + email: SystemConfigTemplateEmailsDto; +}; export type SystemConfigThemeDto = { customCss: string; }; @@ -1259,6 +1274,7 @@ export type SystemConfigDto = { reverseGeocoding: SystemConfigReverseGeocodingDto; server: SystemConfigServerDto; storageTemplate: SystemConfigStorageTemplateDto; + templates: SystemConfigTemplatesDto; theme: SystemConfigThemeDto; trash: SystemConfigTrashDto; user: SystemConfigUserDto; @@ -2227,6 +2243,19 @@ export function addMemoryAssets({ id, bulkIdsDto }: { body: bulkIdsDto }))); } +export function getNotificationTemplate({ name, templateDto }: { + name: string; + templateDto: TemplateDto; +}, opts?: Oazapfts.RequestOpts) { + return oazapfts.ok(oazapfts.fetchJson<{ + status: 200; + data: TemplateResponseDto; + }>(`/notifications/templates/${encodeURIComponent(name)}`, oazapfts.json({ + ...opts, + method: "POST", + body: templateDto + }))); +} export function sendTestEmail({ systemConfigSmtpDto }: { systemConfigSmtpDto: SystemConfigSmtpDto; }, opts?: Oazapfts.RequestOpts) { diff --git a/server/src/config.ts b/server/src/config.ts index dd850e063f..2658974200 100644 --- a/server/src/config.ts +++ b/server/src/config.ts @@ -146,6 +146,13 @@ export interface SystemConfig { }; }; }; + templates: { + email: { + welcomeTemplate: string; + albumInviteTemplate: string; + albumUpdateTemplate: string; + }; + }; server: { externalDomain: string; loginPageMessage: string; @@ -313,6 +320,13 @@ export const defaults = Object.freeze({ }, }, }, + templates: { + email: { + welcomeTemplate: '', + albumInviteTemplate: '', + albumUpdateTemplate: '', + }, + }, user: { deleteDelay: 7, }, diff --git a/server/src/controllers/notification.controller.ts b/server/src/controllers/notification.controller.ts index 3dd72dd73a..27034fd63a 100644 --- a/server/src/controllers/notification.controller.ts +++ b/server/src/controllers/notification.controller.ts @@ -1,8 +1,9 @@ -import { Body, Controller, HttpCode, HttpStatus, Post } from '@nestjs/common'; +import { Body, Controller, HttpCode, HttpStatus, Param, Post } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { AuthDto } from 'src/dtos/auth.dto'; -import { TestEmailResponseDto } from 'src/dtos/notification.dto'; +import { TemplateDto, TemplateResponseDto, TestEmailResponseDto } from 'src/dtos/notification.dto'; import { SystemConfigSmtpDto } from 'src/dtos/system-config.dto'; +import { EmailTemplate } from 'src/interfaces/notification.interface'; import { Auth, Authenticated } from 'src/middleware/auth.guard'; import { NotificationService } from 'src/services/notification.service'; @@ -17,4 +18,15 @@ export class NotificationController { sendTestEmail(@Auth() auth: AuthDto, @Body() dto: SystemConfigSmtpDto): Promise { return this.service.sendTestEmail(auth.user.id, dto); } + + @Post('templates/:name') + @HttpCode(HttpStatus.OK) + @Authenticated({ admin: true }) + getNotificationTemplate( + @Auth() auth: AuthDto, + @Param('name') name: EmailTemplate, + @Body() dto: TemplateDto, + ): Promise { + return this.service.getTemplate(name, dto.template); + } } diff --git a/server/src/dtos/notification.dto.ts b/server/src/dtos/notification.dto.ts index 34b3923580..c1a09c801c 100644 --- a/server/src/dtos/notification.dto.ts +++ b/server/src/dtos/notification.dto.ts @@ -1,3 +1,13 @@ +import { IsString } from 'class-validator'; + export class TestEmailResponseDto { messageId!: string; } +export class TemplateResponseDto { + name!: string; + html!: string; +} +export class TemplateDto { + @IsString() + template!: string; +} diff --git a/server/src/dtos/system-config.dto.ts b/server/src/dtos/system-config.dto.ts index 894f4c7948..3509182545 100644 --- a/server/src/dtos/system-config.dto.ts +++ b/server/src/dtos/system-config.dto.ts @@ -465,6 +465,24 @@ class SystemConfigNotificationsDto { smtp!: SystemConfigSmtpDto; } +class SystemConfigTemplateEmailsDto { + @IsString() + albumInviteTemplate!: string; + + @IsString() + welcomeTemplate!: string; + + @IsString() + albumUpdateTemplate!: string; +} + +class SystemConfigTemplatesDto { + @Type(() => SystemConfigTemplateEmailsDto) + @ValidateNested() + @IsObject() + email!: SystemConfigTemplateEmailsDto; +} + class SystemConfigStorageTemplateDto { @ValidateBoolean() enabled!: boolean; @@ -636,6 +654,11 @@ export class SystemConfigDto implements SystemConfig { @IsObject() notifications!: SystemConfigNotificationsDto; + @Type(() => SystemConfigTemplatesDto) + @ValidateNested() + @IsObject() + templates!: SystemConfigTemplatesDto; + @Type(() => SystemConfigServerDto) @ValidateNested() @IsObject() diff --git a/server/src/emails/album-invite.email.tsx b/server/src/emails/album-invite.email.tsx index 232ef5290d..0b3819b332 100644 --- a/server/src/emails/album-invite.email.tsx +++ b/server/src/emails/album-invite.email.tsx @@ -3,6 +3,7 @@ import * as React from 'react'; import { ImmichButton } from 'src/emails/components/button.component'; import ImmichLayout from 'src/emails/components/immich.layout'; import { AlbumInviteEmailProps } from 'src/interfaces/notification.interface'; +import { replaceTemplateTags } from 'src/utils/replace-template-tags'; export const AlbumInviteEmail = ({ baseUrl, @@ -11,39 +12,64 @@ export const AlbumInviteEmail = ({ senderName, albumId, cid, -}: AlbumInviteEmailProps) => ( - - - Hey {recipientName}! - + customTemplate, +}: AlbumInviteEmailProps) => { + const variables = { + albumName, + recipientName, + senderName, + albumId, + baseUrl, + }; - - {senderName} has added you to the album {albumName}. - + const emailContent = customTemplate ? ( + replaceTemplateTags(customTemplate, variables) + ) : ( + <> + + Hey {recipientName}! + - {cid && ( -

- + + {senderName} has added you to the album {albumName}. + + + ); + + return ( + + {customTemplate && ( + +
+
+ )} + + {!customTemplate && emailContent} + + {cid && ( +
+ +
+ )} + +
+ View Album
- )} -
- View Album -
- - - If you cannot click the button use the link below to view the album. -
- {`${baseUrl}/albums/${albumId}`} -
-
-); + + If you cannot click the button use the link below to view the album. +
+ {`${baseUrl}/albums/${albumId}`} +
+ + ); +}; AlbumInviteEmail.PreviewProps = { baseUrl: 'https://demo.immich.app', diff --git a/server/src/emails/album-update.email.tsx b/server/src/emails/album-update.email.tsx index 0fb5ad931c..9dcd858e93 100644 --- a/server/src/emails/album-update.email.tsx +++ b/server/src/emails/album-update.email.tsx @@ -3,47 +3,80 @@ import * as React from 'react'; import { ImmichButton } from 'src/emails/components/button.component'; import ImmichLayout from 'src/emails/components/immich.layout'; import { AlbumUpdateEmailProps } from 'src/interfaces/notification.interface'; +import { replaceTemplateTags } from 'src/utils/replace-template-tags'; -export const AlbumUpdateEmail = ({ baseUrl, albumName, recipientName, albumId, cid }: AlbumUpdateEmailProps) => ( - - - Hey {recipientName}! - +export const AlbumUpdateEmail = ({ + baseUrl, + albumName, + recipientName, + albumId, + cid, + customTemplate, +}: AlbumUpdateEmailProps) => { + const usableTemplateVariables = { + albumName, + recipientName, + albumId, + baseUrl, + }; - - New media has been added to {albumName}, -
check it out! -
+ const emailContent = customTemplate ? ( + replaceTemplateTags(customTemplate, usableTemplateVariables) + ) : ( + <> + + Hey {recipientName}! + - {cid && ( -
- + + New media has been added to {albumName}, +
check it out! +
+ + ); + + return ( + + {customTemplate && ( + +
+
+ )} + + {!customTemplate && emailContent} + + {cid && ( +
+ +
+ )} + +
+ View Album
- )} -
- View Album -
- - - If you cannot click the button use the link below to view the album. -
- {`${baseUrl}/albums/${albumId}`} -
-
-); + + If you cannot click the button use the link below to view the album. +
+ {`${baseUrl}/albums/${albumId}`} +
+ + ); +}; AlbumUpdateEmail.PreviewProps = { baseUrl: 'https://demo.immich.app', albumName: 'Trip to Europe', albumId: 'b63f6dae-e1c9-401b-9a85-9dbbf5612539', recipientName: 'Alan Turing', + cid: '', + customTemplate: '', } as AlbumUpdateEmailProps; export default AlbumUpdateEmail; diff --git a/server/src/emails/welcome.email.tsx b/server/src/emails/welcome.email.tsx index e031ac6b97..ced0b77698 100644 --- a/server/src/emails/welcome.email.tsx +++ b/server/src/emails/welcome.email.tsx @@ -3,36 +3,62 @@ import * as React from 'react'; import { ImmichButton } from 'src/emails/components/button.component'; import ImmichLayout from 'src/emails/components/immich.layout'; import { WelcomeEmailProps } from 'src/interfaces/notification.interface'; +import { replaceTemplateTags } from 'src/utils/replace-template-tags'; -export const WelcomeEmail = ({ baseUrl, displayName, username, password }: WelcomeEmailProps) => ( - - - Hey {displayName}! - +export const WelcomeEmail = ({ baseUrl, displayName, username, password, customTemplate }: WelcomeEmailProps) => { + const usableTemplateVariables = { + displayName, + username, + password, + baseUrl, + }; - A new account has been created for you. + const emailContent = customTemplate ? ( + replaceTemplateTags(customTemplate, usableTemplateVariables) + ) : ( + <> + + Hey {displayName}! + - - Username: {username} - {password && ( - <> -
- Password: {password} - + A new account has been created for you. + + + Username: {username} + {password && ( + <> +
+ Password: {password} + + )} +
+ + ); + + return ( + + {customTemplate && ( + +
+
)} -
-
- Login -
+ {!customTemplate && emailContent} - - If you cannot click the button use the link below to proceed with first login. -
- {baseUrl} -
-
-); +
+ Login +
+ + + If you cannot click the button use the link below to proceed with first login. +
+ {baseUrl} +
+ + ); +}; WelcomeEmail.PreviewProps = { baseUrl: 'https://demo.immich.app/auth/login', diff --git a/server/src/interfaces/notification.interface.ts b/server/src/interfaces/notification.interface.ts index ec0ecc534b..b20b3c50ae 100644 --- a/server/src/interfaces/notification.interface.ts +++ b/server/src/interfaces/notification.interface.ts @@ -39,6 +39,7 @@ export enum EmailTemplate { interface BaseEmailProps { baseUrl: string; + customTemplate?: string; } export interface TestEmailProps extends BaseEmailProps { @@ -70,18 +71,22 @@ export type EmailRenderRequest = | { template: EmailTemplate.TEST_EMAIL; data: TestEmailProps; + customTemplate: string; } | { template: EmailTemplate.WELCOME; data: WelcomeEmailProps; + customTemplate: string; } | { template: EmailTemplate.ALBUM_INVITE; data: AlbumInviteEmailProps; + customTemplate: string; } | { template: EmailTemplate.ALBUM_UPDATE; data: AlbumUpdateEmailProps; + customTemplate: string; }; export type SendEmailResponse = { diff --git a/server/src/repositories/notification.repository.spec.ts b/server/src/repositories/notification.repository.spec.ts index 983be21d2b..368ba3f0ce 100644 --- a/server/src/repositories/notification.repository.spec.ts +++ b/server/src/repositories/notification.repository.spec.ts @@ -21,6 +21,7 @@ describe(NotificationRepository.name, () => { const request: EmailRenderRequest = { template: EmailTemplate.TEST_EMAIL, data: { displayName: 'Alen Turing', baseUrl: 'http://localhost' }, + customTemplate: '', }; const result = await sut.renderEmail(request); @@ -33,6 +34,7 @@ describe(NotificationRepository.name, () => { const request: EmailRenderRequest = { template: EmailTemplate.WELCOME, data: { displayName: 'Alen Turing', username: 'turing', baseUrl: 'http://localhost' }, + customTemplate: '', }; const result = await sut.renderEmail(request); @@ -51,6 +53,7 @@ describe(NotificationRepository.name, () => { recipientName: 'Jane', baseUrl: 'http://localhost', }, + customTemplate: '', }; const result = await sut.renderEmail(request); @@ -63,6 +66,7 @@ describe(NotificationRepository.name, () => { const request: EmailRenderRequest = { template: EmailTemplate.ALBUM_UPDATE, data: { albumName: 'Holiday', albumId: '123', recipientName: 'Jane', baseUrl: 'http://localhost' }, + customTemplate: '', }; const result = await sut.renderEmail(request); diff --git a/server/src/repositories/notification.repository.ts b/server/src/repositories/notification.repository.ts index 293a80576f..b2444301e5 100644 --- a/server/src/repositories/notification.repository.ts +++ b/server/src/repositories/notification.repository.ts @@ -55,22 +55,22 @@ export class NotificationRepository implements INotificationRepository { } } - private render({ template, data }: EmailRenderRequest): React.FunctionComponentElement { + private render({ template, data, customTemplate }: EmailRenderRequest): React.FunctionComponentElement { switch (template) { case EmailTemplate.TEST_EMAIL: { - return React.createElement(TestEmail, data); + return React.createElement(TestEmail, { ...data, customTemplate }); } case EmailTemplate.WELCOME: { - return React.createElement(WelcomeEmail, data); + return React.createElement(WelcomeEmail, { ...data, customTemplate }); } case EmailTemplate.ALBUM_INVITE: { - return React.createElement(AlbumInviteEmail, data); + return React.createElement(AlbumInviteEmail, { ...data, customTemplate }); } case EmailTemplate.ALBUM_UPDATE: { - return React.createElement(AlbumUpdateEmail, data); + return React.createElement(AlbumUpdateEmail, { ...data, customTemplate }); } } } diff --git a/server/src/services/notification.service.ts b/server/src/services/notification.service.ts index e7c0201963..37b265c6ae 100644 --- a/server/src/services/notification.service.ts +++ b/server/src/services/notification.service.ts @@ -140,7 +140,7 @@ export class NotificationService extends BaseService { setTimeout(() => this.eventRepository.clientSend('on_session_delete', sessionId, sessionId), 500); } - async sendTestEmail(id: string, dto: SystemConfigSmtpDto) { + async sendTestEmail(id: string, dto: SystemConfigSmtpDto, tempTemplate?: string) { const user = await this.userRepository.get(id, { withDeleted: false }); if (!user) { throw new Error('User not found'); @@ -160,8 +160,8 @@ export class NotificationService extends BaseService { baseUrl: getExternalDomain(server, port), displayName: user.name, }, + customTemplate: tempTemplate!, }); - const { messageId } = await this.notificationRepository.sendEmail({ to: user.email, subject: 'Test email from Immich', @@ -175,6 +175,69 @@ export class NotificationService extends BaseService { return { messageId }; } + async getTemplate(name: EmailTemplate, customTemplate: string) { + const { server, templates } = await this.getConfig({ withCache: false }); + const { port } = this.configRepository.getEnv(); + + let templateResponse = ''; + + switch (name) { + case EmailTemplate.WELCOME: { + const { html: _welcomeHtml } = await this.notificationRepository.renderEmail({ + template: EmailTemplate.WELCOME, + data: { + baseUrl: getExternalDomain(server, port), + displayName: 'John Doe', + username: 'john@doe.com', + password: 'thisIsAPassword123', + }, + customTemplate: customTemplate || templates.email.welcomeTemplate, + }); + + templateResponse = _welcomeHtml; + break; + } + case EmailTemplate.ALBUM_UPDATE: { + const { html: _updateAlbumHtml } = await this.notificationRepository.renderEmail({ + template: EmailTemplate.ALBUM_UPDATE, + data: { + baseUrl: getExternalDomain(server, port), + albumId: '1', + albumName: 'Favorite Photos', + recipientName: 'Jane Doe', + cid: undefined, + }, + customTemplate: customTemplate || templates.email.albumInviteTemplate, + }); + templateResponse = _updateAlbumHtml; + break; + } + + case EmailTemplate.ALBUM_INVITE: { + const { html } = await this.notificationRepository.renderEmail({ + template: EmailTemplate.ALBUM_INVITE, + data: { + baseUrl: getExternalDomain(server, port), + albumId: '1', + albumName: "John Doe's Favorites", + senderName: 'John Doe', + recipientName: 'Jane Doe', + cid: undefined, + }, + customTemplate: customTemplate || templates.email.albumInviteTemplate, + }); + templateResponse = html; + break; + } + default: { + templateResponse = ''; + break; + } + } + + return { name, html: templateResponse }; + } + @OnJob({ name: JobName.NOTIFY_SIGNUP, queue: QueueName.NOTIFICATION }) async handleUserSignup({ id, tempPassword }: JobOf) { const user = await this.userRepository.get(id, { withDeleted: false }); @@ -182,7 +245,7 @@ export class NotificationService extends BaseService { return JobStatus.SKIPPED; } - const { server } = await this.getConfig({ withCache: true }); + const { server, templates } = await this.getConfig({ withCache: true }); const { port } = this.configRepository.getEnv(); const { html, text } = await this.notificationRepository.renderEmail({ template: EmailTemplate.WELCOME, @@ -192,6 +255,7 @@ export class NotificationService extends BaseService { username: user.email, password: tempPassword, }, + customTemplate: templates.email.welcomeTemplate, }); await this.jobRepository.queue({ @@ -227,7 +291,7 @@ export class NotificationService extends BaseService { const attachment = await this.getAlbumThumbnailAttachment(album); - const { server } = await this.getConfig({ withCache: false }); + const { server, templates } = await this.getConfig({ withCache: false }); const { port } = this.configRepository.getEnv(); const { html, text } = await this.notificationRepository.renderEmail({ template: EmailTemplate.ALBUM_INVITE, @@ -239,6 +303,7 @@ export class NotificationService extends BaseService { recipientName: recipient.name, cid: attachment ? attachment.cid : undefined, }, + customTemplate: templates.email.albumInviteTemplate, }); await this.jobRepository.queue({ @@ -273,7 +338,7 @@ export class NotificationService extends BaseService { ); const attachment = await this.getAlbumThumbnailAttachment(album); - const { server } = await this.getConfig({ withCache: false }); + const { server, templates } = await this.getConfig({ withCache: false }); const { port } = this.configRepository.getEnv(); for (const recipient of recipients) { @@ -297,6 +362,7 @@ export class NotificationService extends BaseService { recipientName: recipient.name, cid: attachment ? attachment.cid : undefined, }, + customTemplate: templates.email.albumUpdateTemplate, }); await this.jobRepository.queue({ diff --git a/server/src/services/system-config.service.spec.ts b/server/src/services/system-config.service.spec.ts index 2550c15de2..2a20f32933 100644 --- a/server/src/services/system-config.service.spec.ts +++ b/server/src/services/system-config.service.spec.ts @@ -190,6 +190,13 @@ const updatedConfig = Object.freeze({ }, }, }, + templates: { + email: { + albumInviteTemplate: '', + welcomeTemplate: '', + albumUpdateTemplate: '', + }, + }, }); describe(SystemConfigService.name, () => { diff --git a/server/src/utils/replace-template-tags.ts b/server/src/utils/replace-template-tags.ts new file mode 100644 index 0000000000..70333d7dff --- /dev/null +++ b/server/src/utils/replace-template-tags.ts @@ -0,0 +1,5 @@ +export const replaceTemplateTags = (template: string, variables: Record) => { + return template.replaceAll(/{(.*?)}/g, (_, key) => { + return variables[key] || `{${key}}`; + }); +}; diff --git a/web/package-lock.json b/web/package-lock.json index f06484fe8f..15edeb0c28 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -23,7 +23,7 @@ "justified-layout": "^4.1.0", "lodash-es": "^4.17.21", "luxon": "^3.4.4", - "socket.io-client": "^4.7.5", + "socket.io-client": "~4.7.5", "svelte-gestures": "^5.0.4", "svelte-i18n": "^4.0.1", "svelte-local-storage-store": "^0.6.4", 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 28187978f9..30a9fbad5c 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 @@ -17,6 +17,7 @@ import LoadingSpinner from '$lib/components/shared-components/loading-spinner.svelte'; import { handleError } from '$lib/utils/handle-error'; import { SettingInputFieldType } from '$lib/constants'; + import TemplateSettings from '$lib/components/admin-page/settings/template-settings/template-settings.svelte'; interface Props { savedConfig: SystemConfigDto; @@ -162,13 +163,14 @@ - - onReset({ ...options, configKeys: ['notifications'] })} - onSave={() => onSave({ notifications: config.notifications })} - showResetToDefault={!isEqual(savedConfig, defaultConfig)} - {disabled} - /> + + + onReset({ ...options, configKeys: ['notifications', 'templates'] })} + onSave={() => onSave({ notifications: config.notifications, templates: config.templates })} + showResetToDefault={!isEqual(savedConfig, defaultConfig)} + {disabled} + /> diff --git a/web/src/lib/components/admin-page/settings/template-settings/template-settings.svelte b/web/src/lib/components/admin-page/settings/template-settings/template-settings.svelte new file mode 100644 index 0000000000..c27df817c2 --- /dev/null +++ b/web/src/lib/components/admin-page/settings/template-settings/template-settings.svelte @@ -0,0 +1,131 @@ + + +
+
+
+
+ +
+

+ + {$t('admin.template_email_if_empty')} + +

+
+ {#if loadingPreview} + + {/if} + + {#each templateConfigs as { label, templateKey, descriptionTags, templateName }} + +
+ +
+ {/each} +
+
+
+ + {#if htmlPreview} + +
+ +
+
+ {/if} +
+
+