func Upload(c *gin.Context) { r := c.Request ctx := appengine.NewContext(r) var err_msg string blobs, _, err := blobstore.ParseUpload(r) if err != nil { log.Errorf(ctx, err.Error()) err_msg = err.Error() } file := blobs["file"] if len(file) == 0 { log.Errorf(ctx, "file length is 0") err_msg = "file length is 0" } c.JSON(http.StatusOK, gin.H{"err": err_msg, "blobKey": string(file[0].BlobKey)}) }
func FBLogin(c *gin.Context) { // grab the code fragment aecontext := appengine.NewContext(c.Request) code := c.Query("code") fbConfig := FBConfig() token, err := fbConfig.Exchange(aecontext, code) if err != nil { log.Errorf(aecontext, err.Error()) } client := urlfetch.Client(aecontext) response, err := client.Get("https://graph.facebook.com/v2.5/me?fields=id,name,email&access_token=" + token.AccessToken) log.Debugf(aecontext, fmt.Sprintf("token.AccessToken %#v", token.AccessToken)) // handle err. You need to change this into something more robust // such as redirect back to home page with error message if err != nil { c.String(http.StatusOK, "Error") } var fb_user FB_User log.Debugf(aecontext, fmt.Sprintf("fb_response %#v", response)) Bind(response, &fb_user) log.Debugf(aecontext, fmt.Sprintf("token %#v", token)) user := &auth.User{ Email: fb_user.Email, Name: fb_user.Username, Token: *token, LoginType: "facebook", } var redir_url = "" if service.VerifyVolunteerRequest(c, user) { redir_url = "/volsuccess" } log.Debugf(aecontext, fmt.Sprintf("user %#v", user)) if !auth.IsAuthenticated(c) { auth.CreateSession(c, user) } if redir_url == "" { auth.Redirect(c, redir_url) } else { auth.Redirect(c) } }
func UploadUrl(c *gin.Context) { r := c.Request ctx := appengine.NewContext(r) uploadURL, err := blobstore.UploadURL(ctx, "/admin/upload", nil) var err_msg string if err != nil { log.Errorf(ctx, err.Error()) err_msg = err.Error() } c.JSON(http.StatusOK, gin.H{"err": err_msg, "uploadOPT": uploadURL, "uploadURL": uploadURL.String()}) }
func NotifyAdmin(c *gin.Context, user *auth.User) { r := c.Request ctx := appengine.NewContext(r) addr := "*****@*****.**" msg := &mail.Message{ Sender: "*****@*****.**", To: []string{addr}, Subject: fmt.Sprintf("User %s raised volunteer request", user.Email), Body: fmt.Sprintf("User Msg %s %s", user.Message), } log.Debugf(ctx, "Mail msg %v", msg) if err := mail.Send(ctx, msg); err != nil { log.Errorf(ctx, "Couldn't send email: %v", err) } }
func SendEmailVolunteer(c *gin.Context, user *auth.User) { r := c.Request ctx := appengine.NewContext(r) addr := user.Email url := createConfirmationURL(user) msg := &mail.Message{ Sender: "*****@*****.**", To: []string{addr}, Subject: "Confirm your volunteer request", Body: fmt.Sprintf(confirmMessage, url), } log.Debugf(ctx, "Mail msg %v", msg) if err := mail.Send(ctx, msg); err != nil { log.Errorf(ctx, "Couldn't send email: %v", err) } }
func GoogleLogin(c *gin.Context) { // grab the code fragment aecontext := appengine.NewContext(c.Request) code := c.Query("code") googleconf := GoogleConfig() token, err := googleconf.Exchange(aecontext, code) if err != nil { log.Errorf(aecontext, err.Error()) } client := urlfetch.Client(aecontext) response, err := client.Get("https://www.googleapis.com/userinfo/v2/me?access_token=" + token.AccessToken) log.Debugf(aecontext, fmt.Sprintf("token.AccessToken %#v", token.AccessToken)) // handle err. You need to change this into something more robust // such as redirect back to home page with error message if err != nil { c.String(http.StatusOK, "Error") } var goog_user GoogleUser log.Debugf(aecontext, fmt.Sprintf("fb_response %#v", response)) Bind(response, &goog_user) log.Debugf(aecontext, fmt.Sprintf("fb_response %#v", goog_user)) user := &auth.User{ Email: goog_user.Email, Name: goog_user.Username, Picture: goog_user.PictureUrl, } log.Debugf(aecontext, fmt.Sprintf("user %#v", user)) if !auth.IsAuthenticated(c) { auth.CreateSession(c, user) } auth.Redirect(c) }