Skip to content

Commit db234ac

Browse files
committed
feat: support file multi server file manager support
1 parent 4e0333a commit db234ac

File tree

15 files changed

+133
-44
lines changed

15 files changed

+133
-44
lines changed

api/api/versions.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
{
44
"version": "v1",
55
"status": "active",
6-
"release_date": "2025-12-10T22:01:46.6664+05:30",
6+
"release_date": "2025-12-11T14:46:46.935266+05:30",
77
"end_of_life": "0001-01-01T00:00:00Z",
88
"changes": [
99
"Initial API version"

api/doc/openapi.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

api/internal/features/file-manager/controller/copy_directory.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func (c *FileManagerController) CopyDirectory(f fuego.ContextWithBody[CopyDirect
2323
}
2424
}
2525

26-
err = c.service.CopyDirectory(request.FromPath, request.ToPath)
26+
err = c.service.CopyDirectory(f.Request().Context(), request.FromPath, request.ToPath)
2727
if err != nil {
2828
c.logger.Log(logger.Error, err.Error(), "")
2929
return nil, fuego.HTTPError{

api/internal/features/file-manager/controller/create_directory.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func (c *FileManagerController) CreateDirectory(f fuego.ContextWithBody[CreateDi
2222
}
2323
}
2424

25-
err = c.service.CreateDirectory(request.Path)
25+
err = c.service.CreateDirectory(f.Request().Context(), request.Path)
2626
if err != nil {
2727
c.logger.Log(logger.Error, err.Error(), "")
2828
return nil, fuego.HTTPError{

api/internal/features/file-manager/controller/delete_file.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func (c *FileManagerController) DeleteDirectory(f fuego.ContextWithBody[DeleteDi
2121
}
2222
}
2323

24-
err = c.service.DeleteDirectory(request.Path)
24+
err = c.service.DeleteDirectory(f.Request().Context(), request.Path)
2525
if err != nil {
2626
c.logger.Log(logger.Error, err.Error(), "")
2727
return nil, fuego.HTTPError{

api/internal/features/file-manager/controller/init.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/raghavyuva/nixopus-api/internal/features/file-manager/service"
77
"github.com/raghavyuva/nixopus-api/internal/features/logger"
88
"github.com/raghavyuva/nixopus-api/internal/features/notification"
9+
"github.com/uptrace/bun"
910
)
1011

1112
type FileManagerController struct {
@@ -19,9 +20,10 @@ func NewFileManagerController(
1920
ctx context.Context,
2021
l logger.Logger,
2122
notificationManager *notification.NotificationManager,
23+
db *bun.DB,
2224
) *FileManagerController {
2325
return &FileManagerController{
24-
service: service.NewFileManagerService(ctx, l),
26+
service: service.NewFileManagerService(l, db),
2527
ctx: ctx,
2628
logger: l,
2729
notification: notificationManager,

api/internal/features/file-manager/controller/list_files.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func (c *FileManagerController) ListFiles(f fuego.ContextWithBody[ListFilesReque
2424
}
2525
}
2626

27-
files, err := c.service.ListFiles(path)
27+
files, err := c.service.ListFiles(r.Context(), path)
2828
if err != nil {
2929
c.logger.Log(logger.Error, err.Error(), "")
3030
return nil, fuego.HTTPError{

api/internal/features/file-manager/controller/move_file.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func (c *FileManagerController) MoveDirectory(f fuego.ContextWithBody[MoveDirect
2323
}
2424
}
2525

26-
err = c.service.MoveDirectory(request.FromPath, request.ToPath)
26+
err = c.service.MoveDirectory(f.Request().Context(), request.FromPath, request.ToPath)
2727
if err != nil {
2828
c.logger.Log(logger.Error, err.Error(), "")
2929
return nil, fuego.HTTPError{

api/internal/features/file-manager/controller/upload_file.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func (c *FileManagerController) UploadFile(f fuego.ContextNoBody) (*shared_types
2424
path = "."
2525
}
2626

27-
err = c.service.UploadFile(file, path, header.Filename)
27+
err = c.service.UploadFile(f.Request().Context(), file, path, header.Filename)
2828
if err != nil {
2929
c.logger.Log(logger.Error, err.Error(), "")
3030
return nil, fuego.HTTPError{

api/internal/features/file-manager/service/init.go

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,46 @@ package service
33
import (
44
"context"
55
"fmt"
6+
"log"
67

8+
"github.com/google/uuid"
79
"github.com/melbahja/goph"
810
"github.com/raghavyuva/nixopus-api/internal/features/logger"
911
"github.com/raghavyuva/nixopus-api/internal/features/ssh"
12+
"github.com/raghavyuva/nixopus-api/internal/utils"
13+
"github.com/uptrace/bun"
1014
)
1115

1216
type FileManagerService struct {
1317
logger logger.Logger
14-
Ctx context.Context
15-
sshpkg *goph.Client
18+
db *bun.DB
1619
}
1720

18-
func NewFileManagerService(ctx context.Context, logger logger.Logger) *FileManagerService {
19-
client, err := ssh.NewSSH().Connect()
20-
if err != nil {
21-
fmt.Printf("Failed to create ssh client in file manager")
22-
return &FileManagerService{}
23-
}
21+
func NewFileManagerService(logger logger.Logger, db *bun.DB) *FileManagerService {
2422
return &FileManagerService{
2523
logger: logger,
26-
Ctx: ctx,
27-
sshpkg: client,
24+
db: db,
25+
}
26+
}
27+
28+
// getSSHClient creates an SSH client using the active server from the database
29+
// It extracts the organization ID from the request context (set by supertokens middleware)
30+
func (f *FileManagerService) getSSHClient(ctx context.Context) (*goph.Client, error) {
31+
organizationID := utils.GetOrganizationIDFromContext(ctx)
32+
if organizationID == uuid.Nil {
33+
log.Printf("No organization ID in context, falling back to default SSH config")
34+
client, err := ssh.NewSSH().Connect()
35+
if err != nil {
36+
return nil, fmt.Errorf("failed to create default SSH client: %w", err)
37+
}
38+
return client, nil
2839
}
40+
41+
sshConfig := ssh.NewSSHWithServer(f.db, ctx, organizationID)
42+
client, err := sshConfig.Connect()
43+
if err != nil {
44+
return nil, fmt.Errorf("failed to create SSH client with server config: %w", err)
45+
}
46+
47+
return client, nil
2948
}

0 commit comments

Comments
 (0)