def post(self, *args, **kwargs): objjson=json.loads(cgi.escape(self.request.body)) if not objjson.has_key("em") or not objjson.has_key("c1") or not objjson.has_key("c2"): self.resjsonerror('Error:faltan campos') return email = objjson["em"] password = objjson['c1'] pw2= objjson['c2'] if not mail.is_email_valid(email): self.resjsonerror('Error:email no valido') return lon=len(password) if lon<6 or lon>30 or not password == pw2: self.resjsonerror(u"Error:Contraseñas no coinciden en valor, tienen que tener un tamaño entre 6 y 30 caracteres") return nomtien = kwargs['nom_tien'] if len(nomtien)<2: self.resjsonerror('No hay tienda en url') return ti=utils.getMemKeyTienda(nomtien) #ti=memcache.get(nomtien.upper()+"key") if not ti: ti=todosmodelos.Tienda.query(todosmodelos.Tienda.nombreupper==nomtien.upper()).get() if not ti: self.resjsonerror('No existe tienda %s' % nomtien) return ti=ti.key existeusu=todosmodelos.Clientes.query(todosmodelos.Clientes.email==email,todosmodelos.Clientes.idsocial=="bd",ancestor=ti).get() if existeusu: #u'email %s ya existe, <a href="javascript:verolvi()">¿olvidó su contraseña?</a>' % self.resjsonok("_olvido_", email) return token=utils.nuevo_token() user=todosmodelos.Clientes(parent=ti,email=email,password=utils.nueva_contra(password),idsocial="bd",validada=False,token=token) k=user.put() if not k: self.resjsonerror('Error:no se a podido grabar, inténtelo más tarde') return verification_url = self.uri_for('verification', nom_tien=nomtien, type='v', user_id=k.id(),signup_token=token, _full=True) mensaje = mail.EmailMessage() mensaje.sender = "Tienda %s <*****@*****.**>" % nomtien mensaje.to = "<%s>" % email msg = 'Mensaje enviado por tienda {tien} para confirmar sus credenciales, visite la web para confirmar:\ <a href="{url}">Confirmar credenciales</a>. Si usted no solicitó una cuenta en la tienda {tien} por favor ignore este mensaje' mensaje.html =msg.format(tien=nomtien, url=verification_url) mensaje.send() self.resjsonok("se ha enviado un mensaje a %s con un link ( %s ) de confirmación, por favor revise su correo." % (email,verification_url))
def post(self, *args, **kwargs): objjson=json.loads(cgi.escape(self.request.body)) if not objjson.has_key("email"): self.resjsonerror('Error: falta email') return email = objjson["email"] if not mail.is_email_valid(email): self.resjsonerror('Error:email no valido') return nomtien = kwargs['nom_tien'] if len(nomtien)<2: self.resjsonerror('No hay tienda en url') return ti=utils.getMemKeyTienda(nomtien); #ti = memcache.get(nomtien.upper()+"key") if not ti: ti=todosmodelos.Tienda.query(todosmodelos.Tienda.nombreupper==nomtien.upper()).get() if not ti: self.resjsonerror('No existe tienda %s' % nomtien) return ti=ti.key u = todosmodelos.Clientes.query(todosmodelos.Clientes.email==email,ancestor=ti).get() if not u: self.resjsonerror('No existe ningún usuario con email %s en tienda ' % (email,nomtien)) return user_id = u.key.id() if u.validada and u.token: token=u.token else: token=utils.nuevo_token() u.token=token u.put() verification_url = self.uri_for('verification', nom_tien=nomtien, type='p', user_id=user_id, signup_token=token, _full=True) #msg = 'Send an email to user in order to reset their password. \ # They will be able to do so by visiting <a href="{url}">Cambiar contraseña</a>' msg = u'Mensaje de Pagina web tienda {tien} para cambiar su contraseña, pulse en el link para dirigirse a la página web y \ <a href="{url}">Cambiar contraseña</a>. Si usted no solicitó el cambio de contraseña por favor ignore este mensaje.' mensaje = mail.EmailMessage() mensaje.sender = "Pizzaweb <*****@*****.**>" mensaje.to = "%s <%s>" % email mensaje.html=msg.format(tien=nomtien, url=verification_url) mensaje.send() self.resjsonok("se ha enviado un mensaje a %s con un link ( %s ) de confirmación, por favor revise su correo." % (email,verification_url))
def get(self, *args, **kwargs): user = None user_id = kwargs['user_id'] signup_token = kwargs['signup_token'] verification_type = kwargs['type'] if verification_type not in ['v','p']: logging.info('Tipo de verificación no existe') self.abort(404) nomtien = kwargs['nom_tien'] if len(nomtien)<2: utils.handle_404(self.request, self.response, {"status_int":404,"status":"No hay tienda en url"}) return ti=utils.getMemKeyTienda(nomtien); #ti = memcache.get(nomtien.upper()+"key") tienti=None if not ti: tienti=todosmodelos.Tienda.query(todosmodelos.Tienda.nombreupper==nomtien.upper()).get() if not ti: utils.handle_404(self.request, self.response, {"status_int":404,"status":"No existe tienda %s" % nomtien}) return ti=tienti.key # it should be something more concise like # self.auth.get_user_by_token(user_id, signup_token) # unfortunately the auth interface does not (yet) allow to manipulate # signup tokens concisely u =todosmodelos.Clientes.get_by_id(int(user_id),parent=ti) if not u: logging.info('No puedo encontrar usuario con id %s ',user_id) utils.handle_404(self.request, self.response, {"status_int":404,"status":"No puedo encontrar usuario"}) return if u.token == signup_token: self.session['cliente']={'tipo':"bd","usu":u,"tienda":ti} u.validada=True u.token=None u.put() self.enviarCliente({"id":u.key.id(),"tipo":"bd","usu":u},ti,tienti); self.redirect('/tienda/%s' % nomtien) #self.response.out.write("Tus datos han sido verificados") else: logging.info('No puedo encontrar con token signup %s y tienda %s',(signup_token,nomtien)) utils.handle_404(self.request, self.response, {"status_int":404,"status":"no puedo encontrar token en url,tienda"})
def post(self, *args, **kwargs): objjson=json.loads(cgi.escape(self.request.body)) if not objjson.has_key("em") or not objjson.has_key("con"): self.resjsonerror('Error:faltan campos') return email = objjson["em"] password = objjson['con'] if not mail.is_email_valid(email): self.resjsonerror('Error:email no valido') return lon=len(password) if lon<6 or lon>30: self.resjsonerror(u'Error:Contraseña tiene que tener un tamaño entre 6 y 30 caracteres') return nomtien = kwargs['nom_tien'] if len(nomtien)<2: self.resjsonerror('No hay tienda en url') return ti=utils.getMemKeyTienda(nomtien); #ti = memcache.get(nomtien.upper()+"key") if not ti: ti=todosmodelos.Tienda.query(todosmodelos.Tienda.nombreupper==nomtien.upper()).get() if not ti: self.resjsonerror('No existe tienda %s' % nomtien) return ti=ti.key u = todosmodelos.Clientes.query(todosmodelos.Clientes.email==email,todosmodelos.Clientes.password==utils.nueva_contra(password),todosmodelos.Clientes.idsocial=="bd",ancestor=ti).get() if u: if u.token and not u.validada: self.resjsonerror(u'Este email todavía no está validado, por favor revise su correo.') return self.session['cliente']={'tipo':"bd","usu":u,"tienda":ti} self.resjsonok("Login as %s" % email) else: self.resjsonerror(u'Email o contraseña incorrecta.')
def get(self, *args, **kwargs): nomtien = kwargs['nom_tien'] token=self.request.get('token') if not self.session or not self.session.has_key("tok_pag") or not self.session.get("tok_pag") == token or not self.session.get("order_id"): self.response.out.write(u"mal en returnurlHandler pagantis url no hay session, o order_id, token=%s" % token) return """try: respujson=json.loads(cgi.escape(self.request.body)) except Exception as e: self.response.out.write(u"exception en retunrurlHandler al hacer respujson Pagantis: %s" % e.message) return if "event" in respujson and respujson["event"]=="charge.created" and "data" in respujson:""" regtra=todosmodelos.Transferencia.get_by_id(int(self.session.get("order_id"))) #regtra=todosmodelos.Transferencia.query(todosmodelos.Transferencia.token_ec==token).get() if not regtra: self.response.out.write(u"mal en returnurlHandler pagantis no hay registro transferencia , token=%s" % token) return if regtra.token_ec==token and regtra.estado=="completed": tikey=regtra.tienda or utils.getMemKeyTienda(nomtien) """nomtien=nomtien.upper() tienda=memcache.get(nomtien+"tienda") tikey=memcache.get(nomtien+"key")""" if not tikey: tikey=todosmodelos.Tienda.query(todosmodelos.Tienda.nombreupper==nomtien).get(keys_only=True) if not tikey: self.response.out.write(u"no puedo llamar a tienda , token=%s" % token) return """if not tienda: tien=regtra.tienda.get() if tien: tienda=utils.getTienda(tien,utils.getSegundos()) tikey=tien.key else: tien=todosmodelos.Tienda.query(todosmodelos.Tienda.nombreupper==nomtien).get() if tien: tienda=utils.getTienda(tien,utils.getSegundos()) tikey=tien.key else: self.response.out.write(u"no puedo llamar a tienda , token=%s" % token) return""" resp=self.env_pago_grab_pedido(3,tikey,regtra) if resp[0]: regtra.reg_pedido=resp[1] regtra.put() self.session["tok_pag"]=None self.session["pedido"]=None self.session.pop('pedido') self.session.pop("tok_pag") self.session.pop("order_id") self.response.out.write("ok se ha enviado y grabado status 200 <br> y, <p> token=%s </p>" % token) else: self.response.out.write("error al enviar y grabar pedido= %s, <br> ok en consulta charge status 200 <br> y, <p> token=%s </p>" % (resp[1],token)) return """try:cha_6801d60bd2977711010261eaabc6af0d result = urlfetch.fetch(url="https://psp.pagantis.com/api/1/charges/" + respujson["data"]["id"], method=urlfetch.GET, headers={ "Authorization": ("Bearer %s" % self.tienda["pagantis"]["apikey"]) },validate_certificate=False) except Exception as e: self.response.out.write(u"exception en returnurlHandler pagantis consulta charge: %s,<p> respujson=%s</p>" % (e.message,respujson)) return respujson2=json.loads(result.content) if result.status_code == 200: self.response.out.write("ok en consulta charge status 200 content respujson2 = %s <br> y, <p> token=%s </p>" % (respujson2,token)) else: self.response.out.write(u"mal en consulta charge status status_code %d ,<p> content = %s</p>, token=%s,respujson2=%s" % (result.status_code,result.content,token,respujson2))""" #regtra.status="completed" #regtra.put() self.response.out.write("ok en consulta charge status 200 <br> y, <p> token=%s </p>" % token) else: self.response.out.write(u"mal en returnurlHandler pagantis token no coincide con regtra.token_ec o regtra.estado no ==completed, regtra.estado=%s ,<p>token=%s</p><regtra.token_ec=%s</p><p>token %s</p>" % (regtra.estado,token,regtra.token_ec,token))