]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/user_controller.rb
OpenID attributes returned via AX seem to be arrays now
[rails.git] / app / controllers / user_controller.rb
index 73115dc52bd94c1049f75c6a6855367b03414fd2..6ce14876338b103093f7848bf7cb92706d12ac0e 100644 (file)
@@ -143,55 +143,24 @@ class UserController < ApplicationController
     @tokens = @user.oauth_tokens.authorized
 
     if params[:user] and params[:user][:display_name] and params[:user][:description]
-      @user.display_name = params[:user][:display_name]
-      @user.new_email = params[:user][:new_email]
-
-      if params[:user][:pass_crypt].length > 0 or params[:user][:pass_crypt_confirmation].length > 0
-        @user.pass_crypt = params[:user][:pass_crypt]
-        @user.pass_crypt_confirmation = params[:user][:pass_crypt_confirmation]
-      end
-
-      if params[:user][:description] != @user.description
-        @user.description = params[:user][:description]
-        @user.description_format = "markdown"
-      end
-
-      @user.languages = params[:user][:languages].split(",")
-
-      case params[:image_action]
-        when "new" then @user.image = params[:user][:image]
-        when "delete" then @user.image = nil
-      end
-
-      @user.home_lat = params[:user][:home_lat]
-      @user.home_lon = params[:user][:home_lon]
-
-      if params[:user][:preferred_editor] == "default"
-        @user.preferred_editor = nil
-      else
-        @user.preferred_editor = params[:user][:preferred_editor]
-      end
-
-      @user.openid_url = nil if params[:user][:openid_url].blank?
-
       if params[:user][:openid_url] and
          params[:user][:openid_url].length > 0 and
          params[:user][:openid_url] != @user.openid_url
         # If the OpenID has changed, we want to check that it is a
         # valid OpenID and one the user has control over before saving
         # it as a password equivalent for the user.
-        session[:new_user] = @user
+        session[:new_user_settings] = params
         openid_verify(params[:user][:openid_url], @user)
       else
-        update_user(@user)
+        update_user(@user, params)
       end
     elsif using_open_id?
       # The redirect from the OpenID provider reenters here
       # again and we need to pass the parameters through to
       # the open_id_authentication function
-      @user = session.delete(:new_user)
+      settings = session.delete(:new_user_settings)
       openid_verify(nil, @user) do |user|
-        update_user(user)
+        update_user(user, settings)
       end
     end
   end
@@ -565,8 +534,8 @@ private
           # to the create account page with username and email filled
           # in if they have been given by the OpenID provider through
           # the simple registration protocol.
-          nickname = sreg["nickname"] || ax["http://axschema.org/namePerson/friendly"]
-          email = sreg["email"] || ax["http://axschema.org/contact/email"]
+          nickname = sreg["nickname"] || ax["http://axschema.org/namePerson/friendly"].first
+          email = sreg["email"] || ax["http://axschema.org/contact/email"].first
           redirect_to :controller => 'user', :action => 'new', :nickname => nickname, :email => email, :openid => identity_url
         end
       elsif result.missing?
@@ -662,7 +631,38 @@ private
 
   ##
   # update a user's details
-  def update_user(user)
+  def update_user(user, params)
+    user.display_name = params[:user][:display_name]
+    user.new_email = params[:user][:new_email]
+
+    if params[:user][:pass_crypt].length > 0 or params[:user][:pass_crypt_confirmation].length > 0
+      user.pass_crypt = params[:user][:pass_crypt]
+      user.pass_crypt_confirmation = params[:user][:pass_crypt_confirmation]
+    end
+
+    if params[:user][:description] != user.description
+      user.description = params[:user][:description]
+      user.description_format = "markdown"
+    end
+
+    user.languages = params[:user][:languages].split(",")
+
+    case params[:image_action]
+    when "new" then user.image = params[:user][:image]
+    when "delete" then user.image = nil
+    end
+
+    user.home_lat = params[:user][:home_lat]
+    user.home_lon = params[:user][:home_lon]
+
+    if params[:user][:preferred_editor] == "default"
+      user.preferred_editor = nil
+    else
+      user.preferred_editor = params[:user][:preferred_editor]
+    end
+
+    user.openid_url = nil if params[:user][:openid_url].blank?
+
     if user.save
       set_locale