MCPcopy Create free account
hub / github.com/boringproxy/boringproxy / CreateTunnel

Method CreateTunnel

api.go:317–424  ·  view source on GitHub ↗
(tokenData TokenData, params url.Values)

Source from the content-addressed store, hash-verified

315}
316
317func (a *Api) CreateTunnel(tokenData TokenData, params url.Values) (*Tunnel, error) {
318
319 domain := params.Get("domain")
320 if domain == "" {
321 return nil, errors.New("Invalid domain parameter")
322 }
323
324 owner := params.Get("owner")
325 if owner == "" {
326 return nil, errors.New("Invalid owner parameter")
327 }
328
329 // Only admins can create tunnels for other users
330 if tokenData.Owner != owner {
331 user, _ := a.db.GetUser(tokenData.Owner)
332 if !user.IsAdmin {
333 return nil, errors.New("Unauthorized")
334 }
335 }
336
337 clientName := params.Get("client-name")
338
339 clientPort := 0
340 clientPortParam := params.Get("client-port")
341 if clientPortParam != "" {
342 var err error
343 clientPort, err = strconv.Atoi(clientPortParam)
344 if err != nil {
345 return nil, errors.New("Invalid client-port parameter")
346 }
347 }
348
349 clientAddr := params.Get("client-addr")
350 if clientAddr == "" {
351 clientAddr = "127.0.0.1"
352 }
353
354 tunnelPort := 0
355 tunnelPortParam := params.Get("tunnel-port")
356 if tunnelPortParam != "" && tunnelPortParam != "Random" {
357 var err error
358 tunnelPort, err = strconv.Atoi(tunnelPortParam)
359 if err != nil {
360 return nil, errors.New("Invalid tunnel-port parameter")
361 }
362 }
363
364 allowExternalTcp := params.Get("allow-external-tcp") == "on"
365
366 passwordProtect := params.Get("password-protect") == "on"
367
368 var username string
369 var password string
370 if passwordProtect {
371 username = params.Get("username")
372 if username == "" {
373 return nil, errors.New("Username required")
374 }

Callers 2

handleTunnelsMethod · 0.95
handleCreateTunnelMethod · 0.80

Calls 3

GetUserMethod · 0.80
GetAdminDomainMethod · 0.80
RequestCreateTunnelMethod · 0.80

Tested by

no test coverage detected