summaryrefslogtreecommitdiffstats
path: root/modules/private
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2017-09-14 10:16:22 +0200
committerGitHub <noreply@github.com>2017-09-14 10:16:22 +0200
commit1739e84ac02c0384c04576a00abab9348293f9c7 (patch)
tree1015e68f36421f274d2e883ff3ddb0cb29b6af71 /modules/private
parentDisplay commit status on landing page of repo (#1784) (diff)
downloadforgejo-1739e84ac02c0384c04576a00abab9348293f9c7.tar.xz
forgejo-1739e84ac02c0384c04576a00abab9348293f9c7.zip
improve protected branch to add whitelist support (#2451)
* improve protected branch to add whitelist support * fix lint * fix style check * fix tests * fix description on UI and import * fix test * bug fixed * fix tests and languages * move isSliceInt64Eq to util pkg; improve function names & typo
Diffstat (limited to 'modules/private')
-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
+}