update xds-server package in docker
[src/xds/xds-server.git] / lib / xdsserver / apiv1-sdks.go
1 /*
2  * Copyright (C) 2017-2018 "IoT.bzh"
3  * Author Sebastien Douheret <sebastien@iot.bzh>
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 package xdsserver
19
20 import (
21         "net/http"
22
23         common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/golib"
24         "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1"
25         "github.com/gin-gonic/gin"
26 )
27
28 // getSdks returns all SDKs configuration
29 func (s *APIService) getSdks(c *gin.Context) {
30         c.JSON(http.StatusOK, s.sdks.GetAll())
31 }
32
33 // getSdk returns a specific Sdk configuration
34 func (s *APIService) getSdk(c *gin.Context) {
35         id, err := s.sdks.ResolveID(c.Param("id"))
36         if err != nil {
37                 common.APIError(c, err.Error())
38                 return
39         }
40         sdk := s.sdks.Get(id)
41         if sdk.Profile == "" {
42                 common.APIError(c, "Invalid id")
43                 return
44         }
45
46         c.JSON(http.StatusOK, sdk)
47 }
48
49 // installSdk Install a new Sdk
50 func (s *APIService) installSdk(c *gin.Context) {
51         var args xsapiv1.SDKInstallArgs
52
53         if err := c.BindJSON(&args); err != nil {
54                 common.APIError(c, "Invalid arguments")
55                 return
56         }
57         id, err := s.sdks.ResolveID(args.ID)
58         if err != nil {
59                 common.APIError(c, err.Error())
60                 return
61         }
62
63         // Support install from ID->URL or from local file
64         if id != "" {
65                 s.Log.Debugf("Installing SDK id %s (force %v)", id, args.Force)
66         } else if args.Filename != "" {
67                 s.Log.Debugf("Installing SDK filename %s (force %v)", args.Filename, args.Force)
68         }
69
70         // Retrieve session info
71         sess := s.sessions.Get(c)
72         if sess == nil {
73                 common.APIError(c, "Unknown sessions")
74                 return
75         }
76
77         s.lock.Lock()
78         s.lock.LockCpt++
79         s.lock.Unlock()
80         sdk, err := s.sdks.Install(id, args.Filename, args.Force, args.Timeout, args.InstallArgs, sess)
81         if err != nil {
82                 s.lock.Lock()
83                 s.lock.LockCpt--
84                 s.lock.Unlock()
85                 common.APIError(c, err.Error())
86                 return
87         }
88
89         c.JSON(http.StatusOK, sdk)
90 }
91
92 // abortInstallSdk Abort a SDK installation
93 func (s *APIService) abortInstallSdk(c *gin.Context) {
94         var args xsapiv1.SDKInstallArgs
95
96         if err := c.BindJSON(&args); err != nil {
97                 common.APIError(c, "Invalid arguments")
98                 return
99         }
100         id, err := s.sdks.ResolveID(args.ID)
101         if err != nil {
102                 common.APIError(c, err.Error())
103                 return
104         }
105
106         sdk, err := s.sdks.AbortInstall(id, args.Timeout)
107         if err != nil {
108                 common.APIError(c, err.Error())
109                 return
110         }
111
112         c.JSON(http.StatusOK, sdk)
113         s.lock.Lock()
114         s.lock.LockCpt--
115         s.lock.Unlock()
116 }
117
118 // removeSdk Uninstall a Sdk
119 func (s *APIService) removeSdk(c *gin.Context) {
120         id, err := s.sdks.ResolveID(c.Param("id"))
121         if err != nil {
122                 common.APIError(c, err.Error())
123                 return
124         }
125
126         // Retrieve session info
127         sess := s.sessions.Get(c)
128         if sess == nil {
129                 common.APIError(c, "Unknown sessions")
130                 return
131         }
132
133         s.Log.Debugln("Remove SDK id ", id)
134
135         delEntry, err := s.sdks.Remove(id, -1, sess)
136         if err != nil {
137                 common.APIError(c, err.Error())
138                 return
139         }
140         c.JSON(http.StatusOK, delEntry)
141         s.lock.Lock()
142         s.lock.LockCpt--
143         s.lock.Unlock()
144 }