thank you freeze for your slices code,
now I try hash my password like you did in slices, copy clienttools.py to
cd/modules folder,I use the code in "def user" in default.py and "def
clientcrypt_auth" in db.py like below,but fail, I can register user but password
was not hashed in database and still plain text. when I log out, I can not login
again with the register one. what I missed in this?
please advise. Frank
def user():
if maint_mode and not 'logout' in request.args:
session.flash = "Site is read-only for maintenance."
redirect(URL(r=request,f='index'))
if request.args:
response.statusbar = request.args(0).replace("_"," ").capitalize()
form = handler = None
if not session.token:
import uuid
session.token=str(uuid.uuid4())
auth.settings.login_methods = [clientcrypt_auth(db,session.token)]
page.include("http://plugins.jquery.com/files/jquery.sha256.min.js.txt",
download=True,filename="jquery.sha256.min.js")
if request.args(0) == 'register':
setpass = jq("#auth_user_password").val(jq().sha256hmac(
jq("#auth_user_username"),
jq("#auth_user_password"))
)()
setverify = jq("input[name='password_two']").val(jq().sha256hmac(
jq("#auth_user_username"),
jq("input[name='password_two']"))
)()
handler = setpass + setverify
if request.args(0) == 'login':
auth.settings.captcha = None
form=auth()
hdn = INPUT(_type="hidden",_name="token",_value=session.token)
form.components.append(hdn)
setpass = jq("#auth_user_password").val(jq().sha256hmac(
jq("#auth_user_username").val().toLowerCase(),
jq("#auth_user_password"))
)()
setagain = jq("#auth_user_password").val(jq().sha256hmac(jq(hdn),
jq("#auth_user_password"))
)()
handler = setpass + setagain
if request.args(0)== "retrieve_password" and request.vars.email:
user = db(db.auth_user.email== request.vars.email).select()
if user:
user=user[0]
t = auth.settings.table_user
t.password.requires = CRYPT(key=user.username,digest_alg="sha256")
if request.args(0)=="change_password" and auth.is_logged_in():
form=auth()
hdn = INPUT(_type="hidden",_name="username",_value=auth.user.username)
form.components.append(hdn)
setold = jq("#no_table_old_password").val(jq().sha256hmac(
jq(hdn),
jq("#no_table_old_password"))
)()
setnew = jq("#no_table_new_password").val(jq().sha256hmac(
jq(hdn),
jq("#no_table_new_password")) )()
setverify = jq("#no_table_new_password2").val(jq().sha256hmac(
jq(hdn),
jq("#no_table_new_password2"))
)()
handler = setold + setnew + setverify
if not form: form=auth()
if handler: event.listen("submit","form", handler )
return dict(form=form)
from applications.cd.modules.clienttools import *
page = PageManager(globals())
event = EventManager(page)
js = ScriptManager(page)
jq = JQuery
def clientcrypt_auth(db, key):
def clientcrypt_login_aux(username, password, db=db, key=key):
user = db(db.auth_user.username == username).select()
if user:
user=user[0]
userpass_crypt, error =
CRYPT(key=key,digest_alg="sha256")(user.password)
if request.vars.password==userpass_crypt: return True
return False
return clientcrypt_login_aux