Commit 7bb8bb85 authored by Stan Hu's avatar Stan Hu

Merge branch 'auth_hash_fix' into 'master'

Expand character set of usernames created by Omniauth

When a user is created by Omniauth, Gitlab tries to assign the username based on the information provided in the auth hash. If no nickname is present, it uses the part of the email address before the @. This portion of the email address is run through the `parameterize` method, presumably to convert Unicode characters to ASCII.

`parameterize` strips out a number of characters that are valid in usernames. For example, `john.doe` is a valid Gitlab username, but parameterize will turn this into `john-doe`.

Instead of `parameterize`, this merge request uses `normalize` to convert non-ascii characters. This allows all acceptable characters to be used when creating a username from an email address. 

See merge request !660
parents 0d5d1f0e d8b3c327
...@@ -62,7 +62,7 @@ module Gitlab ...@@ -62,7 +62,7 @@ module Gitlab
# Get the first part of the email address (before @) # Get the first part of the email address (before @)
# In addtion in removes illegal characters # In addtion in removes illegal characters
def generate_username(email) def generate_username(email)
email.match(/^[^@]*/)[0].parameterize email.match(/^[^@]*/)[0].mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/,'').to_s
end end
def generate_temporarily_email(username) def generate_temporarily_email(username)
......
...@@ -14,7 +14,7 @@ describe Gitlab::OAuth::AuthHash, lib: true do ...@@ -14,7 +14,7 @@ describe Gitlab::OAuth::AuthHash, lib: true do
let(:uid_raw) do let(:uid_raw) do
"CN=Onur K\xC3\xBC\xC3\xA7\xC3\xBCk,OU=Test,DC=example,DC=net" "CN=Onur K\xC3\xBC\xC3\xA7\xC3\xBCk,OU=Test,DC=example,DC=net"
end end
let(:email_raw) { "onur.k\xC3\xBC\xC3\xA7\xC3\xBCk@example.net" } let(:email_raw) { "onur.k\xC3\xBC\xC3\xA7\xC3\xBCk_ABC-123@example.net" }
let(:nickname_raw) { "ok\xC3\xBC\xC3\xA7\xC3\xBCk" } let(:nickname_raw) { "ok\xC3\xBC\xC3\xA7\xC3\xBCk" }
let(:first_name_raw) { 'Onur' } let(:first_name_raw) { 'Onur' }
let(:last_name_raw) { "K\xC3\xBC\xC3\xA7\xC3\xBCk" } let(:last_name_raw) { "K\xC3\xBC\xC3\xA7\xC3\xBCk" }
...@@ -66,7 +66,7 @@ describe Gitlab::OAuth::AuthHash, lib: true do ...@@ -66,7 +66,7 @@ describe Gitlab::OAuth::AuthHash, lib: true do
before { info_hash.delete(:nickname) } before { info_hash.delete(:nickname) }
it 'takes the first part of the email as username' do it 'takes the first part of the email as username' do
expect(auth_hash.username).to eql 'onur-kucuk' expect(auth_hash.username).to eql 'onur.kucuk_ABC-123'
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment