From a0e32f863de62099700bddfc09b2e3c340fa1306 Mon Sep 17 00:00:00 2001 From: Dave Allison Date: Mon, 14 Apr 2025 16:09:01 +0100 Subject: [PATCH 1/4] Send an e-mail if a sensitive project is created --- app/controllers/ProjectEntryController.scala | 13 +++++++++++-- build.sbt | 3 +++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/controllers/ProjectEntryController.scala b/app/controllers/ProjectEntryController.scala index c058ae12..a5e241e3 100644 --- a/app/controllers/ProjectEntryController.scala +++ b/app/controllers/ProjectEntryController.scala @@ -24,7 +24,7 @@ import slick.dbio.DBIOAction import slick.jdbc.PostgresProfile import slick.jdbc.PostgresProfile.api._ import slick.lifted.TableQuery - +import play.api.libs.mailer._ import java.io.File import java.nio.file.Paths import java.time.ZonedDateTime @@ -67,7 +67,7 @@ class ProjectEntryController @Inject() (@Named("project-creation-actor") project @Named("auditor") auditor:ActorRef, override val controllerComponents:ControllerComponents, override val bearerTokenAuth:BearerTokenAuth, storageHelper:StorageHelper) - (implicit fileEntryDAO:FileEntryDAO, assetFolderFileEntryDAO:AssetFolderFileEntryDAO, injector: Injector, mat: Materializer) + (implicit fileEntryDAO:FileEntryDAO, assetFolderFileEntryDAO:AssetFolderFileEntryDAO, injector: Injector, mat: Materializer, mailerClient: MailerClient) extends GenericDatabaseObjectControllerWithFilter[ProjectEntry,ProjectEntryFilterTerms] with ProjectEntrySerializer with ProjectRequestSerializer with ProjectEntryFilterTermsSerializer with UpdateTitleRequestSerializer with FileEntrySerializer with AssetFolderFileEntrySerializer @@ -369,6 +369,15 @@ class ProjectEntryController @Inject() (@Named("project-creation-actor") project case GenericCreationActor.ProjectCreateSucceeded(succeededRequest, projectEntry)=> logger.info(s"Created new project: $projectEntry") sendToRabbitMq(CreateOperation(), projectEntry, rabbitMqPropagator) + if (projectEntry.sensitive == Some(true)) { + logger.info(s"Sensitive project created.") + val email = Email( config.get[String]("mail.subject"), s"${config.get[String]("mail.sender_name")} FROM <${config.get[String]("mail.sender_address")}>", Seq(s"${config.get[String]("mail.recipient_name")} TO <${config.get[String]("mail.recipient_address")}>"), bodyText = Some(config.get[String]("mail.body"))) + try { + mailerClient.send(email) + } catch { + case e: Exception => logger.error(s"Sending e-mail failed with error: $e") + } + } Ok(Json.obj("status"->"ok","detail"->"created project", "projectId"->projectEntry.id.get)) case GenericCreationActor.ProjectCreateFailed(failedRequest, error)=> logger.error("Could not create new project", error) diff --git a/build.sbt b/build.sbt index 8eac32e2..89d74319 100644 --- a/build.sbt +++ b/build.sbt @@ -128,6 +128,9 @@ libraryDependencies ++= Seq( "software.amazon.awssdk" % "url-connection-client" % awsSdk2Version ) +libraryDependencies += "com.typesafe.play" %% "play-mailer" % "8.0.1" +libraryDependencies += "com.typesafe.play" %% "play-mailer-guice" % "8.0.1" + enablePlugins(UniversalPlugin) enablePlugins(LinuxPlugin) From 86266fde169dc362e28050d1b869061f7f42fca3 Mon Sep 17 00:00:00 2001 From: Dave Allison Date: Tue, 15 Apr 2025 11:21:32 +0100 Subject: [PATCH 2/4] Removing text --- app/controllers/ProjectEntryController.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ProjectEntryController.scala b/app/controllers/ProjectEntryController.scala index a5e241e3..ac2f7d32 100644 --- a/app/controllers/ProjectEntryController.scala +++ b/app/controllers/ProjectEntryController.scala @@ -371,7 +371,7 @@ class ProjectEntryController @Inject() (@Named("project-creation-actor") project sendToRabbitMq(CreateOperation(), projectEntry, rabbitMqPropagator) if (projectEntry.sensitive == Some(true)) { logger.info(s"Sensitive project created.") - val email = Email( config.get[String]("mail.subject"), s"${config.get[String]("mail.sender_name")} FROM <${config.get[String]("mail.sender_address")}>", Seq(s"${config.get[String]("mail.recipient_name")} TO <${config.get[String]("mail.recipient_address")}>"), bodyText = Some(config.get[String]("mail.body"))) + val email = Email( config.get[String]("mail.subject"), s"${config.get[String]("mail.sender_name")} <${config.get[String]("mail.sender_address")}>", Seq(s"${config.get[String]("mail.recipient_name")} <${config.get[String]("mail.recipient_address")}>"), bodyText = Some(config.get[String]("mail.body"))) try { mailerClient.send(email) } catch { From b73d9f526eba519fa2b07215876258eea44a2989 Mon Sep 17 00:00:00 2001 From: Dave Allison Date: Tue, 15 Apr 2025 11:40:53 +0100 Subject: [PATCH 3/4] Populate the e-mail body with useful text --- app/controllers/ProjectEntryController.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ProjectEntryController.scala b/app/controllers/ProjectEntryController.scala index ac2f7d32..27a1d24c 100644 --- a/app/controllers/ProjectEntryController.scala +++ b/app/controllers/ProjectEntryController.scala @@ -371,8 +371,8 @@ class ProjectEntryController @Inject() (@Named("project-creation-actor") project sendToRabbitMq(CreateOperation(), projectEntry, rabbitMqPropagator) if (projectEntry.sensitive == Some(true)) { logger.info(s"Sensitive project created.") - val email = Email( config.get[String]("mail.subject"), s"${config.get[String]("mail.sender_name")} <${config.get[String]("mail.sender_address")}>", Seq(s"${config.get[String]("mail.recipient_name")} <${config.get[String]("mail.recipient_address")}>"), bodyText = Some(config.get[String]("mail.body"))) try { + val email = Email( config.get[String]("mail.subject"), s"${config.get[String]("mail.sender_name")} <${config.get[String]("mail.sender_address")}>", Seq(s"${config.get[String]("mail.recipient_name")} <${config.get[String]("mail.recipient_address")}>"), bodyText = Some(s"A sensitive project has been created by ${projectEntry.user}. It has the identity number ${projectEntry.id.get} and the tile '${projectEntry.projectTitle}'")) mailerClient.send(email) } catch { case e: Exception => logger.error(s"Sending e-mail failed with error: $e") From 787f4ad91afcdae85a745ca5a9867736a33d6816 Mon Sep 17 00:00:00 2001 From: Dave Allison Date: Tue, 15 Apr 2025 11:57:35 +0100 Subject: [PATCH 4/4] Adding full stop --- app/controllers/ProjectEntryController.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ProjectEntryController.scala b/app/controllers/ProjectEntryController.scala index 27a1d24c..10a542ac 100644 --- a/app/controllers/ProjectEntryController.scala +++ b/app/controllers/ProjectEntryController.scala @@ -372,7 +372,7 @@ class ProjectEntryController @Inject() (@Named("project-creation-actor") project if (projectEntry.sensitive == Some(true)) { logger.info(s"Sensitive project created.") try { - val email = Email( config.get[String]("mail.subject"), s"${config.get[String]("mail.sender_name")} <${config.get[String]("mail.sender_address")}>", Seq(s"${config.get[String]("mail.recipient_name")} <${config.get[String]("mail.recipient_address")}>"), bodyText = Some(s"A sensitive project has been created by ${projectEntry.user}. It has the identity number ${projectEntry.id.get} and the tile '${projectEntry.projectTitle}'")) + val email = Email( config.get[String]("mail.subject"), s"${config.get[String]("mail.sender_name")} <${config.get[String]("mail.sender_address")}>", Seq(s"${config.get[String]("mail.recipient_name")} <${config.get[String]("mail.recipient_address")}>"), bodyText = Some(s"A sensitive project has been created by ${projectEntry.user}. It has the identity number ${projectEntry.id.get} and the tile '${projectEntry.projectTitle}'.")) mailerClient.send(email) } catch { case e: Exception => logger.error(s"Sending e-mail failed with error: $e")