fix error when user isn't found.
1 files changed, 125 insertions(+), 124 deletions(-)

M auth/classes/auth/controller.pike
M auth/classes/auth/controller.pike +125 -124
@@ 1,160 1,161 @@ 
 import Fins;
 
-inherit Fins.DocController;
+nherit Fins.DocController;
 
-protected program __default_template = Fins.Template.Simple;
+rotected program __default_template = Fins.Template.Simple;
 
-//! this is a sample authentication handler module which can be customized
-//! to fit the particular needs of your application
-//!
-//! this provider uses a form to gather authentication information
-//! and stores the validated user identifier (what that actually is 
-//! will depend on the behavior of the @[find_user] method) in the 
-//! session.
-//! 
-//! the application may pass "return_to" in the request variable mapping
-//! which will be used to determine the url the application will return to
-//! following a successful authentication.
+/! this is a sample authentication handler module which can be customized
+/! to fit the particular needs of your application
+/!
+/! this provider uses a form to gather authentication information
+/! and stores the validated user identifier (what that actually is 
+/! will depend on the behavior of the @[find_user] method) in the 
+/! session.
+/! 
+/! the application may pass "return_to" in the request variable mapping
+/! which will be used to determine the url the application will return to
+/! following a successful authentication.
 
-//! method which is called to determine if a user should be considered "authenticated".
-//! this method accepts the request object and should return 
-//! zero if the user was not successfully authenticated, or a value
-//! which will be placed in the current session as "user".
-function(Fins.Request,Fins.Response,Fins.Template.View:mixed...) validate_user = default_validate_user;
+/! method which is called to determine if a user should be considered "authenticated".
+/! this method accepts the request object and should return 
+/! zero if the user was not successfully authenticated, or a value
+/! which will be placed in the current session as "user".
+unction(Fins.Request,Fins.Response,Fins.Template.View:mixed...) validate_user = default_validate_user;
 
-//! method which is called to locate a user's password.
-//! this method accepts the request object and should return either a
-//! user object with "email" and "password" fields, or a mapping with these
-//! two indices.
-function(Fins.Request,Fins.Response,Fins.Template.View:mixed...) find_user_password = default_find_user_password;
+/! method which is called to locate a user's password.
+/! this method accepts the request object and should return either a
+/! user object with "email" and "password" fields, or a mapping with these
+/! two indices.
+unction(Fins.Request,Fins.Response,Fins.Template.View:mixed...) find_user_password = default_find_user_password;
 
-//! method which is called to reset a user's password.
-//! 
-//! @returns
-//!   0 upon failure, should also set response flash message describing the difficulty.
-function(Fins.Request,Fins.Response,Fins.Template.View,mixed,string:mixed...) reset_password = default_reset_password;
+/! method which is called to reset a user's password.
+/! 
+/! @returns
+/!   0 upon failure, should also set response flash message describing the difficulty.
+unction(Fins.Request,Fins.Response,Fins.Template.View,mixed,string:mixed...) reset_password = default_reset_password;
 
 
-//! method which is called upon successful login
-function(Fins.Request,Fins.Response,Fins.Template.View,mixed...:void) on_login;
+/! method which is called upon successful login
+unction(Fins.Request,Fins.Response,Fins.Template.View,mixed...:void) on_login;
 
-//! method which is called upon successful logout
-function(Fins.Request,Fins.Response,Fins.Template.View,mixed...:void) on_logout;
+/! method which is called upon successful logout
+unction(Fins.Request,Fins.Response,Fins.Template.View,mixed...:void) on_logout;
 
-//! method which is called upon successful password reset
-function(Fins.Request,Fins.Response,Fins.Template.View,mixed...:void) on_reset;
+/! method which is called upon successful password reset
+unction(Fins.Request,Fins.Response,Fins.Template.View,mixed...:void) on_reset;
 
 
-//! 
-object|function default_action;
+/! 
+bject|function default_action;
 
-//! default startup method. sets @[default_action] to be the root of the 
-//! current application. custom applications should override this method 
-//! and set this value appropriately.
-void start()
-{
-  default_action = app->controller;
-}
+/! default startup method. sets @[default_action] to be the root of the 
+/! current application. custom applications should override this method 
+/! and set this value appropriately.
+oid start()
+
+ default_action = app->controller;
+
 
