Skip to content
Snippets Groups Projects
Commit 0d9a6fe7 authored by Andrew8xx8's avatar Andrew8xx8
Browse files

User's blocked field refactored to use state machine

parent 9a06dd4a
No related branches found
No related tags found
1 merge request!3143State machine 3
Loading
Loading
@@ -45,7 +45,7 @@ class Admin::UsersController < Admin::ApplicationController
end
 
def unblock
if admin_user.update_attribute(:blocked, false)
if admin_user.activate
redirect_to :back, alert: "Successfully unblocked"
else
redirect_to :back, alert: "Error occured. User was not unblocked"
Loading
Loading
Loading
Loading
@@ -30,7 +30,7 @@ class ApplicationController < ActionController::Base
end
 
def reject_blocked!
if current_user && current_user.blocked
if current_user && current_user.blocked?
sign_out current_user
flash[:alert] = "Your account is blocked. Retry when an admin unblock it."
redirect_to new_user_session_path
Loading
Loading
@@ -38,7 +38,7 @@ class ApplicationController < ActionController::Base
end
 
def after_sign_in_path_for resource
if resource.is_a?(User) && resource.respond_to?(:blocked) && resource.blocked
if resource.is_a?(User) && resource.respond_to?(:blocked?) && resource.blocked?
sign_out resource
flash[:alert] = "Your account is blocked. Retry when an admin unblock it."
new_user_session_path
Loading
Loading
Loading
Loading
@@ -25,7 +25,7 @@
# dark_scheme :boolean default(FALSE), not null
# theme_id :integer default(1), not null
# bio :string(255)
# blocked :boolean default(FALSE), not null
# state :string(255)
# failed_attempts :integer default(0)
# locked_at :datetime
# extern_uid :string(255)
Loading
Loading
@@ -87,10 +87,27 @@ class User < ActiveRecord::Base
 
delegate :path, to: :namespace, allow_nil: true, prefix: true
 
state_machine :state, initial: :active do
after_transition any => :blocked do |user, transition|
# Remove user from all projects and
user.users_projects.find_each do |membership|
return false unless membership.destroy
end
end
event :block do
transition active: :blocked
end
event :activate do
transition blocked: :active
end
end
# Scopes
scope :admins, -> { where(admin: true) }
scope :blocked, -> { where(blocked: true) }
scope :active, -> { where(blocked: false) }
scope :blocked, -> { with_state(:blocked) }
scope :active, -> { with_state(:active) }
scope :alphabetically, -> { order('name ASC') }
scope :in_team, ->(team){ where(id: team.member_ids) }
scope :not_in_team, ->(team){ where('users.id NOT IN (:ids)', ids: team.member_ids) }
Loading
Loading
@@ -260,17 +277,6 @@ class User < ActiveRecord::Base
MergeRequest.cared(self)
end
 
