예제 #1
0
파일: uploader.go 프로젝트: Kimau/GoCam
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)
}
예제 #2
0
파일: login.go 프로젝트: Kimau/GoCam
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
}