diff --git a/app/models/namespace.rb b/app/models/namespace.rb index 4e6125e354a..5762bfc57cb 100644 --- a/app/models/namespace.rb +++ b/app/models/namespace.rb @@ -19,7 +19,7 @@ class Namespace < ActiveRecord::Base validates :name, presence: true, uniqueness: true validates :path, uniqueness: true, presence: true, length: { within: 1..255 }, - format: { with: /\A[a-zA-Z][a-zA-Z0-9_\-\.]*\z/, + format: { with: Gitlab::Regex.path_regex, message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" } validates :owner, presence: true diff --git a/app/models/project.rb b/app/models/project.rb index 7ddc55cd34c..262ca9f5f5c 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -59,7 +59,7 @@ class Project < ActiveRecord::Base validates :description, length: { within: 0..2000 } validates :name, presence: true, length: { within: 0..255 } validates :path, presence: true, length: { within: 0..255 }, - format: { with: /\A[a-zA-Z][a-zA-Z0-9_\-\.]*\z/, + format: { with: Gitlab::Regex.path_regex, message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" } validates :issues_enabled, :wall_enabled, :merge_requests_enabled, :wiki_enabled, inclusion: { in: [true, false] } diff --git a/app/models/user.rb b/app/models/user.rb index 4f749699fb8..43163404e85 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -41,8 +41,8 @@ class User < ActiveRecord::Base attr_accessible :email, :password, :password_confirmation, :remember_me, :bio, :name, :username, :skype, :linkedin, :twitter, :dark_scheme, :theme_id, :force_random_password, - :extern_uid, :provider, :as => [:default, :admin] - attr_accessible :projects_limit, :as => :admin + :extern_uid, :provider, as: [:default, :admin] + attr_accessible :projects_limit, as: :admin attr_accessor :force_random_password @@ -63,9 +63,12 @@ class User < ActiveRecord::Base has_many :assigned_merge_requests, class_name: "MergeRequest", foreign_key: :assignee_id, dependent: :destroy validates :bio, length: { within: 0..255 } - validates :extern_uid, :allow_blank => true, :uniqueness => {:scope => :provider} + validates :extern_uid, allow_blank: true, uniqueness: {scope: :provider} validates :projects_limit, presence: true, numericality: {greater_than_or_equal_to: 0} - validates :username, presence: true + validates :username, presence: true, uniqueness: true, + format: { with: Gitlab::Regex.username_regex, + message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" } + before_validation :generate_password, on: :create before_save :ensure_authentication_token diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml index 5ef94ef5f34..5d0f6fe1153 100644 --- a/app/views/admin/users/index.html.haml +++ b/app/views/admin/users/index.html.haml @@ -6,7 +6,7 @@ = form_tag admin_users_path, method: :get, class: 'form-inline' do = text_field_tag :name, params[:name], class: "xlarge" = submit_tag "Search", class: "btn submit primary" -%ul.nav.nav-pills +%ul.nav.nav-tabs %li{class: "#{'active' unless params[:filter]}"} = link_to "Active", admin_users_path %li{class: "#{'active' if params[:filter] == "admins"}"} @@ -23,24 +23,25 @@ %thead %th Admin %th Name + %th Username %th Email %th Projects %th Edit - %th Blocked %th.cred Danger Zone! - @admin_users.each do |user| %tr %td= check_box_tag "admin", 1, user.admin, disabled: :disabled %td= link_to user.name, [:admin, user] + %td= user.username %td= user.email %td= user.users_projects.count %td= link_to 'Edit', edit_admin_user_path(user), id: "edit_#{dom_id(user)}", class: "btn small" - %td + %td.bgred - if user.blocked = link_to 'Unblock', unblock_admin_user_path(user), method: :put, class: "btn small success" - else = link_to 'Block', block_admin_user_path(user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn small danger" - %td.bgred= link_to 'Destroy', [:admin, user], confirm: "USER #{user.name} WILL BE REMOVED! Are you sure?", method: :delete, class: "btn small danger" + = link_to 'Destroy', [:admin, user], confirm: "USER #{user.name} WILL BE REMOVED! Are you sure?", method: :delete, class: "btn small danger" = paginate @admin_users, theme: "admin" diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml index e73f4d10876..6a42f787bab 100644 --- a/app/views/admin/users/show.html.haml +++ b/app/views/admin/users/show.html.haml @@ -21,6 +21,12 @@ Email: %td = @admin_user.email + %tr + %td + %b + Username: + %td + = @admin_user.username %tr %td %b diff --git a/app/views/profile/account.html.haml b/app/views/profile/account.html.haml index 21a5f5a24be..e2c5bcdb8e2 100644 --- a/app/views/profile/account.html.haml +++ b/app/views/profile/account.html.haml @@ -42,11 +42,11 @@ .clearfix = f.label :password - .input= f.password_field :password + .input= f.password_field :password, required: true .clearfix = f.label :password_confirmation .input - = f.password_field :password_confirmation + = f.password_field :password_confirmation, required: true .clearfix .input = f.submit 'Save password', class: "btn save-btn" @@ -62,7 +62,7 @@ .padded = f.label :username .input - = f.text_field :username + = f.text_field :username, required: true .input = f.submit 'Save username', class: "btn save-btn" diff --git a/lib/gitlab/regex.rb b/lib/gitlab/regex.rb new file mode 100644 index 00000000000..a3f38b1c360 --- /dev/null +++ b/lib/gitlab/regex.rb @@ -0,0 +1,19 @@ +module Gitlab + module Regex + extend self + + def username_regex + default_regex + end + + def path_regex + default_regex + end + + protected + + def default_regex + /\A[a-zA-Z][a-zA-Z0-9_\-\.]*\z/ + end + end +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 824e8cfb73b..279e315b693 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -58,6 +58,7 @@ describe User do end describe 'validations' do + it { should validate_presence_of(:username) } it { should validate_presence_of(:projects_limit) } it { should validate_numericality_of(:projects_limit) } it { should allow_value(0).for(:projects_limit) }