예제 #1
0
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)
	}
}
예제 #2
0
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)
		}
	}
}
예제 #3
0
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)
			}
		}
	}
}
예제 #4
0
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)
	}
}