I would like record a field (wich is a password) encrypted in my database. I have to encrypt it directly inside my module not in my PostgreSQL database. I did the following :
import md5
import os
from openerp.osv import osv, fields
###### Encrypton of passwords ######
CRYPT64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
def make_salt():
sbytes = os.urandom(8)
return ''.join([CRYPT64[ord(b) & 0x3f] for b in sbytes])
def md5crypt(password, salt, magic='$1$'):
if salt is None:
salt = make_salt()
m = md5.new()
m.update(password + magic + salt)
mixin = md5.new(password + salt + password).digest()
for i in range(0, len(password)):
m.update(mixin[i % 16])
# Then something really weird...
# Also really broken, as far as I can tell. -m
i = len(password)
while i:
if i & 1:
m.update('\x00')
else:
m.update(password[0])
i >>= 1
final = m.digest()
return final
md5crypt(pass_pid)
###### Creation of password table ######
class password(osv.osv):
_inherit = 'res.partner'
_columns = {
'passwords': fields.one2many('password.table','name_pid','user_pid')
}
password()
class password_table(osv.osv):
_name="password.table"
_columns = {
'name_pid':fields.many2one('res.partner', 'name', required=True),
'user_pid':fields.char("UserName", size=128, required=True),
'host_pid':fields.char("IP/HostName", size=128, required=True),
'pass_pid':fields.function(md5crypt, type="text", string="password", size=128, required=True),
'com_pid':fields.text("Comment")
}
password_table()
The error is about my parameters but I don't know at all how to modify that!
can you please post the error you are getting? That would help give you a better answer.
I'm getting this error: "File "/home/integration/oe7_1/addons/password_module/password.py", line 59, in <module> md5crypt(pass_pid) NameError: name 'pass_pid' is not defined"