Commit ba65f2910b1285217326028655de057a702572af

Authored by Jaakko Kantojärvi
1 parent 04186e97

Add option to disable username changing

This option allows to disable users from changing their username.

This is very usefull in environments using strong internal authentication methods like ldap, pam or shibboleth.

You can allow users to change theyr username in these environments, but then new users (users loging in first time) is blocked from gitlab is her username exists.
app/controllers/profiles_controller.rb
@@ -51,7 +51,9 @@ class ProfilesController < ApplicationController @@ -51,7 +51,9 @@ class ProfilesController < ApplicationController
51 end 51 end
52 52
53 def update_username 53 def update_username
54 - @user.update_attributes(username: params[:user][:username]) 54 + if @user.can_change_username?
  55 + @user.update_attributes(username: params[:user][:username])
  56 + end
55 57
56 respond_to do |format| 58 respond_to do |format|
57 format.js 59 format.js
app/models/user.rb
@@ -234,6 +234,10 @@ class User < ActiveRecord::Base @@ -234,6 +234,10 @@ class User < ActiveRecord::Base
234 keys.count == 0 234 keys.count == 0
235 end 235 end
236 236
  237 + def can_change_username?
  238 + Gitlab.config.gitlab.username_changing_enabled
  239 + end
  240 +
237 def can_create_project? 241 def can_create_project?
238 projects_limit > personal_projects.count 242 projects_limit > personal_projects.count
239 end 243 end
app/views/profiles/account.html.haml
@@ -53,29 +53,30 @@ @@ -53,29 +53,30 @@
53 53
54 54
55 55
56 -%fieldset.update-username  
57 - %legend  
58 - Username  
59 - %small.cred.pull-right  
60 - Changing your username can have unintended side effects!  
61 - = form_for @user, url: update_username_profile_path, method: :put, remote: true do |f|  
62 - .padded  
63 - = f.label :username  
64 - .input  
65 - = f.text_field :username, required: true  
66 -    
67 - %span.loading-gif.hide= image_tag "ajax_loader.gif"  
68 - %span.update-success.cgreen.hide  
69 - %i.icon-ok  
70 - Saved  
71 - %span.update-failed.cred.hide  
72 - %i.icon-remove  
73 - Failed  
74 - %ul.cred  
75 - %li It will change web url for personal projects.  
76 - %li It will change the git path to repositories for personal projects.  
77 - .input  
78 - = f.submit 'Save username', class: "btn btn-save" 56 +- if current_user.can_change_username?
  57 + %fieldset.update-username
  58 + %legend
  59 + Username
  60 + %small.cred.pull-right
  61 + Changing your username can have unintended side effects!
  62 + = form_for @user, url: update_username_profile_path, method: :put, remote: true do |f|
  63 + .padded
  64 + = f.label :username
  65 + .input
  66 + = f.text_field :username, required: true
  67 +  
  68 + %span.loading-gif.hide= image_tag "ajax_loader.gif"
  69 + %span.update-success.cgreen.hide
  70 + %i.icon-ok
  71 + Saved
  72 + %span.update-failed.cred.hide
  73 + %i.icon-remove
  74 + Failed
  75 + %ul.cred
  76 + %li It will change web url for personal projects.
  77 + %li It will change the git path to repositories for personal projects.
  78 + .input
  79 + = f.submit 'Save username', class: "btn btn-save"
79 80
80 - if Gitlab.config.gitlab.signup_enabled 81 - if Gitlab.config.gitlab.signup_enabled
81 %fieldset.remove-account 82 %fieldset.remove-account
@@ -83,4 +84,4 @@ @@ -83,4 +84,4 @@
83 Remove account 84 Remove account
84 %small.cred.pull-right 85 %small.cred.pull-right
85 Before removing the account you must remove all projects! 86 Before removing the account you must remove all projects!
86 - = link_to 'Delete account', user_registration_path, confirm: "REMOVE #{current_user.name}? Are you sure?", method: :delete, class: "btn btn-remove delete-key btn-small pull-right"  
87 \ No newline at end of file 87 \ No newline at end of file
  88 + = link_to 'Delete account', user_registration_path, confirm: "REMOVE #{current_user.name}? Are you sure?", method: :delete, class: "btn btn-remove delete-key btn-small pull-right"
config/gitlab.yml.example
@@ -35,6 +35,7 @@ production: &base @@ -35,6 +35,7 @@ production: &base
35 ## Project settings 35 ## Project settings
36 default_projects_limit: 10 36 default_projects_limit: 10
37 # signup_enabled: true # default: false - Account passwords are not sent via the email if signup is enabled. 37 # signup_enabled: true # default: false - Account passwords are not sent via the email if signup is enabled.
  38 + # username_changing_enabled: false # default: true - User can change her username/namespace
38 39
39 ## Gravatar 40 ## Gravatar
40 gravatar: 41 gravatar:
config/initializers/1_settings.rb
@@ -57,6 +57,7 @@ Settings.gitlab['support_email'] ||= Settings.gitlab.email_from @@ -57,6 +57,7 @@ Settings.gitlab['support_email'] ||= Settings.gitlab.email_from
57 Settings.gitlab['url'] ||= Settings.send(:build_gitlab_url) 57 Settings.gitlab['url'] ||= Settings.send(:build_gitlab_url)
58 Settings.gitlab['user'] ||= 'git' 58 Settings.gitlab['user'] ||= 'git'
59 Settings.gitlab['signup_enabled'] ||= false 59 Settings.gitlab['signup_enabled'] ||= false
  60 +Settings.gitlab['username_changing_enabled'] = true if Settings.gitlab['username_changing_enabled'].nil?
60 61
61 # 62 #
62 # Gravatar 63 # Gravatar