@@ -4,60 +4,15 @@ import (
44 "bytes"
55 "encoding/json"
66 "fmt"
7- "net/http"
87 "net/url"
98
109 "github.com/gin-gonic/gin"
1110 "github.com/gorilla/websocket"
1211 log "github.com/sirupsen/logrus"
13- "github.com/yudai/gotty/webtty"
1412
1513 "github.com/wrfly/container-web-tty/types"
16- "github.com/wrfly/container-web-tty/util"
1714)
1815
19- func (server * Server ) handleExecRedirect (c * gin.Context ) {
20- containerID := c .Param ("id" )
21- execID := server .setContainerID (containerID )
22- c .Redirect (302 , "/exec/" + execID )
23- }
24-
25- func (server * Server ) handleWSIndex (c * gin.Context ) {
26- execID := c .Param ("id" )
27- containerID , ok := server .getContainerID (execID )
28- if ! ok {
29- log .Errorf ("exec id %s not found" , execID )
30- return
31- }
32- cInfo := server .containerCli .GetInfo (c .Request .Context (), containerID )
33- titleVars := server .titleVariables (
34- []string {"server" },
35- map [string ]map [string ]interface {}{
36- "server" : map [string ]interface {}{
37- "containerName" : cInfo .Name ,
38- },
39- },
40- )
41-
42- titleBuf := new (bytes.Buffer )
43- err := titleTemplate .Execute (titleBuf , titleVars )
44- if err != nil {
45- c .Error (err )
46- }
47-
48- indexVars := map [string ]interface {}{
49- "title" : titleBuf .String (),
50- }
51-
52- indexBuf := new (bytes.Buffer )
53- err = indexTemplate .Execute (indexBuf , indexVars )
54- if err != nil {
55- c .Error (err )
56- }
57-
58- c .Writer .Write (indexBuf .Bytes ())
59- }
60-
6116func (server * Server ) handleAuthToken (c * gin.Context ) {
6217 c .Header ("Content-Type" , "application/javascript" )
6318 // @TODO hashing?
@@ -148,79 +103,6 @@ func (server *Server) handleRestartContainer(c *gin.Context) {
148103 server .handleContainerActions (c , "restart" )
149104}
150105
151- func (server * Server ) handleLogs (c * gin.Context ) {
152- ctx := c .Request .Context ()
153-
154- conn , err := server .upgrader .Upgrade (c .Writer , c .Request , nil )
155- if err != nil {
156- c .String (http .StatusInternalServerError , "server error: %s" , err )
157- return
158- }
159- defer conn .Close ()
160-
161- initArg , err := server .readInitMessage (conn )
162- if err != nil {
163- c .String (http .StatusBadRequest , "read init message error: %s" , err )
164- return
165- }
166-
167- q , err := parseQuery (initArg )
168- if err != nil {
169- c .String (http .StatusBadRequest , err .Error ())
170- return
171- }
172- follow := true
173- if v := q .Get ("follow" ); v != "1" && v != "" {
174- follow = false
175- }
176- tail := "10"
177- if v := q .Get ("tail" ); v != "" {
178- tail = v
179- }
180- opts := types.LogOptions {
181- ID : c .Param ("id" ),
182- Follow : follow ,
183- Tail : tail ,
184- }
185-
186- container := server .containerCli .GetInfo (ctx , opts .ID )
187-
188- log .Debugf ("get logs of container: %s" , container .ID )
189- logsReadCloser , err := server .containerCli .Logs (ctx , opts )
190- if err != nil {
191- c .String (http .StatusInternalServerError , "get logs error: %s" , err )
192- return
193- }
194- defer logsReadCloser .Close ()
195-
196- titleBuf , err := server .makeTitleBuff (container )
197- if err != nil {
198- c .String (http .StatusInternalServerError , "failed to fill window title template: %s" , err )
199- return
200- }
201-
202- tty , err := webtty .New (
203- & wsWrapper {conn },
204- newSlave (util .NopRWCloser (logsReadCloser ), false ),
205- []webtty.Option {
206- webtty .WithWindowTitle (titleBuf ),
207- webtty .WithPermitWrite (), // can type "enter"
208- }... ,
209- )
210- if err != nil {
211- c .String (http .StatusInternalServerError , "failed to create webtty: %s" , err )
212- return
213- }
214-
215- if err := tty .Run (ctx ); err != nil {
216- if err != webtty .ErrMasterClosed && err != webtty .ErrSlaveClosed {
217- log .Errorf ("failed to run webtty: %s" , err )
218- }
219- }
220- }
221-
222- func (server * Server ) terminalPage (c * gin.Context ) { server .handleWSIndex (c ) }
223-
224106func (server * Server ) makeTitleBuff (c types.Container ) ([]byte , error ) {
225107 location := "127.0.0.1"
226108 if c .LocServer != "" {
0 commit comments