/* Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ* Ċ Ġ* ĠThe ĠOpen Search ĠContributors Ġrequire Ġcontributions Ġmade Ġto Ċ Ġ* Ġthis Ġfile Ġbe Ġlicensed Ġunder Ġthe ĠApache - 2 . 0 Ġlicense Ġor Ġa Ċ Ġ* Ġcompatible Ġopen Ġsource Ġlicense . Ċ Ġ* Ċ Ġ* ĠMod ifications ĠCopyright ĠOpen Search ĠContributors . ĠSee Ċ Ġ* ĠGitHub Ġhistory Ġfor Ġdetails . Ċ Ġ*/ Ċ Ċ /* Ċ Ġ* ĠĠ ĠCopyright Ġ 2 0 1 9 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ Ġ* Ċ Ġ* ĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "). Ċ Ġ* ĠĠ ĠYou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠĠ ĠA Ġcopy Ġof Ġthe ĠLicense Ġis Ġlocated Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠĠ Ġor Ġin Ġthe Ġ" license " Ġfile Ġaccompanying Ġthis Ġfile . ĠThis Ġfile Ġis Ġdistributed Ċ Ġ* ĠĠ Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ċ Ġ* ĠĠ Ġexpress Ġor Ġimplied . ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ċ Ġ* ĠĠ Ġpermissions Ġand Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . amazon . opend ist ro fore lastic search . alert ing . settings Ċ Ċ import Ġcom . amazon . opend ist ro fore lastic search . alert ing . util . Destination Type Ċ import Ġorg . opense arch . common . settings . Secure Setting Ċ import Ġorg . opense arch . common . settings . Secure String Ċ import Ġorg . opense arch . common . settings . Setting Ċ import Ġorg . opense arch . common . settings . Settings Ċ import Ġjava . util . function . Function Ċ Ċ /** Ċ Ġ* ĠSettings Ġspecific Ġto ĠDest inations . ĠThis Ġclass Ġis Ġseparated Ġfrom Ġthe Ġgeneral ĠAlert ing Settings Ġsince Ġsome ĠDestination Ċ Ġ* Ġtypes Ġrequire ĠSecure Settings Ġand Ġneed Ġadditional Ġlogic Ġfor Ġretrieving Ġand Ġloading Ġthem . Ċ Ġ*/ Ċ class ĠDestination Settings Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEST INATION _ SETTING _ PREFIX Ġ= Ġ" opend ist ro . alert ing . destination ." ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠE MAIL _ DEST INATION _ SETTING _ PREFIX Ġ= ĠDEST INATION _ SETTING _ PREFIX Ġ+ Ġ" email ." ĊĠĠĠĠĠĠĠ Ġval ĠALLOW _ LIST _ ALL Ġ= ĠDestination Type . values (). toList (). map Ġ{ Ġit . value Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠALLOW _ LIST _ NONE Ġ= Ġempty List < String >() ĊĊĠĠĠĠĠĠĠ Ġval ĠALLOW _ LIST : ĠSetting < List < String >> Ġ= ĠSetting . list Setting ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDEST INATION _ SETTING _ PREFIX Ġ+ Ġ" allow _ list ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠALLOW _ LIST _ ALL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFunction . identity (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSetting . Property . Node Scope , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSetting . Property . Dynamic ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠE MAIL _ USERNAME : ĠSetting . Aff ix Setting < Secure String > Ġ= ĠSetting . aff ix Key Setting ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE MAIL _ DEST INATION _ SETTING _ PREFIX , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" username ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠN eeded Ġto Ġco erce Ġlambda Ġto ĠFunction Ġtype Ġfor Ġsome Ġreason Ġto Ġavoid Ġargument Ġmismatch Ġcompile Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Ġ{ Ġkey : ĠString Ġ-> ĠSecure Setting . secure String ( key , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠE MAIL _ PASSWORD : ĠSetting . Aff ix Setting < Secure String > Ġ= ĠSetting . aff ix Key Setting ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE MAIL _ DEST INATION _ SETTING _ PREFIX , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" password ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠN eeded Ġto Ġco erce Ġlambda Ġto ĠFunction Ġtype Ġfor Ġsome Ġreason Ġto Ġavoid Ġargument Ġmismatch Ġcompile Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Ġ{ Ġkey : ĠString Ġ-> ĠSecure Setting . secure String ( key , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠHOST _ DEN Y _ LIST : ĠSetting < List < String >> Ġ= ĠSetting . list Setting ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" opend ist ro . destination . host . deny _ list ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List < String >(), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction . identity (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSetting . Property . Node Scope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSetting . Property . Final ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġload Destination Settings ( settings : ĠSettings ): ĠMap < String , ĠSecure Destination Settings > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġloading ĠEmail ĠDestination Ġsettings Ġfor Ġnow Ġsince Ġthose Ġare Ġthe Ġonly Ġsecure Ġsettings Ġneeded . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthis Ġlogic Ġneeds Ġto Ġbe Ġexpanded Ġto Ġsupport Ġother ĠDest inations , Ġdifferent Ġgroups Ġcan Ġbe Ġretrieved Ġsimilar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġemail Account Names Ġbased Ġon Ġthe Ġsetting Ġnamespace Ġand ĠSecure Destination Settings Ġshould Ġbe Ġexpanded Ġto Ġsupport ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthese Ġnew Ġsettings . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Account Names : ĠSet < String > Ġ= Ġsettings . get Groups ( EMAIL _ DEST INATION _ SETTING _ PREFIX ). keys ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Accounts : ĠMutable Map < String , ĠSecure Destination Settings > Ġ= Ġmutable Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( email AccountName Ġin Ġemail Account Names ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġadding Ġthe Ġsettings Ġif Ġthey Ġexist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Secure Destination Settings ( settings , Ġemail AccountName )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Accounts [ email AccountName ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġemail Accounts ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Secure Destination Settings ( settings : ĠSettings , Ġemail AccountName : ĠString ): ĠSecure Destination Settings ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUsing Ġ' use ' Ġto Ġem ulate ĠJava 's Ġtry - with - resources Ġon Ġmultiple Ġclose able Ġresources . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠValues Ġare Ġcloned Ġso Ġthat Ġwe Ġmaintain Ġa ĠSecure String , Ġthe Ġoriginal ĠSecure Strings Ġwill Ġbe Ġclosed Ġafter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthey Ġhave Ġleft Ġthe Ġscope Ġof Ġthis Ġfunction . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Email Setting Value ( settings , Ġemail AccountName , ĠE MAIL _ USERNAME )?. use Ġ{ Ġemail Username Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Email Setting Value ( settings , Ġemail AccountName , ĠE MAIL _ PASSWORD )?. use Ġ{ Ġemail Password Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSecure Destination Settings ( email Username Ġ= Ġemail Username . clone (), Ġemail Password Ġ= Ġemail Password . clone ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġ< T > Ġget Email Setting Value ( settings : ĠSettings , Ġemail AccountName : ĠString , Ġemail Setting : ĠSetting . Aff ix Setting < T >): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconcrete Setting Ġ= Ġemail Setting . get Concrete Setting For Namespace ( email AccountName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconcrete Setting . get ( settings ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠSecure Destination Settings ( val Ġemail Username : ĠSecure String , Ġval Ġemail Password : ĠSecure String ) ĊĠĠĠ Ġ} Ċ } Ċ