-
Notifications
You must be signed in to change notification settings - Fork 0
/
File.go
47 lines (43 loc) · 1.29 KB
/
File.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package remoteWeb
import (
"context"
iofs "io/fs"
"net/http"
"github.com/Tackem-org/Global/helpers"
"github.com/Tackem-org/Global/logging"
pb "github.com/Tackem-org/Global/pb/remoteweb"
"github.com/Tackem-org/Global/system/masterData"
"github.com/Tackem-org/Global/system/setupData"
)
func (r *RemoteWebServer) File(ctx context.Context, in *pb.FileRequest) (*pb.FileResponse, error) {
if _, err := helpers.GRPCAccessChecker(ctx, func(baseID string) helpers.ServiceKeyCheckInterface {
return &masterData.ConnectionInfo
}, "GRPC Add Dependent"); err != "" {
return &pb.FileResponse{StatusCode: http.StatusInternalServerError, ErrorMessage: err}, nil
}
data, err := setupData.Data.StaticFS.ReadFile(in.Path)
if err != nil {
sc := http.StatusInternalServerError
em := "internal error"
switch err.(type) {
case *iofs.PathError:
if in.Path[len(in.Path)-1:] == "/" {
sc = http.StatusForbidden
em = "path is a directory access forbidden"
} else {
sc = http.StatusNotFound
em = "file not found"
}
default:
logging.Error("[GRPC Remote Web System File Request] %s:%s", in.Path, err.Error())
}
return &pb.FileResponse{
StatusCode: uint32(sc),
ErrorMessage: em,
}, nil
}
return &pb.FileResponse{
StatusCode: http.StatusOK,
File: data,
}, nil
}