# Remove user from all projects and
# set blocked attribute to true
def block
users_projects.find_each do |membership|
return false unless membership.destroy
end
self.blocked = true
save
end
def projects_limit_percent
return 100 if projects_limit.zero?
(personal_projects.count.to_f / projects_limit) * 100
Loading
Loading
Loading
Loading
@@ -61,7 +61,7 @@
.span4
- unless @admin_user.new_record?
.alert.alert-error
- if @admin_user.blocked
- if @admin_user.blocked?
%p This user is blocked and is not able to login to GitLab
= link_to 'Unblock User', unblock_admin_user_path(@admin_user), method: :put, class: "btn btn-small"
- else
Loading
Loading
Loading
Loading
@@ -53,7 +53,7 @@
&nbsp;
= link_to 'Edit', edit_admin_user_path(user), id: "edit_#{dom_id(user)}", class: "btn btn-small"
- unless user == current_user
- if user.blocked
- if user.blocked?
= link_to 'Unblock', unblock_admin_user_path(user), method: :put, class: "btn btn-small success"
- else
= link_to 'Block', block_admin_user_path(user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn btn-small btn-remove"
Loading
Loading
Loading
Loading
@@ -3,7 +3,7 @@
%h3.page_title
= image_tag gravatar_icon(@admin_user.email, 90), class: "avatar s90"
= @admin_user.name
- if @admin_user.blocked
- if @admin_user.blocked?
%span.cred (Blocked)
- if @admin_user.admin
%span.cred (Admin)
Loading
Loading
Loading
Loading
@@ -20,7 +20,7 @@
%span.label This is you!
- if @project.namespace_owner == user
%span.label Owner
- elsif user.blocked
- elsif user.blocked?
%span.label Blocked
- elsif allow_admin
= link_to project_team_member_path(@project, user), confirm: remove_from_project_team_message(@project, user), method: :delete, class: "btn-tiny btn btn-remove" do
Loading
Loading
Loading
Loading
@@ -23,7 +23,7 @@
%span.btn.disabled This is you!
- if @team.owner == user
%span.btn.disabled Owner
- elsif user.blocked
- elsif user.blocked?
%span.btn.disabled.blocked Blocked
- elsif allow_admin
= link_to team_member_path(@team, user), confirm: remove_from_user_team_message(@team, user), method: :delete, class: "btn-tiny btn btn-remove", title: "Remove from team" do
Loading
Loading
Loading
Loading
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
 
ActiveRecord::Schema.define(:version => 20130220133245) do
ActiveRecord::Schema.define(:version => 20130304105317) do
 
create_table "events", :force => true do |t|
t.string "target_type"
Loading
Loading
@@ -261,7 +261,6 @@ ActiveRecord::Schema.define(:version => 20130220133245) do
t.boolean "dark_scheme", :default => false, :null => false
t.integer "theme_id", :default => 1, :null => false
t.string "bio"
t.boolean "blocked", :default => false, :null => false
t.integer "failed_attempts", :default => 0
t.datetime "locked_at"
t.string "extern_uid"
Loading
Loading
@@ -269,10 +268,10 @@ ActiveRecord::Schema.define(:version => 20130220133245) do
t.string "username"
t.boolean "can_create_group", :default => true, :null => false
t.boolean "can_create_team", :default => true, :null => false
t.string "state"
end
 
add_index "users", ["admin"], :name => "index_users_on_admin"
add_index "users", ["blocked"], :name => "index_users_on_blocked"
add_index "users", ["email"], :name => "index_users_on_email", :unique => true
add_index "users", ["extern_uid", "provider"], :name => "index_users_on_extern_uid_and_provider", :unique => true
add_index "users", ["name"], :name => "index_users_on_name"
Loading
Loading
Loading
Loading
@@ -2,11 +2,11 @@ module Gitlab
module Entities
class User < Grape::Entity
expose :id, :username, :email, :name, :bio, :skype, :linkedin, :twitter,
:dark_scheme, :theme_id, :blocked, :created_at, :extern_uid, :provider
:dark_scheme, :theme_id, :state, :created_at, :extern_uid, :provider
end
 
class UserBasic < Grape::Entity
expose :id, :username, :email, :name, :blocked, :created_at
expose :id, :username, :email, :name, :state, :created_at
end
 
class UserLogin < UserBasic
Loading
Loading
Loading
Loading
@@ -41,10 +41,12 @@ module Gitlab
password_confirmation: password,
projects_limit: Gitlab.config.gitlab.default_projects_limit,
}, as: :admin)
@user.save!
if Gitlab.config.omniauth['block_auto_created_users'] && !ldap
@user.blocked = true
@user.block
end
@user.save!
@user
end
 
Loading
Loading
Loading
Loading
@@ -25,7 +25,7 @@
# dark_scheme :boolean default(FALSE), not null
# theme_id :integer default(1), not null
# bio :string(255)
# blocked :boolean default(FALSE), not null
# state :string(255) default(FALSE), not null
# failed_attempts :integer default(0)
# locked_at :datetime
# extern_uid :string(255)
Loading
Loading
@@ -140,7 +140,7 @@ describe User do
 
it "should block user" do
user.block
user.blocked.should be_true
user.blocked?.should be_true
end
end
 
Loading
Loading
@@ -149,7 +149,7 @@ describe User do
User.delete_all
@user = create :user
@admin = create :user, admin: true
@blocked = create :user, blocked: true
@blocked = create :user, state: :blocked
end
 
it { User.filter("admins").should == [@admin] }
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment