package Ġcom . tencent . devops . common . auth . api Ċ Ċ import Ġcom . fasterxml . jackson . core . type . Type Reference Ċ import Ġcom . tencent . devops . common . auth . api . pojo . external . Owner Info Ċ import Ġcom . tencent . devops . common . constant . Redis Key Constants Ċ import Ġcom . tencent . devops . common . pojo . G ong f eng Stat Proj VO Ċ import Ġcom . tencent . devops . common . util . Json Util Ċ import Ġcom . tencent . devops . common . util . Ok http Utils Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . data . redis . core . Redis Template Ċ Ċ class ĠG ong f eng Auth Api Ġ@ Autowired Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġredis Template : ĠRedis Template < String , ĠString > Ċ ){ ĊĊĠĠĠ Ġ@ Value ("\ ${ g ong f eng . code . path :# { null }} ") ĊĠĠĠ Ġprivate Ġval Ġgit Code Path : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Value ("\ ${ g ong f eng . code . private Token :# { null }} ") ĊĠĠĠ Ġprivate Ġval Ġgit Private Token : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( G ong f eng Auth Api :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ é¡¹çĽ® æĪĲåĳĺ åĪĹè¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Owners By Project ( projectId : ĠInt ): ĠList < Owner Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpage Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġdata Size : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġowners : ĠMutable List < Owner Info > Ġ= Ġmutable ListOf (); ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ"$ git Code Path / api / v 3 / projects /${ projectId }/ members / all ? page =$ page & per _ page = 1 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠOk http Utils . do Get ( url , Ġmap Of (" PRIVATE - TOKEN " Ġto Ġgit Private Token !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmember List : ĠList < Owner Info > Ġ= ĠJson Util . getObject Mapper (). readValue ( result , Ġobject Ġ: ĠType Reference < List < Owner Info >>() Ġ{}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( member List . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġowners ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowners . addAll ( member List ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Size Ġ= Ġmember List . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" get Ġproject Ġmember Ġinfo Ġfail ! Ġg ong f eng Ġid : Ġ$ projectId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġowners ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( data Size Ġ>= Ġ 1 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġowners ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠéĢļè¿ĩ çĶ¨æĪ· id åĴĮ é¡¹çĽ® éªĮè¯ģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġauth By UserId And Project ( userId : ĠString , ĠprojectId : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpage Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġdata Size : ĠInt ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ"$ git Code Path / api / v 3 / projects /${ projectId }/ members / all ? page =$ page & per _ page = 1 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠOk http Utils . do Get ( url , Ġmap Of (" PRIVATE - TOKEN " Ġto Ġgit Private Token !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmember List : ĠList < Owner Info > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Util . getObject Mapper (). readValue ( result , Ġobject Ġ: ĠType Reference < List < Owner Info >>() Ġ{}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( member List . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Size Ġ= Ġmember List . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġmember List . find Ġ{ Ġit . userName Ġ== ĠuserId Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" get Ġproject Ġmember Ġinfo Ġfail ! Ġuser Ġid : Ġ$ userId , Ġg ong f eng Ġid : Ġ$ projectId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( data Size Ġ>= Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ æĺ¯åĲ¦ æĺ¯ é¡¹çĽ® owner ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġjudge If Project Owner ( userId : ĠString , ĠprojectName : ĠString , ĠgroupId Ġ: ĠInt ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ"$ git Code Path / api / stat / v 1 / namespace /$ groupId / projects / statistics ? search =$ projectName " ĊĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠOk http Utils . do Get ( url , Ġmap Of (" PRIVATE - TOKEN " Ġto Ġgit Private Token !! )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatistic List Ġ: ĠList < G ong f eng Stat Proj VO > Ġ= ĠJson Util . getObject Mapper (). readValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult , Ġobject Ġ: ĠType Reference < List < G ong f eng Stat Proj VO >>() Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( statistic List . isNull OrEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" no Ġstatistic Ġinfo Ġfound ! Ġproject Ġname : Ġ$ projectName ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstatistic List [ 0 ]. owners !!. indexOf ( userId ) Ġ>= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" judge Ġproject Ġowner Ġfail , Ġuser Ġid : Ġ$ userId , Ġproject Ġname : Ġ$ projectName ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbg ç»´ åº¦ åĪ¤æĸŃ ç®¡çĲĨåĳĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġauth By Bg Level Admin ( userId : ĠString , ĠtaskId Ġ: ĠLong ) Ġ: ĠBoolean { ĊĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" start Ġto Ġauth Ġbg Ġlevel Ġadmin ! Ġuser Ġid Ġ: Ġ$ userId , Ġtask Ġid Ġ: Ġ$ taskId ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbg Id Ġ= Ġredis Template . ops For Hash < String , ĠString >(). get ( Redis Key Constants . KEY _ TASK _ BG _ MAPPING , ĠtaskId . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( bg Id . isNull Or Blank ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser List Ġ= Ġredis Template . ops For Hash < String , ĠString >(). get ( Redis Key Constants . KEY _ USER _ BG _ ADMIN , Ġbg Id )?. split ("; ") Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuser List . contains ( userId ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" g ong f eng Ġscan Ġbg Ġadmin Ġauthorization Ġfail ! Ġuser : Ġ$ userId , Ġtask Ġid Ġ: Ġ$ taskId ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® é¡¹çĽ® æĪĲåĳĺ æ¸ħ åįķ è®¾ç½® owner ä¿¡æģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġg ong f eng Auth By Project ( userId : ĠString , ĠprojectId : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpage Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġdata Size : ĠInt ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ"$ git Code Path / api / v 3 / projects /$ projectId / members ? page =$ page & per _ page = 1 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠOk http Utils . do Get ( url , Ġmap Of (" PRIVATE - TOKEN " Ġto Ġgit Private Token !! )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġowner List : ĠList < Owner Info > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Util . getObject Mapper (). readValue ( result , Ġobject Ġ: ĠType Reference < List < Owner Info >>() Ġ{}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( owner List . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Size Ġ= Ġowner List . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( userId Ġ== Ġit . userName Ġ&& Ġit . access Level !! Ġ>= Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" get Ġproject Ġmember Ġlist Ġfail ! Ġproject Ġid : Ġ$ projectId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( data Size Ġ>= Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® é¡¹çĽ® ç»Ħ æĪĲåĳĺ æ¸ħ åįķ è®¾ç½® owner ä¿¡æģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġg ong f eng Auth By Group ( userId : ĠString , ĠgroupId : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpage Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġdata Size : ĠInt ĊĠĠĠĠĠĠĠ Ġ// 1 . ĠæŁ¥ é¡¹çĽ® owner ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ"$ git Code Path / api / v 3 / groups /$ groupId / members ? page =$ page & per _ page = 1 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠOk http Utils . do Get ( url , Ġmap Of (" PRIVATE - TOKEN " Ġto Ġgit Private Token !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġowner List : ĠList < Owner Info > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Util . getObject Mapper (). readValue ( result , Ġobject Ġ: ĠType Reference < List < Owner Info >>() Ġ{}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( owner List . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Size Ġ= Ġowner List . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( userId Ġ== Ġit . userName Ġ&& Ġit . access Level !! Ġ>= Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" get Ġgroup Ġmember Ġinfo Ġfail ! Ġgroup Ġid : Ġ$ groupId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( data Size Ġ>= Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ }