* add devops client interface Signed-off-by: runzexia <runzexia@yunify.com> * direct return jenkins Signed-off-by: runzexia <runzexia@yunify.com> * add some interface Signed-off-by: runzexia <runzexia@yunify.com> * update Signed-off-by: runzexia <runzexia@yunify.com> * update interface Signed-off-by: runzexia <runzexia@yunify.com> * update Signed-off-by: runzexia <runzexia@yunify.com> * credential op structs Signed-off-by: runzexia <runzexia@yunify.com> * status Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * update interface Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * credential handler Signed-off-by: runzexia <runzexia@yunify.com> * update devopsoperator func Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * get build sonar Signed-off-by: runzexia <runzexia@yunify.com> * sonar handler * mv code to cilent Signed-off-by: runzexia <runzexia@yunify.com> * update Signed-off-by: runzexia <runzexia@yunify.com> * project member handler Signed-off-by: runzexia <runzexia@yunify.com> * update pipeline operator interface Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add tenant devops handler Signed-off-by: runzexia <runzexia@yunify.com> * update merge Signed-off-by: runzexia <runzexia@yunify.com> * clean Signed-off-by: runzexia <runzexia@yunify.com> * fmt Signed-off-by: runzexia <runzexia@yunify.com> * update ListPipelineRuns Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * complate pipelineOperator interface Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * update HttpParameters Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add pipeline steps interface Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * update pipeline GetNodesDetail Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add s2i api Signed-off-by: runzexia <runzexia@yunify.com> * add branch pipeline interface and update handler Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add scan branch interface and update handler Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add common interface and update handler Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add SCM interface and update handler Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add handler Signed-off-by: runzexia <runzexia@yunify.com> * add fake s3 Signed-off-by: runzexia <runzexia@yunify.com> * add webhook&check interface and update handler Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * clean Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * clean Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * format Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add some func Signed-off-by: runzexia <runzexia@yunify.com> * clean code Signed-off-by: runzexia <runzexia@yunify.com> * implement interface Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * fix interface GetBranchArtifacts Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add s2ibinary upload test Signed-off-by: runzexia <runzexia@yunify.com> * tenant devops Signed-off-by: runzexia <runzexia@yunify.com> * update tenant Signed-off-by: runzexia <runzexia@yunify.com> * fake Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add some unit test Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add devops tenant handler Signed-off-by: runzexia <runzexia@yunify.com> * status Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * status Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * status Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * update fake test Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * update unit test and fake data Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * update Co-authored-by: Xiaoyang Zhu <sunzhu@yunify.com>
205 lines
7.2 KiB
Go
205 lines
7.2 KiB
Go
package jenkins
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
"reflect"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type GlobalRoleResponse struct {
|
|
RoleName string `json:"roleName"`
|
|
PermissionIds GlobalPermissionIds `json:"permissionIds"`
|
|
}
|
|
|
|
type GlobalRole struct {
|
|
Jenkins *Jenkins
|
|
Raw GlobalRoleResponse
|
|
}
|
|
|
|
type GlobalPermissionIds struct {
|
|
Administer bool `json:"hudson.model.Hudson.Administer"`
|
|
GlobalRead bool `json:"hudson.model.Hudson.Read"`
|
|
CredentialCreate bool `json:"com.cloudbees.plugins.credentials.CredentialsProvider.Create"`
|
|
CredentialUpdate bool `json:"com.cloudbees.plugins.credentials.CredentialsProvider.Update"`
|
|
CredentialView bool `json:"com.cloudbees.plugins.credentials.CredentialsProvider.View"`
|
|
CredentialDelete bool `json:"com.cloudbees.plugins.credentials.CredentialsProvider.Delete"`
|
|
CredentialManageDomains bool `json:"com.cloudbees.plugins.credentials.CredentialsProvider.ManageDomains"`
|
|
SlaveCreate bool `json:"hudson.model.Computer.Create"`
|
|
SlaveConfigure bool `json:"hudson.model.Computer.Configure"`
|
|
SlaveDelete bool `json:"hudson.model.Computer.Delete"`
|
|
SlaveBuild bool `json:"hudson.model.Computer.Build"`
|
|
SlaveConnect bool `json:"hudson.model.Computer.Connect"`
|
|
SlaveDisconnect bool `json:"hudson.model.Computer.Disconnect"`
|
|
ItemBuild bool `json:"hudson.model.Item.Build"`
|
|
ItemCreate bool `json:"hudson.model.Item.Create"`
|
|
ItemRead bool `json:"hudson.model.Item.Read"`
|
|
ItemConfigure bool `json:"hudson.model.Item.Configure"`
|
|
ItemCancel bool `json:"hudson.model.Item.Cancel"`
|
|
ItemMove bool `json:"hudson.model.Item.Move"`
|
|
ItemDiscover bool `json:"hudson.model.Item.Discover"`
|
|
ItemWorkspace bool `json:"hudson.model.Item.Workspace"`
|
|
ItemDelete bool `json:"hudson.model.Item.Delete"`
|
|
RunUpdate bool `json:"hudson.model.Run.Update"`
|
|
RunDelete bool `json:"hudson.model.Run.Delete"`
|
|
ViewCreate bool `json:"hudson.model.View.Create"`
|
|
ViewConfigure bool `json:"hudson.model.View.Configure"`
|
|
ViewRead bool `json:"hudson.model.View.Read"`
|
|
ViewDelete bool `json:"hudson.model.View.Delete"`
|
|
SCMTag bool `json:"hudson.scm.SCM.Tag"`
|
|
}
|
|
|
|
type ProjectRole struct {
|
|
Jenkins *Jenkins
|
|
Raw ProjectRoleResponse
|
|
}
|
|
|
|
type ProjectRoleResponse struct {
|
|
RoleName string `json:"roleName"`
|
|
PermissionIds ProjectPermissionIds `json:"permissionIds"`
|
|
Pattern string `json:"pattern"`
|
|
}
|
|
|
|
type ProjectPermissionIds struct {
|
|
CredentialCreate bool `json:"com.cloudbees.plugins.credentials.CredentialsProvider.Create"`
|
|
CredentialUpdate bool `json:"com.cloudbees.plugins.credentials.CredentialsProvider.Update"`
|
|
CredentialView bool `json:"com.cloudbees.plugins.credentials.CredentialsProvider.View"`
|
|
CredentialDelete bool `json:"com.cloudbees.plugins.credentials.CredentialsProvider.Delete"`
|
|
CredentialManageDomains bool `json:"com.cloudbees.plugins.credentials.CredentialsProvider.ManageDomains"`
|
|
ItemBuild bool `json:"hudson.model.Item.Build"`
|
|
ItemCreate bool `json:"hudson.model.Item.Create"`
|
|
ItemRead bool `json:"hudson.model.Item.Read"`
|
|
ItemConfigure bool `json:"hudson.model.Item.Configure"`
|
|
ItemCancel bool `json:"hudson.model.Item.Cancel"`
|
|
ItemMove bool `json:"hudson.model.Item.Move"`
|
|
ItemDiscover bool `json:"hudson.model.Item.Discover"`
|
|
ItemWorkspace bool `json:"hudson.model.Item.Workspace"`
|
|
ItemDelete bool `json:"hudson.model.Item.Delete"`
|
|
RunUpdate bool `json:"hudson.model.Run.Update"`
|
|
RunDelete bool `json:"hudson.model.Run.Delete"`
|
|
RunReplay bool `json:"hudson.model.Run.Replay"`
|
|
SCMTag bool `json:"hudson.scm.SCM.Tag"`
|
|
}
|
|
|
|
func (j *GlobalRole) Update(ids GlobalPermissionIds) error {
|
|
var idArray []string
|
|
values := reflect.ValueOf(ids)
|
|
for i := 0; i < values.NumField(); i++ {
|
|
field := values.Field(i)
|
|
if field.Bool() {
|
|
idArray = append(idArray, values.Type().Field(i).Tag.Get("json"))
|
|
}
|
|
}
|
|
param := map[string]string{
|
|
"roleName": j.Raw.RoleName,
|
|
"type": GLOBAL_ROLE,
|
|
"permissionIds": strings.Join(idArray, ","),
|
|
"overwrite": strconv.FormatBool(true),
|
|
}
|
|
responseString := ""
|
|
response, err := j.Jenkins.Requester.Post("/role-strategy/strategy/addRole", nil, &responseString, param)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if response.StatusCode != http.StatusOK {
|
|
return errors.New(strconv.Itoa(response.StatusCode))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (j *GlobalRole) AssignRole(sid string) error {
|
|
param := map[string]string{
|
|
"type": GLOBAL_ROLE,
|
|
"roleName": j.Raw.RoleName,
|
|
"sid": sid,
|
|
}
|
|
responseString := ""
|
|
response, err := j.Jenkins.Requester.Post("/role-strategy/strategy/assignRole", nil, &responseString, param)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if response.StatusCode != http.StatusOK {
|
|
return errors.New(strconv.Itoa(response.StatusCode))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (j *GlobalRole) UnAssignRole(sid string) error {
|
|
param := map[string]string{
|
|
"type": GLOBAL_ROLE,
|
|
"roleName": j.Raw.RoleName,
|
|
"sid": sid,
|
|
}
|
|
responseString := ""
|
|
response, err := j.Jenkins.Requester.Post("/role-strategy/strategy/unassignRole", nil, &responseString, param)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if response.StatusCode != http.StatusOK {
|
|
return errors.New(strconv.Itoa(response.StatusCode))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (j *ProjectRole) Update(pattern string, ids ProjectPermissionIds) error {
|
|
var idArray []string
|
|
values := reflect.ValueOf(ids)
|
|
for i := 0; i < values.NumField(); i++ {
|
|
field := values.Field(i)
|
|
if field.Bool() {
|
|
idArray = append(idArray, values.Type().Field(i).Tag.Get("json"))
|
|
}
|
|
}
|
|
param := map[string]string{
|
|
"roleName": j.Raw.RoleName,
|
|
"type": PROJECT_ROLE,
|
|
"permissionIds": strings.Join(idArray, ","),
|
|
"overwrite": strconv.FormatBool(true),
|
|
"pattern": pattern,
|
|
}
|
|
responseString := ""
|
|
response, err := j.Jenkins.Requester.Post("/role-strategy/strategy/addRole", nil, &responseString, param)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if response.StatusCode != http.StatusOK {
|
|
return errors.New(strconv.Itoa(response.StatusCode))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (j *ProjectRole) AssignRole(sid string) error {
|
|
param := map[string]string{
|
|
"type": PROJECT_ROLE,
|
|
"roleName": j.Raw.RoleName,
|
|
"sid": sid,
|
|
}
|
|
responseString := ""
|
|
response, err := j.Jenkins.Requester.Post("/role-strategy/strategy/assignRole", nil, &responseString, param)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if response.StatusCode != http.StatusOK {
|
|
return errors.New(strconv.Itoa(response.StatusCode))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (j *ProjectRole) UnAssignRole(sid string) error {
|
|
param := map[string]string{
|
|
"type": PROJECT_ROLE,
|
|
"roleName": j.Raw.RoleName,
|
|
"sid": sid,
|
|
}
|
|
responseString := ""
|
|
response, err := j.Jenkins.Requester.Post("/role-strategy/strategy/unassignRole", nil, &responseString, param)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if response.StatusCode != http.StatusOK {
|
|
return errors.New(strconv.Itoa(response.StatusCode))
|
|
}
|
|
return nil
|
|
}
|