(tokenData TokenData, params url.Values)
| 315 | } |
| 316 | |
| 317 | func (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 | } |
no test coverage detected