the users are now made with people
This commit is contained in:
parent
9a34ca07c4
commit
ef3e627bed
7 changed files with 119 additions and 2 deletions
26
app/controllers/invitations_controller.rb
Normal file
26
app/controllers/invitations_controller.rb
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Copyright (c) 2010, Diaspora Inc. This file is
|
||||||
|
# licensed under the Affero General Public License version 3 or later. See
|
||||||
|
# the COPYRIGHT file.
|
||||||
|
|
||||||
|
class InvitationsController < Devise::InvitationsController
|
||||||
|
def update
|
||||||
|
puts params.inspect
|
||||||
|
begin
|
||||||
|
puts params["user"]["invitation_token"]
|
||||||
|
user = User.find_by_invitation_token(params["user"]["invitation_token"])
|
||||||
|
|
||||||
|
puts user.inspect
|
||||||
|
user.accept_invitation!(params["user"])
|
||||||
|
rescue MongoMapper::DocumentNotValid => e
|
||||||
|
puts "Doc Not VALID"
|
||||||
|
user = nil
|
||||||
|
flash[:error] = e.message
|
||||||
|
end
|
||||||
|
if user
|
||||||
|
flash[:notice] = I18n.t 'registrations.create.success'
|
||||||
|
sign_in_and_redirect(:user, user)
|
||||||
|
else
|
||||||
|
redirect_to new_user_registration_path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -7,6 +7,16 @@ require File.expand_path('../../../lib/diaspora/user/querying', __FILE__)
|
||||||
require File.expand_path('../../../lib/diaspora/user/receiving', __FILE__)
|
require File.expand_path('../../../lib/diaspora/user/receiving', __FILE__)
|
||||||
require File.expand_path('../../../lib/salmon/salmon', __FILE__)
|
require File.expand_path('../../../lib/salmon/salmon', __FILE__)
|
||||||
|
|
||||||
|
class InvitedUserValidator < ActiveModel::Validator
|
||||||
|
def validate(document)
|
||||||
|
unless document.invitation_token
|
||||||
|
unless document.person
|
||||||
|
document.errors[:base] << "Unless you are being invited, you must have a person"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
class User
|
class User
|
||||||
include MongoMapper::Document
|
include MongoMapper::Document
|
||||||
plugin MongoMapper::Devise
|
plugin MongoMapper::Devise
|
||||||
|
|
@ -40,6 +50,7 @@ class User
|
||||||
after_create :seed_aspects
|
after_create :seed_aspects
|
||||||
|
|
||||||
before_validation :downcase_username, :on => :create
|
before_validation :downcase_username, :on => :create
|
||||||
|
validates_with InvitedUserValidator
|
||||||
|
|
||||||
def self.find_for_authentication(conditions={})
|
def self.find_for_authentication(conditions={})
|
||||||
if conditions[:username] =~ /^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i # email regex
|
if conditions[:username] =~ /^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i # email regex
|
||||||
|
|
@ -254,6 +265,26 @@ class User
|
||||||
end
|
end
|
||||||
|
|
||||||
###Helpers############
|
###Helpers############
|
||||||
|
|
||||||
|
def accept_invitation!( opts = {} )
|
||||||
|
if self.invited?
|
||||||
|
self.password = opts[:password]
|
||||||
|
self.password_confirmation = opts[:password_confirmation]
|
||||||
|
opts[:person][:diaspora_handle] = "#{opts[:username]}@#{APP_CONFIG[:terse_pod_url]}"
|
||||||
|
opts[:person][:url] = APP_CONFIG[:pod_url]
|
||||||
|
|
||||||
|
opts[:serialized_private_key] = User.generate_key
|
||||||
|
self.serialized_private_key = opts[:serialized_private_key]
|
||||||
|
opts[:person][:serialized_public_key] = opts[:serialized_private_key].public_key
|
||||||
|
|
||||||
|
person_hash = opts.delete(:person)
|
||||||
|
self.person = Person.create(person_hash)
|
||||||
|
self.person.save
|
||||||
|
self.save
|
||||||
|
self
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def self.instantiate!( opts = {} )
|
def self.instantiate!( opts = {} )
|
||||||
opts[:person][:diaspora_handle] = "#{opts[:username]}@#{APP_CONFIG[:terse_pod_url]}"
|
opts[:person][:diaspora_handle] = "#{opts[:username]}@#{APP_CONFIG[:terse_pod_url]}"
|
||||||
opts[:person][:url] = APP_CONFIG[:pod_url]
|
opts[:person][:url] = APP_CONFIG[:pod_url]
|
||||||
|
|
|
||||||
25
app/views/invitations/edit.html.haml
Normal file
25
app/views/invitations/edit.html.haml
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
= image_tag "http://needcoffee.cachefly.net/needcoffee/uploads/2009/02/predator-arnold-schwarzenegger.jpg"
|
||||||
|
|
||||||
|
= form_for(resource, :as => resource_name, :url => invitation_path(resource_name), :html => {:method => :put }) do |f|
|
||||||
|
%p
|
||||||
|
= f.label :username
|
||||||
|
= f.text_field :username
|
||||||
|
%p
|
||||||
|
= f.label :password
|
||||||
|
= f.password_field :password
|
||||||
|
%p
|
||||||
|
= f.label :password_confirmation
|
||||||
|
= f.password_field :password_confirmation
|
||||||
|
|
||||||
|
= f.fields_for :person do |p|
|
||||||
|
= p.fields_for :profile do |pr|
|
||||||
|
%p
|
||||||
|
= pr.label :first_name
|
||||||
|
= pr.text_field :first_name
|
||||||
|
%p
|
||||||
|
= pr.label :last_name
|
||||||
|
= pr.text_field :last_name
|
||||||
|
|
||||||
|
= f.hidden_field :invitation_token
|
||||||
|
= f.submit 'sign_up'
|
||||||
|
= render :partial => "devise/shared/links"
|
||||||
|
|
@ -22,6 +22,5 @@
|
||||||
%p
|
%p
|
||||||
= pr.label :last_name
|
= pr.label :last_name
|
||||||
= pr.text_field :last_name
|
= pr.text_field :last_name
|
||||||
|
|
||||||
= f.submit t('.sign_up')
|
= f.submit t('.sign_up')
|
||||||
= render :partial => "devise/shared/links"
|
= render :partial => "devise/shared/links"
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
|
|
||||||
%h2 Profile
|
%h2 Profile
|
||||||
|
= link_to new_user_invitation_path(current_user)
|
||||||
|
|
||||||
= form_for @user do |f|
|
= form_for @user do |f|
|
||||||
= f.error_messages
|
= f.error_messages
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ Diaspora::Application.routes.draw do
|
||||||
|
|
||||||
devise_for :users, :controllers => {:registrations => "registrations",
|
devise_for :users, :controllers => {:registrations => "registrations",
|
||||||
:password => "devise/passwords",
|
:password => "devise/passwords",
|
||||||
:invitation => "invitations"}
|
:invitations => "invitations"}
|
||||||
# added public route to user
|
# added public route to user
|
||||||
match 'public/:username', :to => 'users#public'
|
match 'public/:username', :to => 'users#public'
|
||||||
match 'users/export', :to => 'users#export'
|
match 'users/export', :to => 'users#export'
|
||||||
|
|
|
||||||
35
spec/models/user/invite_spec.rb
Normal file
35
spec/models/user/invite_spec.rb
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
# Copyright (c) 2010, Diaspora Inc. This file is
|
||||||
|
# licensed under the Affero General Public License version 3 or later. See
|
||||||
|
# the COPYRIGHT file.
|
||||||
|
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe User do
|
||||||
|
let!(:invited_user) { create_user_with_invitation("abc")}
|
||||||
|
|
||||||
|
context "the acceptance of an invitation" do
|
||||||
|
it "should create the person with the passed in params" do
|
||||||
|
Person.count.should be 0
|
||||||
|
u = invited_user.accept_invitation!(:invitation_token => "abc",
|
||||||
|
:username => "user",
|
||||||
|
:password => "secret",
|
||||||
|
:password_confirmation => "secret",
|
||||||
|
:person => {:profile => {:first_name => "Bob",
|
||||||
|
:last_name => "Smith"}} )
|
||||||
|
Person.count.should be 1
|
||||||
|
u.person.profile.first_name.should == "Bob"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_user_with_invitation(invitation_token, attributes={})
|
||||||
|
user = User.new({:password => nil, :password_confirmation => nil}.update(attributes))
|
||||||
|
#puts user.inspect
|
||||||
|
#user.skip_confirmation!
|
||||||
|
user.invitation_token = invitation_token
|
||||||
|
user.invitation_sent_at = Time.now.utc
|
||||||
|
user.save(:validate => false)
|
||||||
|
user
|
||||||
|
end
|
||||||
Loading…
Reference in a new issue