(w http.ResponseWriter, r *http.Request)
| 345 | } |
| 346 | |
| 347 | func (ns *noiseServer) NoiseRegistrationHandler(w http.ResponseWriter, r *http.Request) { |
| 348 | ns.logger.Info("got noise registration request") |
| 349 | |
| 350 | registerRequest := tailcfg.RegisterRequest{} |
| 351 | err := json.NewDecoder(r.Body).Decode(®isterRequest) |
| 352 | if err != nil { |
| 353 | http.Error(w, err.Error(), http.StatusBadRequest) |
| 354 | return |
| 355 | } |
| 356 | |
| 357 | sp := strings.SplitN(registerRequest.Auth.AuthKey, "-", 2) |
| 358 | |
| 359 | ips := ns.getIPs() |
| 360 | |
| 361 | resp := tailcfg.RegisterResponse{} |
| 362 | resp.MachineAuthorized = true |
| 363 | resp.User = tailcfg.User{ |
| 364 | ID: tailcfg.UserID(123), |
| 365 | LoginName: "wgsh", |
| 366 | DisplayName: "wgsh", |
| 367 | Logins: []tailcfg.LoginID{}, |
| 368 | Created: time.Now(), |
| 369 | } |
| 370 | resp.Login = tailcfg.Login{ |
| 371 | ID: tailcfg.LoginID(123), |
| 372 | LoginName: "wgsh", |
| 373 | DisplayName: "wgsh", |
| 374 | } |
| 375 | |
| 376 | if !registerRequest.Expiry.IsZero() && registerRequest.Expiry.Before(time.Now()) { |
| 377 | node := ns.getSelfNode().Clone() |
| 378 | if node != nil { |
| 379 | node.Online = ptr.To(false) |
| 380 | ns.storeNode(node) |
| 381 | } |
| 382 | ns.notifyUpdate() |
| 383 | |
| 384 | w.Header().Set("Content-Type", "application/json") |
| 385 | w.WriteHeader(http.StatusOK) |
| 386 | _ = json.NewEncoder(w).Encode(resp) |
| 387 | return |
| 388 | } |
| 389 | |
| 390 | nodeID := tailcfg.NodeID(rand.Int64()) |
| 391 | addrs := []netip.Prefix{} |
| 392 | for _, ip := range ips { |
| 393 | addrs = append(addrs, netip.PrefixFrom(ip, ip.BitLen())) |
| 394 | } |
| 395 | |
| 396 | ns.storeNode(&tailcfg.Node{ |
| 397 | ID: nodeID, |
| 398 | StableID: tailcfg.StableNodeID(sp[0]), |
| 399 | Hostinfo: registerRequest.Hostinfo.View(), |
| 400 | Name: registerRequest.Hostinfo.Hostname, |
| 401 | User: resp.User.ID, |
| 402 | Machine: ns.machineKey, |
| 403 | Key: registerRequest.NodeKey, |
| 404 | LastSeen: ptr.To(time.Now()), |
nothing calls this directly
no test coverage detected