Running gofmt on remote for bitbucket server

This commit is contained in:
Joachim Hill-Grannec 2016-04-20 11:59:47 -07:00
parent 262f505779
commit 95b1f347ba
4 changed files with 189 additions and 219 deletions

View file

@ -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
} }

View file

@ -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
} }

View file

@ -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)

View file

@ -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"`