BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
0d9a6fe7
Commit
0d9a6fe7
authored
Mar 04, 2013
by
Andrew8xx8
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
User's blocked field refactored to use state machine
parent
9a06dd4a
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
39 additions
and
32 deletions
+39
-32
users_controller.rb
app/controllers/admin/users_controller.rb
+1
-1
application_controller.rb
app/controllers/application_controller.rb
+2
-2
user.rb
app/models/user.rb
+20
-14
_form.html.haml
app/views/admin/users/_form.html.haml
+1
-1
index.html.haml
app/views/admin/users/index.html.haml
+1
-1
show.html.haml
app/views/admin/users/show.html.haml
+1
-1
_team_member.html.haml
app/views/team_members/_team_member.html.haml
+1
-1
_show.html.haml
app/views/teams/members/_show.html.haml
+1
-1
schema.rb
db/schema.rb
+2
-3
entities.rb
lib/api/entities.rb
+2
-2
auth.rb
lib/gitlab/auth.rb
+4
-2
user_spec.rb
spec/models/user_spec.rb
+3
-3
No files found.
app/controllers/admin/users_controller.rb
View file @
0d9a6fe7
...
...
@@ -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"
...
...
app/controllers/application_controller.rb
View file @
0d9a6fe7
...
...
@@ -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
...
...
@@ -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
...
...
app/models/user.rb
View file @
0d9a6fe7
...
...
@@ -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)
...
...
@@ -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
,
->
{
w
here
(
blocked:
true
)
}
scope
:active
,
->
{
w
here
(
blocked:
fals
e
)
}
scope
:blocked
,
->
{
w
ith_state
(
:blocked
)
}
scope
:active
,
->
{
w
ith_state
(
:activ
e
)
}
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
)
}
...
...
@@ -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
...
...
app/views/admin/users/_form.html.haml
View file @
0d9a6fe7
...
...
@@ -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
...
...
app/views/admin/users/index.html.haml
View file @
0d9a6fe7
...
...
@@ -53,7 +53,7 @@
=
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"
...
...
app/views/admin/users/show.html.haml
View file @
0d9a6fe7
...
...
@@ -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)
...
...
app/views/team_members/_team_member.html.haml
View file @
0d9a6fe7
...
...
@@ -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
...
...
app/views/teams/members/_show.html.haml
View file @
0d9a6fe7
...
...
@@ -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
...
...
db/schema.rb
View file @
0d9a6fe7
...
...
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord
::
Schema
.
define
(
:version
=>
20130
220133245
)
do
ActiveRecord
::
Schema
.
define
(
:version
=>
20130
304105317
)
do
create_table
"events"
,
:force
=>
true
do
|
t
|
t
.
string
"target_type"
...
...
@@ -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"
...
...
@@ -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"
...
...
lib/api/entities.rb
View file @
0d9a6fe7
...
...
@@ -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
...
...
lib/gitlab/auth.rb
View file @
0d9a6fe7
...
...
@@ -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
.
block
ed
=
true
@user
.
block
end
@user
.
save!
@user
end
...
...
spec/models/user_spec.rb
View file @
0d9a6fe7
...
...
@@ -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)
...
...
@@ -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
...
...
@@ -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
]
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment