summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorUnknwon <joe2010xtmf@163.com>2014-08-09 15:40:10 -0700
committerUnknwon <joe2010xtmf@163.com>2014-08-09 15:40:10 -0700
commit9a1d5d2489d25778e26ab413cb9ee78d3fe2823a (patch)
tree4e31de40d92b96ba9fa8f45e5da442291303832e /models
parent9820b8e1342017edfe4f6ced9cc3a7d811449c7b (diff)
downloadgitea-9a1d5d2489d25778e26ab413cb9ee78d3fe2823a.tar.gz
gitea-9a1d5d2489d25778e26ab413cb9ee78d3fe2823a.zip
Finish new web hook pages
Diffstat (limited to 'models')
-rw-r--r--models/publickey.go18
-rw-r--r--models/webhook.go37
2 files changed, 48 insertions, 7 deletions
diff --git a/models/publickey.go b/models/publickey.go
index f9880c74cd..1246cffc58 100644
--- a/models/publickey.go
+++ b/models/publickey.go
@@ -209,6 +209,18 @@ func AddPublicKey(key *PublicKey) (err error) {
return nil
}
+// GetPublicKeyById returns public key by given ID.
+func GetPublicKeyById(keyId int64) (*PublicKey, error) {
+ key := new(PublicKey)
+ has, err := x.Id(keyId).Get(key)
+ if err != nil {
+ return nil, err
+ } else if !has {
+ return nil, ErrKeyNotExist
+ }
+ return key, nil
+}
+
// ListPublicKey returns a list of all public keys that user has.
func ListPublicKey(uid int64) ([]*PublicKey, error) {
keys := make([]*PublicKey, 0, 5)
@@ -277,6 +289,12 @@ func rewriteAuthorizedKeys(key *PublicKey, p, tmpP string) error {
return nil
}
+// UpdatePublicKey updates given public key.
+func UpdatePublicKey(key *PublicKey) error {
+ _, err := x.Id(key.Id).AllCols().Update(key)
+ return err
+}
+
// DeletePublicKey deletes SSH key information both in database and authorized_keys file.
func DeletePublicKey(key *PublicKey) error {
has, err := x.Get(key)
diff --git a/models/webhook.go b/models/webhook.go
index 925ec1a7de..17a41e66c6 100644
--- a/models/webhook.go
+++ b/models/webhook.go
@@ -12,6 +12,7 @@ import (
"github.com/gogits/gogs/modules/httplib"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
+ "github.com/gogits/gogs/modules/uuid"
)
var (
@@ -122,6 +123,12 @@ const (
SERVICE
)
+type HookEventType string
+
+const (
+ PUSH HookEventType = "push"
+)
+
type PayloadAuthor struct {
Name string `json:"name"`
Email string `json:"email"`
@@ -157,13 +164,16 @@ type Payload struct {
// HookTask represents a hook task.
type HookTask struct {
Id int64
+ Uuid string
Type HookTaskType
Url string
*Payload `xorm:"-"`
PayloadContent string `xorm:"TEXT"`
ContentType HookContentType
+ EventType HookEventType
IsSsl bool
IsDeliveried bool
+ IsSucceed bool
}
// CreateHookTask creates a new hook task,
@@ -173,6 +183,7 @@ func CreateHookTask(t *HookTask) error {
if err != nil {
return err
}
+ t.Uuid = uuid.NewV4().String()
t.PayloadContent = string(data)
_, err = x.Insert(t)
return err
@@ -190,20 +201,32 @@ func DeliverHooks() {
x.Where("is_deliveried=?", false).Iterate(new(HookTask),
func(idx int, bean interface{}) error {
t := bean.(*HookTask)
- // Only support JSON now.
- if _, err := httplib.Post(t.Url).SetTimeout(timeout, timeout).
- Body([]byte(t.PayloadContent)).Response(); err != nil {
- log.Error(4, "webhook.DeliverHooks(Delivery): %v", err)
- return nil
+ req := httplib.Post(t.Url).SetTimeout(timeout, timeout).
+ Header("X-Gogs-Delivery", t.Uuid).
+ Header("X-Gogs-Event", string(t.EventType))
+
+ switch t.ContentType {
+ case JSON:
+ req = req.Header("Content-Type", "application/json").Body(t.PayloadContent)
+ case FORM:
+ req.Param("payload", t.PayloadContent)
}
t.IsDeliveried = true
+
+ // TODO: record response.
+ if _, err := req.Response(); err != nil {
+ log.Error(4, "Delivery: %v", err)
+ } else {
+ t.IsSucceed = true
+ }
+
if err := UpdateHookTask(t); err != nil {
- log.Error(4, "webhook.DeliverHooks(UpdateHookTask): %v", err)
+ log.Error(4, "UpdateHookTask: %v", err)
return nil
}
- log.Trace("Hook delivered: %s", t.PayloadContent)
+ log.Trace("Hook delivered(%s): %s", t.Uuid, t.PayloadContent)
return nil
})
}