github.com/fanux/shipyard@v0.0.0-20161009071005-6515ce223235/controller/api/consolesession.go (about) 1 package api 2 3 import ( 4 "encoding/json" 5 "net/http" 6 7 log "github.com/Sirupsen/logrus" 8 "github.com/gorilla/mux" 9 "github.com/nu7hatch/gouuid" 10 "github.com/shipyard/shipyard" 11 ) 12 13 func (a *Api) createConsoleSession(w http.ResponseWriter, r *http.Request) { 14 w.Header().Set("content-type", "application/json") 15 16 vars := mux.Vars(r) 17 containerId := vars["container"] 18 // generate token 19 u4, err := uuid.NewV4() 20 if err != nil { 21 log.Errorf("error generating console session token: %s", err) 22 http.Error(w, err.Error(), http.StatusInternalServerError) 23 return 24 } 25 token := u4.String() 26 27 cs := &shipyard.ConsoleSession{ 28 ContainerID: containerId, 29 Token: token, 30 } 31 32 if err := a.manager.CreateConsoleSession(cs); err != nil { 33 log.Errorf("error creating console session: %s", err) 34 http.Error(w, err.Error(), http.StatusInternalServerError) 35 return 36 } 37 38 if err := json.NewEncoder(w).Encode(cs); err != nil { 39 log.Errorf("error encoding console session: %s", err) 40 http.Error(w, err.Error(), http.StatusInternalServerError) 41 return 42 } 43 44 log.Debugf("created console session: container=%s", cs.ContainerID) 45 } 46 47 func (a *Api) consoleSession(w http.ResponseWriter, r *http.Request) { 48 w.Header().Set("content-type", "application/json") 49 50 vars := mux.Vars(r) 51 token := vars["token"] 52 53 cs, err := a.manager.ConsoleSession(token) 54 if err != nil { 55 http.Error(w, err.Error(), http.StatusInternalServerError) 56 return 57 } 58 59 if err := json.NewEncoder(w).Encode(cs); err != nil { 60 http.Error(w, err.Error(), http.StatusInternalServerError) 61 return 62 } 63 } 64 65 func (a *Api) removeConsoleSession(w http.ResponseWriter, r *http.Request) { 66 vars := mux.Vars(r) 67 token := vars["token"] 68 69 cs, err := a.manager.ConsoleSession(token) 70 if err != nil { 71 http.Error(w, err.Error(), http.StatusInternalServerError) 72 return 73 } 74 75 if err := a.manager.RemoveConsoleSession(cs); err != nil { 76 log.Errorf("error removing console session: %s", err) 77 http.Error(w, err.Error(), http.StatusInternalServerError) 78 return 79 } 80 }