mirror of
https://github.com/hanzoai/forge.git
synced 2026-10-30 15:00:39 +00:00
Source files keep their SPDX-License-Identifier and Hanzo copyright line; the Gitea, Gogs and LFS Test Server copyrights they used to repeat now live once in NOTICE, alongside LICENSE. The header lint accepts any copyright line above the SPDX line, so it no longer demands an upstream one. Co-authored-by: Hanzo Dev <[email protected]>
61 lines
1.9 KiB
Go
61 lines
1.9 KiB
Go
// Copyright 2026 Hanzo AI, Inc. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package private
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/url"
|
|
|
|
asymkey_model "github.com/hanzoai/git/models/asymkey"
|
|
"github.com/hanzoai/git/models/perm"
|
|
user_model "github.com/hanzoai/git/models/user"
|
|
)
|
|
|
|
// 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 := internalURL(fmt.Sprintf("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
|
|
}
|
|
|
|
// 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 := internalURL(fmt.Sprintf("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{})
|
|
}
|