diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2017-09-14 10:16:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-14 10:16:22 +0200 |
commit | 1739e84ac02c0384c04576a00abab9348293f9c7 (patch) | |
tree | 1015e68f36421f274d2e883ff3ddb0cb29b6af71 /modules/private | |
parent | Display commit status on landing page of repo (#1784) (diff) | |
download | forgejo-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.go | 26 |
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 +} |