Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
b14210fd
Commit
b14210fd
authored
May 27, 2021
by
Małgorzata Ksionek
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add new username validation
Changelog: security
parent
55bedf39
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
25 additions
and
2 deletions
+25
-2
app/models/user.rb
app/models/user.rb
+7
-0
locale/gitlab.pot
locale/gitlab.pot
+3
-0
spec/models/user_spec.rb
spec/models/user_spec.rb
+13
-0
spec/requests/api/projects_spec.rb
spec/requests/api/projects_spec.rb
+1
-1
spec/requests/api/users_spec.rb
spec/requests/api/users_spec.rb
+1
-1
No files found.
app/models/user.rb
View file @
b14210fd
...
...
@@ -235,6 +235,7 @@ class User < ApplicationRecord
validate
:owns_commit_email
,
if: :commit_email_changed?
validate
:signup_domain_valid?
,
on: :create
,
if:
->
(
user
)
{
!
user
.
created_by_id
}
validate
:check_email_restrictions
,
on: :create
,
if:
->
(
user
)
{
!
user
.
created_by_id
}
validate
:check_username_format
,
if: :username_changed?
validates
:theme_id
,
allow_nil:
true
,
inclusion:
{
in:
Gitlab
::
Themes
.
valid_ids
,
message:
_
(
"%{placeholder} is not a valid theme"
)
%
{
placeholder:
'%{value}'
}
}
...
...
@@ -2075,6 +2076,12 @@ class User < ApplicationRecord
end
end
def
check_username_format
return
if
username
.
blank?
||
Mime
::
EXTENSION_LOOKUP
.
keys
.
none?
{
|
type
|
username
.
end_with?
(
type
)
}
errors
.
add
(
:username
,
_
(
'ending with MIME type format is not allowed.'
))
end
def
groups_with_developer_maintainer_project_access
project_creation_levels
=
[
::
Gitlab
::
Access
::
DEVELOPER_MAINTAINER_PROJECT_ACCESS
]
...
...
locale/gitlab.pot
View file @
b14210fd
...
...
@@ -38416,6 +38416,9 @@ msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
msgid "ending with MIME type format is not allowed."
msgstr ""
msgid "entries cannot be larger than 255 characters"
msgstr ""
...
...
spec/models/user_spec.rb
View file @
b14210fd
...
...
@@ -387,6 +387,19 @@ RSpec.describe User do
expect
(
user
.
errors
.
full_messages
).
to
eq
([
'Username has already been taken'
])
end
end
it
'validates format'
do
Mime
::
EXTENSION_LOOKUP
.
keys
.
each
do
|
type
|
user
=
build
(
:user
,
username:
"test.
#{
type
}
"
)
expect
(
user
).
not_to
be_valid
expect
(
user
.
errors
.
full_messages
).
to
include
(
'Username ending with MIME type format is not allowed.'
)
end
end
it
'validates format on updated record'
do
expect
(
create
(
:user
).
update
(
username:
'profile.html'
)).
to
be_falsey
end
end
it
'has a DB-level NOT NULL constraint on projects_limit'
do
...
...
spec/requests/api/projects_spec.rb
View file @
b14210fd
...
...
@@ -56,7 +56,7 @@ RSpec.describe API::Projects do
let_it_be
(
:project
,
reload:
true
)
{
create
(
:project
,
:repository
,
create_branch:
'something_else'
,
namespace:
user
.
namespace
)
}
let_it_be
(
:project2
,
reload:
true
)
{
create
(
:project
,
namespace:
user
.
namespace
)
}
let_it_be
(
:project_member
)
{
create
(
:project_member
,
:developer
,
user:
user3
,
project:
project
)
}
let_it_be
(
:user4
)
{
create
(
:user
,
username:
'user.with
.
dot'
)
}
let_it_be
(
:user4
)
{
create
(
:user
,
username:
'user.withdot'
)
}
let_it_be
(
:project3
,
reload:
true
)
do
create
(
:project
,
:private
,
...
...
spec/requests/api/users_spec.rb
View file @
b14210fd
...
...
@@ -4,7 +4,7 @@ require 'spec_helper'
RSpec
.
describe
API
::
Users
do
let_it_be
(
:admin
)
{
create
(
:admin
)
}
let_it_be
(
:user
,
reload:
true
)
{
create
(
:user
,
username:
'user.with
.
dot'
)
}
let_it_be
(
:user
,
reload:
true
)
{
create
(
:user
,
username:
'user.withdot'
)
}
let_it_be
(
:key
)
{
create
(
:key
,
user:
user
)
}
let_it_be
(
:gpg_key
)
{
create
(
:gpg_key
,
user:
user
)
}
let_it_be
(
:email
)
{
create
(
:email
,
user:
user
)
}
...
...
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