-//! default user authenticator, for data models where a user object represents 
-//! a user and the password is saved as a plain text string. 
-static mixed default_validate_user(Request id, Response response, Template.View t) 
-{ 
-  mixed r = Fins.Model.find.users( ([ "username": id->variables->username,
-                                      "password": id->variables->password
-                                    ]) );
+/! default user authenticator, for data models where a user object represents 
+/! a user and the password is saved as a plain text string. 
+tatic mixed default_validate_user(Request id, Response response, Template.View t) 
+ 
+ mixed r = Fins.Model.find.users( ([ "username": id->variables->username,
+                                     "password": id->variables->password
+                                   ]) );
 
-  t->add("username", id->variables->username);
+ t->add("username", id->variables->username);
 
-  if(r && sizeof(r)) return r[0];
-  else return 0;
-}
+ if(r && sizeof(r)) return r[0];
+ else return 0;
+
 
 
-//! default user authenticator, for data models where a user object represents
-//! a user and the password field contains a MD5 crypt string.
-static mixed md5_validate_user(Request id, Response response, Template.View t)
-{
-  mixed r = Fins.Model.find.users( ([ "username": id->variables->username,
-                                    ]) );
+/! default user authenticator, for data models where a user object represents
+/! a user and the password field contains a MD5 crypt string.
+tatic mixed md5_validate_user(Request id, Response response, Template.View t)
+
+ mixed r = Fins.Model.find.users( ([ "username": id->variables->username,
+                                   ]) );
 
-  if(r && (sizeof(r)== 1) && Crypto.verify_crypt_md5(id->variables->password, r[0]["password"]))
-  {
-    t->add("username", id->variables->username);
-    return r[0];
-  }
+ if(r && (sizeof(r)== 1) && Crypto.verify_crypt_md5(id->variables->password, r[0]["password"]))
+ {
+   t->add("username", id->variables->username);
+   return r[0];
+ }
 
-  // failure!
-  return 0;
-}
+ // failure!
+ return 0;
+
 
-//! the name of the template to use for sending the password via email.
-string password_template_name = "auth/sendpassword";
+/! the name of the template to use for sending the password via email.
+tring password_template_name = "auth/sendpassword";
 
-//! default password changer
-//!
-//! changes a user's password by setting the text of a field to the new value.
-//! 
-//! @note
-//!  this method receives a password which the user has typed twice (in order
-//!  to prevent typos. This method should perform other QA checks if necessary
-//!  (such as password complexity and aging tests).
-static mixed default_reset_password(Request id, Response response, Template.View t, mixed user, string newpassword)
-{
-  user["password"] = newpassword;
-  return 1;
-}
+/! default password changer
+/!
+/! changes a user's password by setting the text of a field to the new value.
+/! 
+/! @note
+/!  this method receives a password which the user has typed twice (in order
+/!  to prevent typos. This method should perform other QA checks if necessary
+/!  (such as password complexity and aging tests).
+tatic mixed default_reset_password(Request id, Response response, Template.View t, mixed user, string newpassword)
+
+ user["password"] = newpassword;
+ return 1;
+
 
-//! MD5 based password changer
-//!
-//! changes a user's password by setting the password field to an MD5 hash.
-//! 
-//! @note
-//!  this method receives a password which the user has typed twice (in order
-//!  to prevent typos. This method should perform other QA checks if necessary
-//!  (such as password complexity and aging tests).
-//!
-//! @note
-//!  this method requires a field length longer than the maximum acceptable
-//!  password length. 
-static mixed md5_reset_password(Request id, Response response, Template.View t, mixed user, string newpassword)
-{
-  user["password"] = Crypto.make_crypt_md5(newpassword);
-  return 1;
-}
+/! MD5 based password changer
+/!
+/! changes a user's password by setting the password field to an MD5 hash.
+/! 
+/! @note
+/!  this method receives a password which the user has typed twice (in order
+/!  to prevent typos. This method should perform other QA checks if necessary
+/!  (such as password complexity and aging tests).
+/!
+/! @note
+/!  this method requires a field length longer than the maximum acceptable
+/!  password length. 
+tatic mixed md5_reset_password(Request id, Response response, Template.View t, mixed user, string newpassword)
 
-//! default user password locator
-//! 
-static mixed default_find_user_password(Request id, Response response, Template.View t)
-{
+ user["password"] = Crypto.make_crypt_md5(newpassword);
+ return 1;
+
+
+/! default user password locator
+/! 
+tatic mixed default_find_user_password(Request id, Response response, Template.View t)
+
+
+ mixed r = Fins.Model.find.users( ([ "username": id->variables->username
+                                   ]) );
 
-  mixed r = Fins.Model.find.users( ([ "username": id->variables->username
-                                    ]) );
+ t->add("username", id->variables->username);
+
+ if(r && sizeof(r)) return r[0];
+ else return 0;
+
 
-  t->add("username", id->variables->username);
+/! MD5-crypt based user password locator
+/! 
+/! @note
+/!  this method will reset the password of the user, as the original password isn't available.
+tatic mixed md5_find_user_password(Request id, Response response, Template.View t)
 
-  if(r && sizeof(r)) return r[0];
-  else return 0;
-}
 
-//! MD5-crypt based user password locator
-//! 
-//! @note
-//!  this method will reset the password of the user, as the original password isn't available.
-static mixed md5_find_user_password(Request id, Response response, Template.View t)
-{
+ mixed r = Fins.Model.find.users( ([ "username": id->variables->username
+                                   ]) );
+
+ t->add("username", id->variables->username);
+ if(!r || !sizeof(r)) return 0;
 
-  mixed r = Fins.Model.find.users( ([ "username": id->variables->username
-                                    ]) );
-
-  t->add("username", id->variables->username);
+ string newpass = Tools.String.generate_password(10);
 
-  string newpass = Tools.String.generate_password(10);
+ r[0]["password"] = Crypto.make_crypt_md5(newpass);
 
-  r[0]["password"] = Crypto.make_crypt_md5(newpass);
+ return (["email": r[0]["email"], "password": newpass]);
 
-  if(r && sizeof(r)) return (["email": r[0]["email"], "password": newpass]);
-  else return 0;
 }
 
 static string generate_password()