@@ -8,7 +8,10 @@ import (
88 "github.com/gofiber/fiber/v2"
99 "github.com/gofiber/fiber/v2/middleware/logger"
1010 "github.com/gofiber/fiber/v2/middleware/recover"
11+ "io/fs"
12+ "log"
1113 "os"
14+ "path"
1215 "strings"
1316 "time"
1417)
@@ -34,18 +37,12 @@ func HandleDownloadFile(c *fiber.Ctx) error {
3437 token := c .Params ("token" )
3538
3639 if len (token ) == 0 {
37- return c .Status (fiber .StatusUnauthorized ).JSON (fiber.Map {
38- "status" : false ,
39- "msg" : "token require or invalid url" ,
40- })
40+ return sendResponse (c , fiber .StatusUnauthorized , false , "token require or invalid url" )
4141 }
4242
4343 file , status , err := verifyToken (token )
4444 if err != nil {
45- return c .Status (status ).JSON (fiber.Map {
46- "status" : false ,
47- "msg" : err .Error (),
48- })
45+ return sendResponse (c , status , false , err .Error ())
4946 }
5047
5148 c .Attachment (file )
@@ -62,64 +59,57 @@ func HandleDeleteFile(c *fiber.Ctx) error {
6259 secret := c .Get ("API-SECRET" )
6360
6461 if apiKey == "" || secret == "" {
65- return c .Status (fiber .StatusUnauthorized ).JSON (fiber.Map {
66- "status" : false ,
67- "msg" : "Auth header information are missing" ,
68- })
62+ return sendResponse (c , fiber .StatusUnauthorized , false , "Auth header information are missing" )
6963 }
7064
7165 if apiKey != AppCnf .ApiKey || secret != AppCnf .ApiSecret {
72- return c .Status (fiber .StatusUnauthorized ).JSON (fiber.Map {
73- "status" : false ,
74- "msg" : "Auth header information didn't match" ,
75- })
66+ return sendResponse (c , fiber .StatusUnauthorized , false , "Auth header information didn't match" )
7667 }
7768
7869 req := new (DeleteFileReq )
7970 err := c .BodyParser (req )
8071 if err != nil {
81- return c .Status (fiber .StatusNotAcceptable ).JSON (fiber.Map {
82- "status" : false ,
83- "msg" : err .Error (),
84- })
72+ return sendResponse (c , fiber .StatusNotAcceptable , false , err .Error ())
8573 }
8674
8775 if req .FilePath == nil {
88- return c .Status (fiber .StatusNotAcceptable ).JSON (fiber.Map {
89- "status" : false ,
90- "msg" : "file_path value require" ,
91- })
76+ return sendResponse (c , fiber .StatusNotAcceptable , false , "file_path value require" )
9277 }
9378
9479 file := fmt .Sprintf ("%s/%s" , AppCnf .Path , * req .FilePath )
9580 f , err := os .Stat (file )
9681 if err != nil {
97- if errors .Is (err , err .(* os.PathError )) {
98- return c .Status (fiber .StatusNotFound ).JSON (fiber.Map {
99- "status" : false ,
100- "msg" : * req .FilePath + " does not exist" ,
101- })
82+ var pathError * fs.PathError
83+ if errors .As (err , & pathError ) {
84+ return sendResponse (c , fiber .StatusNotFound , false , * req .FilePath + " does not exist" )
10285 } else {
103- return c .Status (fiber .StatusNotAcceptable ).JSON (fiber.Map {
104- "status" : false ,
105- "msg" : err .Error (),
106- })
86+ return sendResponse (c , fiber .StatusNotAcceptable , false , err .Error ())
10787 }
10888 }
10989
11090 if f .IsDir () {
111- return c .Status (fiber .StatusNotAcceptable ).JSON (fiber.Map {
112- "status" : false ,
113- "msg" : * req .FilePath + " is a directory, not allow to delete directory" ,
114- })
91+ return sendResponse (c , fiber .StatusNotAcceptable , false , * req .FilePath + " is a directory, not allow to delete directory" )
11592 }
11693
117- err = os .Remove (file )
118- if err != nil {
119- return c .Status (fiber .StatusNotAcceptable ).JSON (fiber.Map {
120- "status" : false ,
121- "msg" : err .Error (),
122- })
94+ if AppCnf .EnableDelFileBackup {
95+ // first with the video file
96+ toFile := path .Join (AppCnf .DelFileBackupPath , f .Name ())
97+ err := os .Rename (file , toFile )
98+ if err != nil {
99+ log .Println (err )
100+ return sendResponse (c , fiber .StatusNotAcceptable , false , err .Error ())
101+ }
102+
103+ // otherwise during cleanup will be hard to detect
104+ newTime := time .Now ()
105+ if err := os .Chtimes (toFile , newTime , newTime ); err != nil {
106+ log .Println ("Failed to update file modification time:" , err )
107+ }
108+ } else {
109+ err = os .Remove (file )
110+ if err != nil {
111+ return sendResponse (c , fiber .StatusNotAcceptable , false , err .Error ())
112+ }
123113 }
124114
125115 if AppCnf .Compress {
@@ -130,17 +120,13 @@ func HandleDeleteFile(c *fiber.Ctx) error {
130120 if AppCnf .DeleteEmptyDir {
131121 dir := strings .Replace (file , "/" + f .Name (), "" , 1 )
132122 if dir != AppCnf .Path {
133- empty , err := IsDirEmpty (dir )
134- if err == nil && empty {
123+ if empty , err := IsDirEmpty (dir ); err == nil && empty {
135124 _ = os .Remove (dir )
136125 }
137126 }
138127 }
139128
140- return c .JSON (fiber.Map {
141- "status" : true ,
142- "msg" : "file deleted" ,
143- })
129+ return sendResponse (c , fiber .StatusOK , true , "file deleted" )
144130}
145131
146132func verifyToken (token string ) (string , int , error ) {
@@ -168,3 +154,10 @@ func verifyToken(token string) (string, int, error) {
168154
169155 return file , fiber .StatusOK , nil
170156}
157+
158+ func sendResponse (c * fiber.Ctx , statusCode int , status bool , msg string ) error {
159+ return c .Status (statusCode ).JSON (fiber.Map {
160+ "status" : status ,
161+ "msg" : msg ,
162+ })
163+ }
0 commit comments