a231b8690b9ae6b3d7d92333b87e129bd9aa3b92
[src/xds/xds-server.git] / lib / apiv1 / folders.go
1 package apiv1
2
3 import (
4         "net/http"
5         "os"
6
7         "github.com/gin-gonic/gin"
8         common "github.com/iotbzh/xds-common/golib"
9         "github.com/iotbzh/xds-server/lib/folder"
10 )
11
12 // getFolders returns all folders configuration
13 func (s *APIService) getFolders(c *gin.Context) {
14         c.JSON(http.StatusOK, s.mfolders.GetConfigArr())
15 }
16
17 // getFolder returns a specific folder configuration
18 func (s *APIService) getFolder(c *gin.Context) {
19         f := s.mfolders.Get(c.Param("id"))
20         if f == nil {
21                 common.APIError(c, "Invalid id")
22                 return
23         }
24
25         c.JSON(http.StatusOK, (*f).GetConfig())
26 }
27
28 // addFolder adds a new folder to server config
29 func (s *APIService) addFolder(c *gin.Context) {
30         var cfgArg folder.FolderConfig
31         if c.BindJSON(&cfgArg) != nil {
32                 common.APIError(c, "Invalid arguments")
33                 return
34         }
35
36         s.log.Debugln("Add folder config: ", cfgArg)
37
38         newFld, err := s.mfolders.Add(cfgArg)
39         if err != nil {
40                 common.APIError(c, err.Error())
41                 return
42         }
43
44         // Create xds-project.conf file
45         // FIXME: move to folders.createUpdate func (but gin context needed)
46         fld := s.mfolders.Get(newFld.ID)
47         prjConfFile := (*fld).GetFullPath("xds-project.conf")
48         if !common.Exists(prjConfFile) {
49                 fd, err := os.OpenFile(prjConfFile, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
50                 if err != nil {
51                         common.APIError(c, err.Error())
52                         return
53                 }
54                 fd.WriteString("# XDS project settings\n")
55                 fd.WriteString("export XDS_SERVER_URL=" + c.Request.Host + "\n")
56                 fd.WriteString("export XDS_PROJECT_ID=" + newFld.ID + "\n")
57                 if newFld.DefaultSdk == "" {
58                         sdks := s.sdks.GetAll()
59                         newFld.DefaultSdk = sdks[0].ID
60                 }
61                 fd.WriteString("export XDS_SDK_ID=" + newFld.DefaultSdk + "\n")
62                 fd.Close()
63         }
64
65         c.JSON(http.StatusOK, newFld)
66 }
67
68 // syncFolder force synchronization of folder files
69 func (s *APIService) syncFolder(c *gin.Context) {
70         id := c.Param("id")
71
72         s.log.Debugln("Sync folder id: ", id)
73
74         err := s.mfolders.ForceSync(id)
75         if err != nil {
76                 common.APIError(c, err.Error())
77                 return
78         }
79
80         c.JSON(http.StatusOK, "")
81 }
82
83 // delFolder deletes folder from server config
84 func (s *APIService) delFolder(c *gin.Context) {
85         id := c.Param("id")
86
87         s.log.Debugln("Delete folder id ", id)
88
89         delEntry, err := s.mfolders.Delete(id)
90         if err != nil {
91                 common.APIError(c, err.Error())
92                 return
93         }
94         c.JSON(http.StatusOK, delEntry)
95 }