(ctx context.Context, conn *websocket.Conn)
| 98 | } |
| 99 | |
| 100 | func (server *Server) processWSConn(ctx context.Context, conn *websocket.Conn) error { |
| 101 | typ, initLine, err := conn.ReadMessage() |
| 102 | if err != nil { |
| 103 | return errors.Wrapf(err, "failed to authenticate websocket connection") |
| 104 | } |
| 105 | if typ != websocket.TextMessage { |
| 106 | return errors.New("failed to authenticate websocket connection: invalid message type") |
| 107 | } |
| 108 | |
| 109 | var init InitMessage |
| 110 | err = json.Unmarshal(initLine, &init) |
| 111 | if err != nil { |
| 112 | return errors.Wrapf(err, "failed to authenticate websocket connection") |
| 113 | } |
| 114 | if init.AuthToken != server.options.Credential { |
| 115 | return errors.New("failed to authenticate websocket connection") |
| 116 | } |
| 117 | |
| 118 | queryPath := "?" |
| 119 | if server.options.PermitArguments && init.Arguments != "" { |
| 120 | queryPath = init.Arguments |
| 121 | } |
| 122 | |
| 123 | query, err := url.Parse(queryPath) |
| 124 | if err != nil { |
| 125 | return errors.Wrapf(err, "failed to parse arguments") |
| 126 | } |
| 127 | windowTitle := "Webkubectl" |
| 128 | params := query.Query() |
| 129 | params.Del("arg") |
| 130 | arg := params.Get("token") |
| 131 | params.Add("arg", arg) |
| 132 | log.Println("arg: " + arg) |
| 133 | var slave Slave |
| 134 | slave, err = server.factory.New(params) |
| 135 | if err != nil { |
| 136 | return errors.Wrapf(err, "failed to create backend") |
| 137 | } |
| 138 | defer slave.Close() |
| 139 | |
| 140 | titleVars := server.titleVariables( |
| 141 | []string{"server", "master", "slave"}, |
| 142 | map[string]map[string]interface{}{ |
| 143 | "server": server.options.TitleVariables, |
| 144 | "master": { |
| 145 | "remote_addr": conn.RemoteAddr(), |
| 146 | }, |
| 147 | "slave": slave.WindowTitleVariables(), |
| 148 | }, |
| 149 | ) |
| 150 | |
| 151 | titleBuf := new(bytes.Buffer) |
| 152 | |
| 153 | err = server.titleTemplate.Execute(titleBuf, titleVars) |
| 154 | if err != nil { |
| 155 | return errors.Wrapf(err, "failed to fill window title template") |
| 156 | } |
| 157 | if len(windowTitle) > 0 { |
no test coverage detected