summaryrefslogtreecommitdiffstats
path: root/modules/private/branch.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/private/branch.go')
-rw-r--r--modules/private/branch.go26
1 files changed, 26 insertions, 0 deletions
diff --git a/modules/private/branch.go b/modules/private/branch.go
index 6b3b9170bb..fed66d29ff 100644
--- a/modules/private/branch.go
+++ b/modules/private/branch.go
@@ -38,3 +38,29 @@ func GetProtectedBranchBy(repoID int64, branchName string) (*models.ProtectedBra
return &branch, nil
}
+
+// CanUserPush returns if user can push
+func CanUserPush(protectedBranchID, userID int64) (bool, error) {
+ // Ask for running deliver hook and test pull request tasks.
+ reqURL := setting.LocalURL + fmt.Sprintf("api/internal/protectedbranch/%d/%d", protectedBranchID, userID)
+ log.GitLogger.Trace("CanUserPush: %s", reqURL)
+
+ resp, err := newInternalRequest(reqURL, "GET").Response()
+ if err != nil {
+ return false, err
+ }
+
+ var canPush = make(map[string]interface{})
+ if err := json.NewDecoder(resp.Body).Decode(&canPush); err != nil {
+ return false, err
+ }
+
+ defer resp.Body.Close()
+
+ // All 2XX status codes are accepted and others will return an error
+ if resp.StatusCode/100 != 2 {
+ return false, fmt.Errorf("Failed to retrieve push user: %s", decodeJSONError(resp).Err)
+ }
+
+ return canPush["can_push"].(bool), nil
+}