Skip to content

Commit 18f1218

Browse files
committed
clean up code
1 parent edd426c commit 18f1218

File tree

6 files changed

+48
-55
lines changed

6 files changed

+48
-55
lines changed

internal/file_del.go

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package internal
22

33
import (
4-
"errors"
54
"fmt"
6-
"io/fs"
75
"log"
86
"os"
97
"path"
10-
"strings"
118
"time"
129

1310
"github.com/gofiber/fiber/v2"
@@ -40,39 +37,37 @@ func HandleDeleteFile(c *fiber.Ctx) error {
4037
return sendResponse(c, fiber.StatusNotAcceptable, false, "file_path value require")
4138
}
4239

43-
file := fmt.Sprintf("%s/%s", AppCnf.Path, *req.FilePath)
40+
file := path.Join(AppCnf.Path, *req.FilePath)
4441
f, err := os.Stat(file)
4542
if err != nil {
46-
var pathError *fs.PathError
47-
if errors.As(err, &pathError) {
48-
return sendResponse(c, fiber.StatusNotFound, false, *req.FilePath+" does not exist")
49-
} else {
50-
return sendResponse(c, fiber.StatusNotAcceptable, false, err.Error())
43+
if os.IsNotExist(err) {
44+
return sendResponse(c, fiber.StatusNotFound, false, fmt.Sprintf("%s does not exist", *req.FilePath))
5145
}
46+
log.Println("Error stating file:", err)
47+
return sendResponse(c, fiber.StatusInternalServerError, false, "Error checking file status")
5248
}
5349

5450
if f.IsDir() {
5551
return sendResponse(c, fiber.StatusNotAcceptable, false, *req.FilePath+" is a directory, not allow to delete directory")
5652
}
5753

5854
if AppCnf.EnableDelFileBackup {
59-
// first with the video file
6055
toFile := path.Join(AppCnf.DelFileBackupPath, f.Name())
6156
err := os.Rename(file, toFile)
6257
if err != nil {
63-
log.Println(err)
64-
return sendResponse(c, fiber.StatusNotAcceptable, false, err.Error())
58+
log.Println("Failed to move file for backup:", err)
59+
return sendResponse(c, fiber.StatusInternalServerError, false, "Failed to backup file")
6560
}
6661

67-
// otherwise during cleanup will be hard to detect
6862
newTime := time.Now()
6963
if err := os.Chtimes(toFile, newTime, newTime); err != nil {
7064
log.Println("Failed to update file modification time:", err)
7165
}
7266
} else {
7367
err = os.Remove(file)
7468
if err != nil {
75-
return sendResponse(c, fiber.StatusNotAcceptable, false, err.Error())
69+
log.Println("Failed to delete file:", err)
70+
return sendResponse(c, fiber.StatusInternalServerError, false, "Failed to delete file")
7671
}
7772
}
7873

@@ -82,7 +77,7 @@ func HandleDeleteFile(c *fiber.Ctx) error {
8277
}
8378

8479
if AppCnf.DeleteEmptyDir {
85-
dir := strings.Replace(file, "/"+f.Name(), "", 1)
80+
dir := path.Dir(file)
8681
if dir != AppCnf.Path {
8782
if empty, err := IsDirEmpty(dir); err == nil && empty {
8883
_ = os.Remove(dir)

internal/file_serve.go

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,47 +3,28 @@ package internal
33
import (
44
"os"
55
"path"
6-
"strings"
76

7+
"github.com/go-jose/go-jose/v4/jwt"
88
"github.com/gofiber/fiber/v2"
99
)
1010

1111
func HandleDownloadFile(c *fiber.Ctx) error {
12-
token := c.Params("token")
12+
claims := c.Locals("claims").(*jwt.Claims)
1313

14-
if len(token) == 0 {
15-
return sendResponse(c, fiber.StatusUnauthorized, false, "token require or invalid url")
16-
}
17-
18-
out, err := verifyToken(token)
19-
if err != nil {
20-
return sendResponse(c, fiber.StatusUnauthorized, false, err.Error())
21-
}
22-
23-
filePath := path.Join(AppCnf.Path, out.Subject)
14+
filePath := path.Join(AppCnf.Path, claims.Subject)
2415
file, err := os.Lstat(filePath)
2516
if err != nil {
26-
ms := strings.SplitN(err.Error(), "/", -1)
27-
return sendResponse(c, fiber.StatusNotFound, false, ms[len(ms)-1])
17+
return sendResponse(c, fiber.StatusNotFound, false, "file not found")
2818
}
2919

3020
c.Attachment(file.Name())
3121
return c.SendFile(filePath, AppCnf.Compress)
3222
}
3323

3424
func HandleServeFile(c *fiber.Ctx) error {
35-
token := c.Params("token")
36-
37-
if len(token) == 0 {
38-
return sendResponse(c, fiber.StatusUnauthorized, false, "token require or invalid url")
39-
}
40-
41-
out, err := verifyToken(token)
42-
if err != nil {
43-
return sendResponse(c, fiber.StatusUnauthorized, false, err.Error())
44-
}
25+
claims := c.Locals("claims").(*jwt.Claims)
4526

46-
c.Attachment(path.Base(out.Subject))
47-
c.Set("X-Accel-Redirect", path.Join(AppCnf.NginxFileServePath, out.Subject))
27+
c.Attachment(path.Base(claims.Subject))
28+
c.Set("X-Accel-Redirect", path.Join(AppCnf.NginxFileServePath, claims.Subject))
4829
return c.SendStatus(fiber.StatusOK)
4930
}

internal/middleware.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package internal
2+
3+
import (
4+
"github.com/gofiber/fiber/v2"
5+
)
6+
7+
func VerifyTokenMiddleware(c *fiber.Ctx) error {
8+
token := c.Params("token")
9+
10+
if len(token) == 0 {
11+
return sendResponse(c, fiber.StatusUnauthorized, false, "token require or invalid url")
12+
}
13+
14+
out, err := verifyToken(token)
15+
if err != nil {
16+
return sendResponse(c, fiber.StatusUnauthorized, false, err.Error())
17+
}
18+
19+
c.Locals("claims", out)
20+
return c.Next()
21+
}

internal/router.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ func Router(version string) *fiber.App {
2121

2222
// format: http://ip:port/download/token
2323
// make sure token is urlencoded
24-
app.Get("/download/:token", HandleDownloadFile)
25-
app.Get("/serveFile/:token", HandleServeFile)
24+
app.Get("/download/:token", VerifyTokenMiddleware, HandleDownloadFile)
25+
app.Get("/serveFile/:token", VerifyTokenMiddleware, HandleServeFile)
2626
app.Post("/delete", HandleDeleteFile)
2727

2828
return app

internal/scheduler.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,14 @@ import (
77
"time"
88
)
99

10-
var closeTicker chan bool
11-
12-
func StartScheduler() {
13-
closeTicker = make(chan bool)
10+
func StartScheduler(shutdown chan os.Signal) {
1411
hourlyChecker := time.NewTicker(1 * time.Hour)
15-
16-
defer func() {
17-
hourlyChecker.Stop()
18-
closeTicker <- true
19-
}()
12+
defer hourlyChecker.Stop()
2013

2114
for {
2215
select {
23-
case <-closeTicker:
16+
case <-shutdown:
17+
log.Println("Stopping scheduler")
2418
return
2519
case <-hourlyChecker.C:
2620
checkDelFileBackupPath()

main.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,22 @@ func main() {
2929
if err != nil {
3030
log.Fatalln(err)
3131
}
32-
// start scheduler
33-
go internal.StartScheduler()
3432

3533
router := internal.Router(Version)
3634
sigChan := make(chan os.Signal, 1)
3735
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
3836

37+
// start scheduler
38+
go internal.StartScheduler(sigChan)
39+
3940
go func() {
4041
sig := <-sigChan
4142
log.Println("exit requested, shutting down", "signal", sig)
4243
err = router.Shutdown()
4344
if err != nil {
4445
log.Fatalln(err)
4546
}
47+
log.Println("server shutdown")
4648
}()
4749

4850
err = router.Listen(fmt.Sprintf(":%d", internal.AppCnf.Port))

0 commit comments

Comments
 (0)