If you don't mind I could send you my project to your email directly. El jueves, 20 de diciembre de 2012 16:14:12 UTC+1, Massimo Di Pierro escribió: > > If your data is not confidential, any chance you send me your application? > > To me this looks like corrupted data in database as if the password field > was at some pointed treated as type='list:string' and than changed back to > type='password'. Is it possible? > > Massimo > > On Wednesday, 19 December 2012 11:28:15 UTC-6, Wonton wrote: >> >> Yes, of course. This is my ticket: >> >> Error ticket for "dianaappv1" Ticket ID >> >> 127.0.0.1.2012-12-19.18-24-12.5d2b292c-7e9a-4281-a9f7-bb9aa17bbd0c >> <type 'exceptions.ValueError'> unsupported hash type >> |pbkdf2(1000,20,sha512) Versión web2py™ (2, 2, 1, >> datetime.datetime(2012, 10, 21, 16, 57, 4), 'stable') Python Python >> 2.7.1: /usr/bin/python Traceback >> >> 1. >> 2. >> 3. >> 4. >> 5. >> 6. >> 7. >> 8. >> 9. >> 10. >> 11. >> 12. >> 13. >> 14. >> 15. >> 16. >> 17. >> 18. >> 19. >> 20. >> 21. >> 22. >> 23. >> 24. >> 25. >> 26. >> 27. >> 28. >> >> Traceback (most recent call last): >> File "/Applications/web2py/gluon/restricted.py", line 212, in restricted >> exec ccode in environment >> File "/Applications/web2py/applications/dianaappv1/controllers/default.py" >> <https://127.0.0.1:8000/admin/default/edit/dianaappv1/controllers/default.py>, >> line 101, in <module> >> File "/Applications/web2py/gluon/globals.py", line 188, in <lambda> >> self._caller = lambda f: f() >> File "/Applications/web2py/applications/dianaappv1/controllers/default.py" >> <https://127.0.0.1:8000/admin/default/edit/dianaappv1/controllers/default.py>, >> line 27, in public_call >> return servicios_publicos() >> File "/Applications/web2py/gluon/tools.py", line 4387, in __call__ >> return self.serve_json(request.args[1:]) >> File "/Applications/web2py/gluon/tools.py", line 4197, in serve_json >> s = universal_caller(self.json_procedures[args[0]], *args[1:], **d) >> File "/Applications/web2py/gluon/tools.py", line 3889, in universal_caller >> return f(**arg_dict) >> File "/Applications/web2py/applications/dianaappv1/controllers/default.py" >> <https://127.0.0.1:8000/admin/default/edit/dianaappv1/controllers/default.py>, >> line 65, in login >> user = auth.login_bare(usuario, password) >> File "/Applications/web2py/gluon/tools.py", line 1789, in login_bare >> if not user.registration_key and password == user[passfield]: >> File "/Applications/web2py/gluon/validators.py", line 2636, in __eq__ >> h = simple_hash(self.password, key, salt, digest_alg) >> File "/Applications/web2py/gluon/utils.py", line 74, in simple_hash >> h = hashlib.new(digest_alg) >> File >> "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", >> line 121, in __hash_new >> return __get_builtin_constructor(name)(string) >> File >> "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", >> line 88, in __get_builtin_constructor >> raise ValueError('unsupported hash type %s' % name) >> ValueError: unsupported hash type |pbkdf2(1000,20,sha512) >> >> Error snapshot [image: help] >> >> <type 'exceptions.ValueError'>(unsupported hash type >> |pbkdf2(1000,20,sha512)) >> >> inspect attributes >> Frames >> >> - >> >> *File /Applications/web2py/gluon/restricted.py in restricted at line >> 212* código argumentos variables >> - >> >> *File >> /Applications/web2py/applications/dianaappv1/controllers/default.py in >> <module> at line 101* código argumentos variables >> - >> >> *File /Applications/web2py/gluon/globals.py in <lambda> at line 188* >> código argumentos variables >> - >> >> *File >> /Applications/web2py/applications/dianaappv1/controllers/default.py in >> public_call at line 27* código argumentos variables >> - >> >> *File /Applications/web2py/gluon/tools.py in __call__ at line 4387* >> código argumentos variables >> - >> >> *File /Applications/web2py/gluon/tools.py in serve_json at line 4197* >> código argumentos variables >> - >> >> *File /Applications/web2py/gluon/tools.py in universal_caller at line >> 3889* código argumentos variables >> - >> >> *File >> /Applications/web2py/applications/dianaappv1/controllers/default.py in >> login at line 65* código argumentos variables >> - >> >> *File /Applications/web2py/gluon/tools.py in login_bare at line 1789* >> código argumentos variables >> - >> >> *File /Applications/web2py/gluon/validators.py in __eq__ at line 2636* >> código argumentos variables >> - >> >> *File /Applications/web2py/gluon/utils.py in simple_hash at line 74* >> código argumentos variables >> - >> >> *File >> >> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py >> >> in __hash_new at line 121* código argumentos variables >> - >> >> *File >> >> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py >> >> in __get_builtin_constructor at line 88* código argumentos variables >> Function argument list >> >> (name='|pbkdf2(1000,20,sha512)') >> Code listing >> >> 83. >> 84. >> 85. >> 86. >> 87. >> 88. >> >> 89. >> 90. >> 91. >> 92. >> >> if bs == '512': >> return _sha512.sha512 >> elif bs == '384': >> return _sha512.sha384 >> >> raise ValueError('unsupported hash type %s' % name) >> >> >> >> def __get_openssl_constructor(name): >> try: >> >> Variables name '|pbkdf2(1000,20,sha512)' builtinValueError <type >> 'exceptions.ValueError'> >> >> Context >> >> locals request session response >> In file: >> /Applications/web2py/applications/dianaappv1/controllers/default.py >> >> 1. >> 2. >> 3. >> 4. >> 5. >> 6. >> 7. >> 8. >> 9. >> 10. >> 11. >> 12. >> 13. >> 14. >> 15. >> 16. >> 17. >> 18. >> 19. >> 20. >> 21. >> 22. >> 23. >> 24. >> 25. >> 26. >> 27. >> 28. >> 29. >> 30. >> 31. >> 32. >> 33. >> 34. >> 35. >> 36. >> 37. >> 38. >> 39. >> 40. >> 41. >> 42. >> 43. >> 44. >> 45. >> 46. >> 47. >> 48. >> 49. >> 50. >> 51. >> 52. >> 53. >> 54. >> 55. >> 56. >> 57. >> 58. >> 59. >> 60. >> 61. >> 62. >> 63. >> 64. >> 65. >> 66. >> 67. >> 68. >> 69. >> 70. >> 71. >> 72. >> 73. >> 74. >> 75. >> 76. >> 77. >> 78. >> 79. >> 80. >> 81. >> 82. >> 83. >> 84. >> 85. >> 86. >> 87. >> 88. >> 89. >> 90. >> 91. >> 92. >> 93. >> 94. >> 95. >> 96. >> 97. >> 98. >> 99. >> 100. >> 101. >> 102. >> >> # -*- coding: utf-8 -*- >> # this file is released under public domain and you can use without >> limitations >> >> ######################################################################### >> ## This is a samples controller >> ## - index is the default action of any application >> ## - user is required for authentication and authorization >> ## - download is for downloading files uploaded in the db (does streaming) >> ## - call exposes all registered services (none by default) >> ######################################################################### >> servicios_publicos=Service() >> servicios_privados=Service() >> >> def random_password(): >> import string >> import random >> password = '' >> specials=r'!...@#$*?' >> for i in range(0,2): >> password += random.choice(string.lowercase) >> password += random.choice(string.uppercase) >> password += random.choice(string.digits) >> # password += random.choice(specials) >> return ''.join(random.sample(password,len(password))) >> >> def public_call(): >> return servicios_publicos() >> >> @auth.requires_login() >> def private_call(): >> return servicios_privados() >> >> @servicios_publicos.json >> def registra(usuario, email, password): >> respuesta = {} >> estado = 'OK' >> mensaje = '' >> tipoError = 0 >> #Comprueba si hay otro usuario con el mismo nombre >> if db(db.auth_user.username == usuario).count() != 0: >> estado = 'Error' >> tipoError = 1 >> #Comprueba si hay otro usuario con el mismo email >> if db(db.auth_user.email == email).count() != 0: >> estado = 'Error' >> tipoError = tipoError + 2 >> #Registrar >> if estado == 'OK': >> db.auth_user.insert(username=usuario, email=email, >> password=db.auth_user.password.validate(password)) >> mensaje = 'El registro se ha realizado correctamente.' >> else: >> if tipoError == 1: >> mensaje = 'El usuario ya existe.' >> elif tipoError == 2: >> mensaje = 'El email ya existe.' >> else: >> mensaje = 'El usuario y el email ya existen.' >> respuesta['estado'] = estado >> respuesta['mensaje'] = mensaje >> return respuesta >> >> @servicios_publicos.json >> def login(usuario, password): >> respuesta = {} >> user = auth.login_bare(usuario, password) >> if not user: >> respuesta['estado'] = 'Error' >> respuesta['mensaje'] = 'Nombre de usuario o contraseña incorrecta' >> else: >> respuesta['estado'] = 'OK' >> respuesta['mensaje'] = 'Login correcto' >> return respuesta >> >> @servicios_publicos.json >> def recupera_contrasenya(usuario): >> nueva_contrasenya = random_password() >> respuesta = {} >> fila = db(db.auth_user.username == usuario) >> if fila.count() == 0: >> respuesta['estado'] = 'Error' >> respuesta['mensaje'] = 'No existe el usuario' >> else: >> >> fila.update(password=db.auth_user.password.validate(nueva_contrasenya)) >> datosFila = fila.select() >> destino = datosFila[0].email >> enviado = mail.send(to=[destino], >> subject='Recuperación de contraseña', >> message='Se te ha creado una nueva contraseña. Es esta ' + >> nueva_contrasenya) >> if enviado: >> respuesta['estado'] = 'OK' >> respuesta['mensaje'] = 'Se ha enviado la contraseña a su correo >> electrónico.' >> else: >> respuesta['estado'] = 'Error' >> respuesta['mensaje'] = 'La contraseña no se ha podido enviar, >> reinténtelo más tarde' >> return respuesta >> >> #@servicios_privados.json >> #def metodo_privado(): >> # return 'private' >> >> response >> <https://127.0.0.1:8000/examples/global/vars/response>._vars=response >> <https://127.0.0.1:8000/examples/global/vars/response>._caller(public_call) >> >> >> >> El miércoles, 19 de diciembre de 2012 18:09:25 UTC+1, Massimo Di Pierro >> escribió: >>> >>> Can you please show me the complete traceback? >>> I cannot reproduce this and I this error is not generated from a web2py >>> function. >>> >>> On Tuesday, 18 December 2012 11:11:51 UTC-6, Massimo Di Pierro wrote: >>>> >>>> Can I see you models? Are you changing the validator for >>>> db.auth_user.password? >>>> Your error says: >>>> >>>> <type 'exceptions.ValueError'> unsupported hash type >>>> |pbkdf2(1000,20,sha512) >>>> >>>> I do not understand where | in |pbkdf2 would come from. >>>> >>>> >>>> On Tuesday, 18 December 2012 09:33:12 UTC-6, Wonton wrote: >>>>> >>>>> Hi Massimo!! >>>>> >>>>> I'm using version 2.2.1 (2012-10-21 16:57:04) stable. I dowloaded it >>>>> last week. >>>>> >>>>> El martes, 18 de diciembre de 2012 16:26:29 UTC+1, Massimo Di Pierro >>>>> escribió: >>>>>> >>>>>> Which web2py version? The error suggests you are using an older >>>>>> web2py version with newly created database of records. >>>>>> >>>>>> Massimo >>>>>> >>>>>> On Monday, 17 December 2012 14:59:02 UTC-6, Wonton wrote: >>>>>>> >>>>>>> Hello everyone, >>>>>>> >>>>>>> I'm developing a backend site with web2py. I have 2 web services, >>>>>>> one to register a user and a second one to login the user. >>>>>>> This is the first one: >>>>>>> >>>>>>> def register(user, email, password): >>>>>>> db.auth_user.insert(username=user, email=email, >>>>>>> password=db.auth_user.password.validate(password)) >>>>>>> ... >>>>>>> return 'OK' >>>>>>> >>>>>>> It's working ok and the users are created without problem. >>>>>>> >>>>>>> This is the second one: >>>>>>> >>>>>>> def login(user, password): >>>>>>> response = auth.login_bare(user, password) >>>>>>> if not response: >>>>>>> message = 'Error' >>>>>>> else: >>>>>>> message = 'OK' >>>>>>> return message >>>>>>> >>>>>>> With this service I have the following error: >>>>>>> <type 'exceptions.ValueError'> unsupported hash type >>>>>>> |pbkdf2(1000,20,sha512) >>>>>>> >>>>>>> I've tried to find any solution to this problem without success. >>>>>>> >>>>>>> Any of you has any idea of what is happening? >>>>>>> >>>>>>> Thank you very much and kind regards! >>>>>>> >>>>>>> Wonton >>>>>>> >>>>>>
--

