mirror of
https://github.com/go-gitea/gitea.git
synced 2026-07-21 05:45:17 +02:00
1. use var names "reqOwnerName, reqRepoName", because these values are from request and should not be really used for path construction 2. simplify enable-pprof logic, don't "log.Fatal" 3. don't make runServe command to guess the repo storage path, instead, let server return RepoStoragePath 4. don't process lfs verbs when the repo is a wiki 5. construct the request URI path correctly for the lfs transfer backend (moved to the caller) 6. don't call "owner, err := user_model.GetUserByName", the "owner rename redirection" has been done before 7. fix incorrect "repo.OwnerName = ownerName", the real owner might have been "redirected" 8. fix incorrect "inactive owner" check, it should be checked even if the repo is redirected Use general error functions to handle responses, error handling code is hugely simplified.
64 lines
2.0 KiB
Go
64 lines
2.0 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package private
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/url"
|
|
|
|
asymkey_model "gitea.dev/models/asymkey"
|
|
"gitea.dev/models/perm"
|
|
user_model "gitea.dev/models/user"
|
|
"gitea.dev/modules/setting"
|
|
)
|
|
|
|
// KeyAndOwner is the response from ServNoCommand
|
|
type KeyAndOwner struct {
|
|
Key *asymkey_model.PublicKey `json:"key"`
|
|
Owner *user_model.User `json:"user"`
|
|
}
|
|
|
|
// ServNoCommand returns information about the provided key
|
|
func ServNoCommand(ctx context.Context, keyID int64) (*asymkey_model.PublicKey, *user_model.User, error) {
|
|
reqURL := setting.LocalURL + fmt.Sprintf("api/internal/serv/none/%d", keyID)
|
|
req := newInternalRequestAPI(ctx, reqURL, "GET")
|
|
keyAndOwner, extra := requestJSONResp(req, &KeyAndOwner{})
|
|
if extra.HasError() {
|
|
return nil, nil, extra.Error
|
|
}
|
|
return keyAndOwner.Key, keyAndOwner.Owner, nil
|
|
}
|
|
|
|
// ServCommandResults are the results of a call to the private route serv
|
|
type ServCommandResults struct {
|
|
IsWiki bool
|
|
DeployKeyID int64
|
|
KeyID int64 // public key
|
|
KeyName string // this field is ambiguous, it can be the name of DeployKey, or the name of the PublicKey
|
|
UserName string
|
|
UserEmail string
|
|
UserID int64
|
|
OwnerName string
|
|
RepoName string
|
|
RepoID int64
|
|
|
|
RepoStoragePath string
|
|
}
|
|
|
|
// ServCommand preps for a serv call
|
|
func ServCommand(ctx context.Context, keyID int64, ownerName, repoName string, mode perm.AccessMode, verb, lfsVerb string) (*ServCommandResults, ResponseExtra) {
|
|
reqURL := setting.LocalURL + fmt.Sprintf("api/internal/serv/command/%d/%s/%s?mode=%d",
|
|
keyID,
|
|
url.PathEscape(ownerName),
|
|
url.PathEscape(repoName),
|
|
mode,
|
|
)
|
|
reqURL += "&verb=" + url.QueryEscape(verb)
|
|
// reqURL += "&lfs_verb=" + url.QueryEscape(lfsVerb) // TODO: actually there is no use of this parameter. In the future, the URL construction should be more flexible
|
|
_ = lfsVerb
|
|
req := newInternalRequestAPI(ctx, reqURL, "GET")
|
|
return requestJSONResp(req, &ServCommandResults{})
|
|
}
|