/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . team city . github . controllers Ċ Ċ import Ġjet brains . build Server . controllers . admin . projects . Edit Project Tab Ċ import Ġjet brains . build Server . server Side . Project Manager Ċ import Ġjet brains . build Server . server Side . S Project Ċ import Ġjet brains . build Server . server Side . auth . Permission Ċ import Ġjet brains . build Server . server Side . oauth . OAuth Connection Descriptor Ċ import Ġjet brains . build Server . server Side . oauth . OAuth Connections Manager Ċ import Ġjet brains . build Server . users . S User Ċ import Ġjet brains . build Server . web . openapi .* Ċ import Ġjet brains . build Server . web . util . C ame From Support Ċ import Ġjet brains . build Server . web . util . Session User Ċ import Ġorg . jetbrains . team city . github . Tokens Helper Ċ import Ġorg . jetbrains . team city . github . Util Ċ import Ġorg . jetbrains . team city . github . null If Blank Ċ import Ġjavax . servlet . http . HttpServletRequest Ċ Ċ class ĠInstall Webhook Tab ( places : ĠPage Places , Ġdescriptor : ĠPlugin Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtokens Helper : ĠTokens Helper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġconnections Manager : ĠOAuth Connections Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġprojects Manager : ĠProject Manager Ċ ) Ġ: ĠEdit Project Tab ( places , Ġ" install Web Hook ", Ġdescriptor . get Plugin Resources Path (" install Page . jsp "), Ġ" Install ĠGitHub ĠWeb hook ") Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠUtil . getLogger ( Install Webhook Tab :: class . java ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Css File ("/ css / admin / project Config . css ") ĊĊĠĠĠĠĠĠĠ Ġadd Js File ("/ js / bs / system Problems Monitor . js ") ĊĠĠĠĠĠĠĠ Ġadd Js File ("${ descriptor . plugin Resources Path } gh - webhook . js ") ĊĠĠĠĠĠĠĠ Ġadd Css File ("${ descriptor . plugin Resources Path } webhook . css ") ĊĊĠĠĠĠĠĠĠ Ġset Position ( Position Constraint . last ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġproject Menu Extension Ġ= Ġobject Ġ: ĠSimple Page Extension ( my Page Places ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Available ( request : ĠHttpServletRequest ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġrequest . getAttribute (" project ") Ġas ĠS Project ? Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠSession User . getUser ( request ) Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuser . is Permission Granted For Project ( project . projectId , ĠPermission . EDIT _ PROJECT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠUtil . is V cs Roots Where Hook Can Be Installed ( project , Ġconnections Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġproject Menu Extension . plugin Name Ġ= Ġ" install Webhook Action " ĊĠĠĠĠĠĠĠ Ġproject Menu Extension . place Id Ġ= ĠPlace Id . ADMIN _ EDIT _ PROJECT _ ACTION S _ PAGE ĊĠĠĠĠĠĠĠ Ġproject Menu Extension . include Url Ġ= Ġdescriptor . get Plugin Resources Path (" install Webhook Action . jsp ") ĊĠĠĠĠĠĠĠ Ġproject Menu Extension . register () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Visible (): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġfill Model ( model : ĠMutable Map < String , ĠAny ? >, Ġrequest : ĠHttpServletRequest ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . fill Model ( model , Ġrequest ) ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġget Project ( request ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠSession User . getUser ( request ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= Ġrequest . getParameter (" repository ") ĊĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġrepository ?. let Ġ{ ĠUtil . parse Git Repo Url ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġmodel [" repository "] Ġ= Ġrepository . or Empty () ĊĊĠĠĠĠĠĠĠ Ġvar Ġconnection : ĠOAuth Connection Descriptor ? Ġ= Ġinfo ?. let Ġ{ Ġget Connection ( request , Ġproject ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġhas Token : ĠBoolean ĊĠĠĠĠĠĠĠ Ġval Ġhas Connections : ĠBoolean ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Token Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Connections Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Token Ġ= Ġtokens Helper . get Existing Tokens ( listOf ( connection ), Ġuser ). isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Connections Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġget Connections ( project , Ġuser , Ġinfo . server ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnections Ġ= Ġpair ?. first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( connections Ġ!= Ġnull Ġ&& Ġconnections . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Ġ= Ġconnections . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Connections Ġ= Ġconnections ?. isNotEmpty () Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Token Ġ= Ġpair ?. second Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmodel [" connection Id "] Ġ= Ġconnection ?. id . or Empty () ĊĠĠĠĠĠĠĠ Ġmodel [" connection ProjectId "] Ġ= Ġconnection ?. project ?. external Id . or Empty () ĊĊĠĠĠĠĠĠĠ Ġmodel [" has _ connections "] Ġ= Ġhas Connections ĊĠĠĠĠĠĠĠ Ġmodel [" has _ tokens "] Ġ= Ġhas Token ĊĊĠĠĠĠĠĠĠ Ġmodel [" info "] Ġ= Ġinfo ĊĊĊĠĠĠĠĠĠĠ Ġval Ġcame From Ġ= ĠC ame From Support () ĊĠĠĠĠĠĠĠ Ġcame From . set Url From Request ( request , Ġ"/ admin / edit Project . html ? projectId =${ project . external Id }") ĊĠĠĠĠĠĠĠ Ġcame From . setTitle From Request ( request , Ġnull ) ĊĠĠĠĠĠĠĠ Ġmodel [" came From "] Ġ= Ġcame From ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Connection ( request : ĠHttpServletRequest , Ġproject : ĠS Project ): ĠOAuth Connection Descriptor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnection Id Ġ= Ġrequest . getParameter (" connection Id "). null If Blank () ĊĠĠĠĠĠĠĠ Ġval Ġconnection ProjectId Ġ= Ġrequest . getParameter (" connection ProjectId "). null If Blank () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( connection Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnection Project Ġ= Ġif Ġ( connection ProjectId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprojects Manager . find Project By External Id ( connection ProjectId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconnection Project ?. let Ġ{ Ġconnections Manager . find Connection ById ( it , Ġconnection Id ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Connections ( project : ĠS Project , Ġuser : ĠS User , Ġserver : ĠString ): ĠPair < Collection < OAuth Connection Descriptor >, ĠBoolean >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnections Ġ= Ġtokens Helper . get Connections ( project , Ġserver ) ĊĠĠĠĠĠĠĠ Ġif Ġ( connections . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug (" There 's Ġno Ġconnections Ġto ĠGitHub Ġserver Ġ$ server Ġin Ġproject Ġ${ project . describe ( true )} Ġand Ġparents ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= Ġtokens Helper . get Existing Tokens ( connections , Ġuser ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . isEmpty () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug (" Found Ġ${ connections . size } Ġto ĠGitHub Ġserver Ġ$ server , Ġbut Ġno Ġtokens Ġfor Ġuser Ġ'$ user '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconnections Ġto Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . size Ġ== Ġ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug (" Found Ġconnection / token Ġfor Ġuser Ġ'$ user ' Ġto ĠGitHub Ġserver Ġ$ server . ĠWill Ġuse Ġit ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug (" Found Ġ${ tokens . size } Ġconnections / tokens Ġfor Ġuser Ġ'$ user ' Ġto ĠGitHub Ġserver Ġ$ server . ĠCannot Ġdetermine Ġwhich Ġto Ġuse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtokens . keys Ġto Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Available ( request : ĠHttpServletRequest ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġget Project ( request ) ĊĠĠĠĠĠĠĠ Ġreturn Ġproject Ġ!= Ġnull Ġ&& ĠSession User . getUser ( request ). is Permission Granted For Project ( project . projectId , ĠPermission . EDIT _ PROJECT ) ĊĠĠĠ Ġ} Ċ } Ċ