r9914 - in apps/gobi/trunk/code: Global Page User
[email protected] Thu, 17 Sep 2009 11:41:21 +0200 (CEST)
| Newsgroups | gmane.comp.java.helma.cvs |
|---|---|
| Message-ID | <20090917094121.9AECC3D0E3@mia> |
Author: hannes
Date: 2009-09-17 11:41:21 +0200 (Thu, 17 Sep 2009)
New Revision: 9914
Modified:
apps/gobi/trunk/code/Global/Global.js
apps/gobi/trunk/code/Global/Startup.js
apps/gobi/trunk/code/Page/PageActions.js
apps/gobi/trunk/code/Page/PageCore.js
apps/gobi/trunk/code/User/User.js
Log:
Completely switch to secure password handling, and give some care to autologin.
Details at http://dev.helma.org/trac/helma/changeset/9914
Modified: apps/gobi/trunk/code/Global/Global.js
===================================================================
--- apps/gobi/trunk/code/Global/Global.js 2009-09-16 21:08:59 UTC (rev 9913)
+++ apps/gobi/trunk/code/Global/Global.js 2009-09-17 09:41:21 UTC (rev 9914)
@@ -381,9 +381,16 @@
/**
* Set auto-login cookie
*/
-function setAutoLoginCookie(name, token) {
- var cookie = name + "/" + (token + req.data.http_remotehost).md5();
- res.setCookie("gobi_autologin", cookie, 365);
+function setAutoLoginCookie() {
+ if (session.user) {
+ var name = session.user.name,
+ hash = session.user.getFormData().password_hash,
+ host = req.data.http_remotehost;
+ if (hash) {
+ var cookie = name + "/" + (hash + host).md5();
+ res.setCookie("gobi_autologin", cookie, 365);
+ }
+ }
}
/**
@@ -401,15 +408,15 @@
return;
var cookie = req.data.gobi_autologin.split("/");
var user = getUser(cookie[0]);
- if (!user)
- return;
- var formdata = user.getFormData();
- if (!formdata.password && !formdata.password_hash)
- return;
- var hash = ((formdata.password_hash || formdata_password) + req.data.http_remotehost).md5();
- if (hash == cookie[1]) {
- res.message = msg("login_succeeded", root.name, user.name);
- session.login(user);
+ if (user) {
+ var hash = user.getFormData().password_hash,
+ host = req.data.http_remotehost;
+ if (hash && host && (hash + host).md5() == cookie[1]) {
+ res.message = msg("login_succeeded", root.name, user.name);
+ session.login(user);
+ // refresh autologin cookie
+ res.setCookie("gobi_autologin", req.data.gobi_autologin, 365);
+ }
}
}
Modified: apps/gobi/trunk/code/Global/Startup.js
===================================================================
--- apps/gobi/trunk/code/Global/Startup.js 2009-09-16 21:08:59 UTC (rev 9913)
+++ apps/gobi/trunk/code/Global/Startup.js 2009-09-17 09:41:21 UTC (rev 9914)
@@ -37,9 +37,15 @@
try {
convertAttachments();
} catch (x) {
- app.logger.error("Caught in convertAttachments: " + x);
+ app.logger.error("Error in convertAttachments: " + x);
}
+ try {
+ convertPasswords();
+ } catch (x) {
+ app.logger.error("Error in convertPasswords: " + x);
+ }
+
for (var i = 0; i < gobi.pages.length; i++) {
registerPage(root, gobi.pages[i]);
}
@@ -176,3 +182,30 @@
});
p.start(root);
}
+
+function convertPasswords() {
+ var users = getService("users");
+ var converted = 0;
+ if (users) {
+ users.prefetchChildren();
+ var list = users.list();
+ for each (user in list) {
+ var data = user.getFormData();
+ if (data.password_salt && data.password_hash) {
+ continue;
+ }
+ app.log("Converting password for user " + user.name);
+ converted++;
+ var rnd = java.security.SecureRandom.getInstance("SHA1PRNG");
+ var password = data.password || "";
+ var salt = data.password_salt = rnd.nextLong().toString(36);
+ data.password_hash = (salt + password).md5();
+ delete data.password;
+ user.setFormData(data);
+ }
+ }
+ if (converted > 0) {
+ app.log("Converted " + converted + " user passwords");
+ res.commit();
+ }
+}
Modified: apps/gobi/trunk/code/Page/PageActions.js
===================================================================
--- apps/gobi/trunk/code/Page/PageActions.js 2009-09-16 21:08:59 UTC (rev 9913)
+++ apps/gobi/trunk/code/Page/PageActions.js 2009-09-17 09:41:21 UTC (rev 9914)
@@ -596,17 +596,17 @@
res.data.body = "User Service is not configured. Can't login.";
} else {
if (req.data.login) {
- var user = users.get(req.data.name);
- var formdata = user && user.getFormData();
- if (formdata && (formdata.password == req.data.password ||
- (formdata.password_salt + req.data.password).md5() == formdata.password_hash)) {
+ var user = users.get(req.data.name),
+ data = user && user.getFormData(),
+ salt = data && data.password_salt,
+ hash = data && data.password_hash,
+ password = req.data.password;
+ if (salt && hash && password != null && String(salt + password).md5() == hash) {
session.login(user);
- setAutoLoginCookie(user.name, formdata.password_hash || formdata.password);
+ setAutoLoginCookie();
res.message = msg("login_succeeded", root.name, user.name);
- var location = session.data.lastLocation;
+ var location = session.data.lastLocation || this.href();
session.data.lastLocation = null;
- if (!location)
- location = this.href();
res.redirect(location);
} else {
res.message = msg("login_failed");
@@ -677,7 +677,7 @@
// if current user is not logged in, log in as new user
if (!session.user) {
session.login(it);
- setAutoLoginCookie(it.name, req.data.password);
+ setAutoLoginCookie();
res.message += msg("register_welcome");
}
res.redirect(this.href());
Modified: apps/gobi/trunk/code/Page/PageCore.js
===================================================================
--- apps/gobi/trunk/code/Page/PageCore.js 2009-09-16 21:08:59 UTC (rev 9913)
+++ apps/gobi/trunk/code/Page/PageCore.js 2009-09-17 09:41:21 UTC (rev 9914)
@@ -838,9 +838,9 @@
var size = param && param.size != null ? param.size : 40;
var name = "formdata[" + field.name + "]";
+ var label = param && param.label != null ? param.label : field.label;
function writeLabel() {
- var label = param && param.label != null ? param.label : field.label;
res.write("<p style=\"clear: both;\">");
res.write("<div>")
res.write(label);
Modified: apps/gobi/trunk/code/User/User.js
===================================================================
--- apps/gobi/trunk/code/User/User.js 2009-09-16 21:08:59 UTC (rev 9913)
+++ apps/gobi/trunk/code/User/User.js 2009-09-17 09:41:21 UTC (rev 9914)
@@ -66,6 +66,9 @@
this.modifier = session.user;
this.modifytime = new Date();
res.message = msg("password_change_confirm");
+ if (session.user == this) {
+ setAutoLoginCookie();
+ }
res.redirect(this.href());
}
}