mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 15:25:35 +08:00
automatically approve invited users on forum where moderators must approve (keep in mind only moderators can invite)
speed up specs a touch allow invite controller to accept an email in absence of user (cleans up API)
This commit is contained in:
parent
7792b7da48
commit
1aef6de4b0
|
@ -190,12 +190,20 @@ class TopicsController < ApplicationController
|
|||
end
|
||||
|
||||
def invite
|
||||
params.require(:user)
|
||||
username_or_email = params[:user]
|
||||
if username_or_email
|
||||
# provides a level of protection for hashes
|
||||
params.require(:user)
|
||||
else
|
||||
params.require(:email)
|
||||
username_or_email = params[:email]
|
||||
end
|
||||
|
||||
topic = Topic.where(id: params[:topic_id]).first
|
||||
guardian.ensure_can_invite_to!(topic)
|
||||
|
||||
if topic.invite(current_user, params[:user])
|
||||
user = User.find_by_username_or_email(params[:user])
|
||||
if topic.invite(current_user, username_or_email)
|
||||
user = User.find_by_username_or_email(username_or_email)
|
||||
if user
|
||||
render_json_dump BasicUserSerializer.new(user, scope: guardian, root: 'user')
|
||||
else
|
||||
|
|
|
@ -18,6 +18,7 @@ InviteRedeemer = Struct.new(:invite) do
|
|||
add_to_private_topics_if_invited
|
||||
add_user_to_invited_topics
|
||||
send_welcome_message
|
||||
approve_account_if_needed
|
||||
notify_invitee
|
||||
end
|
||||
|
||||
|
@ -66,8 +67,12 @@ InviteRedeemer = Struct.new(:invite) do
|
|||
end
|
||||
end
|
||||
|
||||
def approve_account_if_needed
|
||||
invited_user.approve(invite.invited_by_id, send_email=false)
|
||||
end
|
||||
|
||||
def notify_invitee
|
||||
invite.invited_by.notifications.create(notification_type: Notification.types[:invitee_accepted],
|
||||
data: {display_username: invited_user.username}.to_json)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -182,7 +182,13 @@ class User < ActiveRecord::Base
|
|||
# Approve this user
|
||||
def approve(approved_by, send_mail=true)
|
||||
self.approved = true
|
||||
self.approved_by = approved_by
|
||||
|
||||
if Fixnum === approved_by
|
||||
self.approved_by_id = approved_by
|
||||
else
|
||||
self.approved_by = approved_by
|
||||
end
|
||||
|
||||
self.approved_at = Time.now
|
||||
|
||||
send_approval_email if save and send_mail
|
||||
|
|
|
@ -59,9 +59,9 @@ module CurrentUser
|
|||
@current_user.update_ip_address!(request.remote_ip)
|
||||
end
|
||||
|
||||
# possible we have an api call, impersonate
|
||||
# possible we have an api call, impersonate
|
||||
unless @current_user
|
||||
if api_key = request["api_key"]
|
||||
if api_key = request["api_key"]
|
||||
if api_username = request["api_username"]
|
||||
if SiteSetting.api_key_valid?(api_key)
|
||||
@current_user = User.where(username_lower: api_username.downcase).first
|
||||
|
|
|
@ -172,19 +172,22 @@ describe Invite do
|
|||
|
||||
end
|
||||
|
||||
context 'inviting when must_approve_users? is enabled' do
|
||||
it 'correctly acitvates accounts' do
|
||||
SiteSetting.stubs(:must_approve_users).returns(true)
|
||||
user = invite.redeem
|
||||
|
||||
user.approved?.should == true
|
||||
end
|
||||
end
|
||||
|
||||
context 'simple invite' do
|
||||
|
||||
let!(:user) { invite.redeem }
|
||||
|
||||
it 'returns a user record' do
|
||||
it 'works correctly' do
|
||||
user.is_a?(User).should be_true
|
||||
end
|
||||
|
||||
it 'wants us to send a welcome message' do
|
||||
user.send_welcome_message.should be_true
|
||||
end
|
||||
|
||||
it 'has the default_invitee_trust_level' do
|
||||
user.trust_level.should == SiteSetting.default_invitee_trust_level
|
||||
end
|
||||
|
||||
|
@ -193,28 +196,24 @@ describe Invite do
|
|||
invite.reload
|
||||
end
|
||||
|
||||
it 'no longer in the pending list for that user' do
|
||||
it 'works correctly' do
|
||||
# no longer in the pending list for that user
|
||||
InvitedList.new(invite.invited_by).pending.should be_blank
|
||||
end
|
||||
|
||||
it 'is redeeemed in the invite list for the creator' do
|
||||
# is redeeemed in the invite list for the creator
|
||||
InvitedList.new(invite.invited_by).redeemed.should == [invite]
|
||||
end
|
||||
|
||||
it 'has set the user_id attribute' do
|
||||
# has set the user_id attribute
|
||||
invite.user.should == user
|
||||
end
|
||||
|
||||
it 'returns true for redeemed' do
|
||||
# returns true for redeemed
|
||||
invite.should be_redeemed
|
||||
end
|
||||
|
||||
|
||||
context 'again' do
|
||||
it 'will not redeem twice' do
|
||||
invite.redeem.should == user
|
||||
end
|
||||
|
||||
it "doesn't want us to send a welcome message" do
|
||||
invite.redeem.send_welcome_message.should be_false
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user