[golang]-golang呼叫gitlab api增加刪除使用者
導語:使用golang將使用者中文轉換成英文並建立使用者,並根據中文名刪除使用者。自己做個筆記備忘。判斷之類目前還不是很完善。
主要程式碼
package admin
import (
"DEVOPS/models"
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"strconv"
// "reflect"
"strings"
"github.com/astaxie/beego"
"github.com/yalp/jsonpath"
)
type GitlabController struct {
BaseController
}
type Person struct { // 用於獲取gitlab使用者的id
Id int
// Name string
Username string
}
func (c *GitlabController) Add() {
c.TplName = "admin/gitlab/add.html"
// c.Ctx.WriteString("ADD")
}
func (c *GitlabController) DoAdd() {
infra_access_token := beego.AppConfig.String("infra_access_token")
infra_gitlab_url := beego.AppConfig.String("infra_gitlab_url")
chinesename := strings.Trim(c.GetString("chinesename"), " ")
beego.Info(chinesename)
username := models.ChineseTo(chinesename)
beego.Info(username)
// 預設密碼Welcome1
password := "Welcome1"
// emailaddr
emailaddr := username + "@163.com"
beego.Info(emailaddr)
beego.Info(password)
if len(username) < 2 {
// if len(username) < 2 || len(password) < 6 {
c.Error("使用者名稱長度不合法", "/gitlab/add")
return
}
// http請求
beego.Info(infra_access_token)
beego.Info(infra_gitlab_url)
// 拼接url
// url := "http://gitlab.ihaozhuo.com/api/v3/projects/" + str_id + "/repository/branches?simple=true"
url := infra_gitlab_url + "/api/v4/users"
beego.Info(url)
// get請求根據專案id獲取專案分支json
// url := "https://361way.com/api/users"
req2, _ := http.NewRequest("GET", url, nil)
req2.Header.Add("PRIVATE-TOKEN", infra_access_token)
res2, _ := http.DefaultClient.Do(req2)
defer res2.Body.Close()
body2, _ := ioutil.ReadAll(res2.Body)
// beego.Info(body2) // [91 123 34 105 100 34 58] 輸出看不懂的東西
// fmt.Println(string(body2))
beego.Info("-----------------------------------------------")
beego.Info("-----------------------------------------------")
beego.Info("-----------------------------------------------")
// 把body2轉換為string
jobjson := string(body2)
beego.Info(jobjson)
// 提取json中的使用者資訊
raw := []byte(jobjson)
helloFilter, err := jsonpath.Prepare("$..username")
if err != nil {
panic(err)
}
var data interface{}
if err = json.Unmarshal(raw, &data); err != nil {
panic(err)
}
out, err := helloFilter(data)
if err != nil {
panic(err)
}
// 輸出使用者列表
fmt.Printf("out type:%T\n", out)
beego.Info("已建立使用者名稱如下")
beego.Info(out)
beego.Info("to string")
userlist := Strval(out)
fmt.Printf("out type:%T\n", userlist)
beego.Info(userlist)
res1 := strings.Contains(userlist, username)
fmt.Println("\nResult 1: ", res1)
if res1 {
beego.Info("使用者存在 請勿重複建立")
c.Error("使用者存在 請勿重複建立", "/gitlab/add")
// c.Error("使用者存在 請勿重複建立", "/gitlab/add")
return
}
beego.Info("使用者不存在可以新建")
// ---建立使用者
// curl -X POST -H "PRIVATE-TOKEN: ${access_token}" http://${gitlab_url}/api/v4/users -H 'cache-control: no-cache' -H 'content-type: application/json' -d '{ "email": "agou@163.com", "username": "agou", "password": "12345678", "name": "阿狗", "skip_confirmation": "true" }'
// url := "https://361way.com/api/users"
beego.Info("url", url)
beego.Info("infra_access_token", infra_access_token)
//json序列化
post := "{\"email\":\"" + emailaddr +
"\",\"username\":\"" + username +
"\",\"password\":\"" + "12345678" +
"\",\"name\":\"" + chinesename +
"\",\"skip_confirmation\":\"" + "true" +
"\"}"
var jsonStr = []byte(post)
// jsonStr := []byte(`{ "email": emailaddr, "username": username, "password": "12345678", "name": chinesename, "skip_confirmation": "true" }`)
req3, err3 := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
req3.Header.Add("PRIVATE-TOKEN", infra_access_token)
req3.Header.Set("Content-Type", "application/json")
req3.Header.Set("cache-control", "no-cache")
client3 := &http.Client{}
resp3, _ := client3.Do(req3)
if err3 != nil {
// handle error
}
defer resp3.Body.Close()
statuscode3 := resp3.StatusCode
head3 := resp3.Header
body3, _ := ioutil.ReadAll(resp3.Body)
beego.Info("body3")
fmt.Println(string(body3))
beego.Info("statuscode3")
fmt.Println(statuscode3)
beego.Info("head3")
fmt.Println(head3)
c.Ctx.WriteString("已經獲取jenkins job 資訊")
}
func (c *GitlabController) Delete() {
c.TplName = "admin/gitlab/delete.html"
// c.Ctx.WriteString("ADD")
}
func (c *GitlabController) DoDelete() {
infra_access_token := beego.AppConfig.String("infra_access_token")
infra_gitlab_url := beego.AppConfig.String("infra_gitlab_url")
chinesename := strings.Trim(c.GetString("chinesename"), " ")
beego.Info(chinesename)
username := models.ChineseTo(chinesename)
beego.Info(username)
if len(username) < 2 {
// if len(username) < 2 || len(password) < 6 {
c.Error("使用者名稱長度不合法", "/gitlab/add")
return
}
// http請求
beego.Info(infra_access_token)
beego.Info(infra_gitlab_url)
// 拼接url
// url := "http://gitlab.ihaozhuo.com/api/v3/projects/" + str_id + "/repository/branches?simple=true"
url := infra_gitlab_url + "/api/v4/users"
beego.Info(url)
// get請求根據專案id獲取專案分支json
// url := "https://361way.com/api/users"
req2, _ := http.NewRequest("GET", url, nil)
req2.Header.Add("PRIVATE-TOKEN", infra_access_token)
res2, _ := http.DefaultClient.Do(req2)
defer res2.Body.Close()
body2, _ := ioutil.ReadAll(res2.Body)
// beego.Info(body2) // [91 123 34 105 100 34 58] 輸出看不懂的東西
// fmt.Println(string(body2))
beego.Info("-----------------------------------------------")
beego.Info("-----------------------------------------------")
beego.Info("-----------------------------------------------")
// 把body2轉換為string
jobjson := string(body2)
beego.Info(jobjson)
// 提取json中的使用者資訊
raw := []byte(jobjson)
helloFilter, err := jsonpath.Prepare("$..username")
if err != nil {
panic(err)
}
var data interface{}
if err = json.Unmarshal(raw, &data); err != nil {
panic(err)
}
out, err := helloFilter(data)
if err != nil {
panic(err)
}
// 輸出使用者列表
fmt.Printf("out type:%T\n", out)
beego.Info("已建立使用者名稱如下")
beego.Info(out)
beego.Info("to string")
userlist := Strval(out)
fmt.Printf("out type:%T\n", userlist)
beego.Info(userlist)
res1 := strings.Contains(userlist, username)
fmt.Println("\nResult 1: ", res1)
if !res1 {
beego.Info("使用者不存在 請確認")
c.Error("使用者不存在 請確認", "/gitlab/delete")
// c.Error("使用者存在 請勿重複建立", "/gitlab/add")
return
}
beego.Info("使用者可以刪除 " + chinesename)
// 獲取使用者的id
beego.Info(jobjson)
var person []Person
err = json.Unmarshal(raw, &person)
if err != nil {
fmt.Println("error:", err)
}
beego.Info("jq")
fmt.Printf("%+v", person)
fmt.Printf("out type:%T\n", person)
beego.Info("jq")
// beego.Info("jq")
// beego.Info(jq)
for _, v := range person {
// beego.Info(v)
// fmt.Printf("out type:%T\n", v)
beego.Info(v.Id, v.Username)
if v.Username != username {
beego.Info("使用者名稱不匹配", v.Username)
} else {
beego.Info("使用者名稱匹配成功", v.Username)
beego.Info("使用者id為", v.Id)
// 執行刪除
// curl -X DELETE -H "PRIVATE-TOKEN: ${access_token}" http://${gitlab_url}/api/v4/users/${userid}?hard_delete=true
delete_url := infra_gitlab_url + "/api/v4/users/" + strconv.Itoa(v.Id) + "?hard_delete=true"
beego.Info("url", delete_url)
beego.Info("infra_access_token", infra_access_token)
req, _ := http.NewRequest("DELETE", delete_url, nil)
req.Header.Add("PRIVATE-TOKEN", infra_access_token)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
statuscode := res.StatusCode
head := res.Header
beego.Info(res)
beego.Info(string(body))
beego.Info(statuscode)
beego.Info(head)
c.Ctx.WriteString("已經獲取jenkins job 資訊")
break
}
}
c.Ctx.WriteString("content string")
c.Success("刪除使用者成功", "/gitlab/delete")
}
建立使用者 阿斯頓
建立完成之後登陸測試
測試重複建立
刪除測試 刪除阿斯頓
相關文章
- golang map的判斷,刪除Golang
- Golang原始碼學習:使用gdb除錯探究Golang函式呼叫棧結構Golang原始碼除錯函式
- Gitlab刪除分支Gitlab
- Golang基於Gitlab CI/CD部署方案GolangGitlab
- golang語言除錯Golang除錯
- [golang]如何看懂呼叫堆疊Golang
- Gitlab怎麼刪除倉庫Gitlab
- 完全解除安裝刪除 GitLabGitlab
- 完全解除安裝刪除gitlabGitlab
- 簡單介紹Golang切片刪除指定元素的三種方法Golang
- openGauss 備機增加刪除
- Oracle 增加 修改 刪除 列Oracle
- 切換功能增加刪除
- laravel 通過 rpc 呼叫 golang 程式LaravelRPCGolang
- laravel 透過 rpc 呼叫 golang 程式LaravelRPCGolang
- Golang刷LeetCode 26.刪除排序陣列中的重複項GolangLeetCode排序陣列
- [Golang]呼叫外部shell程式處理檔案Golang
- 『簡書API : jianshu 基於 golang (1)APIGolang
- 使用Golang和MongoDB構建 RESTful APIGolangMongoDBRESTAPI
- jQuery列表動態增加和刪除jQuery
- Golang學習系列第五天: Golang和PostgreSQL開發 RESTful APIGolangSQLRESTAPI
- 我用演算法學golang(刪除有序陣列中的重複項 )演算法Golang陣列
- 基於GitLab CI搭建Golang自動構建環境GitlabGolang
- 如何恢復被刪除的 GitLab 專案?Gitlab
- Mac下用VSCode開發除錯GolangMacVSCode除錯Golang
- Golang:使用 httprouter 構建 API 伺服器GolangHTTPAPI伺服器
- python列表資料如何增加和刪除Python
- drools動態增加、修改、刪除規則
- oracle級聯刪除使用者,刪除表空間Oracle
- Golang入門-Golang包管理Golang
- golang: 給二進位制檔案增加版本資訊Golang
- 如何刪除GitHub或者GitLab 上的資料夾?GithubGitlab
- 全面總結: Golang 呼叫 C/C++,例子式教程GolangC++
- 在MacOS上使用gdb(cgdb)除錯Golang程式Mac除錯Golang
- 使用Golang建立RESTful API的最佳實踐案例GolangRESTAPI
- mysql增加列,刪除列學習筆記MySql筆記
- C# 列表型別 增加 刪除 計數C#型別
- kindeditor 圖片管理增加刪除操作按鈕