Commit 5f93b0e3 authored by Douwe Maan's avatar Douwe Maan

Don't allow username to end in period.

parent dfe0f9ee
...@@ -46,6 +46,8 @@ v 7.10.0 (unreleased) ...@@ -46,6 +46,8 @@ v 7.10.0 (unreleased)
- Refactor issue filtering - Refactor issue filtering
- AJAX selectbox for issue assignee and author filters - AJAX selectbox for issue assignee and author filters
- Fix issue with missing options in issue filtering dropdown if selected one - Fix issue with missing options in issue filtering dropdown if selected one
- Fix "Hello @username." references not working by no longer allowing usernames to end in period.
v 7.9.0 v 7.9.0
- Send EmailsOnPush email when branch or tag is created or deleted. - Send EmailsOnPush email when branch or tag is created or deleted.
......
...@@ -66,7 +66,7 @@ class Namespace < ActiveRecord::Base ...@@ -66,7 +66,7 @@ class Namespace < ActiveRecord::Base
path.gsub!(/@.*\z/, "") path.gsub!(/@.*\z/, "")
path.gsub!(/\.git\z/, "") path.gsub!(/\.git\z/, "")
path.gsub!(/\A-/, "") path.gsub!(/\A-/, "")
path.gsub!(/\z./, "") path.gsub!(/.\z/, "")
path.gsub!(/[^a-zA-Z0-9_\-\.]/, "") path.gsub!(/[^a-zA-Z0-9_\-\.]/, "")
counter = 0 counter = 0
......
class RemovePeriodsAtEndsOfUsernames < ActiveRecord::Migration
class Namespace < ActiveRecord::Base
class << self
def by_path(path)
where('lower(path) = :value', value: path.downcase).first
end
def clean_path(path)
path.gsub!(/@.*\z/, "")
path.gsub!(/\.git\z/, "")
path.gsub!(/\A-/, "")
path.gsub!(/.\z/, "")
path.gsub!(/[^a-zA-Z0-9_\-\.]/, "")
counter = 0
base = path
while Namespace.by_path(path).present?
counter += 1
path = "#{base}#{counter}"
end
path
end
end
end
def up
select_all("SELECT id, username FROM users WHERE username LIKE '%.'").each do |user|
username = quote_string(Namespace.clean_path(user["username"]))
execute "UPDATE users SET username = '#{username}' WHERE id = #{user["id"]}"
execute "UPDATE namespaces SET path = '#{username}', name = '#{username}' WHERE type = NULL AND owner_id = #{user["id"]}"
end
select_all("SELECT id, path FROM namespaces WHERE type = 'Group' AND path LIKE '%.'").each do |group|
path = quote_string(Namespace.clean_path(group["path"]))
execute "UPDATE namespaces SET path = '#{path}' WHERE id = #{group["id"]}"
end
end
end
...@@ -152,7 +152,7 @@ module Gitlab ...@@ -152,7 +152,7 @@ module Gitlab
text text
end end
NAME_STR = '[a-zA-Z0-9_][a-zA-Z0-9_\-\.]*' NAME_STR = Gitlab::Regex::NAMESPACE_REGEX_STR
PROJ_STR = "(?<project>#{NAME_STR}/#{NAME_STR})" PROJ_STR = "(?<project>#{NAME_STR}/#{NAME_STR})"
REFERENCE_PATTERN = %r{ REFERENCE_PATTERN = %r{
......
...@@ -2,13 +2,15 @@ module Gitlab ...@@ -2,13 +2,15 @@ module Gitlab
module Regex module Regex
extend self extend self
NAMESPACE_REGEX_STR = '(?:[a-zA-Z0-9_\.][a-zA-Z0-9_\-\.]*[a-zA-Z0-9_\-]|[a-zA-Z0-9_])'.freeze
def namespace_regex def namespace_regex
@namespace_regex ||= /\A[a-zA-Z0-9_.][a-zA-Z0-9_\-\.]*(?<!\.git)\z/.freeze @namespace_regex ||= /\A#{NAMESPACE_REGEX_STR}\z/.freeze
end end
def namespace_regex_message def namespace_regex_message
"can contain only letters, digits, '_', '-' and '.'. " \ "can contain only letters, digits, '_', '-' and '.'. " \
"Cannot start with '-' or end in '.git'" \ "Cannot start with '-' or end in '.'." \
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