Commit 97cf7757 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'ce-to-ee' into 'master'

CE to EE

See merge request !380
parents 0d2f3318 91488193
...@@ -954,7 +954,7 @@ Lint/Void: ...@@ -954,7 +954,7 @@ Lint/Void:
Rails/ActionFilter: Rails/ActionFilter:
Description: 'Enforces consistent use of action filter methods.' Description: 'Enforces consistent use of action filter methods.'
Enabled: false Enabled: true
Rails/DefaultScope: Rails/DefaultScope:
Description: 'Checks if the argument passed to default_scope is a block.' Description: 'Checks if the argument passed to default_scope is a block.'
......
...@@ -3,14 +3,20 @@ Please view this file on the master branch, on stable branches it's out of date. ...@@ -3,14 +3,20 @@ Please view this file on the master branch, on stable branches it's out of date.
v 7.11.0 (unreleased) v 7.11.0 (unreleased)
- Fix clone URL field and X11 Primary selection (Dmitry Medvinsky) - Fix clone URL field and X11 Primary selection (Dmitry Medvinsky)
- Ignore invalid lines in .gitmodules - Ignore invalid lines in .gitmodules
- Fix "Cannot move project" error message from popping up after a successful transfer (Stan Hu)
- Redirect to sign in page after signing out.
- -
- Add "Reply quoting selected text" shortcut key (`r`)
- Fix bug causing `@whatever` inside an issue's first code block to be picked up as a user mention.
- Fix bug causing `@whatever` inside an inline code snippet (backtick-style) to be picked up as a user mention.
- -
- -
- -
- -
- - Move snippets UI to fluid layout
- - Improve UI for sidebar. Increase separation between navigation and content
- Improve new project command options (Ben Bodenmiller) - Improve new project command options (Ben Bodenmiller)
- Prevent sending empty messages to HipChat (Chulki Lee)
v 7.10.0 (unreleased) v 7.10.0 (unreleased)
- Ignore submodules that are defined in .gitmodules but are checked in as directories. - Ignore submodules that are defined in .gitmodules but are checked in as directories.
...@@ -38,7 +44,6 @@ v 7.10.0 (unreleased) ...@@ -38,7 +44,6 @@ v 7.10.0 (unreleased)
- Allow HTML tags in Markdown input - Allow HTML tags in Markdown input
- Fix code unfold not working on Compare commits page (Stan Hu) - Fix code unfold not working on Compare commits page (Stan Hu)
- Fix generating SSH key fingerprints with OpenSSH 6.8. (Sašo Stanovnik) - Fix generating SSH key fingerprints with OpenSSH 6.8. (Sašo Stanovnik)
- Include missing events and fix save functionality in admin service template settings form (Stan Hu)
- Fix "Import projects from" button to show the correct instructions (Stan Hu) - Fix "Import projects from" button to show the correct instructions (Stan Hu)
- Fix dots in Wiki slugs causing errors (Stan Hu) - Fix dots in Wiki slugs causing errors (Stan Hu)
- Make maximum attachment size configurable via Application Settings (Stan Hu) - Make maximum attachment size configurable via Application Settings (Stan Hu)
......
...@@ -42,7 +42,7 @@ gem "browser" ...@@ -42,7 +42,7 @@ gem "browser"
gem "gitlab_git", '~> 7.1.10' gem "gitlab_git", '~> 7.1.10'
# Ruby/Rack Git Smart-HTTP Server Handler # Ruby/Rack Git Smart-HTTP Server Handler
gem 'gitlab-grack', '~> 2.0.0.rc2', require: 'grack' gem 'gitlab-grack', '~> 2.0.2', require: 'grack'
# LDAP Auth # LDAP Auth
gem 'gitlab_omniauth-ldap', '1.2.1', require: "omniauth-ldap" gem 'gitlab_omniauth-ldap', '1.2.1', require: "omniauth-ldap"
...@@ -89,7 +89,7 @@ gem "six" ...@@ -89,7 +89,7 @@ gem "six"
gem "seed-fu" gem "seed-fu"
# Markup pipeline for GitLab # Markup pipeline for GitLab
gem 'html-pipeline-gitlab', '~> 0.1' gem 'html-pipeline', '~> 1.11.0'
# Markdown to HTML # Markdown to HTML
gem "github-markup" gem "github-markup"
...@@ -144,7 +144,7 @@ gem "redis-rails" ...@@ -144,7 +144,7 @@ gem "redis-rails"
gem 'tinder', '~> 1.9.2' gem 'tinder', '~> 1.9.2'
# HipChat integration # HipChat integration
gem "hipchat", "~> 1.4.0" gem 'hipchat', '~> 1.5.0'
# Flowdock integration # Flowdock integration
gem "gitlab-flowdock-git-hook", "~> 0.4.2" gem "gitlab-flowdock-git-hook", "~> 0.4.2"
...@@ -252,12 +252,13 @@ group :development, :test do ...@@ -252,12 +252,13 @@ group :development, :test do
# PhantomJS driver for Capybara # PhantomJS driver for Capybara
gem 'poltergeist', '~> 1.5.1' gem 'poltergeist', '~> 1.5.1'
gem 'jasmine', '2.0.2' gem 'jasmine', '~> 2.2.0'
gem 'jasmine-rails'
gem "spring", '~> 1.3.1' gem "spring", '~> 1.3.1'
gem "spring-commands-rspec", '1.0.4' gem "spring-commands-rspec", '1.0.4'
gem "spring-commands-spinach", '1.0.0' gem "spring-commands-spinach", '1.0.0'
gem "byebug" gem "byebug"
end end
......
...@@ -199,7 +199,7 @@ GEM ...@@ -199,7 +199,7 @@ GEM
gitlab-flowdock-git-hook (0.4.2.2) gitlab-flowdock-git-hook (0.4.2.2)
gitlab-grit (>= 2.4.1) gitlab-grit (>= 2.4.1)
multi_json multi_json
gitlab-grack (2.0.0) gitlab-grack (2.0.2)
rack (~> 1.5.1) rack (~> 1.5.1)
gitlab-grit (2.7.2) gitlab-grit (2.7.2)
charlock_holmes (~> 0.6) charlock_holmes (~> 0.6)
...@@ -271,20 +271,15 @@ GEM ...@@ -271,20 +271,15 @@ GEM
hashie (2.1.2) hashie (2.1.2)
highline (1.6.21) highline (1.6.21)
hike (1.2.3) hike (1.2.3)
hipchat (1.4.0) hipchat (1.5.0)
httparty httparty
mimemagic
hitimes (1.2.2) hitimes (1.2.2)
html-pipeline (1.11.0) html-pipeline (1.11.0)
activesupport (>= 2) activesupport (>= 2)
nokogiri (~> 1.4) nokogiri (~> 1.4)
html-pipeline-gitlab (0.2.0)
actionpack (~> 4)
gitlab_emoji (~> 0.1)
html-pipeline (~> 1.11.0)
mime-types
sanitize (~> 2.1)
http_parser.rb (0.5.3) http_parser.rb (0.5.3)
httparty (0.13.0) httparty (0.13.3)
json (~> 1.8) json (~> 1.8)
multi_xml (>= 0.5.2) multi_xml (>= 0.5.2)
httpauth (0.2.1) httpauth (0.2.1)
...@@ -292,12 +287,17 @@ GEM ...@@ -292,12 +287,17 @@ GEM
i18n (0.7.0) i18n (0.7.0)
ice_cube (0.11.1) ice_cube (0.11.1)
ice_nine (0.10.0) ice_nine (0.10.0)
jasmine (2.0.2) jasmine (2.2.0)
jasmine-core (~> 2.0.0) jasmine-core (~> 2.2)
phantomjs phantomjs
rack (>= 1.2.1) rack (>= 1.2.1)
rake rake
jasmine-core (2.0.0) jasmine-core (2.2.0)
jasmine-rails (0.10.8)
jasmine-core (>= 1.3, < 3.0)
phantomjs (>= 1.9)
railties (>= 3.2.0)
sprockets-rails
jquery-atwho-rails (0.3.3) jquery-atwho-rails (0.3.3)
jquery-rails (3.1.0) jquery-rails (3.1.0)
railties (>= 3.0, < 5.0) railties (>= 3.0, < 5.0)
...@@ -329,6 +329,7 @@ GEM ...@@ -329,6 +329,7 @@ GEM
mime-types (>= 1.16, < 3) mime-types (>= 1.16, < 3)
method_source (0.8.2) method_source (0.8.2)
mime-types (1.25.1) mime-types (1.25.1)
mimemagic (0.3.0)
mini_portile (0.6.1) mini_portile (0.6.1)
minitest (5.3.5) minitest (5.3.5)
mousetrap-rails (1.4.6) mousetrap-rails (1.4.6)
...@@ -391,7 +392,7 @@ GEM ...@@ -391,7 +392,7 @@ GEM
parser (2.2.0.2) parser (2.2.0.2)
ast (>= 1.1, < 3.0) ast (>= 1.1, < 3.0)
pg (0.15.1) pg (0.15.1)
phantomjs (1.9.2.0) phantomjs (1.9.8.0)
poltergeist (1.5.1) poltergeist (1.5.1)
capybara (~> 2.1) capybara (~> 2.1)
cliver (~> 0.3.1) cliver (~> 0.3.1)
...@@ -700,7 +701,7 @@ DEPENDENCIES ...@@ -700,7 +701,7 @@ DEPENDENCIES
gemnasium-gitlab-service (~> 0.2) gemnasium-gitlab-service (~> 0.2)
github-markup github-markup
gitlab-flowdock-git-hook (~> 0.4.2) gitlab-flowdock-git-hook (~> 0.4.2)
gitlab-grack (~> 2.0.0.rc2) gitlab-grack (~> 2.0.2)
gitlab-linguist (~> 3.0.1) gitlab-linguist (~> 3.0.1)
gitlab_emoji (~> 0.1) gitlab_emoji (~> 0.1)
gitlab_git (~> 7.1.10) gitlab_git (~> 7.1.10)
...@@ -714,10 +715,11 @@ DEPENDENCIES ...@@ -714,10 +715,11 @@ DEPENDENCIES
guard-rspec guard-rspec
guard-spinach guard-spinach
haml-rails haml-rails
hipchat (~> 1.4.0) hipchat (~> 1.5.0)
html-pipeline-gitlab (~> 0.1) html-pipeline (~> 1.11.0)
httparty httparty
jasmine (= 2.0.2) jasmine (~> 2.2.0)
jasmine-rails
jquery-atwho-rails (~> 0.3.3) jquery-atwho-rails (~> 0.3.3)
jquery-rails jquery-rails
jquery-scrollto-rails jquery-scrollto-rails
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
#= require shortcuts #= require shortcuts
#= require shortcuts_navigation #= require shortcuts_navigation
#= require shortcuts_dashboard_navigation #= require shortcuts_dashboard_navigation
#= require shortcuts_issueable #= require shortcuts_issuable
#= require shortcuts_network #= require shortcuts_network
#= require cal-heatmap #= require cal-heatmap
#= require_tree . #= require_tree .
...@@ -173,6 +173,7 @@ $ -> ...@@ -173,6 +173,7 @@ $ ->
$(@).closest(".diff-file").find(".notes_holder").toggle() $(@).closest(".diff-file").find(".notes_holder").toggle()
e.preventDefault() e.preventDefault()
$(document).off "click", '.js-confirm-danger'
$(document).on "click", '.js-confirm-danger', (e) -> $(document).on "click", '.js-confirm-danger', (e) ->
e.preventDefault() e.preventDefault()
btn = $(e.target) btn = $(e.target)
......
...@@ -8,11 +8,13 @@ class @ConfirmDangerModal ...@@ -8,11 +8,13 @@ class @ConfirmDangerModal
submit = $('.js-confirm-danger-submit') submit = $('.js-confirm-danger-submit')
submit.disable() submit.disable()
$('.js-confirm-danger-input').off 'input'
$('.js-confirm-danger-input').on 'input', -> $('.js-confirm-danger-input').on 'input', ->
if rstrip($(@).val()) is project_path if rstrip($(@).val()) is project_path
submit.enable() submit.enable()
else else
submit.disable() submit.disable()
$('.js-confirm-danger-submit').off 'click'
$('.js-confirm-danger-submit').on 'click', => $('.js-confirm-danger-submit').on 'click', =>
@form.submit() @form.submit()
...@@ -22,7 +22,7 @@ class Dispatcher ...@@ -22,7 +22,7 @@ class Dispatcher
shortcut_handler = new ShortcutsNavigation() shortcut_handler = new ShortcutsNavigation()
when 'projects:issues:show' when 'projects:issues:show'
new Issue() new Issue()
shortcut_handler = new ShortcutsIssueable() shortcut_handler = new ShortcutsIssuable()
new ZenMode() new ZenMode()
when 'projects:milestones:show' when 'projects:milestones:show'
new Milestone() new Milestone()
...@@ -47,7 +47,7 @@ class Dispatcher ...@@ -47,7 +47,7 @@ class Dispatcher
new IssuableForm($('.merge-request-form')) new IssuableForm($('.merge-request-form'))
when 'projects:merge_requests:show' when 'projects:merge_requests:show'
new Diff() new Diff()
shortcut_handler = new ShortcutsIssueable() shortcut_handler = new ShortcutsIssuable()
new ZenMode() new ZenMode()
when "projects:merge_requests:diffs" when "projects:merge_requests:diffs"
new Diff() new Diff()
......
#= require jquery
#= require mousetrap
#= require shortcuts_navigation
class @ShortcutsIssuable extends ShortcutsNavigation
constructor: (isMergeRequest) ->
super()
Mousetrap.bind('a', ->
$('.js-assignee').select2('open')
return false
)
Mousetrap.bind('m', ->
$('.js-milestone').select2('open')
return false
)
Mousetrap.bind('r', =>
@replyWithSelectedText()
return false
)
if isMergeRequest
@enabledHelp.push('.hidden-shortcut.merge_requests')
else
@enabledHelp.push('.hidden-shortcut.issues')
replyWithSelectedText: ->
if window.getSelection
selected = window.getSelection().toString()
replyField = $('.js-main-target-form #note_note')
return if selected.trim() == ""
# Put a '>' character before each non-empty line in the selection
quote = _.map selected.split("\n"), (val) ->
"> #{val}\n" if val.trim() != ''
# If replyField already has some content, add a newline before our quote
separator = replyField.val().trim() != "" and "\n" or ''
replyField.val (_, current) ->
current + separator + quote.join('') + "\n"
# Trigger autosave for the added text
replyField.trigger('input')
# Focus the input field
replyField.focus()
#= require shortcuts_navigation
class @ShortcutsIssueable extends ShortcutsNavigation
constructor: (isMergeRequest) ->
super()
Mousetrap.bind('a', ->
$('.js-assignee').select2('open')
return false
)
Mousetrap.bind('m', ->
$('.js-milestone').select2('open')
return false
)
if isMergeRequest
@enabledHelp.push('.hidden-shortcut.merge_reuests')
else
@enabledHelp.push('.hidden-shortcut.issues')
...@@ -4,6 +4,7 @@ $(document).on("click", '.toggle-nav-collapse', (e) -> ...@@ -4,6 +4,7 @@ $(document).on("click", '.toggle-nav-collapse', (e) ->
expanded = 'page-sidebar-expanded' expanded = 'page-sidebar-expanded'
$('.page-with-sidebar').toggleClass("#{collapsed} #{expanded}") $('.page-with-sidebar').toggleClass("#{collapsed} #{expanded}")
$('header').toggleClass("header-collapsed header-expanded")
$('.toggle-nav-collapse i').toggleClass("fa-angle-right fa-angle-left") $('.toggle-nav-collapse i').toggleClass("fa-angle-right fa-angle-left")
$.cookie("collapsed_nav", $('.page-with-sidebar').hasClass(collapsed), { path: '/' }) $.cookie("collapsed_nav", $('.page-with-sidebar').hasClass(collapsed), { path: '/' })
) )
#= require d3
#= require jquery
#= require stat_graph_contributors_util
class @ContributorsStatGraph class @ContributorsStatGraph
init: (log) -> init: (log) ->
@parsed_log = ContributorsStatGraphUtil.parse_log(log) @parsed_log = ContributorsStatGraphUtil.parse_log(log)
......
#= require d3
#= require jquery
#= require underscore
class @ContributorsGraph class @ContributorsGraph
MARGIN: MARGIN:
top: 20 top: 20
......
...@@ -50,13 +50,6 @@ ...@@ -50,13 +50,6 @@
@include box-shadow(0 0 0 3px #f1f1f1); @include box-shadow(0 0 0 3px #f1f1f1);
} }
@mixin header-font {
color: $style_color;
font-size: 16px;
line-height: 44px;
font-weight: normal;
}
@mixin md-typography { @mixin md-typography {
font-size: 15px; font-size: 15px;
line-height: 1.5; line-height: 1.5;
......
...@@ -11,9 +11,55 @@ header { ...@@ -11,9 +11,55 @@ header {
width: 100%; width: 100%;
.navbar-inner { .navbar-inner {
background: #FFF;
border-bottom: 1px solid #DDD;
filter: none; filter: none;
.title {
position: relative;
float: left;
margin: 0;
margin-left: 25px;
font-size: 18px;
line-height: 44px;
font-weight: normal;
color: #555;
@include str-truncated(37%);
a {
color: #555;
&:hover {
text-decoration: underline;
}
}
}
.app_logo {
border-bottom: 1px solid transparent;
margin-bottom: -1px;
a {
padding: 5px 8px;
img {
float: left;
}
h3 {
width: 158px;
float: left;
margin: 0;
margin-left: 20px;
font-size: 18px;
line-height: 34px;
font-weight: normal;
}
}
}
.nav > li > a { .nav > li > a {
color: #666;
font-size: 14px; font-size: 14px;
line-height: 32px; line-height: 32px;
padding: 6px 10px; padding: 6px 10px;
...@@ -30,15 +76,10 @@ header { ...@@ -30,15 +76,10 @@ header {
} }
.navbar-toggle { .navbar-toggle {
color: $style_color; color: #666;
margin: 0; margin: 0;
padding: 10px;
border-radius: 0; border-radius: 0;
button i { font-size: 22px; }
&.collapsed { background-color: transparent !important;}
&:hover { &:hover {
background-color: #EEE; background-color: #EEE;
} }
...@@ -60,8 +101,6 @@ header { ...@@ -60,8 +101,6 @@ header {
.navbar-collapse { .navbar-collapse {
margin-top: 47px; margin-top: 47px;
padding-right: 0;
padding-left: 0;
} }
.navbar-nav { .navbar-nav {
...@@ -100,10 +139,8 @@ header { ...@@ -100,10 +139,8 @@ header {
a { a {
float: left; float: left;
padding: 5px 0;
height: 46px; height: 46px;
width: 52px; width: 100%;
text-align: center;
img { img {
width: 36px; width: 36px;
...@@ -115,20 +152,6 @@ header { ...@@ -115,20 +152,6 @@ header {
} }
} }
/**
*
* Project / Area name
*
*/
.title {
position: relative;
float: left;
margin: 0;
margin-left: 5px;
@include header-font;
@include str-truncated(37%);
}
.profile-pic { .profile-pic {
padding: 0px !important; padding: 0px !important;
width: 46px; width: 46px;
...@@ -164,9 +187,10 @@ header { ...@@ -164,9 +187,10 @@ header {
padding-left: 25px; padding-left: 25px;
font-size: 13px; font-size: 13px;
@include border-radius(3px); @include border-radius(3px);
border: 1px solid #c6c6c6; border: 1px solid #DDD;
box-shadow: none; box-shadow: none;
@include transition(all 0.15s ease-in 0s); @include transition(all 0.15s ease-in 0s);
background-color: #f5f5f5;
} }
} }
} }
...@@ -192,3 +216,26 @@ header { ...@@ -192,3 +216,26 @@ header {
right: 35px !important; right: 35px !important;
} }
} }
@media (max-width: $screen-md-max) {
.header-collapsed, .header-expanded {
width: 52px;
h3 {
display: none;
}
}
}
@media(min-width: $screen-md-max) {
.header-collapsed {
width: 52px;
h3 {
display: none;
}
}
.header-expanded {
}
}
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
top: 0; top: 0;
left: 0; left: 0;
height: 100%; height: 100%;
border-right: 1px solid $border-color;
} }
} }
...@@ -38,28 +37,10 @@ ...@@ -38,28 +37,10 @@
} }
.nav-sidebar li { .nav-sidebar li {
&.active a {
color: $text-color;
background: #FFF !important;
font-weight: bold;
border: 1px solid #EEE;
border-right: 1px solid transparent;
border-left: 3px solid $style_color;
&.no-highlight {
background: none !important;
border: none;
}
i {
color: $text-color;
}
}
} }
.nav-sidebar li { .nav-sidebar li {
&.separate-item { &.separate-item {
border-top: 1px solid $border-color;
padding-top: 10px; padding-top: 10px;
margin-top: 10px; margin-top: 10px;
} }
...@@ -71,12 +52,10 @@ ...@@ -71,12 +52,10 @@
padding: 8px 15px; padding: 8px 15px;
font-size: 13px; font-size: 13px;
line-height: 20px; line-height: 20px;
padding-left: 20px; padding-left: 16px;
&:hover { &:hover {
text-decoration: none; text-decoration: none;
color: $text-color;
background: $border-color;
} }
&:active, &:focus { &:active, &:focus {
...@@ -146,7 +125,7 @@ ...@@ -146,7 +125,7 @@
.collapse-nav a { .collapse-nav a {
left: 0px; left: 0px;
padding: 7px 23px 3px 22px; width: 52px;
} }
} }
} }
...@@ -154,13 +133,13 @@ ...@@ -154,13 +133,13 @@
.collapse-nav a { .collapse-nav a {
position: fixed; position: fixed;
top: 46px; top: 46px;
padding: 5px 13px 5px 13px;
left: 198px; left: 198px;
font-size: 13px; font-size: 13px;
background: transparent; background: transparent;
color: black; width: 32px;
border-left: 1px solid $border-color; height: 28px;
border-bottom: 1px solid $border-color; text-align: center;
line-height: 28px;
} }
.collapse-nav a:hover { .collapse-nav a:hover {
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
} }
&.default { &.default {
background: #f1f1f1; background: #888888;
} }
&.modern { &.modern {
......
@mixin dark-theme($color-light, $color, $color-darker, $color-dark) {
header {
&.navbar-gitlab {
.navbar-inner {
background: $color;
.navbar-toggle {
color: #FFF;
}
.app_logo, .navbar-toggle {
&:hover {
background-color: $color-darker;
}
}
.app_logo {
background-color: $color-dark;
}
.title {
color: #FFF;
a {
color: #FFF;
&:hover {
text-decoration: underline;
}
}
}
.search {
.search-input {
background-color: $color-light;
background-color: rgba(255, 255, 255, 0.5);
border: 1px solid $color-light;
&:focus {
background-color: white;
}
}
}
.search-input::-webkit-input-placeholder {
color: #666;
}
.nav > li > a {
color: $color-light;
&:hover, &:focus, &:active {
background: none;
color: #FFF;
}
}
.search-input {
border-color: $color-light;
}
}
}
}
}
@mixin gitlab-theme($color-light, $color, $color-darker, $color-dark) {
header {
&.navbar-gitlab {
.navbar-inner {
.app_logo {
background-color: $color-darker;
a {
color: $color-light;
}
&:hover {
background-color: $color-dark;
a {
color: #FFF;
}
}
}
}
}
}
.page-with-sidebar {
background: $color-darker;
.collapse-nav a {
color: #FFF;
background: $color;
}
.sidebar-wrapper {
background: $color-darker;
border-right: 1px solid $color-darker;
}
.nav-sidebar li {
a {
color: $color-light;
&:hover, &:focus, &:active {
background: $color-dark;
}
i {
color: $color-light;
}
.count {
color: $color-light;
background: $color-dark;
}
}
&.separate-item {
border-top: 1px solid $color;
}
&.active a {
color: #FFF;
font-weight: bold;
&.no-highlight {
border: none;
}
i {
color: #FFF
}
}
}
}
}
...@@ -4,27 +4,5 @@ ...@@ -4,27 +4,5 @@
* *
*/ */
.ui_basic { .ui_basic {
header { @include gitlab-theme(#CCCCCC, #888888, #777777, #666666);
&.navbar-gitlab {
.navbar-inner {
background: #F1F1F1;
border-bottom: 1px solid #DDD;
.title {
color: #555;
a {
color: #555;
&:hover {
text-decoration: underline;
}
}
}
.nav > li > a {
color: $style_color;
}
}
}
}
} }
...@@ -2,5 +2,5 @@ ...@@ -2,5 +2,5 @@
* Blue GitLab UI theme * Blue GitLab UI theme
*/ */
.ui_blue { .ui_blue {
@include dark-theme(#BECDE9, #2980b9, #1970a9, #096099); @include gitlab-theme(#BECDE9, #2980b9, #1970a9, #096099);
} }
...@@ -2,5 +2,5 @@ ...@@ -2,5 +2,5 @@
* Violet GitLab UI theme * Violet GitLab UI theme
*/ */
.ui_color { .ui_color {
@include dark-theme(#98C, #548, #436, #325); @include gitlab-theme(#98C, #548, #436, #325);
} }
...@@ -2,5 +2,5 @@ ...@@ -2,5 +2,5 @@
* Gray GitLab UI theme * Gray GitLab UI theme
*/ */
.ui_gray { .ui_gray {
@include dark-theme(#979797, #373737, #272727, #222222); @include gitlab-theme(#979797, #373737, #272727, #222222);
} }
...@@ -2,5 +2,5 @@ ...@@ -2,5 +2,5 @@
* Classic GitLab UI theme * Classic GitLab UI theme
*/ */
.ui_mars { .ui_mars {
@include dark-theme(#979DA7, #474D57, #373D47, #24272D); @include gitlab-theme(#979DA7, #474D57, #373D47, #24272D);
} }
...@@ -2,5 +2,5 @@ ...@@ -2,5 +2,5 @@
* Modern GitLab UI theme * Modern GitLab UI theme
*/ */
.ui_modern { .ui_modern {
@include dark-theme(#ADC, #019875, #018865, #017855); @include gitlab-theme(#ADC, #019875, #018865, #017855);
} }
class Admin::AppearancesController < Admin::ApplicationController class Admin::AppearancesController < Admin::ApplicationController
before_filter :set_appearance, except: :create before_action :set_appearance, except: :create
def show def show
end end
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# Automatically sets the layout and ensures an administrator is logged in # Automatically sets the layout and ensures an administrator is logged in
class Admin::ApplicationController < ApplicationController class Admin::ApplicationController < ApplicationController
layout 'admin' layout 'admin'
before_filter :authenticate_admin! before_action :authenticate_admin!
def authenticate_admin! def authenticate_admin!
return render_404 unless current_user.is_admin? return render_404 unless current_user.is_admin?
......
class Admin::ApplicationSettingsController < Admin::ApplicationController class Admin::ApplicationSettingsController < Admin::ApplicationController
before_filter :set_application_setting before_action :set_application_setting
def show def show
end end
......
class Admin::BroadcastMessagesController < Admin::ApplicationController class Admin::BroadcastMessagesController < Admin::ApplicationController
before_filter :broadcast_messages before_action :broadcast_messages
def index def index
@broadcast_message = BroadcastMessage.new @broadcast_message = BroadcastMessage.new
......
class Admin::DeployKeysController < Admin::ApplicationController class Admin::DeployKeysController < Admin::ApplicationController
before_filter :deploy_keys, only: [:index] before_action :deploy_keys, only: [:index]
before_filter :deploy_key, only: [:show, :destroy] before_action :deploy_key, only: [:show, :destroy]
def index def index
end end
def show def show
end end
def new def new
......
class Admin::GitHooksController < Admin::ApplicationController class Admin::GitHooksController < Admin::ApplicationController
before_filter :git_hook before_action :git_hook
respond_to :html respond_to :html
......
class Admin::GroupsController < Admin::ApplicationController class Admin::GroupsController < Admin::ApplicationController
before_filter :group, only: [:edit, :show, :update, :destroy, :project_update, :members_update] before_action :group, only: [:edit, :show, :update, :destroy, :project_update, :members_update]
def index def index
@groups = Group.all @groups = Group.all
......
class Admin::KeysController < Admin::ApplicationController class Admin::KeysController < Admin::ApplicationController
before_filter :user, only: [:show, :destroy] before_action :user, only: [:show, :destroy]
def show def show
@key = user.keys.find(params[:id]) @key = user.keys.find(params[:id])
......
class Admin::ProjectsController < Admin::ApplicationController class Admin::ProjectsController < Admin::ApplicationController
before_filter :project, only: [:show, :transfer] before_action :project, only: [:show, :transfer]
before_filter :group, only: [:show, :transfer] before_action :group, only: [:show, :transfer]
before_filter :repository, only: [:show, :transfer] before_action :repository, only: [:show, :transfer]
def index def index
@projects = Project.all @projects = Project.all
......
class Admin::ServicesController < Admin::ApplicationController class Admin::ServicesController < Admin::ApplicationController
before_filter :service, only: [:edit, :update] before_action :service, only: [:edit, :update]
def index def index
@services = services_templates @services = services_templates
......
class Admin::UsersController < Admin::ApplicationController class Admin::UsersController < Admin::ApplicationController
before_filter :user, only: [:show, :edit, :update, :destroy] before_action :user, only: [:show, :edit, :update, :destroy]
def index def index
@users = User.order_name_asc.filter(params[:filter]) @users = User.order_name_asc.filter(params[:filter])
......
...@@ -6,15 +6,15 @@ class ApplicationController < ActionController::Base ...@@ -6,15 +6,15 @@ class ApplicationController < ActionController::Base
PER_PAGE = 20 PER_PAGE = 20
before_filter :authenticate_user_from_token! before_action :authenticate_user_from_token!
before_filter :authenticate_user! before_action :authenticate_user!
before_filter :reject_blocked! before_action :reject_blocked!
before_filter :check_password_expiration before_action :check_password_expiration
before_filter :ldap_security_check before_action :ldap_security_check
before_filter :default_headers before_action :default_headers
before_filter :add_gon_variables before_action :add_gon_variables
before_filter :configure_permitted_parameters, if: :devise_controller? before_action :configure_permitted_parameters, if: :devise_controller?
before_filter :require_email, unless: :devise_controller? before_action :require_email, unless: :devise_controller?
protect_from_forgery with: :exception protect_from_forgery with: :exception
...@@ -87,6 +87,10 @@ class ApplicationController < ActionController::Base ...@@ -87,6 +87,10 @@ class ApplicationController < ActionController::Base
end end
end end
def after_sign_out_path_for(resource)
new_user_session_path
end
def abilities def abilities
Ability.abilities Ability.abilities
end end
......
class AuditEventsController < ApplicationController class AuditEventsController < ApplicationController
# Authorize # Authorize
before_filter :repository, only: :project_log before_action :repository, only: :project_log
before_filter :authorize_admin_project!, only: :project_log before_action :authorize_admin_project!, only: :project_log
before_filter :group, only: :group_log before_action :group, only: :group_log
before_filter :authorize_admin_group!, only: :group_log before_action :authorize_admin_group!, only: :group_log
layout :determine_layout layout :determine_layout
......
class Dashboard::MilestonesController < ApplicationController class Dashboard::MilestonesController < ApplicationController
before_filter :load_projects before_action :load_projects
def index def index
project_milestones = case params[:state] project_milestones = case params[:state]
......
class Dashboard::ProjectsController < ApplicationController class Dashboard::ProjectsController < ApplicationController
before_filter :event_filter before_action :event_filter
def starred def starred
@projects = current_user.starred_projects @projects = current_user.starred_projects
......
class DashboardController < ApplicationController class DashboardController < ApplicationController
respond_to :html respond_to :html
before_filter :load_projects, except: [:projects] before_action :load_projects, except: [:projects]
before_filter :event_filter, only: :show before_action :event_filter, only: :show
def show def show
@projects = @projects.includes(:namespace) @projects = @projects.includes(:namespace)
......
class Explore::GroupsController < ApplicationController class Explore::GroupsController < ApplicationController
skip_before_filter :authenticate_user!, skip_before_action :authenticate_user!,
:reject_blocked, :set_current_user_for_observers :reject_blocked, :set_current_user_for_observers
layout "explore" layout "explore"
......
class Explore::ProjectsController < ApplicationController class Explore::ProjectsController < ApplicationController
skip_before_filter :authenticate_user!, skip_before_action :authenticate_user!,
:reject_blocked :reject_blocked
layout 'explore' layout 'explore'
......
class Groups::GroupMembersController < Groups::ApplicationController class Groups::GroupMembersController < Groups::ApplicationController
skip_before_filter :authenticate_user!, only: [:index] skip_before_action :authenticate_user!, only: [:index]
before_filter :group before_action :group
# Authorize # Authorize
before_filter :authorize_read_group! before_action :authorize_read_group!
before_filter :authorize_admin_group!, except: [:index, :leave] before_action :authorize_admin_group!, except: [:index, :leave]
layout :determine_layout layout :determine_layout
......
class Groups::HooksController < Groups::ApplicationController class Groups::HooksController < Groups::ApplicationController
# Authorize # Authorize
before_filter :group before_action :group
before_filter :authorize_admin_group! before_action :authorize_admin_group!
respond_to :html respond_to :html
......
class Groups::LdapsController < Groups::ApplicationController class Groups::LdapsController < Groups::ApplicationController
before_filter :group before_action :group
before_filter :authorize_admin_group! before_action :authorize_admin_group!
def reset_access def reset_access
LdapGroupResetService.new.execute(group, current_user) LdapGroupResetService.new.execute(group, current_user)
......
class Groups::MilestonesController < ApplicationController class Groups::MilestonesController < ApplicationController
layout 'group' layout 'group'
before_filter :authorize_group_milestone!, only: :update before_action :authorize_group_milestone!, only: :update
def index def index
project_milestones = case params[:state] project_milestones = case params[:state]
......
class GroupsController < Groups::ApplicationController class GroupsController < Groups::ApplicationController
skip_before_filter :authenticate_user!, only: [:show, :issues, :merge_requests] skip_before_action :authenticate_user!, only: [:show, :issues, :merge_requests]
respond_to :html respond_to :html
before_filter :group, except: [:new, :create] before_action :group, except: [:new, :create]
# Authorize # Authorize
before_filter :authorize_read_group!, except: [:new, :create] before_action :authorize_read_group!, except: [:new, :create]
before_filter :authorize_admin_group!, only: [:edit, :update, :destroy, :projects] before_action :authorize_admin_group!, only: [:edit, :update, :destroy, :projects]
before_filter :authorize_create_group!, only: [:new, :create] before_action :authorize_create_group!, only: [:new, :create]
# Load group projects # Load group projects
before_filter :load_projects, except: [:new, :create, :projects, :edit, :update] before_action :load_projects, except: [:new, :create, :projects, :edit, :update]
before_filter :event_filter, only: :show before_action :event_filter, only: :show
before_filter :set_title, only: [:new, :create] before_action :set_title, only: [:new, :create]
layout :determine_layout layout :determine_layout
......
class Import::BitbucketController < Import::BaseController class Import::BitbucketController < Import::BaseController
before_filter :verify_bitbucket_import_enabled before_action :verify_bitbucket_import_enabled
before_filter :bitbucket_auth, except: :callback before_action :bitbucket_auth, except: :callback
rescue_from OAuth::Error, with: :bitbucket_unauthorized rescue_from OAuth::Error, with: :bitbucket_unauthorized
def callback def callback
request_token = session.delete(:oauth_request_token) request_token = session.delete(:oauth_request_token)
raise "Session expired!" if request_token.nil? raise "Session expired!" if request_token.nil?
request_token.symbolize_keys! request_token.symbolize_keys!
access_token = client.get_token(request_token, params[:oauth_verifier], callback_import_bitbucket_url) access_token = client.get_token(request_token, params[:oauth_verifier], callback_import_bitbucket_url)
current_user.bitbucket_access_token = access_token.token current_user.bitbucket_access_token = access_token.token
...@@ -21,7 +21,7 @@ class Import::BitbucketController < Import::BaseController ...@@ -21,7 +21,7 @@ class Import::BitbucketController < Import::BaseController
def status def status
@repos = client.projects @repos = client.projects
@already_added_projects = current_user.created_projects.where(import_type: "bitbucket") @already_added_projects = current_user.created_projects.where(import_type: "bitbucket")
already_added_projects_names = @already_added_projects.pluck(:import_source) already_added_projects_names = @already_added_projects.pluck(:import_source)
...@@ -41,7 +41,7 @@ class Import::BitbucketController < Import::BaseController ...@@ -41,7 +41,7 @@ class Import::BitbucketController < Import::BaseController
repo_owner = repo["owner"] repo_owner = repo["owner"]
repo_owner = current_user.username if repo_owner == client.user["user"]["username"] repo_owner = current_user.username if repo_owner == client.user["user"]["username"]
@target_namespace = params[:new_namespace].presence || repo_owner @target_namespace = params[:new_namespace].presence || repo_owner
namespace = get_or_create_namespace || (render and return) namespace = get_or_create_namespace || (render and return)
unless Gitlab::BitbucketImport::KeyAdder.new(repo, current_user).execute unless Gitlab::BitbucketImport::KeyAdder.new(repo, current_user).execute
......
class Import::GithubController < Import::BaseController class Import::GithubController < Import::BaseController
before_filter :verify_github_import_enabled before_action :verify_github_import_enabled
before_filter :github_auth, except: :callback before_action :github_auth, except: :callback
rescue_from Octokit::Unauthorized, with: :github_unauthorized rescue_from Octokit::Unauthorized, with: :github_unauthorized
...@@ -36,7 +36,7 @@ class Import::GithubController < Import::BaseController ...@@ -36,7 +36,7 @@ class Import::GithubController < Import::BaseController
repo_owner = repo.owner.login repo_owner = repo.owner.login
repo_owner = current_user.username if repo_owner == client.user.login repo_owner = current_user.username if repo_owner == client.user.login
@target_namespace = params[:new_namespace].presence || repo_owner @target_namespace = params[:new_namespace].presence || repo_owner
namespace = get_or_create_namespace || (render and return) namespace = get_or_create_namespace || (render and return)
@project = Gitlab::GithubImport::ProjectCreator.new(repo, namespace, current_user).execute @project = Gitlab::GithubImport::ProjectCreator.new(repo, namespace, current_user).execute
......
class Import::GitlabController < Import::BaseController class Import::GitlabController < Import::BaseController
before_filter :verify_gitlab_import_enabled before_action :verify_gitlab_import_enabled
before_filter :gitlab_auth, except: :callback before_action :gitlab_auth, except: :callback
rescue_from OAuth2::Error, with: :gitlab_unauthorized rescue_from OAuth2::Error, with: :gitlab_unauthorized
...@@ -13,7 +13,7 @@ class Import::GitlabController < Import::BaseController ...@@ -13,7 +13,7 @@ class Import::GitlabController < Import::BaseController
def status def status
@repos = client.projects @repos = client.projects
@already_added_projects = current_user.created_projects.where(import_type: "gitlab") @already_added_projects = current_user.created_projects.where(import_type: "gitlab")
already_added_projects_names = @already_added_projects.pluck(:import_source) already_added_projects_names = @already_added_projects.pluck(:import_source)
...@@ -33,7 +33,7 @@ class Import::GitlabController < Import::BaseController ...@@ -33,7 +33,7 @@ class Import::GitlabController < Import::BaseController
repo_owner = repo["namespace"]["path"] repo_owner = repo["namespace"]["path"]
repo_owner = current_user.username if repo_owner == client.user["username"] repo_owner = current_user.username if repo_owner == client.user["username"]
@target_namespace = params[:new_namespace].presence || repo_owner @target_namespace = params[:new_namespace].presence || repo_owner
namespace = get_or_create_namespace || (render and return) namespace = get_or_create_namespace || (render and return)
@project = Gitlab::GitlabImport::ProjectCreator.new(repo, namespace, current_user).execute @project = Gitlab::GitlabImport::ProjectCreator.new(repo, namespace, current_user).execute
......
class Import::GoogleCodeController < Import::BaseController class Import::GoogleCodeController < Import::BaseController
before_filter :user_map, only: [:new_user_map, :create_user_map] before_action :user_map, only: [:new_user_map, :create_user_map]
def new def new
end end
def callback def callback
...@@ -68,7 +68,7 @@ class Import::GoogleCodeController < Import::BaseController ...@@ -68,7 +68,7 @@ class Import::GoogleCodeController < Import::BaseController
def status def status
unless client.valid? unless client.valid?
return redirect_to new_import_google_path return redirect_to new_import_google_code_path
end end
@repos = client.repos @repos = client.repos
......
class InvitesController < ApplicationController class InvitesController < ApplicationController
before_filter :member before_action :member
skip_before_filter :authenticate_user!, only: :decline skip_before_action :authenticate_user!, only: :decline
respond_to :html respond_to :html
...@@ -24,7 +24,7 @@ class InvitesController < ApplicationController ...@@ -24,7 +24,7 @@ class InvitesController < ApplicationController
if member.decline_invite! if member.decline_invite!
label, _ = source_info(member.source) label, _ = source_info(member.source)
path = path =
if current_user if current_user
dashboard_path dashboard_path
else else
...@@ -41,7 +41,7 @@ class InvitesController < ApplicationController ...@@ -41,7 +41,7 @@ class InvitesController < ApplicationController
def member def member
return @member if defined?(@member) return @member if defined?(@member)
@token = params[:id] @token = params[:id]
@member = Member.find_by_invite_token(@token) @member = Member.find_by_invite_token(@token)
......
class NamespacesController < ApplicationController class NamespacesController < ApplicationController
skip_before_filter :authenticate_user! skip_before_action :authenticate_user!
def show def show
namespace = Namespace.find_by(path: params[:id]) namespace = Namespace.find_by(path: params[:id])
......
class Oauth::ApplicationsController < Doorkeeper::ApplicationsController class Oauth::ApplicationsController < Doorkeeper::ApplicationsController
before_filter :authenticate_user! before_action :authenticate_user!
layout "profile" layout "profile"
def index def index
...@@ -10,7 +10,7 @@ class Oauth::ApplicationsController < Doorkeeper::ApplicationsController ...@@ -10,7 +10,7 @@ class Oauth::ApplicationsController < Doorkeeper::ApplicationsController
@application = Doorkeeper::Application.new(application_params) @application = Doorkeeper::Application.new(application_params)
@application.owner = current_user @application.owner = current_user
if @application.save if @application.save
flash[:notice] = I18n.t(:notice, scope: [:doorkeeper, :flash, :applications, :create]) flash[:notice] = I18n.t(:notice, scope: [:doorkeeper, :flash, :applications, :create])
redirect_to oauth_application_url(@application) redirect_to oauth_application_url(@application)
......
class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController
before_filter :authenticate_resource_owner! before_action :authenticate_resource_owner!
layout "profile" layout "profile"
def new def new
......
class Profiles::KeysController < ApplicationController class Profiles::KeysController < ApplicationController
layout "profile" layout "profile"
skip_before_filter :authenticate_user!, only: [:get_keys] skip_before_action :authenticate_user!, only: [:get_keys]
def index def index
@keys = current_user.keys @keys = current_user.keys
......
class Profiles::PasswordsController < ApplicationController class Profiles::PasswordsController < ApplicationController
layout :determine_layout layout :determine_layout
skip_before_filter :check_password_expiration, only: [:new, :create] skip_before_action :check_password_expiration, only: [:new, :create]
before_filter :set_user before_action :set_user
before_filter :set_title before_action :set_title
before_filter :authorize_change_password! before_action :authorize_change_password!
def new def new
end end
......
class ProfilesController < ApplicationController class ProfilesController < ApplicationController
include ActionView::Helpers::SanitizeHelper include ActionView::Helpers::SanitizeHelper
before_filter :user before_action :user
before_filter :authorize_change_username!, only: :update_username before_action :authorize_change_username!, only: :update_username
skip_before_filter :require_email, only: [:show, :update] skip_before_action :require_email, only: [:show, :update]
layout 'profile' layout 'profile'
......
class Projects::ApplicationController < ApplicationController class Projects::ApplicationController < ApplicationController
before_filter :project before_action :project
before_filter :repository before_action :repository
layout :determine_layout layout :determine_layout
def authenticate_user! def authenticate_user!
......
class Projects::AvatarsController < Projects::ApplicationController class Projects::AvatarsController < Projects::ApplicationController
layout 'project' layout 'project'
before_filter :project before_action :project
def show def show
@blob = @project.repository.blob_at_branch('master', @project.avatar_in_git) @blob = @project.repository.blob_at_branch('master', @project.avatar_in_git)
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
class Projects::BlameController < Projects::ApplicationController class Projects::BlameController < Projects::ApplicationController
include ExtractsPath include ExtractsPath
before_filter :require_non_empty_project before_action :require_non_empty_project
before_filter :assign_ref_vars before_action :assign_ref_vars
before_filter :authorize_download_code! before_action :authorize_download_code!
def show def show
@blame = Gitlab::Git::Blame.new(@repository, @commit.id, @path) @blame = Gitlab::Git::Blame.new(@repository, @commit.id, @path)
......
...@@ -6,15 +6,15 @@ class Projects::BlobController < Projects::ApplicationController ...@@ -6,15 +6,15 @@ class Projects::BlobController < Projects::ApplicationController
# Raised when given an invalid file path # Raised when given an invalid file path
class InvalidPathError < StandardError; end class InvalidPathError < StandardError; end
before_filter :require_non_empty_project, except: [:new, :create] before_action :require_non_empty_project, except: [:new, :create]
before_filter :authorize_download_code! before_action :authorize_download_code!
before_filter :authorize_push_code!, only: [:destroy] before_action :authorize_push_code!, only: [:destroy]
before_filter :assign_blob_vars before_action :assign_blob_vars
before_filter :commit, except: [:new, :create] before_action :commit, except: [:new, :create]
before_filter :blob, except: [:new, :create] before_action :blob, except: [:new, :create]
before_filter :from_merge_request, only: [:edit, :update] before_action :from_merge_request, only: [:edit, :update]
before_filter :after_edit_path, only: [:edit, :update] before_action :after_edit_path, only: [:edit, :update]
before_filter :require_branch_head, only: [:edit, :update] before_action :require_branch_head, only: [:edit, :update]
def new def new
commit unless @repository.empty? commit unless @repository.empty?
......
class Projects::BranchesController < Projects::ApplicationController class Projects::BranchesController < Projects::ApplicationController
include ActionView::Helpers::SanitizeHelper include ActionView::Helpers::SanitizeHelper
# Authorize # Authorize
before_filter :require_non_empty_project before_action :require_non_empty_project
before_filter :authorize_download_code! before_action :authorize_download_code!
before_filter :authorize_push_code!, only: [:create, :destroy] before_action :authorize_push_code!, only: [:create, :destroy]
def index def index
@sort = params[:sort] || 'name' @sort = params[:sort] || 'name'
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
# Not to be confused with CommitsController, plural. # Not to be confused with CommitsController, plural.
class Projects::CommitController < Projects::ApplicationController class Projects::CommitController < Projects::ApplicationController
# Authorize # Authorize
before_filter :require_non_empty_project before_action :require_non_empty_project
before_filter :authorize_download_code! before_action :authorize_download_code!
before_filter :commit before_action :commit
def show def show
return git_not_found! unless @commit return git_not_found! unless @commit
......
...@@ -3,9 +3,9 @@ require "base64" ...@@ -3,9 +3,9 @@ require "base64"
class Projects::CommitsController < Projects::ApplicationController class Projects::CommitsController < Projects::ApplicationController
include ExtractsPath include ExtractsPath
before_filter :require_non_empty_project before_action :require_non_empty_project
before_filter :assign_ref_vars before_action :assign_ref_vars
before_filter :authorize_download_code! before_action :authorize_download_code!
def show def show
@repo = @project.repository @repo = @project.repository
......
class Projects::CompareController < Projects::ApplicationController class Projects::CompareController < Projects::ApplicationController
# Authorize # Authorize
before_filter :require_non_empty_project before_action :require_non_empty_project
before_filter :authorize_download_code! before_action :authorize_download_code!
def index def index
end end
......
...@@ -2,7 +2,7 @@ class Projects::DeployKeysController < Projects::ApplicationController ...@@ -2,7 +2,7 @@ class Projects::DeployKeysController < Projects::ApplicationController
respond_to :html respond_to :html
# Authorize # Authorize
before_filter :authorize_admin_project! before_action :authorize_admin_project!
layout "project_settings" layout "project_settings"
......
class Projects::ForksController < Projects::ApplicationController class Projects::ForksController < Projects::ApplicationController
# Authorize # Authorize
before_filter :require_non_empty_project before_action :require_non_empty_project
before_filter :authorize_download_code! before_action :authorize_download_code!
def new def new
@namespaces = current_user.manageable_namespaces @namespaces = current_user.manageable_namespaces
......
class Projects::GitHooksController < Projects::ApplicationController class Projects::GitHooksController < Projects::ApplicationController
# Authorize # Authorize
before_filter :authorize_admin_project! before_action :authorize_admin_project!
respond_to :html respond_to :html
......
class Projects::GraphsController < Projects::ApplicationController class Projects::GraphsController < Projects::ApplicationController
# Authorize # Authorize
before_filter :require_non_empty_project before_action :require_non_empty_project
before_filter :authorize_download_code! before_action :authorize_download_code!
def show def show
respond_to do |format| respond_to do |format|
......
class Projects::GroupLinksController < Projects::ApplicationController class Projects::GroupLinksController < Projects::ApplicationController
layout 'project_settings' layout 'project_settings'
before_filter :authorize_admin_project! before_action :authorize_admin_project!
def index def index
@group_links = project.project_group_links.all @group_links = project.project_group_links.all
......
class Projects::HooksController < Projects::ApplicationController class Projects::HooksController < Projects::ApplicationController
# Authorize # Authorize
before_filter :authorize_admin_project! before_action :authorize_admin_project!
respond_to :html respond_to :html
......
class Projects::ImportsController < Projects::ApplicationController class Projects::ImportsController < Projects::ApplicationController
# Authorize # Authorize
before_filter :authorize_admin_project! before_action :authorize_admin_project!
before_filter :require_no_repo before_action :require_no_repo
before_filter :redirect_if_progress, except: :show before_action :redirect_if_progress, except: :show
def new def new
end end
......
class Projects::IssuesController < Projects::ApplicationController class Projects::IssuesController < Projects::ApplicationController
before_filter :module_enabled before_action :module_enabled
before_filter :issue, only: [:edit, :update, :show, :toggle_subscription] before_action :issue, only: [:edit, :update, :show, :toggle_subscription]
# Allow read any issue # Allow read any issue
before_filter :authorize_read_issue! before_action :authorize_read_issue!
# Allow write(create) issue # Allow write(create) issue
before_filter :authorize_write_issue!, only: [:new, :create] before_action :authorize_write_issue!, only: [:new, :create]
# Allow modify issue # Allow modify issue
before_filter :authorize_modify_issue!, only: [:edit, :update] before_action :authorize_modify_issue!, only: [:edit, :update]
# Allow issues bulk update # Allow issues bulk update
before_filter :authorize_admin_issues!, only: [:bulk_update] before_action :authorize_admin_issues!, only: [:bulk_update]
respond_to :html respond_to :html
...@@ -99,7 +99,7 @@ class Projects::IssuesController < Projects::ApplicationController ...@@ -99,7 +99,7 @@ class Projects::IssuesController < Projects::ApplicationController
def toggle_subscription def toggle_subscription
@issue.toggle_subscription(current_user) @issue.toggle_subscription(current_user)
render nothing: true render nothing: true
end end
......
class Projects::LabelsController < Projects::ApplicationController class Projects::LabelsController < Projects::ApplicationController
before_filter :module_enabled before_action :module_enabled
before_filter :label, only: [:edit, :update, :destroy] before_action :label, only: [:edit, :update, :destroy]
before_filter :authorize_labels! before_action :authorize_labels!
before_filter :authorize_admin_labels!, except: [:index] before_action :authorize_admin_labels!, except: [:index]
respond_to :js, :html respond_to :js, :html
......
require 'gitlab/satellite/satellite' require 'gitlab/satellite/satellite'
class Projects::MergeRequestsController < Projects::ApplicationController class Projects::MergeRequestsController < Projects::ApplicationController
before_filter :module_enabled before_action :module_enabled
before_filter :merge_request, only: [:edit, :update, :show, :diffs, :automerge, :automerge_check, :ci_status, :toggle_subscription] before_action :merge_request, only: [:edit, :update, :show, :diffs, :automerge, :automerge_check, :ci_status, :toggle_subscription]
before_filter :closes_issues, only: [:edit, :update, :show, :diffs] before_action :closes_issues, only: [:edit, :update, :show, :diffs]
before_filter :validates_merge_request, only: [:show, :diffs] before_action :validates_merge_request, only: [:show, :diffs]
before_filter :define_show_vars, only: [:show, :diffs] before_action :define_show_vars, only: [:show, :diffs]
# Allow read any merge_request # Allow read any merge_request
before_filter :authorize_read_merge_request! before_action :authorize_read_merge_request!
# Allow write(create) merge_request # Allow write(create) merge_request
before_filter :authorize_write_merge_request!, only: [:new, :create] before_action :authorize_write_merge_request!, only: [:new, :create]
# Allow modify merge_request # Allow modify merge_request
before_filter :authorize_modify_merge_request!, only: [:close, :edit, :update, :sort] before_action :authorize_modify_merge_request!, only: [:close, :edit, :update, :sort]
def index def index
terms = params['issue_search'] terms = params['issue_search']
...@@ -176,7 +176,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController ...@@ -176,7 +176,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
def toggle_subscription def toggle_subscription
@merge_request.toggle_subscription(current_user) @merge_request.toggle_subscription(current_user)
render nothing: true render nothing: true
end end
......
class Projects::MilestonesController < Projects::ApplicationController class Projects::MilestonesController < Projects::ApplicationController
before_filter :module_enabled before_action :module_enabled
before_filter :milestone, only: [:edit, :update, :destroy, :show, :sort_issues, :sort_merge_requests] before_action :milestone, only: [:edit, :update, :destroy, :show, :sort_issues, :sort_merge_requests]
# Allow read any milestone # Allow read any milestone
before_filter :authorize_read_milestone! before_action :authorize_read_milestone!
# Allow admin milestone # Allow admin milestone
before_filter :authorize_admin_milestone!, except: [:index, :show] before_action :authorize_admin_milestone!, except: [:index, :show]
respond_to :html respond_to :html
......
...@@ -2,9 +2,9 @@ class Projects::NetworkController < Projects::ApplicationController ...@@ -2,9 +2,9 @@ class Projects::NetworkController < Projects::ApplicationController
include ExtractsPath include ExtractsPath
include ApplicationHelper include ApplicationHelper
before_filter :require_non_empty_project before_action :require_non_empty_project
before_filter :assign_ref_vars before_action :assign_ref_vars
before_filter :authorize_download_code! before_action :authorize_download_code!
def show def show
respond_to do |format| respond_to do |format|
......
class Projects::NotesController < Projects::ApplicationController class Projects::NotesController < Projects::ApplicationController
# Authorize # Authorize
before_filter :authorize_read_note! before_action :authorize_read_note!
before_filter :authorize_write_note!, only: [:create] before_action :authorize_write_note!, only: [:create]
before_filter :authorize_admin_note!, only: [:update, :destroy] before_action :authorize_admin_note!, only: [:update, :destroy]
before_filter :find_current_user_notes, except: [:destroy, :delete_attachment] before_action :find_current_user_notes, except: [:destroy, :delete_attachment]
def index def index
current_fetched_at = Time.now.to_i current_fetched_at = Time.now.to_i
......
class Projects::ProjectMembersController < Projects::ApplicationController class Projects::ProjectMembersController < Projects::ApplicationController
# Authorize # Authorize
before_filter :authorize_admin_project!, except: :leave before_action :authorize_admin_project!, except: :leave
layout "project_settings" layout "project_settings"
......
class Projects::ProtectedBranchesController < Projects::ApplicationController class Projects::ProtectedBranchesController < Projects::ApplicationController
# Authorize # Authorize
before_filter :require_non_empty_project before_action :require_non_empty_project
before_filter :authorize_admin_project! before_action :authorize_admin_project!
layout "project_settings" layout "project_settings"
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
class Projects::RawController < Projects::ApplicationController class Projects::RawController < Projects::ApplicationController
include ExtractsPath include ExtractsPath
before_filter :require_non_empty_project before_action :require_non_empty_project
before_filter :assign_ref_vars before_action :assign_ref_vars
before_filter :authorize_download_code! before_action :authorize_download_code!
def show def show
@blob = @repository.blob_at(@commit.id, @path) @blob = @repository.blob_at(@commit.id, @path)
......
class Projects::RefsController < Projects::ApplicationController class Projects::RefsController < Projects::ApplicationController
include ExtractsPath include ExtractsPath
before_filter :require_non_empty_project before_action :require_non_empty_project
before_filter :assign_ref_vars before_action :assign_ref_vars
before_filter :authorize_download_code! before_action :authorize_download_code!
def switch def switch
respond_to do |format| respond_to do |format|
......
class Projects::RepositoriesController < Projects::ApplicationController class Projects::RepositoriesController < Projects::ApplicationController
# Authorize # Authorize
before_filter :require_non_empty_project, except: :create before_action :require_non_empty_project, except: :create
before_filter :authorize_download_code! before_action :authorize_download_code!
before_filter :authorize_admin_project!, only: :create before_action :authorize_admin_project!, only: :create
def create def create
@project.create_repository @project.create_repository
......
class Projects::ServicesController < Projects::ApplicationController class Projects::ServicesController < Projects::ApplicationController
# Authorize # Authorize
before_filter :authorize_admin_project! before_action :authorize_admin_project!
before_filter :service, only: [:edit, :update, :test] before_action :service, only: [:edit, :update, :test]
respond_to :html respond_to :html
......
class Projects::SnippetsController < Projects::ApplicationController class Projects::SnippetsController < Projects::ApplicationController
before_filter :module_enabled before_action :module_enabled
before_filter :snippet, only: [:show, :edit, :destroy, :update, :raw] before_action :snippet, only: [:show, :edit, :destroy, :update, :raw]
# Allow read any snippet # Allow read any snippet
before_filter :authorize_read_project_snippet! before_action :authorize_read_project_snippet!
# Allow write(create) snippet # Allow write(create) snippet
before_filter :authorize_write_project_snippet!, only: [:new, :create] before_action :authorize_write_project_snippet!, only: [:new, :create]
# Allow modify snippet # Allow modify snippet
before_filter :authorize_modify_project_snippet!, only: [:edit, :update] before_action :authorize_modify_project_snippet!, only: [:edit, :update]
# Allow destroy snippet # Allow destroy snippet
before_filter :authorize_admin_project_snippet!, only: [:destroy] before_action :authorize_admin_project_snippet!, only: [:destroy]
respond_to :html respond_to :html
......
class Projects::TagsController < Projects::ApplicationController class Projects::TagsController < Projects::ApplicationController
# Authorize # Authorize
before_filter :require_non_empty_project before_action :require_non_empty_project
before_filter :authorize_download_code! before_action :authorize_download_code!
before_filter :authorize_push_code!, only: [:create] before_action :authorize_push_code!, only: [:create]
before_filter :authorize_admin_project!, only: [:destroy] before_action :authorize_admin_project!, only: [:destroy]
def index def index
sorted = VersionSorter.rsort(@repository.tag_names) sorted = VersionSorter.rsort(@repository.tag_names)
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
class Projects::TreeController < Projects::ApplicationController class Projects::TreeController < Projects::ApplicationController
include ExtractsPath include ExtractsPath
before_filter :require_non_empty_project, except: [:new, :create] before_action :require_non_empty_project, except: [:new, :create]
before_filter :assign_ref_vars before_action :assign_ref_vars
before_filter :authorize_download_code! before_action :authorize_download_code!
def show def show
if tree.entries.empty? if tree.entries.empty?
......
class Projects::UploadsController < Projects::ApplicationController class Projects::UploadsController < Projects::ApplicationController
layout 'project' layout 'project'
# We want to skip these filters for only the `show` action if `image?` is true, # We want to skip these filters for only the `show` action if `image?` is true,
# but `skip_before_filter` doesn't work with both `only` and `if`, so we accomplish the same like this. # but `skip_before_action` doesn't work with both `only` and `if`, so we accomplish the same like this.
skipped_filters = [:authenticate_user!, :reject_blocked!, :project, :repository] skipped_filters = [:authenticate_user!, :reject_blocked!, :project, :repository]
skip_before_filter *skipped_filters, only: [:show] skip_before_action *skipped_filters, only: [:show]
before_filter *skipped_filters, only: [:show], unless: :image? before_action *skipped_filters, only: [:show], unless: :image?
def create def create
link_to_file = ::Projects::UploadService.new(project, params[:file]). link_to_file = ::Projects::UploadService.new(project, params[:file]).
...@@ -40,7 +40,7 @@ class Projects::UploadsController < Projects::ApplicationController ...@@ -40,7 +40,7 @@ class Projects::UploadsController < Projects::ApplicationController
file_project = Project.find_with_namespace("#{namespace}/#{id}") file_project = Project.find_with_namespace("#{namespace}/#{id}")
if file_project.nil? if file_project.nil?
@uploader = nil @uploader = nil
return return
end end
......
require 'project_wiki' require 'project_wiki'
class Projects::WikisController < Projects::ApplicationController class Projects::WikisController < Projects::ApplicationController
before_filter :authorize_read_wiki! before_action :authorize_read_wiki!
before_filter :authorize_write_wiki!, only: [:edit, :create, :history] before_action :authorize_write_wiki!, only: [:edit, :create, :history]
before_filter :authorize_admin_wiki!, only: :destroy before_action :authorize_admin_wiki!, only: :destroy
before_filter :load_project_wiki before_action :load_project_wiki
include WikiHelper include WikiHelper
def pages def pages
......
class ProjectsController < ApplicationController class ProjectsController < ApplicationController
prepend_before_filter :render_go_import, only: [:show] prepend_before_action :render_go_import, only: [:show]
skip_before_filter :authenticate_user!, only: [:show] skip_before_action :authenticate_user!, only: [:show]
before_filter :project, except: [:new, :create] before_action :project, except: [:new, :create]
before_filter :repository, except: [:new, :create] before_action :repository, except: [:new, :create]
# Authorize # Authorize
before_filter :authorize_admin_project!, only: [:edit, :update, :destroy, :transfer, :archive, :unarchive] before_action :authorize_admin_project!, only: [:edit, :update, :destroy, :transfer, :archive, :unarchive]
before_filter :set_title, only: [:new, :create] before_action :set_title, only: [:new, :create]
before_filter :event_filter, only: :show before_action :event_filter, only: :show
layout 'navless', only: [:new, :create, :fork] layout 'navless', only: [:new, :create, :fork]
......
class RegistrationsController < Devise::RegistrationsController class RegistrationsController < Devise::RegistrationsController
before_filter :signup_enabled? before_action :signup_enabled?
def new def new
redirect_to(new_user_session_path) redirect_to(new_user_session_path)
......
class SnippetsController < ApplicationController class SnippetsController < ApplicationController
before_filter :snippet, only: [:show, :edit, :destroy, :update, :raw] before_action :snippet, only: [:show, :edit, :destroy, :update, :raw]
# Allow modify snippet # Allow modify snippet
before_filter :authorize_modify_snippet!, only: [:edit, :update] before_action :authorize_modify_snippet!, only: [:edit, :update]
# Allow destroy snippet # Allow destroy snippet
before_filter :authorize_admin_snippet!, only: [:destroy] before_action :authorize_admin_snippet!, only: [:destroy]
before_filter :set_title before_action :set_title
skip_before_filter :authenticate_user!, only: [:index, :user_index, :show, :raw] skip_before_action :authenticate_user!, only: [:index, :user_index, :show, :raw]
respond_to :html respond_to :html
layout :determine_layout layout :determine_layout
def index def index
@snippets = SnippetsFinder.new.execute(current_user, filter: :all).page(params[:page]).per(PER_PAGE) if params[:username].present?
end @user = User.find_by(username: params[:username])
def user_index render_404 and return unless @user
@user = User.find_by(username: params[:username])
@snippets = SnippetsFinder.new.execute(current_user, {
render_404 and return unless @user filter: :by_user,
user: @user,
@snippets = SnippetsFinder.new.execute(current_user, { scope: params[:scope] }).
filter: :by_user, page(params[:page]).per(PER_PAGE)
user: @user,
scope: params[:scope] }). if @user == current_user
page(params[:page]).per(PER_PAGE) render 'current_user_index'
else
if @user == current_user render 'user_index'
render 'current_user_index' end
else else
render 'user_index' @snippets = SnippetsFinder.new.execute(current_user, filter: :all).page(params[:page]).per(PER_PAGE)
end end
end end
...@@ -108,6 +108,6 @@ class SnippetsController < ApplicationController ...@@ -108,6 +108,6 @@ class SnippetsController < ApplicationController
end end
def determine_layout def determine_layout
current_user ? 'navless' : 'public_users' current_user ? 'snippets' : 'public_users'
end end
end end
class UnsubscribesController < ApplicationController class UnsubscribesController < ApplicationController
skip_before_filter :authenticate_user!, skip_before_action :authenticate_user!,
:reject_blocked, :set_current_user_for_observers, :reject_blocked, :set_current_user_for_observers,
:add_abilities :add_abilities
layout 'public_users' layout 'public_users'
......
class UploadsController < ApplicationController class UploadsController < ApplicationController
skip_before_filter :authenticate_user! skip_before_action :authenticate_user!
before_filter :find_model, :authorize_access! before_action :find_model, :authorize_access!
def show def show
uploader = @model.send(upload_mount) uploader = @model.send(upload_mount)
......
class UsersController < ApplicationController class UsersController < ApplicationController
skip_before_filter :authenticate_user! skip_before_action :authenticate_user!
before_filter :set_user before_action :set_user
layout :determine_layout layout :determine_layout
def show def show
......
...@@ -255,11 +255,15 @@ module ApplicationHelper ...@@ -255,11 +255,15 @@ module ApplicationHelper
# #
# Returns `html_options`, adding `rel: nofollow` for external links # Returns `html_options`, adding `rel: nofollow` for external links
def add_nofollow(link, html_options = {}) def add_nofollow(link, html_options = {})
uri = URI(link) begin
uri = URI(link)
if uri && uri.absolute? && uri.host != Gitlab.config.gitlab.host if uri && uri.absolute? && uri.host != Gitlab.config.gitlab.host
rel = html_options.fetch(:rel, '') rel = html_options.fetch(:rel, '')
html_options[:rel] = (rel + ' nofollow').strip html_options[:rel] = (rel + ' nofollow').strip
end
rescue URI::Error
# noop
end end
html_options html_options
...@@ -314,12 +318,4 @@ module ApplicationHelper ...@@ -314,12 +318,4 @@ module ApplicationHelper
profile_key_path(key) profile_key_path(key)
end end
end end
def nav_sidebar_class
if nav_menu_collapsed?
"page-sidebar-collapsed"
else
"page-sidebar-expanded"
end
end
end end
...@@ -74,6 +74,7 @@ module GitlabMarkdownHelper ...@@ -74,6 +74,7 @@ module GitlabMarkdownHelper
end end
end end
# TODO (rspeicher): This should be its own filter
def create_relative_links(text) def create_relative_links(text)
paths = extract_paths(text) paths = extract_paths(text)
......
...@@ -108,4 +108,7 @@ module IssuesHelper ...@@ -108,4 +108,7 @@ module IssuesHelper
xml.summary issue.title xml.summary issue.title
end end
end end
# Required for Gitlab::Markdown::IssueReferenceFilter
module_function :url_for_issue, :title_for_issue
end end
module LabelsHelper module LabelsHelper
include ActionView::Helpers::TagHelper
def project_label_names def project_label_names
@project.labels.pluck(:title) @project.labels.pluck(:title)
end end
...@@ -7,9 +9,13 @@ module LabelsHelper ...@@ -7,9 +9,13 @@ module LabelsHelper
label_color = label.color || Label::DEFAULT_COLOR label_color = label.color || Label::DEFAULT_COLOR
text_color = text_color_for_bg(label_color) text_color = text_color_for_bg(label_color)
content_tag :span, class: 'label color-label', style: "background-color:#{label_color};color:#{text_color}" do # Intentionally not using content_tag here so that this method can be called
label.name # by LabelReferenceFilter
end span = %(<span class="label color-label") +
%( style="background-color: #{label_color}; color: #{text_color}">) +
escape_once(label.name) + '</span>'
span.html_safe
end end
def suggested_colors def suggested_colors
...@@ -42,13 +48,16 @@ module LabelsHelper ...@@ -42,13 +48,16 @@ module LabelsHelper
r, g, b = bg_color.slice(1,7).scan(/.{2}/).map(&:hex) r, g, b = bg_color.slice(1,7).scan(/.{2}/).map(&:hex)
if (r + g + b) > 500 if (r + g + b) > 500
"#333" '#333333'
else else
"#FFF" '#FFFFFF'
end end
end end
def project_labels_options(project) def project_labels_options(project)
options_from_collection_for_select(project.labels, 'name', 'name', params[:label_name]) options_from_collection_for_select(project.labels, 'name', 'name', params[:label_name])
end end
# Required for Gitlab::Markdown::LabelReferenceFilter
module_function :render_colored_label, :text_color_for_bg, :escape_once
end end
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.
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.
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