Commit 40753029 authored by Matija Čupić's avatar Matija Čupić

Merge branch 'master' into 38175-add-domain-field-to-auto-devops-application-setting

parents cc209519 a00aed74
...@@ -12,9 +12,9 @@ import ShortcutsIssuable from './shortcuts_issuable'; ...@@ -12,9 +12,9 @@ import ShortcutsIssuable from './shortcuts_issuable';
import Diff from './diff'; import Diff from './diff';
import SearchAutocomplete from './search_autocomplete'; import SearchAutocomplete from './search_autocomplete';
(function() { var Dispatcher;
var Dispatcher;
(function() {
Dispatcher = (function() { Dispatcher = (function() {
function Dispatcher() { function Dispatcher() {
this.initSearch(); this.initSearch();
...@@ -49,46 +49,16 @@ import SearchAutocomplete from './search_autocomplete'; ...@@ -49,46 +49,16 @@ import SearchAutocomplete from './search_autocomplete';
}); });
switch (page) { switch (page) {
case 'sessions:new':
import('./pages/sessions/new')
.then(callDefault)
.catch(fail);
break;
case 'projects:boards:show':
case 'projects:boards:index':
import('./pages/projects/boards/index')
.then(callDefault)
.catch(fail);
shortcut_handler = true;
break;
case 'projects:environments:metrics': case 'projects:environments:metrics':
import('./pages/projects/environments/metrics') import('./pages/projects/environments/metrics')
.then(callDefault) .then(callDefault)
.catch(fail); .catch(fail);
break; break;
case 'projects:merge_requests:index': case 'projects:merge_requests:index':
import('./pages/projects/merge_requests/index')
.then(callDefault)
.catch(fail);
shortcut_handler = true;
break;
case 'projects:issues:index': case 'projects:issues:index':
import('./pages/projects/issues/index')
.then(callDefault)
.catch(fail);
shortcut_handler = true;
break;
case 'projects:issues:show': case 'projects:issues:show':
import('./pages/projects/issues/show')
.then(callDefault)
.catch(fail);
shortcut_handler = true; shortcut_handler = true;
break; break;
case 'dashboard:milestones:index':
import('./pages/dashboard/milestones/index')
.then(callDefault)
.catch(fail);
break;
case 'projects:milestones:index': case 'projects:milestones:index':
import('./pages/projects/milestones/index') import('./pages/projects/milestones/index')
.then(callDefault) .then(callDefault)
...@@ -318,9 +288,6 @@ import SearchAutocomplete from './search_autocomplete'; ...@@ -318,9 +288,6 @@ import SearchAutocomplete from './search_autocomplete';
shortcut_handler = true; shortcut_handler = true;
break; break;
case 'projects:show': case 'projects:show':
import('./pages/projects/show')
.then(callDefault)
.catch(fail);
shortcut_handler = true; shortcut_handler = true;
break; break;
case 'projects:edit': case 'projects:edit':
...@@ -352,9 +319,6 @@ import SearchAutocomplete from './search_autocomplete'; ...@@ -352,9 +319,6 @@ import SearchAutocomplete from './search_autocomplete';
.catch(fail); .catch(fail);
break; break;
case 'groups:show': case 'groups:show':
import('./pages/groups/show')
.then(callDefault)
.catch(fail);
shortcut_handler = true; shortcut_handler = true;
break; break;
case 'groups:group_members:index': case 'groups:group_members:index':
...@@ -363,7 +327,7 @@ import SearchAutocomplete from './search_autocomplete'; ...@@ -363,7 +327,7 @@ import SearchAutocomplete from './search_autocomplete';
.catch(fail); .catch(fail);
break; break;
case 'projects:project_members:index': case 'projects:project_members:index':
import('./pages/projects/project_members/') import('./pages/projects/project_members')
.then(callDefault) .then(callDefault)
.catch(fail); .catch(fail);
break; break;
...@@ -605,7 +569,7 @@ import SearchAutocomplete from './search_autocomplete'; ...@@ -605,7 +569,7 @@ import SearchAutocomplete from './search_autocomplete';
} }
break; break;
case 'profiles': case 'profiles':
import('./pages/profiles/index/') import('./pages/profiles/index')
.then(callDefault) .then(callDefault)
.catch(fail); .catch(fail);
break; break;
...@@ -662,8 +626,8 @@ import SearchAutocomplete from './search_autocomplete'; ...@@ -662,8 +626,8 @@ import SearchAutocomplete from './search_autocomplete';
return Dispatcher; return Dispatcher;
})(); })();
})();
$(window).on('load', function() { export default function initDispatcher() {
new Dispatcher(); return new Dispatcher();
}); }
}).call(window);
...@@ -461,7 +461,7 @@ class GfmAutoComplete { ...@@ -461,7 +461,7 @@ class GfmAutoComplete {
const accentAChar = decodeURI('%C3%80'); const accentAChar = decodeURI('%C3%80');
const accentYChar = decodeURI('%C3%BF'); const accentYChar = decodeURI('%C3%BF');
const regexp = new RegExp(`^(?:\\B|[^a-zA-Z0-9_${atSymbolsWithoutBar}]|\\s)${resultantFlag}(?!${atSymbolsWithBar})((?:[A-Za-z${accentAChar}-${accentYChar}0-9_'.+-]|[^\\x00-\\x7a])*)$`, 'gi'); const regexp = new RegExp(`^(?:\\B|[^a-zA-Z0-9_\`${atSymbolsWithoutBar}]|\\s)${resultantFlag}(?!${atSymbolsWithBar})((?:[A-Za-z${accentAChar}-${accentYChar}0-9_'.+-]|[^\\x00-\\x7a])*)$`, 'gi');
return regexp.exec(targetSubtext); return regexp.exec(targetSubtext);
} }
......
...@@ -33,7 +33,7 @@ import './projects_dropdown'; ...@@ -33,7 +33,7 @@ import './projects_dropdown';
import './render_gfm'; import './render_gfm';
import initBreadcrumbs from './breadcrumb'; import initBreadcrumbs from './breadcrumb';
import './dispatcher'; import initDispatcher from './dispatcher';
// eslint-disable-next-line global-require, import/no-commonjs // eslint-disable-next-line global-require, import/no-commonjs
if (process.env.NODE_ENV !== 'production') require('./test_utils/'); if (process.env.NODE_ENV !== 'production') require('./test_utils/');
...@@ -265,4 +265,6 @@ $(() => { ...@@ -265,4 +265,6 @@ $(() => {
removeFlashClickListener(flashEl); removeFlashClickListener(flashEl);
}); });
} }
initDispatcher();
}); });
...@@ -18,7 +18,6 @@ import 'vendor/jquery.atwho'; ...@@ -18,7 +18,6 @@ import 'vendor/jquery.atwho';
import AjaxCache from '~/lib/utils/ajax_cache'; import AjaxCache from '~/lib/utils/ajax_cache';
import axios from './lib/utils/axios_utils'; import axios from './lib/utils/axios_utils';
import { getLocationHash } from './lib/utils/url_utility'; import { getLocationHash } from './lib/utils/url_utility';
import axios from './lib/utils/axios_utils';
import Flash from './flash'; import Flash from './flash';
import CommentTypeToggle from './comment_type_toggle'; import CommentTypeToggle from './comment_type_toggle';
import GLForm from './gl_form'; import GLForm from './gl_form';
......
import projectSelect from '~/project_select'; import projectSelect from '~/project_select';
export default projectSelect; document.addEventListener('DOMContentLoaded', projectSelect);
...@@ -7,7 +7,7 @@ import ProjectsList from '~/projects_list'; ...@@ -7,7 +7,7 @@ import ProjectsList from '~/projects_list';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/shortcuts_navigation';
import initGroupsList from '../../../groups'; import initGroupsList from '../../../groups';
export default () => { document.addEventListener('DOMContentLoaded', () => {
const newGroupChildWrapper = document.querySelector('.js-new-project-subgroup'); const newGroupChildWrapper = document.querySelector('.js-new-project-subgroup');
new ShortcutsNavigation(); new ShortcutsNavigation();
new NotificationsForm(); new NotificationsForm();
...@@ -19,4 +19,4 @@ export default () => { ...@@ -19,4 +19,4 @@ export default () => {
} }
initGroupsList(); initGroupsList();
}; });
import UsersSelect from '~/users_select'; import UsersSelect from '~/users_select';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/shortcuts_navigation';
export default () => { document.addEventListener('DOMContentLoaded', () => {
new UsersSelect(); // eslint-disable-line no-new new UsersSelect(); // eslint-disable-line no-new
new ShortcutsNavigation(); // eslint-disable-line no-new new ShortcutsNavigation(); // eslint-disable-line no-new
}; });
...@@ -7,10 +7,10 @@ import initFilteredSearch from '~/pages/search/init_filtered_search'; ...@@ -7,10 +7,10 @@ import initFilteredSearch from '~/pages/search/init_filtered_search';
import { FILTERED_SEARCH } from '~/pages/constants'; import { FILTERED_SEARCH } from '~/pages/constants';
import { ISSUABLE_INDEX } from '~/pages/projects/constants'; import { ISSUABLE_INDEX } from '~/pages/projects/constants';
export default () => { document.addEventListener('DOMContentLoaded', () => {
initFilteredSearch(FILTERED_SEARCH.ISSUES); initFilteredSearch(FILTERED_SEARCH.ISSUES);
new IssuableIndex(ISSUABLE_INDEX.ISSUE); new IssuableIndex(ISSUABLE_INDEX.ISSUE);
new ShortcutsNavigation(); new ShortcutsNavigation();
new UsersSelect(); new UsersSelect();
}; });
/* eslint-disable no-new */ /* eslint-disable no-new */
import initIssuableSidebar from '~/init_issuable_sidebar'; import initIssuableSidebar from '~/init_issuable_sidebar';
import Issue from '~/issue'; import Issue from '~/issue';
import ShortcutsIssuable from '~/shortcuts_issuable'; import ShortcutsIssuable from '~/shortcuts_issuable';
import ZenMode from '~/zen_mode'; import ZenMode from '~/zen_mode';
export default () => { document.addEventListener('DOMContentLoaded', () => {
new Issue(); new Issue();
new ShortcutsIssuable(); new ShortcutsIssuable();
new ZenMode(); new ZenMode();
initIssuableSidebar(); initIssuableSidebar();
}; });
...@@ -5,9 +5,9 @@ import initFilteredSearch from '~/pages/search/init_filtered_search'; ...@@ -5,9 +5,9 @@ import initFilteredSearch from '~/pages/search/init_filtered_search';
import { FILTERED_SEARCH } from '~/pages/constants'; import { FILTERED_SEARCH } from '~/pages/constants';
import { ISSUABLE_INDEX } from '~/pages/projects/constants'; import { ISSUABLE_INDEX } from '~/pages/projects/constants';
export default () => { document.addEventListener('DOMContentLoaded', () => {
initFilteredSearch(FILTERED_SEARCH.MERGE_REQUESTS); initFilteredSearch(FILTERED_SEARCH.MERGE_REQUESTS);
new IssuableIndex(ISSUABLE_INDEX.MERGE_REQUEST); // eslint-disable-line no-new new IssuableIndex(ISSUABLE_INDEX.MERGE_REQUEST); // eslint-disable-line no-new
new ShortcutsNavigation(); // eslint-disable-line no-new new ShortcutsNavigation(); // eslint-disable-line no-new
new UsersSelect(); // eslint-disable-line no-new new UsersSelect(); // eslint-disable-line no-new
}; });
...@@ -8,7 +8,7 @@ import { ajaxGet } from '~/lib/utils/common_utils'; ...@@ -8,7 +8,7 @@ import { ajaxGet } from '~/lib/utils/common_utils';
import Star from '../../../star'; import Star from '../../../star';
import notificationsDropdown from '../../../notifications_dropdown'; import notificationsDropdown from '../../../notifications_dropdown';
export default () => { document.addEventListener('DOMContentLoaded', () => {
new Star(); // eslint-disable-line no-new new Star(); // eslint-disable-line no-new
notificationsDropdown(); notificationsDropdown();
new ShortcutsNavigation(); // eslint-disable-line no-new new ShortcutsNavigation(); // eslint-disable-line no-new
...@@ -24,4 +24,4 @@ export default () => { ...@@ -24,4 +24,4 @@ export default () => {
$('#tree-slider').waitForImages(() => { $('#tree-slider').waitForImages(() => {
ajaxGet(document.querySelector('.js-tree-content').dataset.logsPath); ajaxGet(document.querySelector('.js-tree-content').dataset.logsPath);
}); });
}; });
...@@ -2,10 +2,10 @@ import UsernameValidator from './username_validator'; ...@@ -2,10 +2,10 @@ import UsernameValidator from './username_validator';
import SigninTabsMemoizer from './signin_tabs_memoizer'; import SigninTabsMemoizer from './signin_tabs_memoizer';
import OAuthRememberMe from './oauth_remember_me'; import OAuthRememberMe from './oauth_remember_me';
export default () => { document.addEventListener('DOMContentLoaded', () => {
new UsernameValidator(); // eslint-disable-line no-new new UsernameValidator(); // eslint-disable-line no-new
new SigninTabsMemoizer(); // eslint-disable-line no-new new SigninTabsMemoizer(); // eslint-disable-line no-new
new OAuthRememberMe({ // eslint-disable-line no-new new OAuthRememberMe({ // eslint-disable-line no-new
container: $('.omniauth-container'), container: $('.omniauth-container'),
}).bindEvents(); }).bindEvents();
}; });
...@@ -16,3 +16,31 @@ ...@@ -16,3 +16,31 @@
background-color: $user-mention-bg-hover; background-color: $user-mention-bg-hover;
} }
} }
.gfm-color_chip {
display: inline-block;
margin: 0 0 2px 4px;
vertical-align: middle;
border-radius: 3px;
$chip-size: 0.9em;
$bg-size: $chip-size / 0.9;
$bg-pos: $bg-size / 2;
width: $chip-size;
height: $chip-size;
background: $white-light;
background-image: linear-gradient(135deg, $gray-dark 25%, transparent 0%, transparent 75%, $gray-dark 0%),
linear-gradient(135deg, $gray-dark 25%, transparent 0%, transparent 75%, $gray-dark 0%);
background-size: $bg-size $bg-size;
background-position: 0 0, $bg-pos $bg-pos;
> span {
display: inline-block;
width: 100%;
height: 100%;
margin-bottom: 2px;
border-radius: 3px;
border: 1px solid $black-transparent;
}
}
class Admin::CohortsController < Admin::ApplicationController class Admin::CohortsController < Admin::ApplicationController
def index def index
if current_application_settings.usage_ping_enabled if Gitlab::CurrentSettings.usage_ping_enabled
cohorts_results = Rails.cache.fetch('cohorts', expires_in: 1.day) do cohorts_results = Rails.cache.fetch('cohorts', expires_in: 1.day) do
CohortsService.new.execute CohortsService.new.execute
end end
......
...@@ -2,7 +2,6 @@ require 'gon' ...@@ -2,7 +2,6 @@ require 'gon'
require 'fogbugz' require 'fogbugz'
class ApplicationController < ActionController::Base class ApplicationController < ActionController::Base
include Gitlab::CurrentSettings
include Gitlab::GonHelper include Gitlab::GonHelper
include GitlabRoutingHelper include GitlabRoutingHelper
include PageLayoutHelper include PageLayoutHelper
...@@ -28,7 +27,7 @@ class ApplicationController < ActionController::Base ...@@ -28,7 +27,7 @@ class ApplicationController < ActionController::Base
protect_from_forgery with: :exception protect_from_forgery with: :exception
helper_method :can?, :current_application_settings helper_method :can?
helper_method :import_sources_enabled?, :github_import_enabled?, :gitea_import_enabled?, :github_import_configured?, :gitlab_import_enabled?, :gitlab_import_configured?, :bitbucket_import_enabled?, :bitbucket_import_configured?, :google_code_import_enabled?, :fogbugz_import_enabled?, :git_import_enabled?, :gitlab_project_import_enabled? helper_method :import_sources_enabled?, :github_import_enabled?, :gitea_import_enabled?, :github_import_configured?, :gitlab_import_enabled?, :gitlab_import_configured?, :bitbucket_import_enabled?, :bitbucket_import_configured?, :google_code_import_enabled?, :fogbugz_import_enabled?, :git_import_enabled?, :gitlab_project_import_enabled?
rescue_from Encoding::CompatibilityError do |exception| rescue_from Encoding::CompatibilityError do |exception|
...@@ -120,7 +119,7 @@ class ApplicationController < ActionController::Base ...@@ -120,7 +119,7 @@ class ApplicationController < ActionController::Base
end end
def after_sign_out_path_for(resource) def after_sign_out_path_for(resource)
current_application_settings.after_sign_out_path.presence || new_user_session_path Gitlab::CurrentSettings.after_sign_out_path.presence || new_user_session_path
end end
def can?(object, action, subject = :global) def can?(object, action, subject = :global)
...@@ -268,15 +267,15 @@ class ApplicationController < ActionController::Base ...@@ -268,15 +267,15 @@ class ApplicationController < ActionController::Base
end end
def import_sources_enabled? def import_sources_enabled?
!current_application_settings.import_sources.empty? !Gitlab::CurrentSettings.import_sources.empty?
end end
def github_import_enabled? def github_import_enabled?
current_application_settings.import_sources.include?('github') Gitlab::CurrentSettings.import_sources.include?('github')
end end
def gitea_import_enabled? def gitea_import_enabled?
current_application_settings.import_sources.include?('gitea') Gitlab::CurrentSettings.import_sources.include?('gitea')
end end
def github_import_configured? def github_import_configured?
...@@ -284,7 +283,7 @@ class ApplicationController < ActionController::Base ...@@ -284,7 +283,7 @@ class ApplicationController < ActionController::Base
end end
def gitlab_import_enabled? def gitlab_import_enabled?
request.host != 'gitlab.com' && current_application_settings.import_sources.include?('gitlab') request.host != 'gitlab.com' && Gitlab::CurrentSettings.import_sources.include?('gitlab')
end end
def gitlab_import_configured? def gitlab_import_configured?
...@@ -292,7 +291,7 @@ class ApplicationController < ActionController::Base ...@@ -292,7 +291,7 @@ class ApplicationController < ActionController::Base
end end
def bitbucket_import_enabled? def bitbucket_import_enabled?
current_application_settings.import_sources.include?('bitbucket') Gitlab::CurrentSettings.import_sources.include?('bitbucket')
end end
def bitbucket_import_configured? def bitbucket_import_configured?
...@@ -300,19 +299,19 @@ class ApplicationController < ActionController::Base ...@@ -300,19 +299,19 @@ class ApplicationController < ActionController::Base
end end
def google_code_import_enabled? def google_code_import_enabled?
current_application_settings.import_sources.include?('google_code') Gitlab::CurrentSettings.import_sources.include?('google_code')
end end
def fogbugz_import_enabled? def fogbugz_import_enabled?
current_application_settings.import_sources.include?('fogbugz') Gitlab::CurrentSettings.import_sources.include?('fogbugz')
end end
def git_import_enabled? def git_import_enabled?
current_application_settings.import_sources.include?('git') Gitlab::CurrentSettings.import_sources.include?('git')
end end
def gitlab_project_import_enabled? def gitlab_project_import_enabled?
current_application_settings.import_sources.include?('gitlab_project') Gitlab::CurrentSettings.import_sources.include?('gitlab_project')
end end
# U2F (universal 2nd factor) devices need a unique identifier for the application # U2F (universal 2nd factor) devices need a unique identifier for the application
......
...@@ -20,13 +20,13 @@ module EnforcesTwoFactorAuthentication ...@@ -20,13 +20,13 @@ module EnforcesTwoFactorAuthentication
end end
def two_factor_authentication_required? def two_factor_authentication_required?
current_application_settings.require_two_factor_authentication? || Gitlab::CurrentSettings.require_two_factor_authentication? ||
current_user.try(:require_two_factor_authentication_from_group?) current_user.try(:require_two_factor_authentication_from_group?)
end end
def two_factor_authentication_reason(global: -> {}, group: -> {}) def two_factor_authentication_reason(global: -> {}, group: -> {})
if two_factor_authentication_required? if two_factor_authentication_required?
if current_application_settings.require_two_factor_authentication? if Gitlab::CurrentSettings.require_two_factor_authentication?
global.call global.call
else else
groups = current_user.expanded_groups_requiring_two_factor_authentication.reorder(name: :asc) groups = current_user.expanded_groups_requiring_two_factor_authentication.reorder(name: :asc)
...@@ -36,7 +36,7 @@ module EnforcesTwoFactorAuthentication ...@@ -36,7 +36,7 @@ module EnforcesTwoFactorAuthentication
end end
def two_factor_grace_period def two_factor_grace_period
periods = [current_application_settings.two_factor_grace_period] periods = [Gitlab::CurrentSettings.two_factor_grace_period]
periods << current_user.two_factor_grace_period if current_user.try(:require_two_factor_authentication_from_group?) periods << current_user.two_factor_grace_period if current_user.try(:require_two_factor_authentication_from_group?)
periods.min periods.min
end end
......
module RequiresWhitelistedMonitoringClient module RequiresWhitelistedMonitoringClient
extend ActiveSupport::Concern extend ActiveSupport::Concern
include Gitlab::CurrentSettings
included do included do
before_action :validate_ip_whitelisted_or_valid_token! before_action :validate_ip_whitelisted_or_valid_token!
end end
...@@ -26,7 +24,7 @@ module RequiresWhitelistedMonitoringClient ...@@ -26,7 +24,7 @@ module RequiresWhitelistedMonitoringClient
token.present? && token.present? &&
ActiveSupport::SecurityUtils.variable_size_secure_compare( ActiveSupport::SecurityUtils.variable_size_secure_compare(
token, token,
current_application_settings.health_check_access_token Gitlab::CurrentSettings.health_check_access_token
) )
end end
......
...@@ -51,7 +51,7 @@ class InvitesController < ApplicationController ...@@ -51,7 +51,7 @@ class InvitesController < ApplicationController
return if current_user return if current_user
notice = "To accept this invitation, sign in" notice = "To accept this invitation, sign in"
notice << " or create an account" if current_application_settings.allow_signup? notice << " or create an account" if Gitlab::CurrentSettings.allow_signup?
notice << "." notice << "."
store_location_for :user, request.fullpath store_location_for :user, request.fullpath
......
...@@ -10,6 +10,6 @@ class KodingController < ApplicationController ...@@ -10,6 +10,6 @@ class KodingController < ApplicationController
private private
def check_integration! def check_integration!
render_404 unless current_application_settings.koding_enabled? render_404 unless Gitlab::CurrentSettings.koding_enabled?
end end
end end
class Oauth::ApplicationsController < Doorkeeper::ApplicationsController class Oauth::ApplicationsController < Doorkeeper::ApplicationsController
include Gitlab::CurrentSettings
include Gitlab::GonHelper include Gitlab::GonHelper
include PageLayoutHelper include PageLayoutHelper
include OauthApplications include OauthApplications
...@@ -31,7 +30,7 @@ class Oauth::ApplicationsController < Doorkeeper::ApplicationsController ...@@ -31,7 +30,7 @@ class Oauth::ApplicationsController < Doorkeeper::ApplicationsController
private private
def verify_user_oauth_applications_enabled def verify_user_oauth_applications_enabled
return if current_application_settings.user_oauth_applications? return if Gitlab::CurrentSettings.user_oauth_applications?
redirect_to profile_path redirect_to profile_path
end end
......
...@@ -145,7 +145,7 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController ...@@ -145,7 +145,7 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
label = Gitlab::OAuth::Provider.label_for(oauth['provider']) label = Gitlab::OAuth::Provider.label_for(oauth['provider'])
message = "Signing in using your #{label} account without a pre-existing GitLab account is not allowed." message = "Signing in using your #{label} account without a pre-existing GitLab account is not allowed."
if current_application_settings.allow_signup? if Gitlab::CurrentSettings.allow_signup?
message << " Create a GitLab account first, and then connect it to your #{label} account." message << " Create a GitLab account first, and then connect it to your #{label} account."
end end
......
class PasswordsController < Devise::PasswordsController class PasswordsController < Devise::PasswordsController
include Gitlab::CurrentSettings
skip_before_action :require_no_authentication, only: [:edit, :update] skip_before_action :require_no_authentication, only: [:edit, :update]
before_action :resource_from_email, only: [:create] before_action :resource_from_email, only: [:create]
...@@ -46,7 +44,7 @@ class PasswordsController < Devise::PasswordsController ...@@ -46,7 +44,7 @@ class PasswordsController < Devise::PasswordsController
if resource if resource
return if resource.allow_password_authentication? return if resource.allow_password_authentication?
else else
return if current_application_settings.password_authentication_enabled? return if Gitlab::CurrentSettings.password_authentication_enabled?
end end
redirect_to after_sending_reset_password_instructions_path_for(resource_name), redirect_to after_sending_reset_password_instructions_path_for(resource_name),
......
...@@ -394,7 +394,7 @@ class ProjectsController < Projects::ApplicationController ...@@ -394,7 +394,7 @@ class ProjectsController < Projects::ApplicationController
end end
def project_export_enabled def project_export_enabled
render_404 unless current_application_settings.project_export_enabled? render_404 unless Gitlab::CurrentSettings.project_export_enabled?
end end
def redirect_git_extension def redirect_git_extension
......
...@@ -23,7 +23,7 @@ class RootController < Dashboard::ProjectsController ...@@ -23,7 +23,7 @@ class RootController < Dashboard::ProjectsController
def redirect_unlogged_user def redirect_unlogged_user
if redirect_to_home_page_url? if redirect_to_home_page_url?
redirect_to(current_application_settings.home_page_url) redirect_to(Gitlab::CurrentSettings.home_page_url)
else else
redirect_to(new_user_session_path) redirect_to(new_user_session_path)
end end
...@@ -48,9 +48,9 @@ class RootController < Dashboard::ProjectsController ...@@ -48,9 +48,9 @@ class RootController < Dashboard::ProjectsController
def redirect_to_home_page_url? def redirect_to_home_page_url?
# If user is not signed-in and tries to access root_path - redirect him to landing page # If user is not signed-in and tries to access root_path - redirect him to landing page
# Don't redirect to the default URL to prevent endless redirections # Don't redirect to the default URL to prevent endless redirections
return false unless current_application_settings.home_page_url.present? return false unless Gitlab::CurrentSettings.home_page_url.present?
home_page_url = current_application_settings.home_page_url.chomp('/') home_page_url = Gitlab::CurrentSettings.home_page_url.chomp('/')
root_urls = [Gitlab.config.gitlab['url'].chomp('/'), root_url.chomp('/')] root_urls = [Gitlab.config.gitlab['url'].chomp('/'), root_url.chomp('/')]
root_urls.exclude?(home_page_url) root_urls.exclude?(home_page_url)
......
module ApplicationSettingsHelper module ApplicationSettingsHelper
extend self extend self
include Gitlab::CurrentSettings
delegate :allow_signup?, delegate :allow_signup?,
:gravatar_enabled?, :gravatar_enabled?,
:password_authentication_enabled_for_web?, :password_authentication_enabled_for_web?,
:akismet_enabled?, :akismet_enabled?,
:koding_enabled?, :koding_enabled?,
to: :current_application_settings to: :'Gitlab::CurrentSettings.current_application_settings'
def user_oauth_applications? def user_oauth_applications?
current_application_settings.user_oauth_applications Gitlab::CurrentSettings.user_oauth_applications
end end
def allowed_protocols_present? def allowed_protocols_present?
current_application_settings.enabled_git_access_protocol.present? Gitlab::CurrentSettings.enabled_git_access_protocol.present?
end end
def enabled_protocol def enabled_protocol
case current_application_settings.enabled_git_access_protocol case Gitlab::CurrentSettings.enabled_git_access_protocol
when 'http' when 'http'
gitlab_config.protocol gitlab_config.protocol
when 'ssh' when 'ssh'
...@@ -57,7 +55,7 @@ module ApplicationSettingsHelper ...@@ -57,7 +55,7 @@ module ApplicationSettingsHelper
# toggle button effect. # toggle button effect.
def import_sources_checkboxes(help_block_id) def import_sources_checkboxes(help_block_id)
Gitlab::ImportSources.options.map do |name, source| Gitlab::ImportSources.options.map do |name, source|
checked = current_application_settings.import_sources.include?(source) checked = Gitlab::CurrentSettings.import_sources.include?(source)
css_class = checked ? 'active' : '' css_class = checked ? 'active' : ''
checkbox_name = 'application_setting[import_sources][]' checkbox_name = 'application_setting[import_sources][]'
...@@ -72,7 +70,7 @@ module ApplicationSettingsHelper ...@@ -72,7 +70,7 @@ module ApplicationSettingsHelper
def oauth_providers_checkboxes def oauth_providers_checkboxes
button_based_providers.map do |source| button_based_providers.map do |source|
disabled = current_application_settings.disabled_oauth_sign_in_sources.include?(source.to_s) disabled = Gitlab::CurrentSettings.disabled_oauth_sign_in_sources.include?(source.to_s)
css_class = 'btn' css_class = 'btn'
css_class << ' active' unless disabled css_class << ' active' unless disabled
checkbox_name = 'application_setting[enabled_oauth_sign_in_sources][]' checkbox_name = 'application_setting[enabled_oauth_sign_in_sources][]'
......
module AuthHelper module AuthHelper
include Gitlab::CurrentSettings
PROVIDERS_WITH_ICONS = %w(twitter github gitlab bitbucket google_oauth2 facebook azure_oauth2 authentiq).freeze PROVIDERS_WITH_ICONS = %w(twitter github gitlab bitbucket google_oauth2 facebook azure_oauth2 authentiq).freeze
FORM_BASED_PROVIDERS = [/\Aldap/, 'crowd'].freeze FORM_BASED_PROVIDERS = [/\Aldap/, 'crowd'].freeze
...@@ -41,7 +39,7 @@ module AuthHelper ...@@ -41,7 +39,7 @@ module AuthHelper
end end
def enabled_button_based_providers def enabled_button_based_providers
disabled_providers = current_application_settings.disabled_oauth_sign_in_sources || [] disabled_providers = Gitlab::CurrentSettings.disabled_oauth_sign_in_sources || []
button_based_providers.map(&:to_s) - disabled_providers button_based_providers.map(&:to_s) - disabled_providers
end end
......
module ProjectsHelper module ProjectsHelper
include Gitlab::CurrentSettings
def link_to_project(project) def link_to_project(project)
link_to [project.namespace.becomes(Namespace), project], title: h(project.name) do link_to [project.namespace.becomes(Namespace), project], title: h(project.name) do
title = content_tag(:span, project.name, class: 'project-name') title = content_tag(:span, project.name, class: 'project-name')
...@@ -214,7 +212,7 @@ module ProjectsHelper ...@@ -214,7 +212,7 @@ module ProjectsHelper
project.cache_key, project.cache_key,
controller.controller_name, controller.controller_name,
controller.action_name, controller.action_name,
current_application_settings.cache_key, Gitlab::CurrentSettings.cache_key,
'v2.5' 'v2.5'
] ]
...@@ -447,10 +445,10 @@ module ProjectsHelper ...@@ -447,10 +445,10 @@ module ProjectsHelper
path = "#{import_path}?repo=#{repo}&branch=#{branch}&sha=#{sha}" path = "#{import_path}?repo=#{repo}&branch=#{branch}&sha=#{sha}"
return URI.join(current_application_settings.koding_url, path).to_s return URI.join(Gitlab::CurrentSettings.koding_url, path).to_s
end end
current_application_settings.koding_url Gitlab::CurrentSettings.koding_url
end end
def contribution_guide_path(project) def contribution_guide_path(project)
...@@ -559,7 +557,7 @@ module ProjectsHelper ...@@ -559,7 +557,7 @@ module ProjectsHelper
def restricted_levels def restricted_levels
return [] if current_user.admin? return [] if current_user.admin?
current_application_settings.restricted_visibility_levels || [] Gitlab::CurrentSettings.restricted_visibility_levels || []
end end
def project_permissions_settings(project) def project_permissions_settings(project)
......
module VersionCheckHelper module VersionCheckHelper
def version_status_badge def version_status_badge
if Rails.env.production? && current_application_settings.version_check_enabled if Rails.env.production? && Gitlab::CurrentSettings.version_check_enabled
image_url = VersionCheck.new.url image_url = VersionCheck.new.url
image_tag image_url, class: 'js-version-status-badge' image_tag image_url, class: 'js-version-status-badge'
end end
......
...@@ -151,12 +151,12 @@ module VisibilityLevelHelper ...@@ -151,12 +151,12 @@ module VisibilityLevelHelper
def restricted_visibility_levels(show_all = false) def restricted_visibility_levels(show_all = false)
return [] if current_user.admin? && !show_all return [] if current_user.admin? && !show_all
current_application_settings.restricted_visibility_levels || [] Gitlab::CurrentSettings.restricted_visibility_levels || []
end end
delegate :default_project_visibility, delegate :default_project_visibility,
:default_group_visibility, :default_group_visibility,
to: :current_application_settings to: :'Gitlab::CurrentSettings.current_application_settings'
def disallowed_visibility_level?(form_model, level) def disallowed_visibility_level?(form_model, level)
return false unless form_model.respond_to?(:visibility_level_allowed?) return false unless form_model.respond_to?(:visibility_level_allowed?)
......
...@@ -5,6 +5,24 @@ module WebpackHelper ...@@ -5,6 +5,24 @@ module WebpackHelper
javascript_include_tag(*gitlab_webpack_asset_paths(bundle, force_same_domain: force_same_domain)) javascript_include_tag(*gitlab_webpack_asset_paths(bundle, force_same_domain: force_same_domain))
end end
def webpack_controller_bundle_tags
bundles = []
segments = [*controller.controller_path.split('/'), controller.action_name].compact
until segments.empty?
begin
asset_paths = gitlab_webpack_asset_paths("pages.#{segments.join('.')}", extension: 'js')
bundles.unshift(*asset_paths)
rescue Webpack::Rails::Manifest::EntryPointMissingError
# no bundle exists for this path
end
segments.pop
end
javascript_include_tag(*bundles)
end
# override webpack-rails gem helper until changes can make it upstream # override webpack-rails gem helper until changes can make it upstream
def gitlab_webpack_asset_paths(source, extension: nil, force_same_domain: false) def gitlab_webpack_asset_paths(source, extension: nil, force_same_domain: false)
return "" unless source.present? return "" unless source.present?
......
class AbuseReportMailer < BaseMailer class AbuseReportMailer < BaseMailer
include Gitlab::CurrentSettings
def notify(abuse_report_id) def notify(abuse_report_id)
return unless deliverable? return unless deliverable?
@abuse_report = AbuseReport.find(abuse_report_id) @abuse_report = AbuseReport.find(abuse_report_id)
mail( mail(
to: current_application_settings.admin_notification_email, to: Gitlab::CurrentSettings.admin_notification_email,
subject: "#{@abuse_report.user.name} (#{@abuse_report.user.username}) was reported for abuse" subject: "#{@abuse_report.user.name} (#{@abuse_report.user.username}) was reported for abuse"
) )
end end
...@@ -15,6 +13,6 @@ class AbuseReportMailer < BaseMailer ...@@ -15,6 +13,6 @@ class AbuseReportMailer < BaseMailer
private private
def deliverable? def deliverable?
current_application_settings.admin_notification_email.present? Gitlab::CurrentSettings.admin_notification_email.present?
end end
end end
class BaseMailer < ActionMailer::Base class BaseMailer < ActionMailer::Base
include Gitlab::CurrentSettings
around_action :render_with_default_locale around_action :render_with_default_locale
helper ApplicationHelper helper ApplicationHelper
helper MarkupHelper helper MarkupHelper
attr_accessor :current_user attr_accessor :current_user
helper_method :current_user, :can?, :current_application_settings helper_method :current_user, :can?
default from: proc { default_sender_address.format } default from: proc { default_sender_address.format }
default reply_to: proc { default_reply_to_address.format } default reply_to: proc { default_reply_to_address.format }
......
module Clusters module Clusters
module Platforms module Platforms
class Kubernetes < ActiveRecord::Base class Kubernetes < ActiveRecord::Base
include Gitlab::CurrentSettings
include Gitlab::Kubernetes include Gitlab::Kubernetes
include ReactiveCaching include ReactiveCaching
...@@ -169,7 +168,7 @@ module Clusters ...@@ -169,7 +168,7 @@ module Clusters
{ {
token: token, token: token,
ca_pem: ca_pem, ca_pem: ca_pem,
max_session_time: current_application_settings.terminal_max_session_time max_session_time: Gitlab::CurrentSettings.terminal_max_session_time
} }
end end
......
class IssueAssignee < ActiveRecord::Base class IssueAssignee < ActiveRecord::Base
extend Gitlab::CurrentSettings
belongs_to :issue belongs_to :issue
belongs_to :assignee, class_name: "User", foreign_key: :user_id belongs_to :assignee, class_name: "User", foreign_key: :user_id
end end
require 'digest/md5' require 'digest/md5'
class Key < ActiveRecord::Base class Key < ActiveRecord::Base
include Gitlab::CurrentSettings
include AfterCommitQueue include AfterCommitQueue
include Sortable include Sortable
...@@ -34,9 +33,8 @@ class Key < ActiveRecord::Base ...@@ -34,9 +33,8 @@ class Key < ActiveRecord::Base
after_destroy :refresh_user_cache after_destroy :refresh_user_cache
def key=(value) def key=(value)
value&.delete!("\n\r") write_attribute(:key, value.present? ? Gitlab::SSHPublicKey.sanitize(value) : nil)
value.strip! unless value.blank?
write_attribute(:key, value)
@public_key = nil @public_key = nil
end end
...@@ -98,13 +96,13 @@ class Key < ActiveRecord::Base ...@@ -98,13 +96,13 @@ class Key < ActiveRecord::Base
def generate_fingerprint def generate_fingerprint
self.fingerprint = nil self.fingerprint = nil
return unless self.key.present? return unless public_key.valid?
self.fingerprint = public_key.fingerprint self.fingerprint = public_key.fingerprint
end end
def key_meets_restrictions def key_meets_restrictions
restriction = current_application_settings.key_restriction_for(public_key.type) restriction = Gitlab::CurrentSettings.key_restriction_for(public_key.type)
if restriction == ApplicationSetting::FORBIDDEN_KEY_VALUE if restriction == ApplicationSetting::FORBIDDEN_KEY_VALUE
errors.add(:key, forbidden_key_type_message) errors.add(:key, forbidden_key_type_message)
...@@ -115,7 +113,7 @@ class Key < ActiveRecord::Base ...@@ -115,7 +113,7 @@ class Key < ActiveRecord::Base
def forbidden_key_type_message def forbidden_key_type_message
allowed_types = allowed_types =
current_application_settings Gitlab::CurrentSettings
.allowed_key_types .allowed_key_types
.map(&:upcase) .map(&:upcase)
.to_sentence(last_word_connector: ', or ', two_words_connector: ' or ') .to_sentence(last_word_connector: ', or ', two_words_connector: ' or ')
......
...@@ -2,7 +2,6 @@ class Namespace < ActiveRecord::Base ...@@ -2,7 +2,6 @@ class Namespace < ActiveRecord::Base
include CacheMarkdownField include CacheMarkdownField
include Sortable include Sortable
include Gitlab::ShellAdapter include Gitlab::ShellAdapter
include Gitlab::CurrentSettings
include Gitlab::VisibilityLevel include Gitlab::VisibilityLevel
include Routable include Routable
include AfterCommitQueue include AfterCommitQueue
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
# A note of this type is never resolvable. # A note of this type is never resolvable.
class Note < ActiveRecord::Base class Note < ActiveRecord::Base
extend ActiveModel::Naming extend ActiveModel::Naming
include Gitlab::CurrentSettings
include Participable include Participable
include Mentionable include Mentionable
include Awardable include Awardable
...@@ -196,7 +195,7 @@ class Note < ActiveRecord::Base ...@@ -196,7 +195,7 @@ class Note < ActiveRecord::Base
end end
def max_attachment_size def max_attachment_size
current_application_settings.max_attachment_size.megabytes.to_i Gitlab::CurrentSettings.max_attachment_size.megabytes.to_i
end end
def hook_attrs def hook_attrs
......
...@@ -4,7 +4,6 @@ class Project < ActiveRecord::Base ...@@ -4,7 +4,6 @@ class Project < ActiveRecord::Base
include Gitlab::ConfigHelper include Gitlab::ConfigHelper
include Gitlab::ShellAdapter include Gitlab::ShellAdapter
include Gitlab::VisibilityLevel include Gitlab::VisibilityLevel
include Gitlab::CurrentSettings
include AccessRequestable include AccessRequestable
include Avatarable include Avatarable
include CacheMarkdownField include CacheMarkdownField
...@@ -23,7 +22,6 @@ class Project < ActiveRecord::Base ...@@ -23,7 +22,6 @@ class Project < ActiveRecord::Base
include ::Gitlab::Utils::StrongMemoize include ::Gitlab::Utils::StrongMemoize
extend Gitlab::ConfigHelper extend Gitlab::ConfigHelper
extend Gitlab::CurrentSettings
BoardLimitExceeded = Class.new(StandardError) BoardLimitExceeded = Class.new(StandardError)
...@@ -51,8 +49,8 @@ class Project < ActiveRecord::Base ...@@ -51,8 +49,8 @@ class Project < ActiveRecord::Base
default_value_for :visibility_level, gitlab_config_features.visibility_level default_value_for :visibility_level, gitlab_config_features.visibility_level
default_value_for :resolve_outdated_diff_discussions, false default_value_for :resolve_outdated_diff_discussions, false
default_value_for :container_registry_enabled, gitlab_config_features.container_registry default_value_for :container_registry_enabled, gitlab_config_features.container_registry
default_value_for(:repository_storage) { current_application_settings.pick_repository_storage } default_value_for(:repository_storage) { Gitlab::CurrentSettings.pick_repository_storage }
default_value_for(:shared_runners_enabled) { current_application_settings.shared_runners_enabled } default_value_for(:shared_runners_enabled) { Gitlab::CurrentSettings.shared_runners_enabled }
default_value_for :issues_enabled, gitlab_config_features.issues default_value_for :issues_enabled, gitlab_config_features.issues
default_value_for :merge_requests_enabled, gitlab_config_features.merge_requests default_value_for :merge_requests_enabled, gitlab_config_features.merge_requests
default_value_for :builds_enabled, gitlab_config_features.builds default_value_for :builds_enabled, gitlab_config_features.builds
...@@ -486,14 +484,14 @@ class Project < ActiveRecord::Base ...@@ -486,14 +484,14 @@ class Project < ActiveRecord::Base
def auto_devops_enabled? def auto_devops_enabled?
if auto_devops&.enabled.nil? if auto_devops&.enabled.nil?
current_application_settings.auto_devops_enabled? Gitlab::CurrentSettings.auto_devops_enabled?
else else
auto_devops.enabled? auto_devops.enabled?
end end
end end
def has_auto_devops_implicitly_disabled? def has_auto_devops_implicitly_disabled?
auto_devops&.enabled.nil? && !current_application_settings.auto_devops_enabled? auto_devops&.enabled.nil? && !Gitlab::CurrentSettings.auto_devops_enabled?
end end
def empty_repo? def empty_repo?
...@@ -1471,14 +1469,14 @@ class Project < ActiveRecord::Base ...@@ -1471,14 +1469,14 @@ class Project < ActiveRecord::Base
# Ensure HEAD points to the default branch in case it is not master # Ensure HEAD points to the default branch in case it is not master
change_head(default_branch) change_head(default_branch)
if current_application_settings.default_branch_protection != Gitlab::Access::PROTECTION_NONE && !ProtectedBranch.protected?(self, default_branch) if Gitlab::CurrentSettings.default_branch_protection != Gitlab::Access::PROTECTION_NONE && !ProtectedBranch.protected?(self, default_branch)
params = { params = {
name: default_branch, name: default_branch,
push_access_levels_attributes: [{ push_access_levels_attributes: [{
access_level: current_application_settings.default_branch_protection == Gitlab::Access::PROTECTION_DEV_CAN_PUSH ? Gitlab::Access::DEVELOPER : Gitlab::Access::MASTER access_level: Gitlab::CurrentSettings.default_branch_protection == Gitlab::Access::PROTECTION_DEV_CAN_PUSH ? Gitlab::Access::DEVELOPER : Gitlab::Access::MASTER
}], }],
merge_access_levels_attributes: [{ merge_access_levels_attributes: [{
access_level: current_application_settings.default_branch_protection == Gitlab::Access::PROTECTION_DEV_CAN_MERGE ? Gitlab::Access::DEVELOPER : Gitlab::Access::MASTER access_level: Gitlab::CurrentSettings.default_branch_protection == Gitlab::Access::PROTECTION_DEV_CAN_MERGE ? Gitlab::Access::DEVELOPER : Gitlab::Access::MASTER
}] }]
} }
...@@ -1773,7 +1771,7 @@ class Project < ActiveRecord::Base ...@@ -1773,7 +1771,7 @@ class Project < ActiveRecord::Base
end end
def use_hashed_storage def use_hashed_storage
if self.new_record? && current_application_settings.hashed_storage_enabled if self.new_record? && Gitlab::CurrentSettings.hashed_storage_enabled
self.storage_version = LATEST_STORAGE_VERSION self.storage_version = LATEST_STORAGE_VERSION
end end
end end
......
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
# After we've migrated data, we'll remove KubernetesService. This would happen in a few months. # After we've migrated data, we'll remove KubernetesService. This would happen in a few months.
# If you're modyfiyng this class, please note that you should update the same change in Clusters::Platforms::Kubernetes. # If you're modyfiyng this class, please note that you should update the same change in Clusters::Platforms::Kubernetes.
class KubernetesService < DeploymentService class KubernetesService < DeploymentService
include Gitlab::CurrentSettings
include Gitlab::Kubernetes include Gitlab::Kubernetes
include ReactiveCaching include ReactiveCaching
...@@ -231,7 +230,7 @@ class KubernetesService < DeploymentService ...@@ -231,7 +230,7 @@ class KubernetesService < DeploymentService
{ {
token: token, token: token,
ca_pem: ca_pem, ca_pem: ca_pem,
max_session_time: current_application_settings.terminal_max_session_time max_session_time: Gitlab::CurrentSettings.terminal_max_session_time
} }
end end
......
...@@ -2,8 +2,6 @@ class ProtectedBranch < ActiveRecord::Base ...@@ -2,8 +2,6 @@ class ProtectedBranch < ActiveRecord::Base
include Gitlab::ShellAdapter include Gitlab::ShellAdapter
include ProtectedRef include ProtectedRef
extend Gitlab::CurrentSettings
protected_ref_access_levels :merge, :push protected_ref_access_levels :merge, :push
# Check if branch name is marked as protected in the system # Check if branch name is marked as protected in the system
...@@ -16,7 +14,7 @@ class ProtectedBranch < ActiveRecord::Base ...@@ -16,7 +14,7 @@ class ProtectedBranch < ActiveRecord::Base
end end
def self.default_branch_protected? def self.default_branch_protected?
current_application_settings.default_branch_protection == Gitlab::Access::PROTECTION_FULL || Gitlab::CurrentSettings.default_branch_protection == Gitlab::Access::PROTECTION_FULL ||
current_application_settings.default_branch_protection == Gitlab::Access::PROTECTION_DEV_CAN_MERGE Gitlab::CurrentSettings.default_branch_protection == Gitlab::Access::PROTECTION_DEV_CAN_MERGE
end end
end end
...@@ -11,8 +11,6 @@ class Snippet < ActiveRecord::Base ...@@ -11,8 +11,6 @@ class Snippet < ActiveRecord::Base
include Editable include Editable
include Gitlab::SQL::Pattern include Gitlab::SQL::Pattern
extend Gitlab::CurrentSettings
cache_markdown_field :title, pipeline: :single_line cache_markdown_field :title, pipeline: :single_line
cache_markdown_field :description cache_markdown_field :description
cache_markdown_field :content cache_markdown_field :content
...@@ -28,7 +26,7 @@ class Snippet < ActiveRecord::Base ...@@ -28,7 +26,7 @@ class Snippet < ActiveRecord::Base
default_content_html_invalidator || file_name_changed? default_content_html_invalidator || file_name_changed?
end end
default_value_for(:visibility_level) { current_application_settings.default_snippet_visibility } default_value_for(:visibility_level) { Gitlab::CurrentSettings.default_snippet_visibility }
belongs_to :author, class_name: 'User' belongs_to :author, class_name: 'User'
belongs_to :project belongs_to :project
......
...@@ -2,10 +2,8 @@ require 'carrierwave/orm/activerecord' ...@@ -2,10 +2,8 @@ require 'carrierwave/orm/activerecord'
class User < ActiveRecord::Base class User < ActiveRecord::Base
extend Gitlab::ConfigHelper extend Gitlab::ConfigHelper
extend Gitlab::CurrentSettings
include Gitlab::ConfigHelper include Gitlab::ConfigHelper
include Gitlab::CurrentSettings
include Gitlab::SQL::Pattern include Gitlab::SQL::Pattern
include AfterCommitQueue include AfterCommitQueue
include Avatarable include Avatarable
...@@ -30,7 +28,7 @@ class User < ActiveRecord::Base ...@@ -30,7 +28,7 @@ class User < ActiveRecord::Base
add_authentication_token_field :rss_token add_authentication_token_field :rss_token
default_value_for :admin, false default_value_for :admin, false
default_value_for(:external) { current_application_settings.user_default_external } default_value_for(:external) { Gitlab::CurrentSettings.user_default_external }
default_value_for :can_create_group, gitlab_config.default_can_create_group default_value_for :can_create_group, gitlab_config.default_can_create_group
default_value_for :can_create_team, false default_value_for :can_create_team, false
default_value_for :hide_no_ssh_key, false default_value_for :hide_no_ssh_key, false
...@@ -660,11 +658,11 @@ class User < ActiveRecord::Base ...@@ -660,11 +658,11 @@ class User < ActiveRecord::Base
end end
def allow_password_authentication_for_web? def allow_password_authentication_for_web?
current_application_settings.password_authentication_enabled_for_web? && !ldap_user? Gitlab::CurrentSettings.password_authentication_enabled_for_web? && !ldap_user?
end end
def allow_password_authentication_for_git? def allow_password_authentication_for_git?
current_application_settings.password_authentication_enabled_for_git? && !ldap_user? Gitlab::CurrentSettings.password_authentication_enabled_for_git? && !ldap_user?
end end
def can_change_username? def can_change_username?
...@@ -792,7 +790,7 @@ class User < ActiveRecord::Base ...@@ -792,7 +790,7 @@ class User < ActiveRecord::Base
# without this safeguard! # without this safeguard!
return unless has_attribute?(:projects_limit) && projects_limit.nil? return unless has_attribute?(:projects_limit) && projects_limit.nil?
self.projects_limit = current_application_settings.default_projects_limit self.projects_limit = Gitlab::CurrentSettings.default_projects_limit
end end
def requires_ldap_check? def requires_ldap_check?
...@@ -1215,7 +1213,7 @@ class User < ActiveRecord::Base ...@@ -1215,7 +1213,7 @@ class User < ActiveRecord::Base
else else
# Only revert these back to the default if they weren't specifically changed in this update. # Only revert these back to the default if they weren't specifically changed in this update.
self.can_create_group = gitlab_config.default_can_create_group unless can_create_group_changed? self.can_create_group = gitlab_config.default_can_create_group unless can_create_group_changed?
self.projects_limit = current_application_settings.default_projects_limit unless projects_limit_changed? self.projects_limit = Gitlab::CurrentSettings.default_projects_limit unless projects_limit_changed?
end end
end end
...@@ -1223,15 +1221,15 @@ class User < ActiveRecord::Base ...@@ -1223,15 +1221,15 @@ class User < ActiveRecord::Base
valid = true valid = true
error = nil error = nil
if current_application_settings.domain_blacklist_enabled? if Gitlab::CurrentSettings.domain_blacklist_enabled?
blocked_domains = current_application_settings.domain_blacklist blocked_domains = Gitlab::CurrentSettings.domain_blacklist
if domain_matches?(blocked_domains, email) if domain_matches?(blocked_domains, email)
error = 'is not from an allowed domain.' error = 'is not from an allowed domain.'
valid = false valid = false
end end
end end
allowed_domains = current_application_settings.domain_whitelist allowed_domains = Gitlab::CurrentSettings.domain_whitelist
unless allowed_domains.blank? unless allowed_domains.blank?
if domain_matches?(allowed_domains, email) if domain_matches?(allowed_domains, email)
valid = true valid = true
......
class AkismetService class AkismetService
include Gitlab::CurrentSettings
attr_accessor :owner, :text, :options attr_accessor :owner, :text, :options
def initialize(owner, text, options = {}) def initialize(owner, text, options = {})
...@@ -41,12 +39,12 @@ class AkismetService ...@@ -41,12 +39,12 @@ class AkismetService
private private
def akismet_client def akismet_client
@akismet_client ||= ::Akismet::Client.new(current_application_settings.akismet_api_key, @akismet_client ||= ::Akismet::Client.new(Gitlab::CurrentSettings.akismet_api_key,
Gitlab.config.gitlab.url) Gitlab.config.gitlab.url)
end end
def akismet_enabled? def akismet_enabled?
current_application_settings.akismet_enabled Gitlab::CurrentSettings.akismet_enabled
end end
def submit(type) def submit(type)
......
module Auth module Auth
class ContainerRegistryAuthenticationService < BaseService class ContainerRegistryAuthenticationService < BaseService
extend Gitlab::CurrentSettings
AUDIENCE = 'container_registry'.freeze AUDIENCE = 'container_registry'.freeze
def execute(authentication_abilities:) def execute(authentication_abilities:)
...@@ -32,7 +30,7 @@ module Auth ...@@ -32,7 +30,7 @@ module Auth
end end
def self.token_expire_at def self.token_expire_at
Time.now + current_application_settings.container_registry_token_expire_delay.minutes Time.now + Gitlab::CurrentSettings.container_registry_token_expire_delay.minutes
end end
private private
......
class BaseService class BaseService
include Gitlab::Allowable include Gitlab::Allowable
include Gitlab::CurrentSettings
attr_accessor :project, :current_user, :params attr_accessor :project, :current_user, :params
......
...@@ -2,8 +2,6 @@ module Ci ...@@ -2,8 +2,6 @@ module Ci
# This class responsible for assigning # This class responsible for assigning
# proper pending build to runner on runner API request # proper pending build to runner on runner API request
class RegisterJobService class RegisterJobService
include Gitlab::CurrentSettings
attr_reader :runner attr_reader :runner
Result = Struct.new(:build, :valid?) Result = Struct.new(:build, :valid?)
......
class GitPushService < BaseService class GitPushService < BaseService
attr_accessor :push_data, :push_commits attr_accessor :push_data, :push_commits
include Gitlab::CurrentSettings
include Gitlab::Access include Gitlab::Access
# The N most recent commits to process in a single push payload. # The N most recent commits to process in a single push payload.
......
class GravatarService class GravatarService
include Gitlab::CurrentSettings
def execute(email, size = nil, scale = 2, username: nil) def execute(email, size = nil, scale = 2, username: nil)
return unless current_application_settings.gravatar_enabled? return unless Gitlab::CurrentSettings.gravatar_enabled?
identifier = email.presence || username.presence identifier = email.presence || username.presence
return unless identifier return unless identifier
......
...@@ -7,8 +7,6 @@ ...@@ -7,8 +7,6 @@
# #
module Projects module Projects
class HousekeepingService < BaseService class HousekeepingService < BaseService
include Gitlab::CurrentSettings
# Timeout set to 24h # Timeout set to 24h
LEASE_TIMEOUT = 86400 LEASE_TIMEOUT = 86400
...@@ -83,19 +81,19 @@ module Projects ...@@ -83,19 +81,19 @@ module Projects
end end
def housekeeping_enabled? def housekeeping_enabled?
current_application_settings.housekeeping_enabled Gitlab::CurrentSettings.housekeeping_enabled
end end
def gc_period def gc_period
current_application_settings.housekeeping_gc_period Gitlab::CurrentSettings.housekeeping_gc_period
end end
def full_repack_period def full_repack_period
current_application_settings.housekeeping_full_repack_period Gitlab::CurrentSettings.housekeeping_full_repack_period
end end
def repack_period def repack_period
current_application_settings.housekeeping_incremental_repack_period Gitlab::CurrentSettings.housekeeping_incremental_repack_period
end end
end end
end end
module Projects module Projects
class UpdatePagesService < BaseService class UpdatePagesService < BaseService
include Gitlab::CurrentSettings
BLOCK_SIZE = 32.kilobytes BLOCK_SIZE = 32.kilobytes
MAX_SIZE = 1.terabyte MAX_SIZE = 1.terabyte
SITE_PATH = 'public/'.freeze SITE_PATH = 'public/'.freeze
...@@ -134,7 +132,7 @@ module Projects ...@@ -134,7 +132,7 @@ module Projects
end end
def max_size def max_size
max_pages_size = current_application_settings.max_pages_size.megabytes max_pages_size = Gitlab::CurrentSettings.max_pages_size.megabytes
return MAX_SIZE if max_pages_size.zero? return MAX_SIZE if max_pages_size.zero?
......
...@@ -34,7 +34,7 @@ module Projects ...@@ -34,7 +34,7 @@ module Projects
def run_auto_devops_pipeline? def run_auto_devops_pipeline?
return false if project.repository.gitlab_ci_yml || !project.auto_devops.previous_changes.include?('enabled') return false if project.repository.gitlab_ci_yml || !project.auto_devops.previous_changes.include?('enabled')
project.auto_devops.enabled? || (project.auto_devops.enabled.nil? && current_application_settings.auto_devops_enabled?) project.auto_devops.enabled? || (project.auto_devops.enabled.nil? && Gitlab::CurrentSettings.auto_devops_enabled?)
end end
private private
......
...@@ -11,10 +11,8 @@ class SubmitUsagePingService ...@@ -11,10 +11,8 @@ class SubmitUsagePingService
percentage_projects_prometheus_active leader_service_desk_issues instance_service_desk_issues percentage_projects_prometheus_active leader_service_desk_issues instance_service_desk_issues
percentage_service_desk_issues].freeze percentage_service_desk_issues].freeze
include Gitlab::CurrentSettings
def execute def execute
return false unless current_application_settings.usage_ping_enabled? return false unless Gitlab::CurrentSettings.usage_ping_enabled?
response = HTTParty.post( response = HTTParty.post(
URL, URL,
......
class UploadService class UploadService
include Gitlab::CurrentSettings
def initialize(model, file, uploader_class = FileUploader) def initialize(model, file, uploader_class = FileUploader)
@model, @file, @uploader_class = model, file, uploader_class @model, @file, @uploader_class = model, file, uploader_class
end end
...@@ -17,6 +15,6 @@ class UploadService ...@@ -17,6 +15,6 @@ class UploadService
private private
def max_attachment_size def max_attachment_size
current_application_settings.max_attachment_size.megabytes.to_i Gitlab::CurrentSettings.max_attachment_size.megabytes.to_i
end end
end end
module Users module Users
class BuildService < BaseService class BuildService < BaseService
include Gitlab::CurrentSettings
def initialize(current_user, params = {}) def initialize(current_user, params = {})
@current_user = current_user @current_user = current_user
@params = params.dup @params = params.dup
...@@ -34,7 +32,7 @@ module Users ...@@ -34,7 +32,7 @@ module Users
private private
def can_create_user? def can_create_user?
(current_user.nil? && current_application_settings.allow_signup?) || current_user&.admin? (current_user.nil? && Gitlab::CurrentSettings.allow_signup?) || current_user&.admin?
end end
# Allowed params for creating a user (admins only) # Allowed params for creating a user (admins only)
...@@ -102,7 +100,7 @@ module Users ...@@ -102,7 +100,7 @@ module Users
end end
def skip_user_confirmation_email_from_setting def skip_user_confirmation_email_from_setting
!current_application_settings.send_user_confirmation_email !Gitlab::CurrentSettings.send_user_confirmation_email
end end
end end
end end
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
= render 'callout' = render 'callout'
.prepend-top-default .prepend-top-default
- if !current_application_settings.usage_ping_enabled - if !Gitlab::CurrentSettings.usage_ping_enabled
= render 'disabled' = render 'disabled'
- elsif @metric.blank? - elsif @metric.blank?
= render 'no_data' = render 'no_data'
......
...@@ -119,7 +119,7 @@ ...@@ -119,7 +119,7 @@
.well-segment.admin-well .well-segment.admin-well
%h4 %h4
Components Components
- if current_application_settings.version_check_enabled - if Gitlab::CurrentSettings.version_check_enabled
.pull-right .pull-right
= version_status_badge = version_status_badge
%p %p
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
.pull-left .pull-left
%p %p
#{ s_('HealthCheck|Access token is') } #{ s_('HealthCheck|Access token is') }
%code#health-check-token= current_application_settings.health_check_access_token %code#health-check-token= Gitlab::CurrentSettings.health_check_access_token
.prepend-top-10 .prepend-top-10
= button_to _("Reset health check access token"), reset_health_check_token_admin_application_settings_path, = button_to _("Reset health check access token"), reset_health_check_token_admin_application_settings_path,
method: :put, class: 'btn btn-default', method: :put, class: 'btn btn-default',
...@@ -18,11 +18,11 @@ ...@@ -18,11 +18,11 @@
= link_to s_('More information is available|here'), help_page_path('user/admin_area/monitoring/health_check') = link_to s_('More information is available|here'), help_page_path('user/admin_area/monitoring/health_check')
%ul %ul
%li %li
%code= readiness_url(token: current_application_settings.health_check_access_token) %code= readiness_url(token: Gitlab::CurrentSettings.health_check_access_token)
%li %li
%code= liveness_url(token: current_application_settings.health_check_access_token) %code= liveness_url(token: Gitlab::CurrentSettings.health_check_access_token)
%li %li
%code= metrics_url(token: current_application_settings.health_check_access_token) %code= metrics_url(token: Gitlab::CurrentSettings.health_check_access_token)
%hr %hr
.panel.panel-default .panel.panel-default
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
data: { confirm: _("Are you sure you want to reset registration token?") } data: { confirm: _("Are you sure you want to reset registration token?") }
= render partial: 'ci/runner/how_to_setup_runner', = render partial: 'ci/runner/how_to_setup_runner',
locals: { registration_token: current_application_settings.runners_registration_token, locals: { registration_token: Gitlab::CurrentSettings.runners_registration_token,
type: 'shared' } type: 'shared' }
.append-bottom-20.clearfix .append-bottom-20.clearfix
......
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
%p.lead.append-bottom-20 %p.lead.append-bottom-20
Please check your email to confirm your account Please check your email to confirm your account
%hr %hr
- if current_application_settings.after_sign_up_text.present? - if Gitlab::CurrentSettings.after_sign_up_text.present?
.well-confirmation.text-center .well-confirmation.text-center
= markdown_field(current_application_settings, :after_sign_up_text) = markdown_field(Gitlab::CurrentSettings, :after_sign_up_text)
%p.text-center %p.text-center
No confirmation email received? Please check your spam folder or No confirmation email received? Please check your spam folder or
.append-bottom-20.prepend-top-20.text-center .append-bottom-20.prepend-top-20.text-center
......
= webpack_bundle_tag 'docs' = webpack_bundle_tag 'docs'
%div %div
- if current_application_settings.help_page_text.present? - if Gitlab::CurrentSettings.help_page_text.present?
= markdown_field(current_application_settings, :help_page_text) = markdown_field(Gitlab::CurrentSettings.current_application_settings, :help_page_text)
%hr %hr
%h1 %h1
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
= version_status_badge = version_status_badge
%hr %hr
- unless current_application_settings.help_page_hide_commercial_content? - unless Gitlab::CurrentSettings.help_page_hide_commercial_content?
%p.slead %p.slead
GitLab is open source software to collaborate on code. GitLab is open source software to collaborate on code.
%br %br
...@@ -46,6 +46,6 @@ ...@@ -46,6 +46,6 @@
%li %li
%button.btn-blank.btn-link.js-trigger-shortcut{ type: 'button' } %button.btn-blank.btn-link.js-trigger-shortcut{ type: 'button' }
Use shortcuts Use shortcuts
- unless current_application_settings.help_page_hide_commercial_content? - unless Gitlab::CurrentSettings.help_page_hide_commercial_content?
%li= link_to 'Get a support subscription', 'https://about.gitlab.com/pricing/' %li= link_to 'Get a support subscription', 'https://about.gitlab.com/pricing/'
%li= link_to 'Compare GitLab editions', 'https://about.gitlab.com/features/#compare' %li= link_to 'Compare GitLab editions', 'https://about.gitlab.com/features/#compare'
...@@ -3,4 +3,4 @@ ...@@ -3,4 +3,4 @@
= icon('circle', class: 'cgreen') = icon('circle', class: 'cgreen')
Integration is active for Integration is active for
= link_to koding_project_url, target: '_blank', rel: 'noopener noreferrer' do = link_to koding_project_url, target: '_blank', rel: 'noopener noreferrer' do
#{current_application_settings.koding_url} #{Gitlab::CurrentSettings.koding_url}
...@@ -41,12 +41,14 @@ ...@@ -41,12 +41,14 @@
= webpack_bundle_tag "webpack_runtime" = webpack_bundle_tag "webpack_runtime"
= webpack_bundle_tag "common" = webpack_bundle_tag "common"
= webpack_bundle_tag "main" = webpack_bundle_tag "main"
= webpack_bundle_tag "raven" if current_application_settings.clientside_sentry_enabled = webpack_bundle_tag "raven" if Gitlab::CurrentSettings.clientside_sentry_enabled
= webpack_bundle_tag "test" if Rails.env.test? = webpack_bundle_tag "test" if Rails.env.test?
- if content_for?(:page_specific_javascripts) - if content_for?(:page_specific_javascripts)
= yield :page_specific_javascripts = yield :page_specific_javascripts
= webpack_controller_bundle_tags
= yield :project_javascripts = yield :project_javascripts
= csrf_meta_tags = csrf_meta_tags
......
...@@ -26,8 +26,8 @@ ...@@ -26,8 +26,8 @@
Perform code reviews and enhance collaboration with merge requests. Perform code reviews and enhance collaboration with merge requests.
Each project can also have an issue tracker and a wiki. Each project can also have an issue tracker and a wiki.
- if current_application_settings.sign_in_text.present? - if Gitlab::CurrentSettings.sign_in_text.present?
= markdown_field(current_application_settings, :sign_in_text) = markdown_field(Gitlab::CurrentSettings.current_application_settings, :sign_in_text)
%hr.footer-fixed %hr.footer-fixed
.container.footer-container .container.footer-container
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
= link_to profile_account_path do = link_to profile_account_path do
%strong.fly-out-top-item-name %strong.fly-out-top-item-name
#{ _('Account') } #{ _('Account') }
- if current_application_settings.user_oauth_applications? - if Gitlab::CurrentSettings.user_oauth_applications?
= nav_link(controller: 'oauth/applications') do = nav_link(controller: 'oauth/applications') do
= link_to applications_profile_path do = link_to applications_profile_path do
.nav-icon-container .nav-icon-container
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
- else - else
commented on a #{link_to 'discussion', @target_url} commented on a #{link_to 'discussion', @target_url}
- elsif current_application_settings.email_author_in_body - elsif Gitlab::CurrentSettings.email_author_in_body
%p.details %p.details
#{link_to @note.author_name, user_url(@note.author)} commented: #{link_to @note.author_name, user_url(@note.author)} commented:
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<%= ":" -%> <%= ":" -%>
<% elsif current_application_settings.email_author_in_body -%> <% elsif Gitlab::CurrentSettings.email_author_in_body -%>
<%= "#{@note.author_name} commented:" -%> <%= "#{@note.author_name} commented:" -%>
......
- if current_application_settings.email_author_in_body - if Gitlab::CurrentSettings.email_author_in_body
%p.details %p.details
#{link_to @issue.author_name, user_url(@issue.author)} created an issue: #{link_to @issue.author_name, user_url(@issue.author)} created an issue:
......
- if current_application_settings.email_author_in_body - if Gitlab::CurrentSettings.email_author_in_body
%p.details %p.details
#{link_to @merge_request.author_name, user_url(@merge_request.author)} created a merge request: #{link_to @merge_request.author_name, user_url(@merge_request.author)} created a merge request:
......
%p %p
Hi #{@user['name']}! Hi #{@user['name']}!
%p %p
- if current_application_settings.allow_signup? - if Gitlab::CurrentSettings.allow_signup?
Your account has been created successfully. Your account has been created successfully.
- else - else
The Administrator created an account for you. Now you are a member of the company GitLab application. The Administrator created an account for you. Now you are a member of the company GitLab application.
......
- return unless current_application_settings.project_export_enabled? - return unless Gitlab::CurrentSettings.project_export_enabled?
- project = local_assigns.fetch(:project) - project = local_assigns.fetch(:project)
- expanded = Rails.env.test? - expanded = Rails.env.test?
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
- link = commit_path(project, commit, merge_request: merge_request) - link = commit_path(project, commit, merge_request: merge_request)
- cache_key = [project.full_path, - cache_key = [project.full_path,
commit.id, commit.id,
current_application_settings, Gitlab::CurrentSettings.current_application_settings,
@path.presence, @path.presence,
current_controller?(:commits), current_controller?(:commits),
merge_request&.iid, merge_request&.iid,
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
.radio .radio
= form.label :enabled_ do = form.label :enabled_ do
= form.radio_button :enabled, '' = form.radio_button :enabled, ''
%strong Instance default (#{current_application_settings.auto_devops_enabled? ? 'enabled' : 'disabled'}) %strong Instance default (#{Gitlab::CurrentSettings.auto_devops_enabled? ? 'enabled' : 'disabled'})
%br %br
%span.descr %span.descr
Follow the instance default to either have Auto DevOps enabled or disabled when there is no project specific <code>.gitlab-ci.yml</code>. Follow the instance default to either have Auto DevOps enabled or disabled when there is no project specific <code>.gitlab-ci.yml</code>.
......
%h3 Shared Runners %h3 Shared Runners
.bs-callout.bs-callout-warning.shared-runners-description .bs-callout.bs-callout-warning.shared-runners-description
- if current_application_settings.shared_runners_text.present? - if Gitlab::CurrentSettings.shared_runners_text.present?
= markdown_field(current_application_settings, :shared_runners_text) = markdown_field(Gitlab::CurrentSettings.current_application_settings, :shared_runners_text)
- else - else
GitLab Shared Runners execute code of different projects on the same Runner GitLab Shared Runners execute code of different projects on the same Runner
unless you configure GitLab Runner Autoscale with MaxBuilds 1 (which it is unless you configure GitLab Runner Autoscale with MaxBuilds 1 (which it is
......
class GitGarbageCollectWorker class GitGarbageCollectWorker
include ApplicationWorker include ApplicationWorker
include Gitlab::CurrentSettings
sidekiq_options retry: false sidekiq_options retry: false
...@@ -102,7 +101,7 @@ class GitGarbageCollectWorker ...@@ -102,7 +101,7 @@ class GitGarbageCollectWorker
end end
def bitmaps_enabled? def bitmaps_enabled?
current_application_settings.housekeeping_bitmaps_enabled Gitlab::CurrentSettings.housekeeping_bitmaps_enabled
end end
def git(write_bitmaps:) def git(write_bitmaps:)
......
---
title: Add Colors to GitLab Flavored Markdown
merge_request: 16095
author: Tony Rom <thetonyrom@gmail.com>
type: added
---
title: Sanitize extra blank spaces used when uploading a SSH key
merge_request: 40552
author:
type: fixed
---
title: Fix forking projects when no restricted visibility levels are defined applicationwide
merge_request: 16881
author:
type: fixed
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
var crypto = require('crypto'); var crypto = require('crypto');
var fs = require('fs'); var fs = require('fs');
var path = require('path'); var path = require('path');
var glob = require('glob');
var webpack = require('webpack'); var webpack = require('webpack');
var StatsWriterPlugin = require('webpack-stats-plugin').StatsWriterPlugin; var StatsWriterPlugin = require('webpack-stats-plugin').StatsWriterPlugin;
var CopyWebpackPlugin = require('copy-webpack-plugin'); var CopyWebpackPlugin = require('copy-webpack-plugin');
...@@ -20,6 +21,26 @@ var DEV_SERVER_LIVERELOAD = process.env.DEV_SERVER_LIVERELOAD !== 'false'; ...@@ -20,6 +21,26 @@ var DEV_SERVER_LIVERELOAD = process.env.DEV_SERVER_LIVERELOAD !== 'false';
var WEBPACK_REPORT = process.env.WEBPACK_REPORT; var WEBPACK_REPORT = process.env.WEBPACK_REPORT;
var NO_COMPRESSION = process.env.NO_COMPRESSION; var NO_COMPRESSION = process.env.NO_COMPRESSION;
// generate automatic entry points
var autoEntries = {};
var pageEntries = glob.sync('pages/**/index.js', { cwd: path.join(ROOT_PATH, 'app/assets/javascripts') });
// filter out entries currently imported dynamically in dispatcher.js
var dispatcher = fs.readFileSync(path.join(ROOT_PATH, 'app/assets/javascripts/dispatcher.js')).toString();
var dispatcherChunks = dispatcher.match(/(?!import\('.\/)pages\/[^']+/g);
pageEntries.forEach(( path ) => {
let chunkPath = path.replace(/\/index\.js$/, '');
if (!dispatcherChunks.includes(chunkPath)) {
let chunkName = chunkPath.replace(/\//g, '.');
autoEntries[chunkName] = './' + path;
}
});
// report our auto-generated bundle count
var autoEntriesCount = Object.keys(autoEntries).length;
console.log(`${autoEntriesCount} entries from '/pages' automatically added to webpack output.`);
var config = { var config = {
// because sqljs requires fs. // because sqljs requires fs.
node: { node: {
...@@ -301,6 +322,8 @@ var config = { ...@@ -301,6 +322,8 @@ var config = {
} }
} }
config.entry = Object.assign({}, autoEntries, config.entry);
if (IS_PRODUCTION) { if (IS_PRODUCTION) {
config.devtool = 'source-map'; config.devtool = 'source-map';
config.plugins.push( config.plugins.push(
......
...@@ -253,7 +253,7 @@ GFM will recognize the following: ...@@ -253,7 +253,7 @@ GFM will recognize the following:
| `@user_name` | specific user | | `@user_name` | specific user |
| `@group_name` | specific group | | `@group_name` | specific group |
| `@all` | entire team | | `@all` | entire team |
| `#123` | issue | | `#12345` | issue |
| `!123` | merge request | | `!123` | merge request |
| `$123` | snippet | | `$123` | snippet |
| `~123` | label by ID | | `~123` | label by ID |
...@@ -379,6 +379,45 @@ _Be advised that KaTeX only supports a [subset][katex-subset] of LaTeX._ ...@@ -379,6 +379,45 @@ _Be advised that KaTeX only supports a [subset][katex-subset] of LaTeX._
>**Note:** >**Note:**
This also works for the asciidoctor `:stem: latexmath`. For details see the [asciidoctor user manual][asciidoctor-manual]. This also works for the asciidoctor `:stem: latexmath`. For details see the [asciidoctor user manual][asciidoctor-manual].
### Colors
> If this is not rendered correctly, see
https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#colors
It is possible to have color written in HEX, RGB or HSL format rendered with a color indicator.
Color written inside backticks will be followed by a color "chip".
Examples:
`#F00`
`#F00A`
`#FF0000`
`#FF0000AA`
`RGB(0,255,0)`
`RGB(0%,100%,0%)`
`RGBA(0,255,0,0.7)`
`HSL(540,70%,50%)`
`HSLA(540,70%,50%,0.7)`
Becomes:
`#F00`
`#F00A`
`#FF0000`
`#FF0000AA`
`RGB(0,255,0)`
`RGB(0%,100%,0%)`
`RGBA(0,255,0,0.7)`
`HSL(540,70%,50%)`
`HSLA(540,70%,50%,0.7)`
#### Supported formats:
* HEX: `` `#RGB[A]` `` or `` `#RRGGBB[AA]` ``
* RGB: `` `RGB[A](R, G, B[, A])` ``
* HSL: `` `HSL[A](H, S, L[, A])` ``
### Mermaid ### Mermaid
> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/15107) in > [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/15107) in
......
module API module API
module Helpers module Helpers
module Runner module Runner
include Gitlab::CurrentSettings
JOB_TOKEN_HEADER = 'HTTP_JOB_TOKEN'.freeze JOB_TOKEN_HEADER = 'HTTP_JOB_TOKEN'.freeze
JOB_TOKEN_PARAM = :token JOB_TOKEN_PARAM = :token
UPDATE_RUNNER_EVERY = 10 * 60 UPDATE_RUNNER_EVERY = 10 * 60
def runner_registration_token_valid? def runner_registration_token_valid?
ActiveSupport::SecurityUtils.variable_size_secure_compare(params[:token], ActiveSupport::SecurityUtils.variable_size_secure_compare(params[:token],
current_application_settings.runners_registration_token) Gitlab::CurrentSettings.runners_registration_token)
end end
def get_runner_version_from_params def get_runner_version_from_params
...@@ -70,7 +68,7 @@ module API ...@@ -70,7 +68,7 @@ module API
end end
def max_artifacts_size def max_artifacts_size
current_application_settings.max_artifacts_size.megabytes.to_i Gitlab::CurrentSettings.max_artifacts_size.megabytes.to_i
end end
end end
end end
......
module Banzai
module ColorParser
ALPHA = /0(?:\.\d+)?|\.\d+|1(?:\.0+)?/ # 0.0..1.0
PERCENTS = /(?:\d{1,2}|100)%/ # 00%..100%
ALPHA_CHANNEL = /(?:,\s*(?:#{ALPHA}|#{PERCENTS}))?/
BITS = /\d{1,2}|1\d\d|2(?:[0-4]\d|5[0-5])/ # 00..255
DEGS = /-?\d+(?:deg)?/i # [-]digits[deg]
RADS = /-?(?:\d+(?:\.\d+)?|\.\d+)rad/i # [-](digits[.digits] OR .digits)rad
HEX_FORMAT = /\#(?:\h{3}|\h{4}|\h{6}|\h{8})/
RGB_FORMAT = /
(?:rgba?
\(
(?:
(?:(?:#{BITS},\s*){2}#{BITS})
|
(?:(?:#{PERCENTS},\s*){2}#{PERCENTS})
)
#{ALPHA_CHANNEL}
\)
)
/xi
HSL_FORMAT = /
(?:hsla?
\(
(?:#{DEGS}|#{RADS}),\s*#{PERCENTS},\s*#{PERCENTS}
#{ALPHA_CHANNEL}
\)
)
/xi
FORMATS = [HEX_FORMAT, RGB_FORMAT, HSL_FORMAT].freeze
COLOR_FORMAT = /\A(#{Regexp.union(FORMATS)})\z/ix
# Public: Analyzes whether the String is a color code.
#
# text - The String to be parsed.
#
# Returns the recognized color String or nil if none was found.
def self.parse(text)
text if COLOR_FORMAT =~ text
end
end
end
module Banzai
module Filter
# HTML filter that renders `color` followed by a color "chip".
#
class ColorFilter < HTML::Pipeline::Filter
COLOR_CHIP_CLASS = 'gfm-color_chip'.freeze
def call
doc.css('code').each do |node|
color = ColorParser.parse(node.content)
node << color_chip(color) if color
end
doc
end
private
def color_chip(color)
checkerboard = doc.document.create_element('span', class: COLOR_CHIP_CLASS)
chip = doc.document.create_element('span', style: inline_styles(color: color))
checkerboard << chip
end
def inline_styles(color:)
"background-color: #{color};"
end
end
end
end
...@@ -7,6 +7,7 @@ module Banzai ...@@ -7,6 +7,7 @@ module Banzai
Filter::SanitizationFilter, Filter::SanitizationFilter,
Filter::EmojiFilter, Filter::EmojiFilter,
Filter::ColorFilter,
Filter::AutolinkFilter, Filter::AutolinkFilter,
Filter::ExternalLinkFilter Filter::ExternalLinkFilter
] ]
......
...@@ -14,6 +14,7 @@ module Banzai ...@@ -14,6 +14,7 @@ module Banzai
Filter::SyntaxHighlightFilter, Filter::SyntaxHighlightFilter,
Filter::MathFilter, Filter::MathFilter,
Filter::ColorFilter,
Filter::MermaidFilter, Filter::MermaidFilter,
Filter::VideoLinkFilter, Filter::VideoLinkFilter,
Filter::ImageLazyLoadFilter, Filter::ImageLazyLoadFilter,
......
# Read about interceptors in http://guides.rubyonrails.org/action_mailer_basics.html#intercepting-emails # Read about interceptors in http://guides.rubyonrails.org/action_mailer_basics.html#intercepting-emails
class EmailTemplateInterceptor class EmailTemplateInterceptor
extend Gitlab::CurrentSettings
def self.delivering_email(message) def self.delivering_email(message)
# Remove HTML part if HTML emails are disabled. # Remove HTML part if HTML emails are disabled.
unless current_application_settings.html_emails_enabled unless Gitlab::CurrentSettings.html_emails_enabled
message.parts.delete_if do |part| message.parts.delete_if do |part|
part.content_type.start_with?('text/html') part.content_type.start_with?('text/html')
end end
......
...@@ -6,8 +6,6 @@ module Gitlab ...@@ -6,8 +6,6 @@ module Gitlab
# Parser/renderer for the AsciiDoc format that uses Asciidoctor and filters # Parser/renderer for the AsciiDoc format that uses Asciidoctor and filters
# the resulting HTML through HTML pipeline filters. # the resulting HTML through HTML pipeline filters.
module Asciidoc module Asciidoc
extend Gitlab::CurrentSettings
DEFAULT_ADOC_ATTRS = [ DEFAULT_ADOC_ATTRS = [
'showtitle', 'idprefix=user-content-', 'idseparator=-', 'env=gitlab', 'showtitle', 'idprefix=user-content-', 'idseparator=-', 'env=gitlab',
'env-gitlab', 'source-highlighter=html-pipeline', 'icons=font' 'env-gitlab', 'source-highlighter=html-pipeline', 'icons=font'
...@@ -33,9 +31,9 @@ module Gitlab ...@@ -33,9 +31,9 @@ module Gitlab
def self.plantuml_setup def self.plantuml_setup
Asciidoctor::PlantUml.configure do |conf| Asciidoctor::PlantUml.configure do |conf|
conf.url = current_application_settings.plantuml_url conf.url = Gitlab::CurrentSettings.plantuml_url
conf.svg_enable = current_application_settings.plantuml_enabled conf.svg_enable = Gitlab::CurrentSettings.plantuml_enabled
conf.png_enable = current_application_settings.plantuml_enabled conf.png_enable = Gitlab::CurrentSettings.plantuml_enabled
conf.txt_enable = false conf.txt_enable = false
end end
end end
......
...@@ -14,8 +14,6 @@ module Gitlab ...@@ -14,8 +14,6 @@ module Gitlab
DEFAULT_SCOPES = [:api].freeze DEFAULT_SCOPES = [:api].freeze
class << self class << self
include Gitlab::CurrentSettings
def find_for_git_client(login, password, project:, ip:) def find_for_git_client(login, password, project:, ip:)
raise "Must provide an IP for rate limiting" if ip.nil? raise "Must provide an IP for rate limiting" if ip.nil?
...@@ -57,7 +55,7 @@ module Gitlab ...@@ -57,7 +55,7 @@ module Gitlab
if user.nil? || user.ldap_user? if user.nil? || user.ldap_user?
# Second chance - try LDAP authentication # Second chance - try LDAP authentication
Gitlab::LDAP::Authentication.login(login, password) Gitlab::LDAP::Authentication.login(login, password)
elsif current_application_settings.password_authentication_enabled_for_git? elsif Gitlab::CurrentSettings.password_authentication_enabled_for_git?
user if user.active? && user.valid_password?(password) user if user.active? && user.valid_password?(password)
end end
end end
...@@ -87,7 +85,7 @@ module Gitlab ...@@ -87,7 +85,7 @@ module Gitlab
private private
def authenticate_using_internal_or_ldap_password? def authenticate_using_internal_or_ldap_password?
current_application_settings.password_authentication_enabled_for_git? || Gitlab::LDAP::Config.enabled? Gitlab::CurrentSettings.password_authentication_enabled_for_git? || Gitlab::LDAP::Config.enabled?
end end
def service_request_check(login, password, project) def service_request_check(login, password, project)
......
module Gitlab module Gitlab
module CurrentSettings module CurrentSettings
extend self class << self
def current_application_settings
if RequestStore.active?
RequestStore.fetch(:current_application_settings) { ensure_application_settings! }
else
ensure_application_settings!
end
end
def current_application_settings def fake_application_settings(defaults = ::ApplicationSetting.defaults)
if RequestStore.active? Gitlab::FakeApplicationSettings.new(defaults)
RequestStore.fetch(:current_application_settings) { ensure_application_settings! }
else
ensure_application_settings!
end end
end
delegate :sidekiq_throttling_enabled?, to: :current_application_settings def method_missing(name, *args, &block)
current_application_settings.send(name, *args, &block) # rubocop:disable GitlabSecurity/PublicSend
end
def fake_application_settings(defaults = ::ApplicationSetting.defaults) def respond_to_missing?(name, include_private = false)
FakeApplicationSettings.new(defaults) current_application_settings.respond_to?(name, include_private) || super
end end
private private
def ensure_application_settings! def ensure_application_settings!
return in_memory_application_settings if ENV['IN_MEMORY_APPLICATION_SETTINGS'] == 'true' return in_memory_application_settings if ENV['IN_MEMORY_APPLICATION_SETTINGS'] == 'true'
cached_application_settings || uncached_application_settings cached_application_settings || uncached_application_settings
end end
def cached_application_settings def cached_application_settings
begin begin
::ApplicationSetting.cached ::ApplicationSetting.cached
rescue ::Redis::BaseError, ::Errno::ENOENT, ::Errno::EADDRNOTAVAIL rescue ::Redis::BaseError, ::Errno::ENOENT, ::Errno::EADDRNOTAVAIL
# In case Redis isn't running or the Redis UNIX socket file is not available # In case Redis isn't running or the Redis UNIX socket file is not available
end
end end
end
def uncached_application_settings def uncached_application_settings
return fake_application_settings unless connect_to_db? return fake_application_settings unless connect_to_db?
db_settings = ::ApplicationSetting.current db_settings = ::ApplicationSetting.current
# If there are pending migrations, it's possible there are columns that # If there are pending migrations, it's possible there are columns that
# need to be added to the application settings. To prevent Rake tasks # need to be added to the application settings. To prevent Rake tasks
# and other callers from failing, use any loaded settings and return # and other callers from failing, use any loaded settings and return
# defaults for missing columns. # defaults for missing columns.
if ActiveRecord::Migrator.needs_migration? if ActiveRecord::Migrator.needs_migration?
defaults = ::ApplicationSetting.defaults defaults = ::ApplicationSetting.defaults
defaults.merge!(db_settings.attributes.symbolize_keys) if db_settings.present? defaults.merge!(db_settings.attributes.symbolize_keys) if db_settings.present?
return fake_application_settings(defaults) return fake_application_settings(defaults)
end end
return db_settings if db_settings.present? return db_settings if db_settings.present?
::ApplicationSetting.create_from_defaults || in_memory_application_settings ::ApplicationSetting.create_from_defaults || in_memory_application_settings
end end
def in_memory_application_settings def in_memory_application_settings
@in_memory_application_settings ||= ::ApplicationSetting.new(::ApplicationSetting.defaults) # rubocop:disable Gitlab/ModuleWithInstanceVariables @in_memory_application_settings ||= ::ApplicationSetting.new(::ApplicationSetting.defaults) # rubocop:disable Gitlab/ModuleWithInstanceVariables
rescue ActiveRecord::StatementInvalid, ActiveRecord::UnknownAttributeError rescue ActiveRecord::StatementInvalid, ActiveRecord::UnknownAttributeError
# In case migrations the application_settings table is not created yet, # In case migrations the application_settings table is not created yet,
# we fallback to a simple OpenStruct # we fallback to a simple OpenStruct
fake_application_settings fake_application_settings
end end
def connect_to_db? def connect_to_db?
# When the DBMS is not available, an exception (e.g. PG::ConnectionBad) is raised # When the DBMS is not available, an exception (e.g. PG::ConnectionBad) is raised
active_db_connection = ActiveRecord::Base.connection.active? rescue false active_db_connection = ActiveRecord::Base.connection.active? rescue false
active_db_connection && active_db_connection &&
ActiveRecord::Base.connection.table_exists?('application_settings') ActiveRecord::Base.connection.table_exists?('application_settings')
rescue ActiveRecord::NoDatabaseError rescue ActiveRecord::NoDatabaseError
false false
end
end end
end end
end end
...@@ -3,12 +3,11 @@ ...@@ -3,12 +3,11 @@
module Gitlab module Gitlab
module GonHelper module GonHelper
include WebpackHelper include WebpackHelper
include Gitlab::CurrentSettings
def add_gon_variables def add_gon_variables
gon.api_version = 'v4' gon.api_version = 'v4'
gon.default_avatar_url = URI.join(Gitlab.config.gitlab.url, ActionController::Base.helpers.image_path('no_avatar.png')).to_s gon.default_avatar_url = URI.join(Gitlab.config.gitlab.url, ActionController::Base.helpers.image_path('no_avatar.png')).to_s
gon.max_file_size = current_application_settings.max_attachment_size gon.max_file_size = Gitlab::CurrentSettings.max_attachment_size
gon.asset_host = ActionController::Base.asset_host gon.asset_host = ActionController::Base.asset_host
gon.webpack_public_path = webpack_public_path gon.webpack_public_path = webpack_public_path
gon.relative_url_root = Gitlab.config.gitlab.relative_url_root gon.relative_url_root = Gitlab.config.gitlab.relative_url_root
...@@ -16,7 +15,7 @@ module Gitlab ...@@ -16,7 +15,7 @@ module Gitlab
gon.user_color_scheme = Gitlab::ColorSchemes.for_user(current_user).css_class gon.user_color_scheme = Gitlab::ColorSchemes.for_user(current_user).css_class
gon.katex_css_url = ActionController::Base.helpers.asset_path('katex.css') gon.katex_css_url = ActionController::Base.helpers.asset_path('katex.css')
gon.katex_js_url = ActionController::Base.helpers.asset_path('katex.js') gon.katex_js_url = ActionController::Base.helpers.asset_path('katex.js')
gon.sentry_dsn = current_application_settings.clientside_sentry_dsn if current_application_settings.clientside_sentry_enabled gon.sentry_dsn = Gitlab::CurrentSettings.clientside_sentry_dsn if Gitlab::CurrentSettings.clientside_sentry_enabled
gon.gitlab_url = Gitlab.config.gitlab.url gon.gitlab_url = Gitlab.config.gitlab.url
gon.revision = Gitlab::REVISION gon.revision = Gitlab::REVISION
gon.gitlab_logo = ActionController::Base.helpers.asset_path('gitlab_logo.png') gon.gitlab_logo = ActionController::Base.helpers.asset_path('gitlab_logo.png')
......
module Gitlab module Gitlab
module LegacyGithubImport module LegacyGithubImport
class ProjectCreator class ProjectCreator
include Gitlab::CurrentSettings
attr_reader :repo, :name, :namespace, :current_user, :session_data, :type attr_reader :repo, :name, :namespace, :current_user, :session_data, :type
def initialize(repo, name, namespace, current_user, session_data, type: 'github') def initialize(repo, name, namespace, current_user, session_data, type: 'github')
...@@ -36,7 +34,7 @@ module Gitlab ...@@ -36,7 +34,7 @@ module Gitlab
end end
def visibility_level def visibility_level
repo.private ? Gitlab::VisibilityLevel::PRIVATE : current_application_settings.default_project_visibility repo.private ? Gitlab::VisibilityLevel::PRIVATE : Gitlab::CurrentSettings.default_project_visibility
end end
# #
......
...@@ -71,8 +71,7 @@ module Gitlab ...@@ -71,8 +71,7 @@ module Gitlab
end end
def prometheus_metrics_enabled_unmemoized def prometheus_metrics_enabled_unmemoized
metrics_folder_present? && metrics_folder_present? && Gitlab::CurrentSettings.prometheus_metrics_enabled || false
Gitlab::CurrentSettings.current_application_settings[:prometheus_metrics_enabled] || false
end end
end end
end end
......
...@@ -4,7 +4,6 @@ module Gitlab ...@@ -4,7 +4,6 @@ module Gitlab
module Middleware module Middleware
class Go class Go
include ActionView::Helpers::TagHelper include ActionView::Helpers::TagHelper
include Gitlab::CurrentSettings
PROJECT_PATH_REGEX = %r{\A(#{Gitlab::PathRegex.full_namespace_route_regex}/#{Gitlab::PathRegex.project_route_regex})/}.freeze PROJECT_PATH_REGEX = %r{\A(#{Gitlab::PathRegex.full_namespace_route_regex}/#{Gitlab::PathRegex.project_route_regex})/}.freeze
...@@ -42,7 +41,7 @@ module Gitlab ...@@ -42,7 +41,7 @@ module Gitlab
project_url = URI.join(config.gitlab.url, path) project_url = URI.join(config.gitlab.url, path)
import_prefix = strip_url(project_url.to_s) import_prefix = strip_url(project_url.to_s)
repository_url = if current_application_settings.enabled_git_access_protocol == 'ssh' repository_url = if Gitlab::CurrentSettings.enabled_git_access_protocol == 'ssh'
shell = config.gitlab_shell shell = config.gitlab_shell
port = ":#{shell.ssh_port}" unless shell.ssh_port == 22 port = ":#{shell.ssh_port}" unless shell.ssh_port == 22
"ssh://#{shell.ssh_user}@#{shell.ssh_host}#{port}/#{path}.git" "ssh://#{shell.ssh_user}@#{shell.ssh_host}#{port}/#{path}.git"
......
module Gitlab module Gitlab
module PerformanceBar module PerformanceBar
extend Gitlab::CurrentSettings
ALLOWED_USER_IDS_KEY = 'performance_bar_allowed_user_ids:v2'.freeze ALLOWED_USER_IDS_KEY = 'performance_bar_allowed_user_ids:v2'.freeze
EXPIRY_TIME = 5.minutes EXPIRY_TIME = 5.minutes
...@@ -13,7 +11,7 @@ module Gitlab ...@@ -13,7 +11,7 @@ module Gitlab
end end
def self.allowed_group_id def self.allowed_group_id
current_application_settings.performance_bar_allowed_group_id Gitlab::CurrentSettings.performance_bar_allowed_group_id
end end
def self.allowed_user_ids def self.allowed_user_ids
......
module Gitlab module Gitlab
class PollingInterval class PollingInterval
extend Gitlab::CurrentSettings
HEADER_NAME = 'Poll-Interval'.freeze HEADER_NAME = 'Poll-Interval'.freeze
def self.set_header(response, interval:) def self.set_header(response, interval:)
if polling_enabled? if polling_enabled?
multiplier = current_application_settings.polling_interval_multiplier multiplier = Gitlab::CurrentSettings.polling_interval_multiplier
value = (interval * multiplier).to_i value = (interval * multiplier).to_i
else else
value = -1 value = -1
...@@ -16,7 +14,7 @@ module Gitlab ...@@ -16,7 +14,7 @@ module Gitlab
end end
def self.polling_enabled? def self.polling_enabled?
!current_application_settings.polling_interval_multiplier.zero? !Gitlab::CurrentSettings.polling_interval_multiplier.zero?
end end
end end
end end
module Gitlab module Gitlab
module ProtocolAccess module ProtocolAccess
extend Gitlab::CurrentSettings
def self.allowed?(protocol) def self.allowed?(protocol)
if protocol == 'web' if protocol == 'web'
true true
elsif current_application_settings.enabled_git_access_protocol.blank? elsif Gitlab::CurrentSettings.enabled_git_access_protocol.blank?
true true
else else
protocol == current_application_settings.enabled_git_access_protocol protocol == Gitlab::CurrentSettings.enabled_git_access_protocol
end end
end end
end end
......
module Gitlab module Gitlab
module Recaptcha module Recaptcha
extend Gitlab::CurrentSettings
def self.load_configurations! def self.load_configurations!
if current_application_settings.recaptcha_enabled if Gitlab::CurrentSettings.recaptcha_enabled
::Recaptcha.configure do |config| ::Recaptcha.configure do |config|
config.public_key = current_application_settings.recaptcha_site_key config.public_key = Gitlab::CurrentSettings.recaptcha_site_key
config.private_key = current_application_settings.recaptcha_private_key config.private_key = Gitlab::CurrentSettings.recaptcha_private_key
end end
true true
...@@ -14,7 +12,7 @@ module Gitlab ...@@ -14,7 +12,7 @@ module Gitlab
end end
def self.enabled? def self.enabled?
current_application_settings.recaptcha_enabled Gitlab::CurrentSettings.recaptcha_enabled
end end
end end
end end
module Gitlab module Gitlab
module Sentry module Sentry
extend Gitlab::CurrentSettings
def self.enabled? def self.enabled?
Rails.env.production? && current_application_settings.sentry_enabled? Rails.env.production? && Gitlab::CurrentSettings.sentry_enabled?
end end
def self.context(current_user = nil) def self.context(current_user = nil)
......
...@@ -21,6 +21,22 @@ module Gitlab ...@@ -21,6 +21,22 @@ module Gitlab
technology(name)&.supported_sizes technology(name)&.supported_sizes
end end
def self.sanitize(key_content)
ssh_type, *parts = key_content.strip.split
return key_content if parts.empty?
parts.each_with_object("#{ssh_type} ").with_index do |(part, content), index|
content << part
if Gitlab::SSHPublicKey.new(content).valid?
break [content, parts[index + 1]].compact.join(' ') # Add the comment part if present
elsif parts.size == index + 1 # return original content if we've reached the last element
break key_content
end
end
end
attr_reader :key_text, :key attr_reader :key_text, :key
# Unqualified MD5 fingerprint for compatibility # Unqualified MD5 fingerprint for compatibility
...@@ -37,23 +53,23 @@ module Gitlab ...@@ -37,23 +53,23 @@ module Gitlab
end end
def valid? def valid?
key.present? key.present? && bits && technology.supported_sizes.include?(bits)
end end
def type def type
technology.name if valid? technology.name if key.present?
end end
def bits def bits
return unless valid? return if key.blank?
case type case type
when :rsa when :rsa
key.n.num_bits key.n&.num_bits
when :dsa when :dsa
key.p.num_bits key.p&.num_bits
when :ecdsa when :ecdsa
key.group.order.num_bits key.group.order&.num_bits
when :ed25519 when :ed25519
256 256
else else
......
module Gitlab module Gitlab
class UsageData class UsageData
class << self class << self
include Gitlab::CurrentSettings
def data(force_refresh: false) def data(force_refresh: false)
Rails.cache.fetch('usage_data', force: force_refresh, expires_in: 2.weeks) { uncached_data } Rails.cache.fetch('usage_data', force: force_refresh, expires_in: 2.weeks) { uncached_data }
end end
...@@ -19,7 +17,7 @@ module Gitlab ...@@ -19,7 +17,7 @@ module Gitlab
def license_usage_data def license_usage_data
usage_data = { usage_data = {
uuid: current_application_settings.uuid, uuid: Gitlab::CurrentSettings.uuid,
hostname: Gitlab.config.gitlab.host, hostname: Gitlab.config.gitlab.host,
version: Gitlab::VERSION, version: Gitlab::VERSION,
active_user_count: User.active.count, active_user_count: User.active.count,
...@@ -79,9 +77,9 @@ module Gitlab ...@@ -79,9 +77,9 @@ module Gitlab
def features_usage_data_ce def features_usage_data_ce
{ {
signup: current_application_settings.allow_signup?, signup: Gitlab::CurrentSettings.allow_signup?,
ldap: Gitlab.config.ldap.enabled, ldap: Gitlab.config.ldap.enabled,
gravatar: current_application_settings.gravatar_enabled?, gravatar: Gitlab::CurrentSettings.gravatar_enabled?,
omniauth: Gitlab.config.omniauth.enabled, omniauth: Gitlab.config.omniauth.enabled,
reply_by_email: Gitlab::IncomingEmail.enabled?, reply_by_email: Gitlab::IncomingEmail.enabled?,
container_registry: Gitlab.config.registry.enabled, container_registry: Gitlab.config.registry.enabled,
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
# #
module Gitlab module Gitlab
module VisibilityLevel module VisibilityLevel
extend CurrentSettings
extend ActiveSupport::Concern extend ActiveSupport::Concern
included do included do
...@@ -58,9 +57,9 @@ module Gitlab ...@@ -58,9 +57,9 @@ module Gitlab
end end
def allowed_levels def allowed_levels
restricted_levels = current_application_settings.restricted_visibility_levels restricted_levels = Gitlab::CurrentSettings.restricted_visibility_levels
self.values - restricted_levels self.values - Array(restricted_levels)
end end
def closest_allowed_level(target_level) def closest_allowed_level(target_level)
...@@ -81,7 +80,7 @@ module Gitlab ...@@ -81,7 +80,7 @@ module Gitlab
end end
def non_restricted_level?(level) def non_restricted_level?(level)
restricted_levels = current_application_settings.restricted_visibility_levels restricted_levels = Gitlab::CurrentSettings.restricted_visibility_levels
if restricted_levels.nil? if restricted_levels.nil?
true true
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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