package login import ( "fmt" "net" "net/http" "net/url" ) const loginFailedHTML = `
You can log an issue at Azure CLI GitHub Repository and we will assist you in resolving it.
` const successfullLoginHTML = `You can close this window, or we will redirect you to the Azure CLI documents in 10 seconds.
` func startLoginServer(queryCh chan url.Values) (int, error) { mux := http.NewServeMux() mux.HandleFunc("/", queryHandler(queryCh)) listener, err := net.Listen("tcp", ":0") if err != nil { return 0, err } availablePort := listener.Addr().(*net.TCPAddr).Port server := &http.Server{Handler: mux} go func() { if err := server.Serve(listener); err != nil { queryCh <- url.Values{ "error": []string{fmt.Sprintf("error starting http server with: %v", err)}, } } }() return availablePort, nil } func queryHandler(queryCh chan url.Values) func(w http.ResponseWriter, r *http.Request) { queryHandler := func(w http.ResponseWriter, r *http.Request) { _, hasCode := r.URL.Query()["code"] if hasCode { _, err := w.Write([]byte(successfullLoginHTML)) if err != nil { queryCh <- url.Values{ "error": []string{err.Error()}, } } else { queryCh <- r.URL.Query() } } else { _, err := w.Write([]byte(loginFailedHTML)) if err != nil { queryCh <- url.Values{ "error": []string{err.Error()}, } } else { queryCh <- r.URL.Query() } } } return queryHandler }