func startUploader(wf *web.WebFace) { wf.RedirectHandler = func(rw http.ResponseWriter, req *http.Request) { fmt.Fprintf(rw, "Starting Server on %s", *addr) } // Login log.Println("Login") Tok, cErr := google.Login(wf, google.GetClientScope()) if cErr != nil { log.Fatalln("Login Error:", cErr) } iTok, iErr := google.GetIdentity(Tok) if iErr != nil { log.Fatalln("Identity Error:", iErr) } fmt.Println(iTok) b := new(bytes.Buffer) google.EncodeToken(Tok, b) wf.RedirectHandler = nil // Now Scan and upload // google.InsertFile("Camera B", "", "", "image/webp", respB.Body) }
func tokenFromWeb(ctx context.Context, config *oauth2.Config, wf *web.WebFace) *oauth2.Token { ch := make(chan string) randState := fmt.Sprintf("st%d", time.Now().UnixNano()) config.RedirectURL = "http://" + wf.Addr + "/login" { // Auto authURL := config.AuthCodeURL(randState) wf.RedirectHandler = func(rw http.ResponseWriter, req *http.Request) { if req.URL.Path == "/favicon.ico" { http.Error(rw, "", 404) return } if !strings.HasPrefix(req.URL.Path, "/login") { log.Println("Redirect ", req.URL.Path, strings.HasPrefix(req.URL.Path, "/login")) http.Redirect(rw, req, authURL, 302) return } if req.FormValue("state") != randState { log.Printf("State doesn't match: req = %#v", req) http.Error(rw, "", 500) return } if code := req.FormValue("code"); code != "" { wf.RedirectHandler = nil http.Redirect(rw, req, "http://"+wf.Addr+"/", 302) ch <- code return } } log.Println("Awaiting Authorize Token") } code := <-ch log.Printf("Got code: %s", code) token, err := config.Exchange(ctx, code) if err != nil { log.Fatalf("Token exchange error: %v", err) } return token }