/* Ċ Ġ* ĠCopyright ĠOpen Search ĠContributors Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ*/ Ċ Ċ package Ġorg . opense arch . notifications . core . client Ċ Ċ import Ġcom . amazonaws . Amazon ServiceException Ċ import Ġcom . amazonaws . Sdk Base Exception Ċ import Ġcom . amazonaws . services . simple email . model . Account Sending Paused Exception Ċ import Ġcom . amazonaws . services . simple email . model . Amazon Simple Email ServiceException Ċ import Ġcom . amazonaws . services . simple email . model . Configuration Set DoesNotExist Exception Ċ import Ġcom . amazonaws . services . simple email . model . Configuration Set Sending Paused Exception Ċ import Ġcom . amazonaws . services . simple email . model . Mail From Domain Not Verified Exception Ċ import Ġcom . amazonaws . services . simple email . model . Message Rejected Exception Ċ import Ġcom . amazonaws . services . simple email . model . Raw Message Ċ import Ġcom . amazonaws . services . simple email . model . Send Raw Email Request Ċ import Ġorg . opense arch . notifications . core . Notification Core Plugin . Companion . LOG _ PREFIX Ċ import Ġorg . opense arch . notifications . core . credentials . S es Client Factory Ċ import Ġorg . opense arch . notifications . core . setting . Plugin Settings Ċ import Ġorg . opense arch . notifications . core . utils . Security Access Ċ import Ġorg . opense arch . notifications . core . utils . logger Ċ import Ġorg . opense arch . notifications . spi . model . Destination Message Response Ċ import Ġorg . opense arch . notifications . spi . model . Message Content Ċ import Ġorg . opense arch . notifications . spi . model . destination . S es Destination Ċ import Ġorg . opense arch . rest . Rest Status Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . util . Properties Ċ import Ġjavax . mail . Session Ċ import Ġjavax . mail . internet . Mime Message Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġhandles Ġthe Ġconnections Ġto Ġthe Ġgiven ĠDestination . Ċ Ġ*/ Ċ class ĠDestination S es Client ( private Ġval Ġses Client Factory : ĠS es Client Factory ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġby Ġlogger ( Destination S es Client :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ{@ inheritDoc } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġprepare Session (): ĠSession Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprop Ġ= ĠProperties () ĊĠĠĠĠĠĠĠ Ġprop [" mail . transport . protocol "] Ġ= Ġ" smtp " ĊĠĠĠĠĠĠĠ Ġreturn ĠSession . getInstance ( prop ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġexecute ( ĊĠĠĠĠĠĠĠ Ġses Destination : ĠS es Destination , ĊĠĠĠĠĠĠĠ Ġmessage : ĠMessage Content , ĊĠĠĠĠĠĠĠ Ġreference Id : ĠString ĊĠĠĠ Ġ): ĠDestination Message Response Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Email Message Validator . is Message Size Over Limit ( message )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDestination Message Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRest Status . REQUEST _ ENTITY _ TOO _ LARGE . status , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Email Ġsize Ġlarger Ġthan Ġ${ Plugin Settings . email Size Limit }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġprepare Ġsession ĊĠĠĠĠĠĠĠ Ġval Ġsession Ġ= Ġprepare Session () ĊĠĠĠĠĠĠĠ Ġ// Ġprepare Ġmime Message ĊĠĠĠĠĠĠĠ Ġval Ġmime Message Ġ= ĠEmail Mime Provider . prepare Mime Message ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġses Destination . from Address , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġses Destination . recipient , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġsend ĠMime ĠMessage ĊĠĠĠĠĠĠĠ Ġreturn Ġsend Mime Message ( reference Id , Ġses Destination . aws Region , Ġses Destination . role Arn , Ġmime Message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ{@ inheritDoc } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsend Mime Message ( ĊĠĠĠĠĠĠĠ Ġreference Id : ĠString , ĊĠĠĠĠĠĠĠ Ġses Aws Region : ĠString , ĊĠĠĠĠĠĠĠ Ġrole Arn : ĠString ?, ĊĠĠĠĠĠĠĠ Ġmime Message : ĠMime Message ĊĠĠĠ Ġ): ĠDestination Message Response Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug ("$ LOG _ PREFIX : Sending ĠEmail - SES :$ reference Id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= Ġses Client Factory . create S es Client ( ses Aws Region , Ġrole Arn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSecurity Access . do Priv ileged Ġ{ Ġmime Message . writeTo ( output Stream ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Size Ġ= ĠoutputStream . size () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( email Size Ġ<= ĠPlugin Settings . email Size Limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Message Ġ= ĠRaw Message ( ByteBuffer . wrap ( output Stream . toByteArray ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Email Request Ġ= ĠSend Raw Email Request ( raw Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠSecurity Access . do Priv ileged Ġ{ Ġclient . send Raw Email ( raw Email Request ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info ("$ LOG _ PREFIX : Email - SES :$ reference Id Ġstatus :$ response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDestination Message Response ( Rest Status . OK . status , Ġ" Success :${ response . message Id }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDestination Message Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRest Status . REQUEST _ ENTITY _ TOO _ LARGE . status , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Email Ġsize ($ email Size ) Ġlarger Ġthan Ġ${ Plugin Settings . email Size Limit }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠMessage Rejected Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDestination Message Response ( Rest Status . SERVICE _ UN AVAILABLE . status , ĠgetS es Exception Text ( exception )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠMail From Domain Not Verified Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDestination Message Response ( Rest Status . FOR BID DEN . status , ĠgetS es Exception Text ( exception )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠConfiguration Set DoesNotExist Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDestination Message Response ( Rest Status . NOT _ IMPLEMENTED . status , ĠgetS es Exception Text ( exception )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠConfiguration Set Sending Paused Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDestination Message Response ( Rest Status . SERVICE _ UN AVAILABLE . status , ĠgetS es Exception Text ( exception )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠAccount Sending Paused Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDestination Message Response ( Rest Status . IN SUFF IC IENT _ STORAGE . status , ĠgetS es Exception Text ( exception )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠAmazon Simple Email ServiceException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDestination Message Response ( Rest Status . FAILED _ DEPEND ENCY . status , ĠgetS es Exception Text ( exception )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠAmazon ServiceException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDestination Message Response ( Rest Status . FAILED _ DEPEND ENCY . status , Ġget ServiceException Text ( exception )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠS dk Base Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDestination Message Response ( Rest Status . FAILED _ DEPEND ENCY . status , Ġget Sdk Exception Text ( exception )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġerror Ġstring Ġfrom ĠAmazon ĠS ES ĠExceptions ĊĠĠĠĠ Ġ* Ġ@ param Ġexception ĠS ES ĠException ĊĠĠĠĠ Ġ* Ġ@ return Ġgenerated Ġerror Ġstring ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠgetS es Exception Text ( exception : ĠAmazon Simple Email ServiceException ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info ("$ LOG _ PREFIX : S es Exception Ġ$ exception ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ" send Email ĠError , ĠS ES Ġstatus :${ exception . errorMessage }" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġerror Ġstring Ġfrom ĠAmazon ĠService ĠExceptions ĊĠĠĠĠ Ġ* Ġ@ param Ġexception ĠAmazon ĠService ĠException ĊĠĠĠĠ Ġ* Ġ@ return Ġgenerated Ġerror Ġstring ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget ServiceException Text ( exception : ĠAmazon ServiceException ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info ("$ LOG _ PREFIX : S es Exception Ġ$ exception ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ" send Email ĠError (${ exception . statusCode }), ĠS ES Ġstatus : (${ exception . error Type . name }) ${ exception . errorCode }:${ exception . errorMessage }" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġerror Ġstring Ġfrom ĠAmazon ĠSDK ĠExceptions ĊĠĠĠĠ Ġ* Ġ@ param Ġexception ĠSDK ĠException ĊĠĠĠĠ Ġ* Ġ@ return Ġgenerated Ġerror Ġstring ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Sdk Exception Text ( exception : ĠS dk Base Exception ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info ("$ LOG _ PREFIX : Sdk Exception Ġ$ exception ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ" send Email ĠError , ĠSDK Ġstatus :${ exception . message }" ĊĠĠĠ Ġ} Ċ } Ċ