mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-01-03 14:18:42 +00:00
Running gofmt on remote for bitbucket server
This commit is contained in:
parent
262f505779
commit
95b1f347ba
4 changed files with 189 additions and 219 deletions
|
@ -11,18 +11,16 @@ package bitbucketserver
|
||||||
// Needs a pem private key added to /var/lib/bitbucketserver/private_key.pem
|
// Needs a pem private key added to /var/lib/bitbucketserver/private_key.pem
|
||||||
// After that you should be good to go
|
// After that you should be good to go
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
|
||||||
log "github.com/Sirupsen/logrus"
|
|
||||||
"net/http"
|
|
||||||
"github.com/drone/drone/model"
|
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
|
||||||
"strconv"
|
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
log "github.com/Sirupsen/logrus"
|
||||||
|
"github.com/drone/drone/model"
|
||||||
"github.com/mrjones/oauth"
|
"github.com/mrjones/oauth"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
type BitbucketServer struct {
|
type BitbucketServer struct {
|
||||||
|
@ -35,7 +33,7 @@ type BitbucketServer struct {
|
||||||
Consumer oauth.Consumer
|
Consumer oauth.Consumer
|
||||||
}
|
}
|
||||||
|
|
||||||
func Load(config string) *BitbucketServer{
|
func Load(config string) *BitbucketServer {
|
||||||
|
|
||||||
url_, err := url.Parse(config)
|
url_, err := url.Parse(config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -68,16 +66,12 @@ func Load(config string) *BitbucketServer{
|
||||||
|
|
||||||
bitbucketserver.Consumer = *NewClient(bitbucketserver.ConsumerRSA, bitbucketserver.ConsumerKey, bitbucketserver.URL)
|
bitbucketserver.Consumer = *NewClient(bitbucketserver.ConsumerRSA, bitbucketserver.ConsumerKey, bitbucketserver.URL)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return &bitbucketserver
|
return &bitbucketserver
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bs *BitbucketServer) Login(res http.ResponseWriter, req *http.Request) (*model.User, bool, error){
|
func (bs *BitbucketServer) Login(res http.ResponseWriter, req *http.Request) (*model.User, bool, error) {
|
||||||
log.Info("Starting to login for bitbucketServer")
|
log.Info("Starting to login for bitbucketServer")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
log.Info("getting the requestToken")
|
log.Info("getting the requestToken")
|
||||||
requestToken, url, err := bs.Consumer.GetRequestTokenAndUrl("oob")
|
requestToken, url, err := bs.Consumer.GetRequestTokenAndUrl("oob")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -94,7 +88,7 @@ func (bs *BitbucketServer) Login(res http.ResponseWriter, req *http.Request) (*m
|
||||||
var request_oauth_token = req.FormValue("oauth_token")
|
var request_oauth_token = req.FormValue("oauth_token")
|
||||||
requestToken.Token = request_oauth_token
|
requestToken.Token = request_oauth_token
|
||||||
accessToken, err := bs.Consumer.AuthorizeToken(requestToken, code)
|
accessToken, err := bs.Consumer.AuthorizeToken(requestToken, code)
|
||||||
if err !=nil {
|
if err != nil {
|
||||||
log.Error(err)
|
log.Error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,7 +105,7 @@ func (bs *BitbucketServer) Login(res http.ResponseWriter, req *http.Request) (*m
|
||||||
bits, err := ioutil.ReadAll(response.Body)
|
bits, err := ioutil.ReadAll(response.Body)
|
||||||
userName := string(bits)
|
userName := string(bits)
|
||||||
|
|
||||||
response1, err := client.Get(bs.URL + "/rest/api/1.0/users/" +userName)
|
response1, err := client.Get(bs.URL + "/rest/api/1.0/users/" + userName)
|
||||||
contents, err := ioutil.ReadAll(response1.Body)
|
contents, err := ioutil.ReadAll(response1.Body)
|
||||||
defer response1.Body.Close()
|
defer response1.Body.Close()
|
||||||
var mUser User
|
var mUser User
|
||||||
|
@ -124,7 +118,6 @@ func (bs *BitbucketServer) Login(res http.ResponseWriter, req *http.Request) (*m
|
||||||
|
|
||||||
user.Avatar = avatarLink(mUser.EmailAddress)
|
user.Avatar = avatarLink(mUser.EmailAddress)
|
||||||
|
|
||||||
|
|
||||||
return &user, bs.Open, nil
|
return &user, bs.Open, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,11 +126,11 @@ func (bs *BitbucketServer) Auth(token, secret string) (string, error) {
|
||||||
if len(token) == 0 {
|
if len(token) == 0 {
|
||||||
return "", fmt.Errorf("Hasn't logged in yet")
|
return "", fmt.Errorf("Hasn't logged in yet")
|
||||||
}
|
}
|
||||||
return token, nil;
|
return token, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bs *BitbucketServer) Repo(u *model.User, owner, name string) (*model.Repo, error){
|
func (bs *BitbucketServer) Repo(u *model.User, owner, name string) (*model.Repo, error) {
|
||||||
log.Info("Staring repo for bitbucketServer with user " + u.Login + " " + owner + " " + name )
|
log.Info("Staring repo for bitbucketServer with user " + u.Login + " " + owner + " " + name)
|
||||||
|
|
||||||
client := NewClientWithToken(&bs.Consumer, u.Token)
|
client := NewClientWithToken(&bs.Consumer, u.Token)
|
||||||
|
|
||||||
|
@ -169,19 +162,17 @@ func (bs *BitbucketServer) Repo(u *model.User, owner, name string) (*model.Repo,
|
||||||
repo := &model.Repo{}
|
repo := &model.Repo{}
|
||||||
repo.Clone = cloneLink
|
repo.Clone = cloneLink
|
||||||
repo.Link = repoLink
|
repo.Link = repoLink
|
||||||
repo.Name=bsRepo.Slug
|
repo.Name = bsRepo.Slug
|
||||||
repo.Owner=bsRepo.Project.Key
|
repo.Owner = bsRepo.Project.Key
|
||||||
repo.AllowPush=true
|
repo.AllowPush = true
|
||||||
repo.FullName = bsRepo.Project.Key +"/" +bsRepo.Slug
|
repo.FullName = bsRepo.Project.Key + "/" + bsRepo.Slug
|
||||||
repo.Branch = "master"
|
repo.Branch = "master"
|
||||||
repo.Kind = model.RepoGit
|
repo.Kind = model.RepoGit
|
||||||
|
|
||||||
|
return repo, nil
|
||||||
return repo, nil;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (bs *BitbucketServer) Repos(u *model.User) ([]*model.RepoLite, error) {
|
||||||
func (bs *BitbucketServer) Repos(u *model.User) ([]*model.RepoLite, error){
|
|
||||||
log.Info("Staring repos for bitbucketServer " + u.Login)
|
log.Info("Staring repos for bitbucketServer " + u.Login)
|
||||||
var repos = []*model.RepoLite{}
|
var repos = []*model.RepoLite{}
|
||||||
|
|
||||||
|
@ -204,11 +195,10 @@ func (bs *BitbucketServer) Repos(u *model.User) ([]*model.RepoLite, error){
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return repos, nil
|
||||||
return repos, nil;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bs *BitbucketServer) Perm(u *model.User, owner, repo string) (*model.Perm, error){
|
func (bs *BitbucketServer) Perm(u *model.User, owner, repo string) (*model.Perm, error) {
|
||||||
|
|
||||||
//TODO: find the real permissions
|
//TODO: find the real permissions
|
||||||
log.Info("Staring perm for bitbucketServer")
|
log.Info("Staring perm for bitbucketServer")
|
||||||
|
@ -216,21 +206,21 @@ func (bs *BitbucketServer) Perm(u *model.User, owner, repo string) (*model.Perm,
|
||||||
perms.Pull = true
|
perms.Pull = true
|
||||||
perms.Admin = true
|
perms.Admin = true
|
||||||
perms.Push = true
|
perms.Push = true
|
||||||
return perms , nil
|
return perms, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bs *BitbucketServer) File(u *model.User, r *model.Repo, b *model.Build, f string) ([]byte, error){
|
func (bs *BitbucketServer) File(u *model.User, r *model.Repo, b *model.Build, f string) ([]byte, error) {
|
||||||
log.Info(fmt.Sprintf("Staring file for bitbucketServer login: %s repo: %s buildevent: %s string: %s",u.Login, r.Name, b.Event, f))
|
log.Info(fmt.Sprintf("Staring file for bitbucketServer login: %s repo: %s buildevent: %s string: %s", u.Login, r.Name, b.Event, f))
|
||||||
|
|
||||||
client := NewClientWithToken(&bs.Consumer, u.Token)
|
client := NewClientWithToken(&bs.Consumer, u.Token)
|
||||||
fileURL := fmt.Sprintf("%s/projects/%s/repos/%s/browse/%s?raw", bs.URL,r.Owner,r.Name,f)
|
fileURL := fmt.Sprintf("%s/projects/%s/repos/%s/browse/%s?raw", bs.URL, r.Owner, r.Name, f)
|
||||||
log.Info(fileURL)
|
log.Info(fileURL)
|
||||||
response, err := client.Get(fileURL)
|
response, err := client.Get(fileURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(err)
|
log.Error(err)
|
||||||
}
|
}
|
||||||
if response.StatusCode == 404 {
|
if response.StatusCode == 404 {
|
||||||
return nil,nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
defer response.Body.Close()
|
defer response.Body.Close()
|
||||||
responseBytes, err := ioutil.ReadAll(response.Body)
|
responseBytes, err := ioutil.ReadAll(response.Body)
|
||||||
|
@ -238,16 +228,15 @@ func (bs *BitbucketServer) File(u *model.User, r *model.Repo, b *model.Build, f
|
||||||
log.Error(err)
|
log.Error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return responseBytes, nil
|
||||||
return responseBytes, nil;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bs *BitbucketServer) Status(u *model.User, r *model.Repo, b *model.Build, link string) error{
|
func (bs *BitbucketServer) Status(u *model.User, r *model.Repo, b *model.Build, link string) error {
|
||||||
log.Info("Staring status for bitbucketServer")
|
log.Info("Staring status for bitbucketServer")
|
||||||
return nil;
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bs *BitbucketServer) Netrc(user *model.User, r *model.Repo) (*model.Netrc, error){
|
func (bs *BitbucketServer) Netrc(user *model.User, r *model.Repo) (*model.Netrc, error) {
|
||||||
log.Info("Starting the Netrc lookup")
|
log.Info("Starting the Netrc lookup")
|
||||||
u, err := url.Parse(bs.URL)
|
u, err := url.Parse(bs.URL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -260,28 +249,28 @@ func (bs *BitbucketServer) Netrc(user *model.User, r *model.Repo) (*model.Netrc,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bs *BitbucketServer) Activate(u *model.User, r *model.Repo, k *model.Key, link string) error{
|
func (bs *BitbucketServer) Activate(u *model.User, r *model.Repo, k *model.Key, link string) error {
|
||||||
log.Info(fmt.Sprintf("Staring activate for bitbucketServer user: %s repo: %s key: %s link: %s",u.Login,r.Name,k,link))
|
log.Info(fmt.Sprintf("Staring activate for bitbucketServer user: %s repo: %s key: %s link: %s", u.Login, r.Name, k, link))
|
||||||
client := NewClientWithToken(&bs.Consumer, u.Token)
|
client := NewClientWithToken(&bs.Consumer, u.Token)
|
||||||
hook, err := bs.CreateHook(client, r.Owner,r.Name, "com.atlassian.stash.plugin.stash-web-post-receive-hooks-plugin:postReceiveHook",link)
|
hook, err := bs.CreateHook(client, r.Owner, r.Name, "com.atlassian.stash.plugin.stash-web-post-receive-hooks-plugin:postReceiveHook", link)
|
||||||
if err !=nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Info(hook)
|
log.Info(hook)
|
||||||
return nil;
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bs *BitbucketServer) Deactivate(u *model.User, r *model.Repo, link string) error{
|
func (bs *BitbucketServer) Deactivate(u *model.User, r *model.Repo, link string) error {
|
||||||
log.Info(fmt.Sprintf("Staring deactivating for bitbucketServer user: %s repo: %s link: %s",u.Login,r.Name,link))
|
log.Info(fmt.Sprintf("Staring deactivating for bitbucketServer user: %s repo: %s link: %s", u.Login, r.Name, link))
|
||||||
client := NewClientWithToken(&bs.Consumer, u.Token)
|
client := NewClientWithToken(&bs.Consumer, u.Token)
|
||||||
err := bs.DeleteHook(client, r.Owner,r.Name, "com.atlassian.stash.plugin.stash-web-post-receive-hooks-plugin:postReceiveHook",link)
|
err := bs.DeleteHook(client, r.Owner, r.Name, "com.atlassian.stash.plugin.stash-web-post-receive-hooks-plugin:postReceiveHook", link)
|
||||||
if err !=nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil;
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bs *BitbucketServer) Hook(r *http.Request) (*model.Repo, *model.Build, error){
|
func (bs *BitbucketServer) Hook(r *http.Request) (*model.Repo, *model.Build, error) {
|
||||||
log.Info("Staring hook for bitbucketServer")
|
log.Info("Staring hook for bitbucketServer")
|
||||||
defer r.Body.Close()
|
defer r.Body.Close()
|
||||||
contents, err := ioutil.ReadAll(r.Body)
|
contents, err := ioutil.ReadAll(r.Body)
|
||||||
|
@ -292,8 +281,6 @@ func (bs *BitbucketServer) Hook(r *http.Request) (*model.Repo, *model.Build, err
|
||||||
var hookPost postHook
|
var hookPost postHook
|
||||||
json.Unmarshal(contents, &hookPost)
|
json.Unmarshal(contents, &hookPost)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
buildModel := &model.Build{}
|
buildModel := &model.Build{}
|
||||||
buildModel.Event = model.EventPush
|
buildModel.Event = model.EventPush
|
||||||
buildModel.Ref = hookPost.RefChanges[0].RefID
|
buildModel.Ref = hookPost.RefChanges[0].RefID
|
||||||
|
@ -303,24 +290,22 @@ func (bs *BitbucketServer) Hook(r *http.Request) (*model.Repo, *model.Build, err
|
||||||
|
|
||||||
//All you really need is the name and owner. That's what creates the lookup key, so it needs to match the repo info. Just an FYI
|
//All you really need is the name and owner. That's what creates the lookup key, so it needs to match the repo info. Just an FYI
|
||||||
repo := &model.Repo{}
|
repo := &model.Repo{}
|
||||||
repo.Name=hookPost.Repository.Slug
|
repo.Name = hookPost.Repository.Slug
|
||||||
repo.Owner = hookPost.Repository.Project.Key
|
repo.Owner = hookPost.Repository.Project.Key
|
||||||
repo.AllowTag=false
|
repo.AllowTag = false
|
||||||
repo.AllowDeploy=false
|
repo.AllowDeploy = false
|
||||||
repo.AllowPull=false
|
repo.AllowPull = false
|
||||||
repo.AllowPush=true
|
repo.AllowPush = true
|
||||||
repo.FullName = hookPost.Repository.Project.Key +"/" +hookPost.Repository.Slug
|
repo.FullName = hookPost.Repository.Project.Key + "/" + hookPost.Repository.Slug
|
||||||
repo.Branch = "master"
|
repo.Branch = "master"
|
||||||
repo.Kind = model.RepoGit
|
repo.Kind = model.RepoGit
|
||||||
|
|
||||||
return repo, buildModel, nil;
|
return repo, buildModel, nil
|
||||||
}
|
}
|
||||||
func (bs *BitbucketServer) String() string {
|
func (bs *BitbucketServer) String() string {
|
||||||
return "bitbucketserver"
|
return "bitbucketserver"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
type HookDetail struct {
|
type HookDetail struct {
|
||||||
Key string `"json:key"`
|
Key string `"json:key"`
|
||||||
Name string `"json:name"`
|
Name string `"json:name"`
|
||||||
|
@ -335,33 +320,26 @@ type Hook struct {
|
||||||
Details *HookDetail `"json:details"`
|
Details *HookDetail `"json:details"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Enable hook for named repository
|
// Enable hook for named repository
|
||||||
func (bs *BitbucketServer)CreateHook(client *http.Client, project, slug, hook_key, link string) (*Hook, error) {
|
func (bs *BitbucketServer) CreateHook(client *http.Client, project, slug, hook_key, link string) (*Hook, error) {
|
||||||
|
|
||||||
// Set hook
|
// Set hook
|
||||||
hookBytes := []byte(fmt.Sprintf(`{"hook-url-0":"%s"}`,link))
|
hookBytes := []byte(fmt.Sprintf(`{"hook-url-0":"%s"}`, link))
|
||||||
|
|
||||||
// Enable hook
|
// Enable hook
|
||||||
enablePath := fmt.Sprintf("/rest/api/1.0/projects/%s/repos/%s/settings/hooks/%s/enabled",
|
enablePath := fmt.Sprintf("/rest/api/1.0/projects/%s/repos/%s/settings/hooks/%s/enabled",
|
||||||
project, slug, hook_key)
|
project, slug, hook_key)
|
||||||
|
|
||||||
doPut(client, bs.URL + enablePath, hookBytes)
|
doPut(client, bs.URL+enablePath, hookBytes)
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disable hook for named repository
|
// Disable hook for named repository
|
||||||
func (bs *BitbucketServer)DeleteHook(client *http.Client, project, slug, hook_key, link string) error {
|
func (bs *BitbucketServer) DeleteHook(client *http.Client, project, slug, hook_key, link string) error {
|
||||||
enablePath := fmt.Sprintf("/rest/api/1.0/projects/%s/repos/%s/settings/hooks/%s/enabled",
|
enablePath := fmt.Sprintf("/rest/api/1.0/projects/%s/repos/%s/settings/hooks/%s/enabled",
|
||||||
project, slug, hook_key)
|
project, slug, hook_key)
|
||||||
doDelete(client, bs.URL + enablePath)
|
doDelete(client, bs.URL+enablePath)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,16 @@
|
||||||
package bitbucketserver
|
package bitbucketserver
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
log "github.com/Sirupsen/logrus"
|
|
||||||
"io/ioutil"
|
|
||||||
"encoding/pem"
|
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
|
"encoding/pem"
|
||||||
|
log "github.com/Sirupsen/logrus"
|
||||||
"github.com/mrjones/oauth"
|
"github.com/mrjones/oauth"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func NewClient(ConsumerRSA string, ConsumerKey string, URL string) *oauth.Consumer {
|
||||||
func NewClient(ConsumerRSA string, ConsumerKey string, URL string) *oauth.Consumer{
|
|
||||||
//TODO: make this configurable
|
//TODO: make this configurable
|
||||||
privateKeyFileContents, err := ioutil.ReadFile(ConsumerRSA)
|
privateKeyFileContents, err := ioutil.ReadFile(ConsumerRSA)
|
||||||
log.Info("Tried to read the key")
|
log.Info("Tried to read the key")
|
||||||
|
@ -42,7 +41,7 @@ func NewClient(ConsumerRSA string, ConsumerKey string, URL string) *oauth.Consum
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewClientWithToken(Consumer *oauth.Consumer, AccessToken string) *http.Client{
|
func NewClientWithToken(Consumer *oauth.Consumer, AccessToken string) *http.Client {
|
||||||
var token oauth.AccessToken
|
var token oauth.AccessToken
|
||||||
token.Token = AccessToken
|
token.Token = AccessToken
|
||||||
client, err := Consumer.MakeHttpClient(&token)
|
client, err := Consumer.MakeHttpClient(&token)
|
||||||
|
@ -51,9 +50,3 @@ func NewClientWithToken(Consumer *oauth.Consumer, AccessToken string) *http.Clie
|
||||||
}
|
}
|
||||||
return client
|
return client
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,28 +1,28 @@
|
||||||
package bitbucketserver
|
package bitbucketserver
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
|
||||||
"bytes"
|
"bytes"
|
||||||
"io/ioutil"
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
log "github.com/Sirupsen/logrus"
|
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
log "github.com/Sirupsen/logrus"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func avatarLink(email string) (url string) {
|
func avatarLink(email string) (url string) {
|
||||||
hasher := md5.New()
|
hasher := md5.New()
|
||||||
hasher.Write([]byte(strings.ToLower(email)))
|
hasher.Write([]byte(strings.ToLower(email)))
|
||||||
emailHash := fmt.Sprintf("%v", hex.EncodeToString(hasher.Sum(nil)))
|
emailHash := fmt.Sprintf("%v", hex.EncodeToString(hasher.Sum(nil)))
|
||||||
avatarURL := fmt.Sprintf("https://www.gravatar.com/avatar/%s.jpg",emailHash)
|
avatarURL := fmt.Sprintf("https://www.gravatar.com/avatar/%s.jpg", emailHash)
|
||||||
log.Info(avatarURL)
|
log.Info(avatarURL)
|
||||||
return avatarURL
|
return avatarURL
|
||||||
}
|
}
|
||||||
|
|
||||||
func doPut(client *http.Client, url string, body []byte) {
|
func doPut(client *http.Client, url string, body []byte) {
|
||||||
request, err := http.NewRequest("PUT", url, bytes.NewBuffer(body))
|
request, err := http.NewRequest("PUT", url, bytes.NewBuffer(body))
|
||||||
request.Header.Add("Content-Type","application/json")
|
request.Header.Add("Content-Type", "application/json")
|
||||||
response, err := client.Do(request)
|
response, err := client.Do(request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(err)
|
log.Error(err)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package bitbucketserver
|
package bitbucketserver
|
||||||
|
|
||||||
|
|
||||||
type postHook struct {
|
type postHook struct {
|
||||||
Changesets struct {
|
Changesets struct {
|
||||||
Filter interface{} `json:"filter"`
|
Filter interface{} `json:"filter"`
|
||||||
|
|
Loading…
Reference in a new issue