feat(relay): support configurable frps webui port and fix node detail integration

- Implement configurable FRPS WebUI switch and custom port setting (relay_frps_web_ui_port) in system configs.
- Integrate settings into Relay Node detail manage page instead of global settings.
- Dynamically query server version to select matching Docker image tag for Relay installation.
- Clean up legacy code and fix backend linter/test warnings.
This commit is contained in:
ryan
2026-06-22 12:48:54 +08:00
parent ffe98f6307
commit 346024f346
24 changed files with 204 additions and 69 deletions
+1 -1
View File
@@ -39,7 +39,7 @@ var (
OpenStoredUpload = ingest.OpenActiveObject
ActiveUploadHash = ingest.ActiveHash
ResolveLocalFile = ingest.ResolveLocalFile
IngestFromLocalPath = ingest.IngestFromLocalPath
IngestFromLocalPath = ingest.FromLocalPath
)
type (
+7 -3
View File
@@ -31,8 +31,8 @@ func ResolveLocalFile(ctx context.Context, req LocalFileCandidateRequest) (strin
return "", 0, os.ErrNotExist
}
// IngestFromLocalPath ingests a local regular file through the standard upload ingest path.
func IngestFromLocalPath(ctx context.Context, localPath string, req Request) (Result, error) {
// FromLocalPath ingests a local regular file through the standard upload ingest path.
func FromLocalPath(ctx context.Context, localPath string, req Request) (Result, error) {
localPath = strings.TrimSpace(localPath)
if localPath == "" {
return Result{}, errors.New("local path is required")
@@ -59,7 +59,11 @@ func IngestFromLocalPath(ctx context.Context, localPath string, req Request) (Re
func buildLocalFileCandidates(ctx context.Context, req LocalFileCandidateRequest) []string {
seen := make(map[string]struct{})
candidates := make([]string, 0, 8+len(req.RelativePaths)*4)
const (
initialCandidatesCap = 8
relativePathsWeight = 4
)
candidates := make([]string, 0, initialCandidatesCap+len(req.RelativePaths)*relativePathsWeight)
add := func(raw string) {
value := strings.TrimSpace(raw)
if value == "" {
@@ -28,8 +28,8 @@ func TestResolveLocalFileFindsStoredPath(t *testing.T) {
}
}
func TestIngestFromLocalPathRequiresPath(t *testing.T) {
_, err := IngestFromLocalPath(context.Background(), "", Request{})
func TestFromLocalPathRequiresPath(t *testing.T) {
_, err := FromLocalPath(context.Background(), "", Request{})
if err == nil {
t.Fatal("expected error for empty local path")
}