diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index 3075e7502f3d15aea43e9c1bc45692e281cfee93..185ad181b2a4366e77c438f3540a4a856cf6862a 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -29,7 +29,7 @@ class Admin::UsersController < Admin::ApplicationController def new - @admin_user = User.new({ projects_limit: Gitlab.config.gitlab.default_projects_limit }, as: :admin) + @admin_user = User.new.with_defaults end def edit diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb index 507a5c206c675ede0f0c517797cbc4d25b644343..194dfcd4122838a0a51b11e9e04781d5502b4daf 100644 --- a/app/controllers/registrations_controller.rb +++ b/app/controllers/registrations_controller.rb @@ -16,8 +16,7 @@ class RegistrationsController < Devise::RegistrationsController def build_resource(hash=nil) super - self.resource.projects_limit = Gitlab.config.gitlab.default_projects_limit - self.resource + self.resource.with_defaults end private diff --git a/app/models/user.rb b/app/models/user.rb index 55aa5b563c5685ec5955c7a782cfcebfff99c1c6..17da856992003ff3036ce59e809a389d6b971e10 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -196,6 +196,14 @@ class User < ActiveRecord::Base username end + def with_defaults + tap do |u| + u.projects_limit = Gitlab.config.gitlab.default_projects_limit + u.can_create_group = Gitlab.config.gitlab.default_can_create_group + u.can_create_team = Gitlab.config.gitlab.default_can_create_team + end + end + def notification @notification ||= Notification.new(self) end diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index 19b58bcc3718633716c403e2efc6c87ba1bd88d3..1910d766535dda354a040915c63ed6c1a4735688 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -34,7 +34,9 @@ production: &base ## Project settings default_projects_limit: 10 - # signup_enabled: true # default: false - Account passwords are not sent via the email if signup is enabled. + # default_can_create_group: false # default: true + # default_can_create_team: false # default: true + # signup_enabled: true # default: false - Account passwords are not sent via the email if signup is enabled. # username_changing_enabled: false # default: true - User can change her username/namespace ## Default project features settings diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index 27605efddfe4c8a9983fccca5004651bdbaefed7..f85b80f5b799364d8c64fdeac15c1dbf6efdaae9 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -48,7 +48,9 @@ Settings['issues_tracker'] ||= {} # GitLab # Settings['gitlab'] ||= Settingslogic.new({}) -Settings.gitlab['default_projects_limit'] ||= 10 +Settings.gitlab['default_projects_limit'] ||= 10 +Settings.gitlab['default_can_create_group'] = true if Settings.gitlab['default_can_create_group'].nil? +Settings.gitlab['default_can_create_team'] = true if Settings.gitlab['default_can_create_team'].nil? Settings.gitlab['host'] ||= 'localhost' Settings.gitlab['https'] = false if Settings.gitlab['https'].nil? Settings.gitlab['port'] ||= Settings.gitlab.https ? 443 : 80 @@ -111,3 +113,12 @@ Settings.satellites['path'] = File.expand_path(Settings.satellites['path'] || "t # Extra customization # Settings['extra'] ||= Settingslogic.new({}) + +# +# Testing settings +# +if Rails.env.test? + Settings.gitlab['default_projects_limit'] = 42 + Settings.gitlab['default_can_create_group'] = false + Settings.gitlab['default_can_create_team'] = false +end diff --git a/lib/gitlab/auth.rb b/lib/gitlab/auth.rb index 78d2196fbbe82c21305f90b09747dedbcca1f80e..94212bd544aead32f9b759ef2d7aa9d7814b3218 100644 --- a/lib/gitlab/auth.rb +++ b/lib/gitlab/auth.rb @@ -39,8 +39,7 @@ module Gitlab email: email, password: password, password_confirmation: password, - projects_limit: Gitlab.config.gitlab.default_projects_limit, - }, as: :admin) + }, as: :admin).with_defaults @user.save! if Gitlab.config.omniauth['block_auto_created_users'] && !ldap diff --git a/spec/features/admin/admin_users_spec.rb b/spec/features/admin/admin_users_spec.rb index a6cf5299791c4f1b9bb87bde5dbff586bbf504ba..bec43e5029ce498277deeccec00acb129e745fee 100644 --- a/spec/features/admin/admin_users_spec.rb +++ b/spec/features/admin/admin_users_spec.rb @@ -33,6 +33,14 @@ describe "Admin::Users" do expect { click_button "Create user" }.to change {User.count}.by(1) end + it "should apply defaults to user" do + click_button "Create user" + user = User.last + user.projects_limit.should == Gitlab.config.gitlab.default_projects_limit + user.can_create_group.should == Gitlab.config.gitlab.default_can_create_group + user.can_create_team.should == Gitlab.config.gitlab.default_can_create_team + end + it "should create user with valid data" do click_button "Create user" user = User.last diff --git a/spec/lib/auth_spec.rb b/spec/lib/auth_spec.rb index 1e03bc591b485b6a5a08eef89025478bfd3f6cf4..a7ce97554ea010d3944785634a5e003a6f40af72 100644 --- a/spec/lib/auth_spec.rb +++ b/spec/lib/auth_spec.rb @@ -91,5 +91,15 @@ describe Gitlab::Auth do user.extern_uid.should == @info.uid user.provider.should == 'twitter' end + + it "should apply defaults to user" do + @auth = mock(info: @info, provider: 'ldap') + user = gl_auth.create_from_omniauth(@auth, true) + + user.should be_valid + user.projects_limit.should == Gitlab.config.gitlab.default_projects_limit + user.can_create_group.should == Gitlab.config.gitlab.default_can_create_group + user.can_create_team.should == Gitlab.config.gitlab.default_can_create_team + end end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 380bbe7351f965072c9ac150ca371d7ee8cb612d..7559c4cc3a1b0621904ef4ec7c86ab3d9514d624 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -178,4 +178,22 @@ describe User do it { user.can_create_project?.should be_true } it { user.first_name.should == 'John' } end + + describe 'without defaults' do + let(:user) { User.new } + it "should not apply defaults to user" do + user.projects_limit.should == 10 + user.can_create_group.should == true + user.can_create_team.should == true + end + end + + describe 'with defaults' do + let(:user) { User.new.with_defaults } + it "should apply defaults to user" do + user.projects_limit.should == 42 + user.can_create_group.should == false + user.can_create_team.should == false + end + end end