package Ġdog bin . db . model . user Ċ Ċ import Ġdog bin . db . util . Password Ċ import Ġjet brains . ex od us . entity store . Entity Ċ import Ġkotlinx . dn q .* Ċ import Ġkotlinx . dn q . creator . find Or New Ċ import Ġkotlinx . dn q . simple . require If Ċ import Ġjava . util .* Ċ Ċ class ĠUser ( entity : ĠEntity ) Ġ: ĠX d Entity ( entity ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠX d Natural EntityType < User >() Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew An on () Ġ= Ġnew Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠUser State . AN ONY MO US ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind Or New System ( username : ĠString ) Ġ= Ġfind Or New Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . username Ġ= Ġusername ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠUser State . ACTIVE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrole Ġ= ĠUser Role . SYSTEM ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġusername Ġby Ġx d Required String Prop ( unique Ġ= Ġtrue , Ġtrimmed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġvar Ġpassword Ġby Ġx d String Prop Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire If Ġ{ Ġstate . requires Password Ġ&& Ġrole ?. no Sign in Ġ!= Ġtrue Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġrole Ġby Ġx d Link 0 _ 1 ( UserRole ) ĊĠĠĠ Ġvar Ġstate Ġby Ġx d Link 1 ( User State ) ĊĊĠĠĠ Ġval ĠdisplayName Ġget () Ġ= Ġstate . username Override Ġ?: Ġusername ĊĊĠĠĠ Ġfun Ġset Pw ( password : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . password Ġ= ĠPassword . hash ( password ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Pw ( candidate : ĠString ) Ġ= Ġpassword Ġ!= Ġnull Ġ&& ĠPassword . verify ( candidate , Ġpassword !! ). verified Ċ }