package Ġcom . one hyper net . demo . command Ċ Ċ import Ġcom . one hyper net . demo . component . Application Properties Ċ import Ġcom . one hyper net . demo . component . Password Hashes Ċ import Ġcom . one hyper net . demo . component . security . Jwt Token Provider Ċ import Ġcom . one hyper net . demo . component . validator . Validator Ċ import Ġcom . one hyper net . demo . exception . Email Or Password NotFoundException Ċ import Ġcom . one hyper net . demo . model . entity . User Entity Ċ import Ġcom . one hyper net . demo . model . enumerate . UserRole Ċ import Ġcom . one hyper net . demo . model . request . Account Request Ċ import Ġcom . one hyper net . demo . model . response . Login Response Ċ import Ġcom . one hyper net . demo . repository . UserRepository Ċ import Ġorg . springframework . stereotype . Service Ċ Ċ @ Service Ċ class ĠAdmin Login Cmd ( ĊĠĠĠ Ġprivate Ġval Ġuser Repository : ĠUser Repository , ĊĠĠĠ Ġprivate Ġval Ġvalidator : ĠValidator , ĊĠĠĠ Ġprivate Ġval Ġjwt Token Provider : ĠJwt Token Provider , ĊĠĠĠ Ġprivate Ġval Ġapp Properties : ĠApplication Properties , ĊĠĠĠ Ġprivate Ġval Ġpassword Hashes : ĠPassword Hashes Ċ ) Ġ{ ĊĠĠĠ Ġoperator Ġfun Ġinvoke ( request : ĠAccount Request ): ĠLogin Response Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( validator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Email ( request . email ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Password ( request . password ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Admin Email ( request . email ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġuser Ġ= Ġuser Repository . findBy Email ( request . email ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( user Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġcreate New Admin User ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġuser Repository . save ( user ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user . password Ġ!= Ġpassword Hashes . digest ( request . password )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( user Ġ== Ġnull ) Ġthrow ĠEmail Or Password NotFoundException () ĊĊĠĠĠĠĠĠĠ Ġval ĠaccessToken Ġ= Ġjwt Token Provider . create Token ( user . id , Ġuser . role ) ĊĠĠĠĠĠĠĠ Ġreturn ĠLogin Response ( accessToken , Ġuser . email , Ġ" Admin ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate New Admin User ( request : ĠAccount Request ): ĠUser Entity Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUser Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġrequest . email , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġpassword Hashes . digest ( app Properties . admin Default Password ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrole Ġ= ĠUser Role . Admin ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ }