Implement per-project webhook secret

This commit is contained in:
simon987
2019-02-24 15:30:38 -05:00
parent c736cc3d98
commit 397805f915
22 changed files with 378 additions and 59 deletions

View File

@@ -11,10 +11,11 @@ import (
type ManagerRole int
const (
ROLE_NONE ManagerRole = 0
ROLE_READ ManagerRole = 1
ROLE_EDIT ManagerRole = 2
ROLE_MANAGE_ACCESS ManagerRole = 4
RoleNone ManagerRole = 0
RoleRead ManagerRole = 1
RoleEdit ManagerRole = 2
RoleManageAccess ManagerRole = 4
RoleSecret ManagerRole = 8
)
type Manager struct {
@@ -142,7 +143,7 @@ func (database *Database) GetManagerRoleOn(manager *Manager, projectId int64) Ma
var role ManagerRole
err := row.Scan(&role)
if err != nil {
return ROLE_NONE
return RoleNone
}
return role

View File

@@ -25,14 +25,14 @@ type AssignedTasks struct {
TaskCount int64 `json:"task_count"`
}
func (database *Database) SaveProject(project *Project) (int64, error) {
func (database *Database) SaveProject(project *Project, webhookSecret string) (int64, error) {
db := database.getDB()
row := db.QueryRow(`INSERT INTO project (name, git_repo, clone_url, version, priority,
motd, public, hidden, chain, paused)
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,NULLIF($9, 0),$10) RETURNING id`,
motd, public, hidden, chain, paused, webhook_secret)
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,NULLIF($9, 0),$10,$11) RETURNING id`,
project.Name, project.GitRepo, project.CloneUrl, project.Version, project.Priority, project.Motd,
project.Public, project.Hidden, project.Chain, project.Paused)
project.Public, project.Hidden, project.Chain, project.Paused, webhookSecret)
var id int64
err := row.Scan(&id)
@@ -225,3 +225,23 @@ func (database *Database) SetSecret(pid int64, secret string) {
"project": pid,
}).Info("Set secret")
}
func (database *Database) GetWebhookSecret(pid int64) (secret string, err error) {
db := database.getDB()
row := db.QueryRow(`SELECT webhook_secret FROM project WHERE id=$1`, pid)
err = row.Scan(&secret)
return
}
func (database *Database) SetWebhookSecret(pid int64, secret string) (err error) {
db := database.getDB()
res, err := db.Exec(`UPDATE project SET webhook_secret=$1 WHERE id=$2`, secret, pid)
handleErr(err)
rowsAffected, _ := res.RowsAffected()
logrus.WithFields(logrus.Fields{
"project": pid,
"rowsAffected": rowsAffected,
}).Trace("Update webhook secret")
return
}