// Copyright 2019 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT package private import ( "context" "fmt" "net/url" asymkey_model "code.gitea.io/gitea/models/asymkey" "code.gitea.io/gitea/models/perm" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/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 := newInternalRequest(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 } // ServCommand preps for a serv call func ServCommand(ctx context.Context, keyID int64, ownerName, repoName string, mode perm.AccessMode, verbs ...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, ) for _, verb := range verbs { if verb != "" { reqURL += fmt.Sprintf("&verb=%s", url.QueryEscape(verb)) } } req := newInternalRequest(ctx, reqURL, "GET") return requestJSONResp(req, &ServCommandResults{}) }