invite only forums had very wonky logic, invited users were not being activated, invite_only forums were still registering users

This commit is contained in:
Sam
2013-08-28 17:18:31 +10:00
parent 28466eb5b2
commit 61281a3c81
9 changed files with 65 additions and 48 deletions

View File

@@ -95,6 +95,11 @@ Discourse.LoginController = Discourse.Controller.extend(Discourse.ModalFunctiona
},
authenticationComplete: function(options) {
if (options.requires_invite) {
this.flash(I18n.t('login.requires_invite'), 'success');
this.set('authenticate', null);
return;
}
if (options.awaiting_approval) {
this.flash(I18n.t('login.awaiting_approval'), 'success');
this.set('authenticate', null);

View File

@@ -37,9 +37,13 @@ class Users::OmniauthCallbacksController < ApplicationController
@data = authenticator.after_authenticate(auth)
@data.authenticator_name = authenticator.name
user_found(@data.user) if @data.user
session[:authentication] = @data.session_data
if @data.user
user_found(@data.user)
elsif SiteSetting.invite_only?
@data.requires_invite = true
else
session[:authentication] = @data.session_data
end
respond_to do |format|
format.html
@@ -87,7 +91,7 @@ class Users::OmniauthCallbacksController < ApplicationController
session[:authentication] = nil
@data.authenticated = true
else
if SiteSetting.invite_only?
if SiteSetting.must_approve_users? && !user.approved?
@data.awaiting_approval = true
else
@data.awaiting_activation = true

View File

@@ -8,6 +8,24 @@ InviteRedeemer = Struct.new(:invite) do
invited_user
end
# extracted from User cause it is very specific to invites
def self.create_user_for_email(email)
username = UserNameSuggester.suggest(email)
DiscourseHub.nickname_operation do
match, available, suggestion = DiscourseHub.nickname_match?(username, email)
username = suggestion unless match || available
end
user = User.new(email: email, username: username, name: username, active: true)
user.trust_level = SiteSetting.default_invitee_trust_level
user.save!
DiscourseHub.nickname_operation { DiscourseHub.register_nickname(username, email) }
user
end
private
def invited_user
@@ -34,7 +52,7 @@ InviteRedeemer = Struct.new(:invite) do
def get_invited_user
result = get_existing_user
result ||= create_new_user
result ||= InviteRedeemer.create_user_for_email(invite.email)
result.send_welcome_message = false
result
end
@@ -43,9 +61,6 @@ InviteRedeemer = Struct.new(:invite) do
User.where(email: invite.email).first
end
def create_new_user
User.create_for_email(invite.email, trust_level: SiteSetting.default_invitee_trust_level)
end
def add_to_private_topics_if_invited
invite.topics.private_messages.each do |t|

View File

@@ -96,23 +96,6 @@ class User < ActiveRecord::Base
user
end
def self.create_for_email(email, opts={})
username = UserNameSuggester.suggest(email)
discourse_hub_nickname_operation do
match, available, suggestion = DiscourseHub.nickname_match?(username, email)
username = suggestion unless match || available
end
user = User.new(email: email, username: username, name: username)
user.trust_level = opts[:trust_level] if opts[:trust_level].present?
user.save!
discourse_hub_nickname_operation { DiscourseHub.register_nickname(username, email) }
user
end
def self.suggest_name(email)
return "" unless email
name = email.split(/[@\+]/)[0]
@@ -154,7 +137,7 @@ class User < ActiveRecord::Base
self.username = new_username
if current_username.downcase != new_username.downcase && valid?
User.discourse_hub_nickname_operation { DiscourseHub.change_nickname(current_username, new_username) }
DiscourseHub.nickname_operation { DiscourseHub.change_nickname(current_username, new_username) }
end
save
@@ -612,17 +595,6 @@ class User < ActiveRecord::Base
private
def self.discourse_hub_nickname_operation
if SiteSetting.call_discourse_hub?
begin
yield
rescue DiscourseHub::NicknameUnavailable
false
rescue => e
Rails.logger.error e.message + "\n" + e.backtrace.join("\n")
end
end
end
end
# == Schema Information