diff --git a/app/controllers/api/v1/omniauth_callbacks_controller.rb b/app/controllers/api/v1/omniauth_callbacks_controller.rb
index 1618c47331..8f4d16aab1 100644
--- a/app/controllers/api/v1/omniauth_callbacks_controller.rb
+++ b/app/controllers/api/v1/omniauth_callbacks_controller.rb
@@ -1,7 +1,6 @@
module Api
module V1
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
- include TwitterAuthentication
include FacebookAuthentication
include SlackAuthentication
include GoogleAuthentication
@@ -21,7 +20,6 @@ def failure
end
def setup
- setup_twitter if request.env['omniauth.strategy'].is_a?(OmniAuth::Strategies::Twitter)
setup_facebook if request.env['omniauth.strategy'].is_a?(OmniAuth::Strategies::Facebook)
render plain: 'Setup complete.', status: 404
end
diff --git a/app/controllers/api/v1/registrations_controller.rb b/app/controllers/api/v1/registrations_controller.rb
deleted file mode 100644
index 4ceefa72a5..0000000000
--- a/app/controllers/api/v1/registrations_controller.rb
+++ /dev/null
@@ -1,80 +0,0 @@
-class Api::V1::RegistrationsController < Devise::RegistrationsController
- before_action :configure_sign_up_params, only: [:create]
- before_action :configure_account_update_params, only: [:update]
-
- respond_to :json
-
- include RegistrationsDoc
-
- # POST /resource
- def create
- # super
- build_resource(sign_up_params)
-
- begin
- duplicate_user = User.get_duplicate_user(resource.email, [])[:user]
- user = resource
- error = [
- {
- message: I18n.t(:email_exists)
- }
- ]
- if !duplicate_user.nil? && duplicate_user.invited_to_sign_up?
- duplicate_user.last_accepted_terms_at = Time.now
- duplicate_user.save!
- else
- resource.last_accepted_terms_at = Time.now
- resource.save!
- end
-
- render_success user, 'user', 401, error
- rescue ActiveRecord::RecordInvalid => e
- # Check if the error is specifically related to the email being taken
- if resource.errors.details[:email].any? { |email_error| email_error[:error] == :taken } && resource.errors.details.except(:email).empty?
- render_success nil, 'user', 401, error
- else
- # For other errors, show the error message in the form
- clean_up_passwords resource
- set_minimum_password_length
- render_error e.message.gsub("Email #{I18n.t(:email_exists)}
", '').strip, 'INVALID_VALUE', 401
- end
- end
- end
-
- # PUT /resource
- def update
- # super
- self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
-
- resource_updated = update_resource(resource, account_update_params)
- User.current = resource
-
- if resource_updated
- sign_in resource, scope: resource_name, bypass_sign_in: true
- render_success 'user', resource
- else
- clean_up_passwords resource
- render_error 'Could not update user: ' + resource.errors.full_messages.join(', '), 'INVALID_VALUE'
- end
- end
-
- # DELETE /resource
- def destroy
- # super
- resource.destroy
- Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
- render_success
- end
-
- protected
-
- # If you have extra params to permit, append them to the sanitizer.
- def configure_sign_up_params
- devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :login, :password, :password_confirmation, :image])
- end
-
- # If you have extra params to permit, append them to the sanitizer.
- def configure_account_update_params
- devise_parameter_sanitizer.permit(:account_update, keys: [:name, :password, :password_confirmation, :current_password])
- end
-end
diff --git a/app/controllers/concerns/twitter_authentication.rb b/app/controllers/concerns/twitter_authentication.rb
deleted file mode 100644
index a8d1cd0af8..0000000000
--- a/app/controllers/concerns/twitter_authentication.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-module TwitterAuthentication
- extend ActiveSupport::Concern
-
- def setup_twitter
- prefix = params[:context].to_s == 'smooch' ? 'smooch_' : ''
- request.env['omniauth.strategy'].options[:consumer_key] = CheckConfig.get("#{prefix}twitter_consumer_key")
- request.env['omniauth.strategy'].options[:consumer_secret] = CheckConfig.get("#{prefix}twitter_consumer_secret")
- end
-
- # OAuth callback
- def twitter
- request.env['omniauth.auth']['url'] = 'https://twitter.com/' + request.env['omniauth.auth'].info.nickname
- start_session_and_redirect
- end
-end
diff --git a/app/mailers/registration_mailer.rb b/app/mailers/registration_mailer.rb
deleted file mode 100644
index 7c03b947cf..0000000000
--- a/app/mailers/registration_mailer.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-class RegistrationMailer < ApplicationMailer
- layout nil
-
- def welcome_email(user, password=nil)
- @user = user
- @user.password ||= password
- @url = CheckConfig.get('checkdesk_client')
- mail(to: @user.email, subject: I18n.t("mails_notifications.register.subject", app_name: CheckConfig.get('app_name'))) unless @user.email.blank?
- end
-
- def duplicate_email_detection(user, provider)
- @user = user
- @duplicate_provider = provider.blank? ? I18n.t("mails_notifications.duplicated.email") : provider
- @user_provider = user.encrypted_password? ? I18n.t("mails_notifications.duplicated.email") : user.get_user_provider(user.email)
- @body_key = (provider.blank? && user.encrypted_password?) ? "both_emails" : "one_email"
- mail(to: @user.email, subject: I18n.t("mails_notifications.duplicated.subject", app_name: CheckConfig.get('app_name'))) unless @user.email.blank?
- end
-
-end
diff --git a/app/models/concerns/user_invitation.rb b/app/models/concerns/user_invitation.rb
index 55c7b152e8..3b9c755273 100644
--- a/app/models/concerns/user_invitation.rb
+++ b/app/models/concerns/user_invitation.rb
@@ -21,7 +21,7 @@ def self.send_user_invitation(members, text=nil)
user = User.invite!({:email => email, :name => email.split("@").first, :invitation_role => role, :invitation_text => text}, User.current) do |iu|
iu.skip_invitation = true
end
- user.update_column(:raw_invitation_token, user.raw_invitation_token)
+ user.update_columns(raw_invitation_token: user.raw_invitation_token, encrypted_password: nil)
else
u.invitation_role = role
u.invitation_text = text
@@ -110,17 +110,20 @@ def is_invited?(team = nil)
private
def create_team_user_invitation(options = {})
- tu = TeamUser.new
- tu.user_id = self.id
- tu.team_id = Team.current.id
- tu.role = self.invitation_role
- tu.status = 'invited'
- tu.invited_by_id = self.invited_by_id
- tu.invited_by_id ||= User.current.id unless User.current.nil?
- tu.invitation_token = self.invitation_token || options[:enc]
- tu.raw_invitation_token = self.read_attribute(:raw_invitation_token) || self.raw_invitation_token || options[:raw]
- tu.invitation_email = options[:email] || self.email
- self.send_invitation_mail(tu) if tu.save!
+ team_id = Team.current&.id
+ unless team_id.nil?
+ tu = TeamUser.new
+ tu.user_id = self.id
+ tu.team_id = team_id
+ tu.role = self.invitation_role
+ tu.status = 'invited'
+ tu.invited_by_id = self.invited_by_id
+ tu.invited_by_id ||= User.current.id unless User.current.nil?
+ tu.invitation_token = self.invitation_token || options[:enc]
+ tu.raw_invitation_token = self.read_attribute(:raw_invitation_token) || self.raw_invitation_token || options[:raw]
+ tu.invitation_email = options[:email] || self.email
+ self.send_invitation_mail(tu) if tu.save!
+ end
end
def self.accept_team_user_invitation(tu, token, options)
diff --git a/app/models/concerns/user_multi_auth_login.rb b/app/models/concerns/user_multi_auth_login.rb
index 146d8283de..393e2c42eb 100644
--- a/app/models/concerns/user_multi_auth_login.rb
+++ b/app/models/concerns/user_multi_auth_login.rb
@@ -15,7 +15,8 @@ def self.from_omniauth(auth, current_user=nil)
duplicate_user.accept_invitation_or_confirm unless duplicate_user.nil?
u = self.check_merge_users(u, current_user, duplicate_user)
u ||= current_user
- user = self.create_omniauth_user(u, auth)
+ raise I18n.t('errors.messages.restrict_registration_to_invited_users_only') if u.nil?
+ user = self.update_omniauth_user(u, auth)
User.create_omniauth_account(auth, user) unless auth.url.blank? || auth.provider.blank?
user.reload
end
@@ -39,11 +40,11 @@ def self.check_merge_users(u, current_user, duplicate_user)
u
end
- def self.create_omniauth_user(u, auth)
- user = u.nil? ? User.new : u
+ def self.update_omniauth_user(u, auth)
+ user = u
user.email = user.email.presence || auth.info.email
user.name = user.name.presence || auth.info.name
- user.login = auth.info.nickname || auth.info.name.tr(' ', '-').downcase
+ user.login = auth.info.nickname.blank? ? auth.info.name.tr(' ', '-').downcase : auth.info.nickname
user.from_omniauth_login = true
user.skip_confirmation!
user.last_accepted_terms_at = Time.now if user.last_accepted_terms_at.nil?
diff --git a/app/models/concerns/user_private.rb b/app/models/concerns/user_private.rb
index c48d1d8b99..f5962c0cfc 100644
--- a/app/models/concerns/user_private.rb
+++ b/app/models/concerns/user_private.rb
@@ -25,18 +25,7 @@ def set_token
end
def set_login
- if self.login.blank?
- if self.email.blank?
- self.login = self.name.tr(' ', '-').downcase
- else
- self.login = self.email.split('@')[0]
- end
- end
- end
-
- def send_welcome_email
- config_value = JSON.parse(CheckConfig.get('send_welcome_email_on_registration').to_s)
- RegistrationMailer.delay.welcome_email(self) if self.encrypted_password? && config_value && !self.is_invited?
+ self.login = self.email.split('@')[0] if self.login.blank?
end
def user_is_member_in_current_team
@@ -53,7 +42,10 @@ def validate_duplicate_email
duplicate = User.get_duplicate_user(self.email, self.id)
unless duplicate[:user].nil?
errors.add(:email, I18n.t(:email_exists)) if duplicate[:type] == 'Account'
- handle_duplicate_email(duplicate[:user])
+ unless duplicate[:user].is_active?
+ self.errors.clear
+ errors.add(:base, I18n.t(:banned_user, app_name: CheckConfig.get('app_name'), support_email: CheckConfig.get('support_email')))
+ end
return false
end
end
@@ -63,16 +55,6 @@ def password_complexity
errors.add :password, I18n.t(:error_password_not_strong)
end
- def handle_duplicate_email(u)
- if u.is_active?
- provider = u.get_user_provider(self.email)
- RegistrationMailer.delay.duplicate_email_detection(self, provider) if self.new_record?
- else
- self.errors.clear
- errors.add(:base, I18n.t(:banned_user, app_name: CheckConfig.get('app_name'), support_email: CheckConfig.get('support_email')))
- end
- end
-
def skip_confirmation_for_non_email_provider
self.skip_confirmation! if self.from_omniauth_login && self.skip_confirmation_mail.nil?
end
diff --git a/app/models/user.rb b/app/models/user.rb
index 26366dc48d..5a67fcb38c 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -30,12 +30,11 @@ class ToSOrPrivacyPolicyReadError < StandardError; end
has_many :api_keys
has_many :explainers
- devise :registerable,
- :recoverable, :rememberable, :trackable, :validatable, :confirmable,
+ devise :recoverable, :rememberable, :trackable, :validatable, :confirmable,
:omniauthable, omniauth_providers: [:twitter, :facebook, :slack, :google_oauth2]
before_create :skip_confirmation_for_non_email_provider, :set_last_received_terms_email_at
- after_create :create_source_and_account, :set_source_image, :send_welcome_email
+ after_create :create_source_and_account, :set_source_image
before_save :set_token, :set_login
after_update :set_blank_email_for_unconfirmed_user
before_destroy :freeze_account_ids_and_source_id
@@ -174,23 +173,9 @@ def is_member_of?(team)
end
def handle
- self.email.blank? ? get_provider_from_user_account : self.email
- end
-
- def get_provider_from_user_account
- account = self.get_social_accounts_for_login
- account = account.first unless account.nil?
- return nil if account.nil?
- provider = account.provider.capitalize
- if !account.omniauth_info.nil?
- if account.provider == 'slack'
- provider = account.omniauth_info.dig('extra', 'raw_info', 'url')
- else
- provider = account.omniauth_info.dig('url')
- return provider if !provider.nil?
- end
- end
- "#{self.login} at #{provider}"
+ # As we must invite users first then the email must exists
+ # which means the handle is email address
+ self.email
end
# Whether two users are members of any same team
diff --git a/app/views/registration_mailer/duplicate_email_detection.html.erb b/app/views/registration_mailer/duplicate_email_detection.html.erb
deleted file mode 100644
index 1c089ce856..0000000000
--- a/app/views/registration_mailer/duplicate_email_detection.html.erb
+++ /dev/null
@@ -1,93 +0,0 @@
-<%= render "shared/header" %>
-
-
-
-
-
-
-
-
-
-
-
-
-
- <%= I18n.t("mails_notifications.greeting_anonymous") %>
-
-
-
-
-
-
- <%=
- I18n.t("mails_notifications.duplicated.#{@body_key}", user_email: @user.email, user_provider: @user_provider, duplicate_provider: @duplicate_provider, app_name: CheckConfig.get('app_name'), support_email: CheckConfig.get('support_email')).html_safe
- %>
-
-
-
-
-
-
-
-
-
-
-
-
-<%= render "shared/footer" %>
diff --git a/app/views/registration_mailer/duplicate_email_detection.text.erb b/app/views/registration_mailer/duplicate_email_detection.text.erb
deleted file mode 100644
index ce4bdbe6ae..0000000000
--- a/app/views/registration_mailer/duplicate_email_detection.text.erb
+++ /dev/null
@@ -1,14 +0,0 @@
-<%= I18n.t("mails_notifications.greeting_anonymous") %>
-
-==========================================
-<%= I18n.t("mails_notifications.duplicated.header_title") %>
-==========================================
-
-<%=
- strip_tags I18n.t("mails_notifications.duplicated.#{@body_key}", user_email: @user.email, user_provider: @user_provider, duplicate_provider: @duplicate_provider, app_name: CheckConfig.get('app_name'), support_email: CheckConfig.get('support_email')).html_safe
-%>
-
-...
-
-<%= strip_tags I18n.t("mails_notifications.copyright_html", app_name: CheckConfig.get('app_name')) %>
-https://meedan.com
diff --git a/app/views/registration_mailer/welcome_email.html.erb b/app/views/registration_mailer/welcome_email.html.erb
deleted file mode 100644
index 4a49c640eb..0000000000
--- a/app/views/registration_mailer/welcome_email.html.erb
+++ /dev/null
@@ -1,133 +0,0 @@
-<%= render "shared/header" %>
-
-
-
-
-
-
-
-
-
-
-
-
-
- <%= I18n.t("mails_notifications.greeting", username: @user.name) %>
-
-
-
-
-
-
- <%=
- I18n.t("mails_notifications.register.header_text", app_name: CheckConfig.get('app_name'), url: @url, password: @user.password).html_safe
- %>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- |
-
- <%=
- link_to(I18n.t("mails_notifications.register.login_button", app_name: CheckConfig.get('app_name')), @url,
- :style => "text-decoration: none !important;color: #fff !important;"
- )
- %>
-
- |
-
- <%= image_tag("https://images.ctfassets.net/g118h5yoccvd/#{@direction[:arrow]}", width: "7", alt: "arrow-icon", style: "-ms-interpolation-mode: bicubic; border: 0 none; height: auto; line-height: 100%; outline: none; text-decoration: none;") %>
- |
-
-
- |
-
-
-
-
-
-
-
- <%= t("mails_notifications.register.footer_text") %>
-
-
-
-
-
-
-
-
-<%= render "shared/footer" %>
diff --git a/app/views/registration_mailer/welcome_email.text.erb b/app/views/registration_mailer/welcome_email.text.erb
deleted file mode 100644
index 2f0ba25b24..0000000000
--- a/app/views/registration_mailer/welcome_email.text.erb
+++ /dev/null
@@ -1,19 +0,0 @@
-<%= I18n.t("mails_notifications.greeting", username: @user.name) %>
-
-==========================================
-<%= I18n.t(:mail_view_welcome, app_name: CheckConfig.get('app_name')) %>
-==========================================
-
-<%=
- strip_tags I18n.t("mails_notifications.register.header_text", app_name: CheckConfig.get('app_name'), url: @url, password: @user.password)
-%>
-
-<%= I18n.t("mails_notifications.register.login_button", app_name: CheckConfig.get('app_name')) %>
-<%= @url %>
-
-<%= t("mails_notifications.register.footer_text") %>
-
-...
-
-<%= strip_tags I18n.t("mails_notifications.copyright_html", app_name: CheckConfig.get('app_name')) %>
-https://meedan.com
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 0cca7eb910..34d967b424 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -113,6 +113,7 @@ en:
invalid_feed_saved_search_value: Should belong to a workspace that is part of this feed.
invalid_feed_saved_search_list_type: The saved search list type is invalid.
platform_allowed_values_error: 'cannot be of type %{type}, allowed types: %{allowed_types}'
+ restrict_registration_to_invited_users_only: 'Looks like you don’t have an invitation yet. Please request one from your workspace.'
activerecord:
models:
link: Link
diff --git a/config/routes.rb b/config/routes.rb
index a790b10c50..682ae2d413 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -34,7 +34,7 @@
match '/admin/smooch_bot/:id/authorize/instagram' => 'admin#save_instagram_credentials_for_smooch_bot', via: [:get]
match '/project_medias/:id/oembed' => 'project_medias#oembed', via: [:get], defaults: { format: :json }
match '/webhooks/:name' => 'webhooks#index', via: [:post, :get], defaults: { format: :json }
- devise_for :users, controllers: { invitations: 'api/v1/invitations', sessions: 'api/v1/sessions', registrations: 'api/v1/registrations', omniauth_callbacks: 'api/v1/omniauth_callbacks', confirmations: 'api/v1/confirmations' }
+ devise_for :users, controllers: { invitations: 'api/v1/invitations', sessions: 'api/v1/sessions', omniauth_callbacks: 'api/v1/omniauth_callbacks', confirmations: 'api/v1/confirmations' }
devise_scope :api_user do
get '/users/logout', to: 'omniauth_callbacks#logout'
get '/users/auth/twitter/setup' => 'omniauth_callbacks#setup'
diff --git a/lib/sample_data.rb b/lib/sample_data.rb
index 6f5a9ad1d7..5e8ec926bd 100644
--- a/lib/sample_data.rb
+++ b/lib/sample_data.rb
@@ -139,7 +139,20 @@ def create_user(options = {})
u.reload
end
+ def invite_new_user(options = {})
+ email = options.has_key?(:email) ? options[:email] : "#{random_string}@#{random_string}.com"
+ name = options.has_key?(:name) ? options[:name] : random_string
+ user = User.invite!(email: email, name: name) do |u|
+ u.skip_invitation = true
+ end
+ user.update_column(:encrypted_password, nil)
+ user
+ end
+
def create_omniauth_user(options = {})
+ # Invite user first
+ options[:email] ||= "#{random_string}@#{random_string}.com"
+ invite_new_user(options)
u_current = User.current
url = if options.has_key?(:url)
options[:url]
@@ -154,11 +167,11 @@ def create_omniauth_user(options = {})
end
options[:uid] = options[:uuid] if options.has_key?(:uuid)
auth = {}
- provider = options.has_key?(:provider) ? options[:provider] : %w(twitter facebook).sample
- email = options.has_key?(:email) ? options[:email] : "#{random_string}@#{random_string}.com"
+ provider = options.has_key?(:provider) ? options[:provider] : %w(google slack).sample
auth[:uid] = options.has_key?(:uid) ? options[:uid] : random_string
auth[:url] = url
- auth[:info] = options.has_key?(:info) ? options[:info] : {name: random_string, email: email}
+ options[:info][:email] = options[:email] if options.has_key?(:info) && options[:info][:email].nil?
+ auth[:info] = options.has_key?(:info) ? options[:info] : {name: random_string, email: options[:email]}
auth[:credentials] = options.has_key?(:credentials) ? options[:credentials] : {token: random_string, secret: random_string}
auth[:extra] = options.has_key?(:extra) ? options[:extra] : {}
current_user = options.has_key?(:current_user) ? options[:current_user] : nil
diff --git a/test/controllers/base_api_controller_test.rb b/test/controllers/base_api_controller_test.rb
index 3991da0b19..10b9989765 100644
--- a/test/controllers/base_api_controller_test.rb
+++ b/test/controllers/base_api_controller_test.rb
@@ -41,23 +41,23 @@ def setup
end
test "should get current user from session" do
- u = create_omniauth_user info: {name: 'Test User'}
+ u = create_omniauth_user email: 'test@local.com', info: {name: 'Test User'}
authenticate_with_user(u)
get :me, params: {}
assert_response :success
response = JSON.parse(@response.body)
- assert_equal 'Test User', response['data']['name']
+ assert_equal 'test@local.com', response['data']['email']
assert_equal 'session', response['data']['source']
end
test "should get current user from token" do
- u = create_omniauth_user info: {name: 'Test User'}
+ u = create_omniauth_user email: 'test@local.com', info: { name: 'Test User', email: 'test@local.com' }
header = CheckConfig.get('authorization_header') || 'X-Token'
@request.headers.merge!({ header => u.token })
get :me, params: {}
assert_response :success
response = JSON.parse(@response.body)
- assert_equal 'Test User', response['data']['name']
+ assert_equal 'test@local.com', response['data']['email']
assert_equal 'token', response['data']['source']
end
diff --git a/test/controllers/omniauth_callbacks_controller_test.rb b/test/controllers/omniauth_callbacks_controller_test.rb
index 56165f4b89..fb7e6365d1 100644
--- a/test/controllers/omniauth_callbacks_controller_test.rb
+++ b/test/controllers/omniauth_callbacks_controller_test.rb
@@ -5,19 +5,6 @@ def setup
super
@controller = Api::V1::OmniauthCallbacksController.new
OmniAuth.config.test_mode = true
- OmniAuth.config.mock_auth[:twitter] = OmniAuth::AuthHash.new({
- provider: 'twitter',
- uid: '654321',
- info: {
- name: 'Test',
- image: 'http://twitter.com/test/image.png',
- nickname: 'test'
- },
- credentials: {
- token: '123456',
- secret: 'top_secret'
- }
- })
OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new({
provider: 'facebook',
uid: '654321',
@@ -77,8 +64,11 @@ def setup
secret: 'top_secret'
}
})
+ [{email: 'test@test.com', name: 'Test'}, {email: 'sawy@meedan.com', name: 'Mohamed El-Sawy'}].each do |info|
+ invite_new_user info
+ end
request.env['devise.mapping'] = Devise.mappings[:api_user]
- ['https://twitter.com/test', 'https://facebook.com/654321', 'https://www.googleapis.com/plus/v1/people/654321'].each do |url|
+ ['https://facebook.com/654321', 'https://www.googleapis.com/plus/v1/people/654321'].each do |url|
WebMock.stub_request(:get, CheckConfig.get('pender_url_private') + '/api/medias').with({ query: { url: url } }).to_return(body: '{"type":"media","data":{"type":"profile"}}')
end
User.current = nil
@@ -89,25 +79,6 @@ def teardown
User.current = nil
end
- test "should redirect to root after Twitter authentication" do
- request.env['omniauth.auth'] = OmniAuth.config.mock_auth[:twitter]
- get :twitter, params: {}
- assert_redirected_to '/close.html'
- end
-
- test "should set information in session after Twitter authentication" do
- request.env['omniauth.auth'] = OmniAuth.config.mock_auth[:twitter]
- assert_nil session['checkdesk.user']
- get :twitter, params: {}
- assert_not_nil session['checkdesk.current_user_id']
- end
-
- test "should redirect to destination after Twitter authentication" do
- request.env['omniauth.auth'] = OmniAuth.config.mock_auth[:twitter]
- get :twitter, params: { destination: '/close.html' }
- assert_redirected_to '/close.html'
- end
-
test "should set information in session after Facebook authentication" do
request.env['omniauth.auth'] = OmniAuth.config.mock_auth[:facebook]
assert_nil session['checkdesk.user']
@@ -190,12 +161,11 @@ def teardown
end
test "should connect when current user set" do
- p1 = random_complex_password
- u = create_user login: 'test', password: p1, password_confirmation: p1, email: 'test@test.com'
+ u = User.where(email: 'test@test.com').first
u.confirm
authenticate_with_user(u)
- request.env['omniauth.auth'] = OmniAuth.config.mock_auth[:twitter]
- get :twitter, params: {}
+ request.env['omniauth.auth'] = OmniAuth.config.mock_auth[:facebook]
+ get :facebook, params: {}
u = User.find(u.id)
assert_equal 1, u.source.accounts.count
end
@@ -219,12 +189,6 @@ def teardown
assert_redirected_to '/close.html'
end
- test "should setup Twitter authentication" do
- request.env['omniauth.strategy'] = OmniAuth::Strategies::Twitter.new({})
- get :setup, params: {}
- assert_response 404
- end
-
test "should setup Facebook authentication" do
request.env['omniauth.strategy'] = OmniAuth::Strategies::Facebook.new({})
get :setup, params: {}
diff --git a/test/controllers/registrations_controller_test.rb b/test/controllers/registrations_controller_test.rb
deleted file mode 100644
index 46ca89c0bf..0000000000
--- a/test/controllers/registrations_controller_test.rb
+++ /dev/null
@@ -1,167 +0,0 @@
-require_relative '../test_helper'
-
-class RegistrationsControllerTest < ActionController::TestCase
- def setup
- super
- @controller = Api::V1::RegistrationsController.new
- @request.env["devise.mapping"] = Devise.mappings[:api_user]
- User.current = nil
- Team.current = nil
- end
-
- def teardown
- super
- User.current = nil
- Team.current = nil
- end
-
- test "should create user" do
- p1 = random_complex_password
- assert_difference 'User.count' do
- post :create, params: { api_user: { password: p1, password_confirmation: p1, email: 't@test.com', login: 'test', name: 'Test' } }
- assert_response 401 # needs to confirm before login
- end
- end
-
- test "should create user if invited" do
- t = create_team
- u = create_user
- email = 'test@local.com'
- create_team_user team: t, user: u, role: 'admin'
- with_current_user_and_team(u, t) do
- members = [{role: 'collaborator', email: email}]
- User.send_user_invitation(members)
- end
- User.current = Team.current = nil
- p1 = random_complex_password
- assert_no_difference 'User.count' do
- post :create, params: { api_user: { password: p1, password_confirmation: p1, email: email, login: 'test', name: 'Test' } }
- assert_response 401
- end
- end
-
- test "should create user if confirmed" do
- p1 = random_complex_password
- User.any_instance.stubs(:confirmation_required?).returns(false)
- assert_difference 'User.count' do
- post :create, params: { api_user: { password: p1, password_confirmation: p1, email: 't@test.com', login: 'test', name: 'Test' } }
- assert_response 401
- end
- User.any_instance.unstub(:confirmation_required?)
- end
-
- test "should not create user if password is missing" do
- p1 = random_complex_password
- assert_no_difference 'User.count' do
- post :create, params: { api_user: { password_confirmation: p1, email: 't@test.com', login: 'test', name: 'Test' } }
- assert_response 401
- end
- end
-
- test "should not create user if password is too short" do
- p1 = '1234'
- assert_no_difference 'User.count' do
- post :create, params: { api_user: { password: p1, password_confirmation: p1, email: 't@test.com', login: 'test', name: 'Test' } }
- assert_response 401
- end
- end
-
- test "should not create user if password don't match" do
- p1 = random_complex_password
- assert_no_difference 'User.count' do
- post :create, params: { api_user: { password: random_complex_password, password_confirmation: random_complex_password, email: 't@test.com', login: 'test', name: 'Test' } }
- assert_response 401
- end
- end
-
- test "should not create user if email is not present" do
- p1 = random_complex_password
- assert_no_difference 'User.count' do
- post :create, params: { api_user: { password: p1, password_confirmation: p1, email: '', login: 'test', name: 'Test' } }
- assert_response 401
- end
- end
-
- test "should create user if login is not present" do
- p1 = random_complex_password
- assert_difference 'User.count' do
- post :create, params: { api_user: { password: p1, password_confirmation: p1, email: 't@test.com', login: '', name: 'Test' } }
- assert_response 401 # needs to confirm before login
- end
- end
-
- test "should not create user if name is not present" do
- p1 = random_complex_password
- assert_no_difference 'User.count' do
- post :create, params: { api_user: { password: p1, password_confirmation: p1, email: 't@test.com', login: 'test', name: '' } }
- assert_response 401
- end
- end
-
- test "should update only a few attributes" do
- p1 = random_complex_password
- u = create_user name: 'Foo', login: 'test', token: 'test', email: 'foo@test.com', password: p1
- authenticate_with_user(u)
- post :update, params: { api_user: { name: 'Bar', login: 'bar', token: 'bar', email: 'bar@test.com', current_password: p1 } }
- assert_response :success
- u = u.reload
- assert_equal 'Bar', u.name
- assert_equal 'test', u.login
- assert_equal 'test', u.token
- assert_empty u.email
- assert_equal 'bar@test.com', u.unconfirmed_email
- end
-
- test "should not update account if not logged in" do
- p1 = random_complex_password
- post :update, params: { api_user: { name: 'Bar', login: 'bar', token: 'bar', email: 'bar@test.com', current_password: p1 } }
- assert_response 401
- end
-
- test "should not update account" do
- p1 = random_complex_password
- u = create_user name: 'Foo', login: 'test', token: 'test', email: 'foo@test.com', password: p1
- authenticate_with_user(u)
- post :update, params: { api_user: { name: 'Bar', login: 'bar', token: 'bar', email: 'bar@test.com', current_password: p1, password: '123', password_confirmation: '123' } }
- assert_response 400
- u = u.reload
- end
-
- test "should destroy account" do
- p1 = random_complex_password
- u = create_user name: 'Foo', login: 'test', token: 'test', email: 'foo@test.com', password: p1
- authenticate_with_user(u)
- assert_difference 'User.count', -1 do
- delete :destroy, params: {}
- end
- assert_response :success
- end
-
- test "should not destroy account if not logged in" do
- assert_no_difference 'User.count' do
- delete :destroy, params: {}
- end
- assert_response 401
- end
-
- test "should return generic response in case of error when registering using an existing email" do
- existing_user = create_user(email: 'existing@test.com')
- p1 = random_complex_password
-
- assert_no_difference 'User.count' do
- post :create, params: { api_user: { password: p1, password_confirmation: p1, email: existing_user.email, login: 'test', name: 'Test' } }
- assert_response 401
- assert_equal 'Please check your email. If an account with that email doesn’t exist, you should have received a confirmation email. If you don’t receive a confirmation e-mail, try to reset your password or get in touch with our support.', response.parsed_body.dig("errors", 0, "message")
- end
- end
-
- test "should return generic response when registering with non-existing email" do
- p1 = random_complex_password
-
- assert_difference 'User.count', 1 do
- post :create, params: { api_user: { password: p1, password_confirmation: p1, email: 'non_existing@test.com', login: 'test', name: 'Test' } }
- assert_response 401
- assert_equal 'Please check your email. If an account with that email doesn’t exist, you should have received a confirmation email. If you don’t receive a confirmation e-mail, try to reset your password or get in touch with our support.', response.parsed_body.dig("errors", 0, "message")
- end
- end
-end
diff --git a/test/mailers/registration_mailer_test.rb b/test/mailers/registration_mailer_test.rb
deleted file mode 100644
index 0e7a2bb7df..0000000000
--- a/test/mailers/registration_mailer_test.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-require_relative '../test_helper'
-
-class RegistrationMailerTest < ActionMailer::TestCase
-
- test "should send welcome email" do
- u = create_user email: 'test@localhost', password: 'testA@12'
- email = RegistrationMailer.welcome_email(u)
-
- assert_emails 1 do
- email.deliver_now
- end
-
- assert_match email.from.first, CheckConfig.get('default_mail')
- assert_equal ['test@localhost'], email.to
- assert_match /testA@12/, email.body.parts.first.to_s
- end
-
- test "should send email for mail duplicate" do
- u = create_user email: 'test@localhost'
- email = RegistrationMailer.duplicate_email_detection(u, u)
- assert_emails 1 do
- email.deliver_now
- end
- assert_match email.from.first, CheckConfig.get('default_mail')
- assert_equal ['test@localhost'], email.to
- end
-
-end
diff --git a/test/models/user_test.rb b/test/models/user_test.rb
index cb8233a8ce..0c3a8eeb11 100644
--- a/test/models/user_test.rb
+++ b/test/models/user_test.rb
@@ -72,21 +72,13 @@ def setup
test "should not require password if there is a provider" do
assert_nothing_raised do
- create_omniauth_user password: '', provider: 'twitter'
+ create_omniauth_user password: '', provider: 'slack'
end
assert_raises ActiveRecord::RecordInvalid do
create_user password: ''
end
end
- test "should not require email for omniauth user" do
- u = nil
- assert_nothing_raised do
- u = create_omniauth_user email: ''
- end
- assert_equal '', u.reload.email
- end
-
test "should output json" do
u = create_user
assert_nothing_raised do
@@ -157,8 +149,8 @@ def setup
end
test "should set login from name" do
- info = {login: '', nickname: '', name: 'Foo Bar'}
- u = create_omniauth_user provider: 'facebook', info: info, email: ''
+ info = {login: '', nickname: '', name: 'Foo Bar', email: 'test@local.com'}
+ u = create_omniauth_user provider: 'facebook', info: info, email: 'test@local.com'
assert_equal 'foo-bar', u.reload.login
end
@@ -167,35 +159,6 @@ def setup
assert_equal 'foobar', u.reload.login
end
- test "should send welcome email when user is created" do
- stub_configs({ 'send_welcome_email_on_registration' => true }) do
- assert_difference 'ActionMailer::Base.deliveries.size', 1 do
- create_user skip_confirmation: true
- end
- assert_no_difference 'ActionMailer::Base.deliveries.size' do
- create_omniauth_user provider: 'twitter', password: nil
- create_omniauth_user provider: 'facebook', password: nil
- end
- end
-
- stub_configs({ 'send_welcome_email_on_registration' => false }) do
- assert_no_difference 'ActionMailer::Base.deliveries.size' do
- create_user skip_confirmation: true
- create_omniauth_user provider: 'twitter'
- create_omniauth_user provider: 'facebook'
- end
- end
- end
-
- test "should send email when user email is duplicate" do
- u = create_omniauth_user provider: 'facebook'
- assert_difference 'ActionMailer::Base.deliveries.size', 1 do
- assert_raises ActiveRecord::RecordInvalid do
- create_user email: u.email
- end
- end
- end
-
test "should not add duplicate mail" do
u = create_user
create_account user: u, source: u.source, provider: 'slack', email: 'test@local.com'
@@ -381,7 +344,7 @@ def setup
test "should not crash when creating user account" do
Account.any_instance.stubs(:save).raises(Errno::ECONNREFUSED)
assert_nothing_raised do
- create_omniauth_user url: 'http://twitter.com/meedan', provider: 'twitter'
+ create_omniauth_user url: 'http://slack.com/meedan', provider: 'slack'
end
Account.any_instance.unstub(:save)
end
@@ -461,13 +424,10 @@ def setup
test "should get handle" do
u = create_user email: 'user@email.com'
assert_equal 'user@email.com', u.handle
- u = create_omniauth_user provider: 'facebook', email: '', url: 'https://facebook.com/10157109339765023'
- assert_equal 'https://facebook.com/10157109339765023', u.handle
- end
-
- test "should get handle for Slack" do
- u = create_omniauth_user provider: 'slack', email: '', info: { name: 'caiosba' }, extra: { 'raw_info' => { 'url' => 'https://meedan.slack.com' } }
- assert_equal 'caiosba at https://meedan.slack.com', u.handle
+ u = create_omniauth_user provider: 'facebook', email: 'test@local.com', url: 'https://facebook.com/10157109339765023'
+ assert_equal 'test@local.com', u.handle
+ u = create_omniauth_user provider: 'slack', email: 'test2@local.com', info: { name: 'caiosba' }, extra: { 'raw_info' => { 'url' => 'https://meedan.slack.com' } }
+ assert_equal 'test2@local.com', u.handle
end
test "should return whether two users are colleagues in a team" do
@@ -487,14 +447,14 @@ def setup
end
test "should require confirmation for e-mail accounts only" do
- u = create_omniauth_user provider: 'twitter'
+ u = create_omniauth_user provider: 'slack'
assert !u.send(:confirmation_required?)
u = create_user confirm: false
assert u.send(:confirmation_required?)
end
test "should require confirmation after update email" do
- u = create_omniauth_user provider: 'twitter'
+ u = create_omniauth_user provider: 'slack'
assert u.is_confirmed?
u = create_user email: 'foo@bar.com', confirm: false
assert_not u.is_confirmed?
@@ -574,18 +534,6 @@ def setup
assert_equal '654321', a.reload.uid
end
- test "should not update Facebook id if email not set" do
- u1 = create_omniauth_user provider: 'facebook', uid: '123456', email: ''
- u2 = create_omniauth_user provider: 'facebook', uid: '456789', email: ''
- a1 = u1.get_social_accounts_for_login({provider: 'facebook', uid: '123456'}).first
- a2 = u2.get_social_accounts_for_login({provider: 'facebook', uid: '456789'}).first
- assert_equal '123456', a1.uid
- assert_equal '456789', a2.uid
- User.update_facebook_uuid(OpenStruct.new({ provider: 'facebook',url: a1.url, uid: '456789', info: OpenStruct.new({ email: '' })}))
- assert_equal '123456', a1.reload.uid
- assert_equal '456789', a2.reload.uid
- end
-
test "should save valid languages" do
u = create_user
value = ["en"]
@@ -658,6 +606,7 @@ def setup
auth = OpenStruct.new({ url: url, provider: 'facebook', uid: '1062518227129764', credentials: credentials, info: info})
Account.any_instance.stubs(:save).returns(false)
assert_difference 'User.count' do
+ invite_new_user email: 'user@fb.com', name: 'John'
User.from_omniauth(auth)
end
u = User.find_by_email 'user@fb.com'
@@ -720,11 +669,11 @@ def setup
end
test "should set source image when call user from omniauth" do
- u = create_omniauth_user provider: 'twitter', uid: '12345'
+ u = create_omniauth_user provider: 'slack', uid: '12345'
assert_match /images\/user.png/, u.source.avatar
credentials = OpenStruct.new({ token: '1234', secret: 'secret'})
info = OpenStruct.new({ email: 'user@fb.com', name: 'John', image: 'picture.png' })
- auth = OpenStruct.new({ provider: 'twitter', uid: '12345', credentials: credentials, info: info, url: random_url})
+ auth = OpenStruct.new({ provider: 'slack', uid: '12345', credentials: credentials, info: info, url: random_url})
omniauth_info = {"info"=> { "image"=>"https://avatars.slack-edge.com/2016-08-30/74454572532_7b40a563ce751e1c1d50_192.jpg"} }
Account.any_instance.stubs(:omniauth_info).returns(omniauth_info)
User.from_omniauth(auth)
@@ -1025,20 +974,6 @@ def setup
assert_not_empty result.errors
end
- test "should not send welcome email for invited user" do
- t = create_team
- u = create_user
- create_team_user team: t, user: u, role: 'admin'
- stub_configs({ 'send_welcome_email_on_registration' => true }) do
- with_current_user_and_team(u, t) do
- assert_difference 'ActionMailer::Base.deliveries.size', 1 do
- members = [{role: 'collaborator', email: 'test1@local.com'}]
- User.send_user_invitation(members)
- end
- end
- end
- end
-
test "should send invitation using invitation email not primary email" do
t = create_team
u = create_user email: 'primary@local.com'
@@ -1089,14 +1024,14 @@ def setup
u = create_user
assert_no_difference 'User.count' do
assert_difference 'Account.count', 1 do
- create_omniauth_user provider: 'twitter', uid: '123456', current_user: u
+ create_omniauth_user provider: 'slack', uid: '123456', current_user: u
end
end
end
test "should get user through omniauth info" do
- u = create_omniauth_user uid: '123456', provider: 'twitter'
- assert_equal u, User.find_with_omniauth('123456', 'twitter')
+ u = create_omniauth_user uid: '123456', provider: 'slack'
+ assert_equal u, User.find_with_omniauth('123456', 'slack')
end
test "should get user through token" do
@@ -1105,7 +1040,7 @@ def setup
end
test "should get social accounts for login" do
- u = create_omniauth_user provider: 'twitter'
+ u = create_omniauth_user provider: 'slack'
a = create_account source: u.source, user: u, provider: 'facebook'
a2 = create_account source: u.source, user: u, uid: ''
assert_equal 2, u.get_social_accounts_for_login.count
@@ -1115,14 +1050,13 @@ def setup
end
test "should get user accounts and providers" do
- u = create_omniauth_user provider: 'twitter'
+ u = create_omniauth_user provider: 'facebook'
s = u.source
omniauth_info = {"info"=> { "name" => "test" } }
create_account source: s, user: u, provider: 'slack', uid: '123456', omniauth_info: omniauth_info
create_account source: s, user: u, provider: 'slack', uid: '987654', omniauth_info: omniauth_info
assert_equal 3, u.get_social_accounts_for_login.count
- assert_equal 0, u.get_social_accounts_for_login({provider: 'facebook'}).count
- assert_equal 1, u.get_social_accounts_for_login({provider: 'twitter'}).count
+ assert_equal 1, u.get_social_accounts_for_login({provider: 'facebook'}).count
assert_equal 2, u.get_social_accounts_for_login({provider: 'slack'}).count
assert_equal 1, u.get_social_accounts_for_login({provider: 'slack', uid: '123456'}).count
providers = u.providers
@@ -1137,8 +1071,8 @@ def setup
end
test "should disconnect social account" do
- u = create_omniauth_user provider: 'twitter', uid: '123456'
- u.disconnect_login_account('twitter', '123456')
+ u = create_omniauth_user provider: 'slack', uid: '123456'
+ u.disconnect_login_account('slack', '123456')
assert_equal 0, u.get_social_accounts_for_login.count
u2 = create_omniauth_user provider: 'slack', uid: '456789'
a = u2.get_social_accounts_for_login({provider: 'slack', uid: '456789'}).first
@@ -1163,30 +1097,17 @@ def setup
create_omniauth_user email: u.email
end
end
- u = create_omniauth_user provider: 'twitter', email: '', uid: '123456'
- u2 = create_omniauth_user provider: 'facebook', email: 'test@local.com'
- tu = create_team_user user: u2
- pm = create_project_media user: u2
- s2_id = u2.source.id
- u2_id = u2.id
- u3 = create_omniauth_user provider: 'twitter', uid: '123456', email: 'test@local.com'
- assert_equal u.id, u3.id
+ u = create_omniauth_user provider: 'google', email: 'test@local.com', uid: '123456'
+ u2 = create_omniauth_user provider: 'slack', email: 'test@local.com', uid: '456789'
+ assert_equal u.id, u2.id
accounts = u.source.accounts
assert_equal 2, accounts.count
- assert_equal ['facebook', 'twitter'].sort, accounts.map(&:provider).sort
- assert_equal u.id, pm.reload.user_id
- assert_equal u.id, tu.reload.user_id
- assert_raises ActiveRecord::RecordNotFound do
- User.find(u2_id)
- end
- assert_raises ActiveRecord::RecordNotFound do
- Source.find(s2_id)
- end
+ assert_equal ['google', 'slack'].sort, accounts.map(&:provider).sort
end
test "should keep higher role when merge accounts in same team" do
t = create_team
- u = create_omniauth_user provider: 'twitter', email: 'test@local.com'
+ u = create_omniauth_user provider: 'slack', email: 'test@local.com'
u2 = create_omniauth_user provider: 'facebook', email: 'test2@local.com'
create_team_user team: t, user: u, role: 'collaborator'
create_team_user team: t, user: u2, role: 'editor'
@@ -1197,18 +1118,18 @@ def setup
end
test "should merge two existing accounts" do
- u = create_omniauth_user provider: 'twitter', email: '', uid: '123456'
- u2 = create_omniauth_user provider: 'twitter', email: '', uid: '345678'
+ u = create_omniauth_user provider: 'facebook', email: 'test@local.com', uid: '123456'
+ u2 = create_omniauth_user provider: 'facebook', email: 'test2@local.com', uid: '345678'
assert_no_difference 'User.count' do
- create_omniauth_user provider: 'twitter', email: 'test_a@local.com', uid: '123456'
+ create_omniauth_user provider: 'facebook', email: 'test_a@local.com', uid: '123456'
end
- create_omniauth_user provider: 'twitter', email: 'test_b@local.com', uid: '345678', current_user: u
+ create_omniauth_user provider: 'facebook', email: 'test_b@local.com', uid: '345678', current_user: u
assert_equal 2, u.source.accounts.count
assert_raises ActiveRecord::RecordNotFound do
User.find(u2.id)
end
# test connect with same provider
- create_omniauth_user provider: 'twitter', email: 'test_a@local.com', uid: '123456', current_user: u
+ create_omniauth_user provider: 'facebook', email: 'test_a@local.com', uid: '123456', current_user: u
end
test "should merge two users with same source" do
| |