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  }