/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ċ Ġ* Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ċ Ġ* Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe Ċ Ġ* ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN Ċ Ġ* ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , Ċ Ġ* ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE Ċ Ġ* ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . devops . common . auth . api Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . tencent . devops . common . api . exception . Remote ServiceException Ċ import Ġcom . tencent . devops . common . api . util . Ok http Utils Ċ import Ġcom . tencent . devops . common . auth . api . pojo . Bk Auth Group Ċ import Ġcom . tencent . devops . common . auth . api . pojo . Bk Auth Group And UserList Ċ import Ġcom . tencent . devops . common . auth . api . pojo . Bk Auth Project Code And Id Ċ import Ġcom . tencent . devops . common . auth . api . pojo . Bk Auth Response Ċ import Ġcom . tencent . devops . common . auth . code . Auth Service Code Ċ import Ġokhttp 3 . Request Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ class ĠBS Auth Project Api Ġ@ Autowired Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġbk Auth Properties : ĠB k Auth Properties , ĊĠĠĠ Ġprivate Ġval ĠobjectMapper : ĠObjectMapper , ĊĠĠĠ Ġprivate Ġval Ġbs AuthToken Api : ĠBS AuthToken Api , ĊĠĠĠ Ġprivate Ġval Ġbs CC Project Api : ĠB SCC Project Api Ċ ) Ġ: ĠAuth Project Api Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġis Project User ( ĊĠĠĠĠĠĠĠ Ġuser : ĠString , ĊĠĠĠĠĠĠĠ Ġservice Code : ĠAuth Service Code , ĊĠĠĠĠĠĠĠ Ġproject Code : ĠString , ĊĠĠĠĠĠĠĠ Ġgroup : ĠB k Auth Group ? ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Project Users ( service Code , Ġproject Code , Ġgroup ). contains ( user ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Project Users ( service Code : ĠAuth Service Code , Ġproject Code : ĠString , Ġgroup : ĠB k Auth Group ?): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠaccessToken Ġ= Ġbs AuthToken Api . get AccessToken ( service Code ) ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġif Ġ( group Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ bk Auth Properties . url }/ projects /$ project Code / users ? access _ token =$ accessToken " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ bk Auth Properties . url }/ projects /$ project Code / users ? access _ token =$ accessToken & group _ code =${ group . value }" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url ( url ). get (). build () ĊĠĠĠĠĠĠĠ ĠOk http Utils . do Http ( request ). use Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Content Ġ= Ġresponse . body () !!. string () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Fail Ġto Ġget Ġproject Ġusers . Ġ$ response Content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRemote ServiceException (" Fail Ġto Ġget Ġproject Ġusers ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Object Ġ= ĠobjectMapper . readValue < Bk Auth Response < List < String >> >( response Content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Object . code Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Object . code Ġ== ĠHTTP _ 4 0 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbs AuthToken Api . refresh AccessToken ( service Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Fail Ġto Ġget Ġproject Ġusers . Ġ$ response Content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRemote ServiceException (" Fail Ġto Ġget Ġproject Ġusers ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse Object . data Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Project Group And UserList ( ĊĠĠĠĠĠĠĠ Ġservice Code : ĠAuth Service Code , ĊĠĠĠĠĠĠĠ Ġproject Code : ĠString ĊĠĠĠ Ġ): ĠList < Bk Auth Group And UserList > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠaccessToken Ġ= Ġbs AuthToken Api . get AccessToken ( service Code ) ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ"${ bk Auth Properties . url }/ projects /$ project Code / roles /? access _ token =$ accessToken & fields = user _ list " ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url ( url ). get (). build () ĊĊĠĠĠĠĠĠĠ ĠOk http Utils . do Http ( request ). use Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Content Ġ= Ġresponse . body () !!. string () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Fail Ġto Ġget Ġproject Ġgroup Ġand Ġuser Ġlist . Ġ$ response Content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRemote ServiceException (" Fail Ġto Ġget Ġproject Ġgroup Ġand Ġuser Ġlist ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Object Ġ= ĠobjectMapper . readValue < Bk Auth Response < List < Bk Auth Group And UserList >> >( response Content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Object . code Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Object . code Ġ== ĠHTTP _ 4 0 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbs AuthToken Api . refresh AccessToken ( service Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Fail Ġto Ġget Ġproject Ġgroup Ġand Ġuser Ġlist . Ġ$ response Content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRemote ServiceException (" Fail Ġto Ġget Ġproject Ġgroup Ġand Ġuser Ġlist ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse Object . data Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetUser Projects ( ĊĠĠĠĠĠĠĠ Ġservice Code : ĠAuth Service Code , ĊĠĠĠĠĠĠĠ ĠuserId : ĠString , ĊĠĠĠĠĠĠĠ Ġsupplier : Ġ(() Ġ-> ĠList < String >) ? ĊĠĠĠ Ġ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠaccessToken Ġ= Ġbs AuthToken Api . get AccessToken ( service Code ) ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ"${ bk Auth Properties . url }/ projects ? access _ token =$ accessToken & user _ id =$ userId " ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url ( url ). get (). build () ĊĊĠĠĠĠĠĠĠ ĠOk http Utils . do Http ( request ). use Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Content Ġ= Ġresponse . body () !!. string () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Fail Ġto Ġget Ġuser Ġprojects . Ġ$ response Content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRemote ServiceException (" Fail Ġto Ġget Ġuser Ġprojects ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Object Ġ= ĠobjectMapper . readValue < Bk Auth Response < List < Bk Auth Project Code And Id >> >( response Content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Object . code Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Object . code Ġ== ĠHTTP _ 4 0 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbs AuthToken Api . refresh AccessToken ( service Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Fail Ġto Ġget Ġuser Ġprojects . Ġ$ response Content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRemote ServiceException (" Fail Ġto Ġget Ġuser Ġprojects ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Code And IdList Ġ= Ġresponse Object . data Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġproject Code And IdList . map Ġ{ Ġit . project Code Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetUser Projects Available ( ĊĠĠĠĠĠĠĠ Ġservice Code : ĠAuth Service Code , ĊĠĠĠĠĠĠĠ ĠuserId : ĠString , ĊĠĠĠĠĠĠĠ Ġsupplier : Ġ(() Ġ-> ĠList < String >) ? ĊĠĠĠ Ġ): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠaccessToken Ġ= Ġbs AuthToken Api . get AccessToken ( service Code ) ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ"${ bk Auth Properties . url }/ projects ? access _ token =$ accessToken & user _ id =$ userId " ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url ( url ). get (). build () Ċ // ĊĠĠĠĠĠĠĠ ĠOk http Utils . do Http ( request ). use Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Content Ġ= Ġresponse . body () !!. string () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Fail Ġto Ġget Ġuser Ġprojects . Ġ$ response Content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRemote ServiceException (" Fail Ġto Ġget Ġuser Ġprojects ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Object Ġ= ĠobjectMapper . readValue < Bk Auth Response < List < Bk Auth Project Code And Id >> >( response Content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Object . code Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Object . code Ġ== ĠHTTP _ 4 0 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbs AuthToken Api . refresh AccessToken ( service Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Fail Ġto Ġget Ġuser Ġprojects . Ġ$ response Content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRemote ServiceException (" Fail Ġto Ġget Ġuser Ġprojects ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Code And IdList Ġ= Ġresponse Object . data Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproj ec r Code List Ġ= Ġproject Code And IdList . map Ġ{ Ġit . project Code Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Available List Ġ= Ġmutable Map Of < String , ĠString >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbk Project Infos Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbs CC Project Api . getProject List As Outer ( proj ec r Code List ). map Ġ{ Ġit . project Code Ġto Ġit Ġ}. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Code And IdList . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Info Ġ= Ġbk Project Infos [ it . project Code ] Ġ?: Ġreturn @ forEach ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åıªæľī å®¡ æī¹ éĢļè¿ĩ çļĦ é¡¹çĽ® æīį è¿ĶåĽŀ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project Info . approval Status Ġ!= Ġ" 2 " Ġ&& Ġproject Info . approval Status Ġ!= Ġ" 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åıªæľī æľª ç¦ģ çĶ¨çļĦ é¡¹çĽ® æīį è¿ĶåĽŀ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project Info . is Off lined ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Available List [ it . project Code ] Ġ= Ġproject Info . projectName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġproject Available List ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( BS Auth Project Api :: class . java ) ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠHTTP _ 4 0 3 Ġ= Ġ 4 0 3 ĊĠĠĠ Ġ} Ċ }