func CtaMod(w http.ResponseWriter, r *http.Request) { c := appengine.NewContext(r) if s, ok := sess.IsSess(w, r, c); ok { if u, err := model.GetCta(c, s.User); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } else { if fd, valid := ctaForm(w, r, s, true, ctadmTpl); !valid { return } else { ctaFill(r, u) if _, err := model.PutCta(c, u); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } tc := make(map[string]interface{}) tc["Sess"] = s tc["FormDataCta"] = fd ctadmTpl.ExecuteTemplate(w, "cta", tc) } } } else { http.Redirect(w, r, "/", http.StatusFound) } }
func pendienteVerifica(w http.ResponseWriter, r *http.Request) { c := appengine.NewContext(r) s, ok := sess.IsSess(w, r, c) if ok { http.Redirect(w, r, "/r/cta", http.StatusFound) return } fd, valid := ctaForm(w, r, s, true, registroTpl) if valid { u, err := model.GetCta(c, fd.Email) ctaFill(r, u) if err != nil { // No hay Cuenta registrada u.FechaHora = time.Now().Add(time.Duration(model.GMTADJ) * time.Second) u.Status = false u.CodigoCfm = "Verificar" // Generar código de confirmación distindo cada vez. Md5 del email + fecha-hora h := md5.New() io.WriteString(h, fmt.Sprintf("%s%s%s%s", time.Now().Add(time.Duration(model.GMTADJ)*time.Second), u.Email, u.Pass, model.RandId(12))) u.CodigoCfm = fmt.Sprintf("%x", h.Sum(nil)) } u.FechaHora = time.Now().Add(time.Duration(model.GMTADJ) * time.Second) u.Status = true u.CodigoCfm = "Verificar" // Se agrega la cuenta sin activar para realizar el proceso de código de confirmación if u, err = model.PutCta(c, u); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } /* Prende la sesion */ _, _, err = sess.SetSess(w, c, u.Key(c), u.Email, u.Nombre) // avisa del éxito independientemente del correo if err := activationMessageTpl.ExecuteTemplate(w, "verify", u); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } else { if err := activationMessageTpl.ExecuteTemplate(w, "codeerr", nil); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } }
func Registrar(w http.ResponseWriter, r *http.Request) { c := appengine.NewContext(r) s, ok := sess.IsSess(w, r, c) if ok { http.Redirect(w, r, "/r/cta", http.StatusFound) return } fd, valid := ctaForm(w, r, s, true, registroTpl) if valid { u, err := model.GetCta(c, fd.Email) ctaFill(r, u) if err != nil { // No hay Cuenta registrada u.FechaHora = time.Now().Add(time.Duration(model.GMTADJ) * time.Second) u.Status = false // Generar código de confirmación distindo cada vez. Md5 del email + fecha-hora h := md5.New() io.WriteString(h, fmt.Sprintf("%s%s%s%s", time.Now().Add(time.Duration(model.GMTADJ)*time.Second), u.Email, u.Pass, model.RandId(12))) u.CodigoCfm = fmt.Sprintf("%x", h.Sum(nil)) } //Si hay estatus es que ya existe if u.Status == false { // Se agrega la cuenta sin activar para realizar el proceso de código de confirmación if u, err = model.PutCta(c, u); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } /* No se ha activado, por tanto se inicia el proceso de código de verificación */ m := urlCfm{ Md5: u.CodigoCfm, Nombre: u.Nombre, Email: u.Email, FechaHora: time.Now().Add(time.Duration(model.GMTADJ) * time.Second), Llave: u.Key(c).Encode(), AppId: appengine.AppID(c), } var hbody bytes.Buffer var sender string if appengine.AppID(c) == "ebfmxorg" { sender = "El Buen Fin <*****@*****.**>" } else { sender = "El Buen Fin <*****@*****.**>" } // Envia código activación if err := mailActivationCodeTpl.Execute(&hbody, m); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } if MailServer == "gmail" { msg := &mail.Message{ Sender: sender, To: []string{m.Email}, Subject: "Codigo de Activación de Registro / El Buen Fin en línea", HTMLBody: hbody.String(), } if err := mail.Send(c, msg); err != nil { /* Problemas para enviar el correo NOK */ http.Error(w, err.Error(), http.StatusInternalServerError) http.Redirect(w, r, "/", http.StatusFound) } else { if err := activationMessageTpl.ExecuteTemplate(w, "codesend", m); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } // ************************************************************ // Si el hay usuario admin se despliega el código de activación // ************************************************************ if gu := user.Current(c); gu != nil { if err := mailActivationCodeTpl.Execute(w, m); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } } else { client := urlfetch.Client(c) url := fmt.Sprintf("http://envia-m.mekate.com.mx/?Sender=%s&Tipo=Codigo&Md5=%s&Llave=%s&Email=%s&Nombre=%s&AppId=ebfmxorg", "*****@*****.**", m.Md5, url.QueryEscape(m.Llave), m.Email, url.QueryEscape(m.Nombre)) r1, err := client.Get(url) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } //fmt.Fprintf(w, "HTTP GET returned status %v", r.Status) if r1.StatusCode != 200 { http.Error(w, "Error de Transporte de Mail", http.StatusInternalServerError) return } else { if err := activationMessageTpl.ExecuteTemplate(w, "codesend", m); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } defer r1.Body.Close() } } else { if err := registroErrorTpl.Execute(w, nil); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } } }
func CtaDel(w http.ResponseWriter, r *http.Request) { now := time.Now().Add(time.Duration(model.GMTADJ) * time.Second) if r.Method != "POST" { return } c := appengine.NewContext(r) if s, ok := sess.IsSess(w, r, c); ok { if u, err := model.GetCta(c, s.User); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } else { // Sólo desactiva cuenta si no hay empresas dependientes e := listEmp(c, u) if len(*e) == 0 { // Desactiva Status if r.FormValue("desactiva") == "1" { s.Expiration = now.AddDate(-1, 0, 0) _, err := datastore.Put(c, datastore.NewKey(c, "Sess", s.User, 0, nil), &s) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } u.CodigoCfm = "Desactivado" u.Status = false _, err = model.PutCta(c, u) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Header().Add("Set-Cookie", fmt.Sprintf("ebfmex-pub-sesscontrol-ua=%s; expires=%s; path=/;", "", "Wed, 07-Oct-2000 14:23:42 GMT")) w.Header().Add("Set-Cookie", fmt.Sprintf("ebfmex-pub-sessid-ua=%s; expires=%s; path=/;", "", "Wed, 07-Oct-2000 14:23:42 GMT")) errmsg := struct{ ErrMsg string }{"¡Gracias por participar en El Buen Fin!"} ErrorGeneralTpl.Execute(w, errmsg) // INICIA ENVIO DE CORREO DE MOTIVOS // Este tramo no debe arrojar errores al usuario var hbody bytes.Buffer u.CodigoCfm = r.FormValue("motivo") cancelMessageTpl.Execute(&hbody, u) msg := &mail.Message{ Sender: "Cancelación de cuenta / Buen Fin <*****@*****.**>", To: []string{"*****@*****.**"}, Subject: "Aviso de motivo de cuenta cancelada / El Buen Fin en línea", HTMLBody: hbody.String(), } mail.Send(c, msg) // Si el hay usuario admin se despliega el motivo (efectos de prueba //if gu := user.Current(c); gu != nil { // cancelMessageTpl.Execute(w, u) // } // TERMINA ENVIO DE MOTIVOS return } http.Redirect(w, r, "/r/cta", http.StatusFound) } else { // Debe borrar empresas antes o Transferir sus empresas a otro usuario errmsg := struct { ErrMsg string Back string }{"Para cancelar una cuenta primero se deben dar de baja las empresas registradas", "1"} ErrorGeneralTpl.Execute(w, errmsg) return } } } else { http.Redirect(w, r, "/r/registro", http.StatusFound) } }