Index: branches/release-41/lib/MT/App/Comments.pm
===================================================================
--- branches/release-41/lib/MT/App/Comments.pm (revision 2749)
+++ branches/release-41/lib/MT/App/Comments.pm (revision 2821)
@@ -29,5 +29,5 @@
         signup           => \&signup,
         do_signup        => \&do_signup,
-        register         => \&register,
+        # register         => \&register,
         do_register      => \&do_register,
         preview          => \&preview,
@@ -294,5 +294,5 @@
     my $param = {};
     $param->{$_} = $app->param($_) foreach qw(blog_id entry_id static username return_url );
-    my $blog = $app->model('blog')->load( $param->{blog_id} )
+    my $blog = $app->model('blog')->load( $param->{blog_id} || 0 )
         or return $app->error($app->translate('Can\'t load blog #[_1].', $param->{blog_id}));
     my $cfg  = $app->config;
@@ -315,4 +315,7 @@
     my $q   = $app->param;
 
+    return $app->error( $app->translate("Invalid request") )
+      if $app->request_method() ne 'POST';
+
     my $param = {};
     $param->{$_} = $q->param($_)
@@ -320,5 +323,8 @@
       qw(blog_id entry_id static email url username nickname email hint return_url );
 
-    my $user = $app->create_user_pending($param);
+    my $filter_result = $app->run_callbacks( 'api_save_filter.author', $app );
+
+    my $user;
+    $user = $app->create_user_pending($param) if $filter_result;
     unless ($user) {
         my $blog = $app->model('blog')->load( $param->{blog_id} )
@@ -328,6 +334,13 @@
         }
         $param->{error} = $app->errstr;
+        $param->{ 'auth_mode_' . $app->config->AuthenticationModule } = 1;
         return $app->build_page( 'signup.tmpl', $param );
     }
+
+    ## Assign default role
+    $user->add_default_roles;
+
+    my $original = $user->clone();
+    $app->run_callbacks( 'api_post_save.author', $app, $user, $original );
 
     ## Send confirmation email in the background.
@@ -1668,4 +1681,7 @@
     my $q   = $app->param;
 
+    return $app->error( $app->translate("Invalid request") )
+      if $app->request_method() ne 'POST';
+
     my ( $sess_obj, $cmntr ) = $app->get_commenter_session();
     return $app->handle_error( $app->translate('Invalid login') )
@@ -1680,4 +1696,5 @@
     $app->user($cmntr);
     $app->{session} = $sess_obj;
+    my $original = $cmntr->clone();
 
     $app->validate_magic
@@ -1713,4 +1730,6 @@
       if $param{password} && !$param{external_auth};
     if ( $cmntr->save ) {
+        $app->run_callbacks( 'api_post_save.author', $app, $cmntr, $original );
+
         $param{saved} =
           $app->translate('Commenter profile has successfully been updated.');
