diff options
author | zeripath <art27@cantab.net> | 2019-06-01 16:00:21 +0100 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2019-06-01 23:00:21 +0800 |
commit | 356854fc5f8d7d1a7e4d68c9e00929e9ce8aa867 (patch) | |
tree | bc250740ffe65de5cd9ce3389e004ca7723d5643 /modules/private/serv.go | |
parent | 8a343dda39b187627db6ffb4c24a6e0ae615867b (diff) | |
download | gitea-356854fc5f8d7d1a7e4d68c9e00929e9ce8aa867.tar.gz gitea-356854fc5f8d7d1a7e4d68c9e00929e9ce8aa867.zip |
Move serv hook functionality & drop GitLogger (#6993)
* Move hook functionality internally
* Internalise serv logic
* Remove old internal paths
* finally remove the gitlogger
* Disallow push on archived repositories
* fix lint error
* Update modules/private/key.go
* Update routers/private/hook.go
* Update routers/private/hook.go
* Update routers/private/hook.go
* Updated routers/private/serv.go
* Fix LFS Locks over SSH
* rev-list needs to be run by the hook process
* fixup
* Improve git test
* Ensure that the lfs files are created with a different prefix
* Reduce the replication in git_test.go
* slight refactor
* Remove unnecessary "/"
* Restore ensureAnonymousClone
* Restore ensureAnonymousClone
* Run rev-list on server side
* Try passing in the alternative directories instead
* Mark test as skipped
* Improve git test
* Ensure that the lfs files are created with a different prefix
* Reduce the replication in git_test.go
* Remove unnecessary "/"
Diffstat (limited to 'modules/private/serv.go')
-rw-r--r-- | modules/private/serv.go | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/modules/private/serv.go b/modules/private/serv.go new file mode 100644 index 0000000000..5b4a27f116 --- /dev/null +++ b/modules/private/serv.go @@ -0,0 +1,106 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package private + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/setting" +) + +// KeyAndOwner is the response from ServNoCommand +type KeyAndOwner struct { + Key *models.PublicKey `json:"key"` + Owner *models.User `json:"user"` +} + +// ServNoCommand returns information about the provided key +func ServNoCommand(keyID int64) (*models.PublicKey, *models.User, error) { + reqURL := setting.LocalURL + fmt.Sprintf("api/internal/serv/none/%d", + keyID) + resp, err := newInternalRequest(reqURL, "GET").Response() + if err != nil { + return nil, nil, err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return nil, nil, fmt.Errorf("%s", decodeJSONError(resp).Err) + } + + var keyAndOwner KeyAndOwner + if err := json.NewDecoder(resp.Body).Decode(&keyAndOwner); err != nil { + return nil, nil, err + } + return keyAndOwner.Key, keyAndOwner.Owner, nil +} + +// ServCommandResults are the results of a call to the private route serv +type ServCommandResults struct { + IsWiki bool + IsDeployKey bool + KeyID int64 + KeyName string + UserName string + UserID int64 + OwnerName string + RepoName string + RepoID int64 +} + +// ErrServCommand is an error returned from ServCommmand. +type ErrServCommand struct { + Results ServCommandResults + Type string + Err string + StatusCode int +} + +func (err ErrServCommand) Error() string { + return err.Err +} + +// IsErrServCommand checks if an error is a ErrServCommand. +func IsErrServCommand(err error) bool { + _, ok := err.(ErrServCommand) + return ok +} + +// ServCommand preps for a serv call +func ServCommand(keyID int64, ownerName, repoName string, mode models.AccessMode, verbs ...string) (*ServCommandResults, error) { + reqURL := setting.LocalURL + fmt.Sprintf("api/internal/serv/command/%d/%s/%s?mode=%d", + keyID, + url.PathEscape(ownerName), + url.PathEscape(repoName), + mode) + for _, verb := range verbs { + if verb != "" { + reqURL += fmt.Sprintf("&verb=%s", url.QueryEscape(verb)) + } + } + + resp, err := newInternalRequest(reqURL, "GET").Response() + if err != nil { + return nil, err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + var errServCommand ErrServCommand + if err := json.NewDecoder(resp.Body).Decode(&errServCommand); err != nil { + return nil, err + } + errServCommand.StatusCode = resp.StatusCode + return nil, errServCommand + } + var results ServCommandResults + if err := json.NewDecoder(resp.Body).Decode(&results); err != nil { + return nil, err + } + return &results, nil + +} |