| 169 | 169 |   end | 
  | 170 | 170 |  | 
  | 171 | 171 |   def open_id_authenticate(openid_url) | 
  | 172 |  |     authenticate_with_open_id(openid_url, :required => [:nickname, :fullname, :email], :return_to => signin_url, :method => :post) do |result, identity_url, registration| | 
  |  | 172 |     authenticate_with_open_id(openid_url, :required => [:nickname, :fullname, :email, #Original | 
  |  | 173 | 							"http://axschema.org/namePerson/first", #Google | 
  |  | 174 |                                                         "http://axschema.org/namePerson/last", #Google | 
  |  | 175 |                                                         "http://schema.openid.net/contact/email", #Google | 
  |  | 176 |                                                         "http://axschema.org/namePerson", #Yahoo | 
  |  | 177 |                                                         "http://axschema.org/contact/email"], #Yahoo | 
  |  | 178 |                                           :return_to => signin_url, :method => :post) do |result, identity_url, registration| | 
  | 173 | 179 |       if result.successful? | 
  | 174 | 180 |         user = User.find_or_initialize_by_identity_url(identity_url) | 
  | 175 | 181 |         if user.new_record? | 
  | 176 | 182 |           # Self-registration off | 
  | 177 | 183 |           redirect_to(home_url) && return unless Setting.self_registration? | 
  | 178 | 184 |  | 
  | 179 |  |           # Create on the fly | 
  | 180 |  |           user.login = registration['nickname'] unless registration['nickname'].nil? | 
  | 181 |  |           user.mail = registration['email'] unless registration['email'].nil? | 
  | 182 |  |           user.firstname, user.lastname = registration['fullname'].split(' ') unless registration['fullname'].nil? | 
  |  | 185 |           # The open_id_authentication plugin returns registration as an OpenID::SReg::Response | 
  |  | 186 |           # The problem here is that most OpenID providres don't handle SReg anymore (e.g. Google) | 
  |  | 187 |           # So, we need to get an OpenID::AX::FetchResponse | 
  |  | 188 |           axreg = OpenID::AX::FetchResponse.from_success_response(request.env[Rack::OpenID::RESPONSE]) | 
  |  | 189 |  | 
  |  | 190 |           # The previous call to get the FetchResponse object will be nil of nothing was returned from the provider | 
  |  | 191 |           # At the very least, it's one way to know we should fall back to SReg or use AX | 
  |  | 192 |           if axreg.nil? | 
  |  | 193 |             # Create on the fly | 
  |  | 194 |             user.login = registration['nickname'] unless registration['nickname'].nil? | 
  |  | 195 |             user.mail = registration['email'] unless registration['email'].nil? | 
  |  | 196 |             user.firstname, user.lastname = registration['fullname'].split(' ') unless registration['fullname'].nil? | 
  |  | 197 |           else # Use AX (Attribute Exchange) | 
  |  | 198 |             if axreg.get_single("http://schema.openid.net/contact/email").nil? | 
  |  | 199 |               user.mail = axreg.get_single("http://axschema.org/contact/email") unless axreg.get_single("http://axschema.org/contact/email").nil? | 
  |  | 200 |             else | 
  |  | 201 |               user.mail = axreg.get_single("http://schema.openid.net/contact/email") | 
  |  | 202 |             end | 
  |  | 203 |  | 
  |  | 204 |             user.login = user.mail.split("@")[0] unless user.mail.nil? | 
  |  | 205 |  | 
  |  | 206 |             if axreg.get_single("http://axschema.org/namePerson").nil? | 
  |  | 207 |               user.firstname = axreg.get_single("http://axschema.org/namePerson/first") unless axreg.get_single("http://axschema.org/namePerson/first").nil? | 
  |  | 208 |               user.lastname =  axreg.get_single("http://axschema.org/namePerson/last") unless axreg.get_single("http://axschema.org/namePerson/last").nil?  | 
  |  | 209 |             else | 
  |  | 210 |               user.firstname, user.lastname = axreg.get_single("http://axschema.org/namePerson").split(' ') | 
  |  | 211 |             end | 
  |  | 212 |           end | 
  |  | 213 |  | 
  | 183 | 214 |           user.random_password | 
  | 184 | 215 |           user.register | 
  | 185 | 216 |  |