package Ġorg . oss ia ust ria . am igo . platform . rest Ċ Ċ import Ġorg . oss ia ust ria . am igo . platform . domain . models . Account Ċ import Ġorg . oss ia ust ria . am igo . platform . domain . services . Person Profile Service Ċ import Ġorg . oss ia ust ria . am igo . platform . domain . services . auth . Auth Service Ċ import Ġorg . oss ia ust ria . am igo . platform . domain . services . auth . Token UserDetails Ċ import Ġorg . oss ia ust ria . am igo . platform . exceptions . User NotFoundException Ċ import Ġorg . springframework . security . core . Authentication Ċ import Ġorg . springframework . security . core . context . SecurityContext Holder Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ interface ĠCurrent UserService Ġ{ ĊĠĠĠ Ġfun Ġauthentication (): ĠAuthentication ĊĠĠĠ Ġfun Ġauthentication OrNull (): ĠAuthentication ? ĊĊĠĠĠ Ġ// ĠĠĠ Ġfun Ġperson (): ĠPerson ĊĠĠĠ Ġfun Ġaccount (): ĠAccount Ċ } Ċ Ċ @ Component Ċ class ĠSimple Current UserService ( ĊĠĠĠ Ġval Ġauth Service : ĠAuth Service , ĊĠĠĠ Ġval Ġperson Service : ĠPerson Profile Service Ċ ) Ġ: ĠCurrent UserService Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġauthentication (): ĠAuthentication Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSecurity Context Holder . getContext (). authentication ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġauthentication OrNull (): ĠAuthentication ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSecurity Context Holder . getContext (). authentication ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġoverride Ġfun Ġperson (): ĠPerson Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġtoken UserDetails : ĠToken UserDetails Ġ= Ġauthentication (). principal Ġas ĠToken UserDetails Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġperson Service . findById ( token UserDetails . persons Ids . first ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠUser NotFoundException () Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġaccount (): ĠAccount Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoken UserDetails : ĠToken UserDetails Ġ= Ġauthentication (). principal Ġas ĠToken UserDetails ĊĠĠĠĠĠĠĠ Ġreturn Ġauth Service . findById ( token UserDetails . accountId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠUser NotFoundException () ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