// ĠCopyright Ġ 2 0 0 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . intellij . credential Store Ċ Ċ import Ġcom . intellij . ide . password Safe . Password Safe Ċ import Ġcom . intellij . util . text . nul lize Ċ import Ġorg . jetbrains . annotations . Contract Ċ Ċ const Ġval ĠSERVICE _ NAME _ PREFIX Ġ= Ġ" Int elli J ĠPlatform " Ċ Ċ /** Ċ Ġ* ĠThe Ġcombined Ġname Ġof Ġyour Ġservice Ġand Ġname Ġof Ġservice Ġthat Ġrequires Ġauthentication . Ċ Ġ* Ċ Ġ* ĠCan Ġbe Ġspecified Ġin : Ċ Ġ* Ġ* Ġreverse - DNS Ġformat : Ġ` com . apple . fac etime : Ġregistration V 1 ` Ċ Ġ* Ġ* Ġprefixed Ġhuman - readable Ġformat : Ġ` Int elli J ĠPlatform ĠSettings ĠRepository ĠâĢĶ Ġgithub . com `, Ġwhere Ġ` Int elli J ĠPlatform ` Ġis Ġa Ġrequired Ġprefix . Ġ** You Ġmust Ġalways Ġuse Ġthis Ġprefix **. Ċ Ġ*/ Ċ fun Ġgenerate ServiceName ( subsystem : ĠString , Ġkey : ĠString ) Ġ= Ġ"$ SERVICE _ NAME _ PREFIX Ġ$ subsystem ĠâĢĶ Ġ$ key " Ċ Ċ /** Ċ Ġ* ĠConsider Ġusing Ġ[ generate ServiceName ] Ġto Ġgenerate Ġ[ serviceName ]. Ċ Ġ* Ċ Ġ* Ġ[ request or ] Ġis Ġdeprecated Ġ( never Ġuse Ġit Ġin Ġa Ġnew Ġcode ). Ċ Ġ*/ Ċ data Ġclass ĠCredential Attributes ( ĊĠ Ġval ĠserviceName : ĠString , ĊĠ Ġval ĠuserName : ĠString ? Ġ= Ġnull , ĊĠ Ġval Ġrequest or : ĠClass < *> ? Ġ= Ġnull , ĊĠ Ġval Ġis Password Memory Only : ĠBoolean Ġ= Ġfalse , ĊĠ Ġval Ġcache Denied Items : ĠBoolean Ġ= Ġtrue Ċ ) Ġ{ ĊĠ Ġ@ Jvm Over loads ĊĠ Ġconstructor ( serviceName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserName : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest or : ĠClass < *> ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Password Memory Only : ĠBoolean Ġ= Ġfalse ) ĊĠĠĠ Ġ: Ġthis ( serviceName , ĠuserName , Ġrequest or , Ġis Password Memory Only , Ġtrue ) Ċ } Ċ Ċ /** Ċ Ġ* ĠPair Ġof Ġuser Ġand Ġpassword . Ċ Ġ* Ċ Ġ* Ġ@ param Ġuser ĠAccount Ġname Ġ(" John ") Ġor Ġpath Ġto ĠSSH Ġkey Ġfile Ġ(" / Users / john /. ssh / id _ rsa "). Ċ Ġ* Ġ@ param Ġpassword ĠCan Ġbe Ġempty . Ċ Ġ*/ Ċ class ĠCredentials ( user : ĠString ?, Ġval Ġpassword : ĠOne Time String ? Ġ= Ġnull ) Ġ{ ĊĠ Ġconstructor ( user : ĠString ?, Ġpassword : ĠString ?) Ġ: Ġthis ( user , Ġpassword ?. let (:: One Time String )) ĊĊĠ Ġconstructor ( user : ĠString ?, Ġpassword : ĠChar Array ?) Ġ: Ġthis ( user , Ġpassword ?. let Ġ{ ĠOne Time String ( it ) Ġ}) ĊĊĠ Ġconstructor ( user : ĠString ?, Ġpassword : ĠByteArray ?) Ġ: Ġthis ( user , Ġpassword ?. let Ġ{ ĠOne Time String ( password ) Ġ}) ĊĊĠ Ġval ĠuserName Ġ= Ġuser . nul lize () ĊĊĠ Ġfun Ġget Password AsString () Ġ= Ġpassword ?. toString () ĊĊĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= Ġother Ġis ĠCredentials Ġ&& ĠuserName Ġ== Ġother . userName Ġ&& Ġpassword Ġ== Ġother . password ĊĊĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġ( userName ?. hashCode () Ġ?: Ġ 0 ) Ġ* Ġ 3 7 Ġ+ Ġ( password ?. hashCode () Ġ?: Ġ 0 ) ĊĊĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" userName : Ġ$ userName , Ġpassword Ġsize : Ġ${ password ?. length Ġ?: Ġ 0 }" Ċ } Ċ Ċ /** Ġ@ deprecated ĠUse Ġ[ Credential Attributes ] Ġinstead . Ġ*/ Ċ @ Deprecated (" Never Ġuse Ġit Ġin Ġa Ġnew Ġcode .") Ċ @ Suppress (" FunctionName ", Ġ" Deprecated Callable Add Replace With ") Ċ fun ĠCredential Attributes ( request or : ĠClass <* >, ĠuserName : ĠString ?) Ġ= ĠCredential Attributes ( request or . name , ĠuserName , Ġrequest or ) Ċ Ċ @ Contract (" null Ġ-> Ġfalse ") Ċ fun ĠCredentials ?. is Ful filled () Ġ= Ġthis Ġ!= Ġnull Ġ&& ĠuserName Ġ!= Ġnull Ġ&& Ġ! password . isNull OrEmpty () Ċ Ċ @ Contract (" null Ġ-> Ġfalse ") Ċ fun ĠCredentials ?. has Only UserName () Ġ= Ġthis Ġ!= Ġnull Ġ&& ĠuserName Ġ!= Ġnull Ġ&& Ġpassword . isNull OrEmpty () Ċ Ċ fun ĠCredentials ?. isEmpty () Ġ= Ġthis Ġ== Ġnull Ġ|| Ġ( userName Ġ== Ġnull Ġ&& Ġpassword . isNull OrEmpty ()) Ċ Ċ /** Ċ Ġ* ĠT ries Ġto Ġget Ġcredentials Ġboth Ġby Ġ` new Attributes ` Ġand Ġ` old Attributes `, Ġand Ġif Ġthey Ġare Ġavailable Ġby Ġ` old Attributes ` Ġmigr ates Ġold Ġto Ġnew , Ċ Ġ* Ġi . e . Ġremoves Ġ` old Attributes ` Ġfrom Ġthe Ġcredentials Ġstore , Ġand Ġadds Ġ` new Attributes ` Ġinstead . Ċ Ġ*/ Ċ fun Ġget And Migrate Credentials ( old Attributes : ĠCredential Attributes , Ġnew Attributes : ĠCredential Attributes ): ĠCredentials ? Ġ{ ĊĠ Ġreturn ĠPassword Safe . instance . get ( new Attributes ) Ċ }