Merge branch 'master' into feed_improvements
This commit is contained in:
commit
86b929328b
|
@ -1,6 +1,6 @@
|
||||||
language: ruby
|
language: ruby
|
||||||
rvm:
|
rvm:
|
||||||
- 2.2.0
|
- 2.2.2
|
||||||
bundler_args: --without development
|
bundler_args: --without development
|
||||||
env:
|
env:
|
||||||
- SPEC_GROUP=controllers
|
- SPEC_GROUP=controllers
|
||||||
|
|
90
Gemfile
90
Gemfile
|
@ -1,43 +1,42 @@
|
||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
gem 'rails', '4.0.13'
|
gem 'rails', '4.1.10'
|
||||||
|
|
||||||
gem 'activeadmin', github: 'activeadmin'
|
gem 'activeadmin', github: 'activeadmin'
|
||||||
gem 'pg', '~> 0.17.1'
|
gem 'pg'
|
||||||
gem 'schema_plus', '~> 1.5'
|
gem 'schema_plus', '~> 1.5'
|
||||||
########
|
########
|
||||||
gem 'protected_attributes'
|
gem 'protected_attributes'
|
||||||
########
|
########
|
||||||
gem 'devise', '~> 3.3'
|
gem 'devise'
|
||||||
gem 'omniauth'
|
gem 'omniauth'
|
||||||
gem 'omniauth-facebook'
|
gem 'omniauth-facebook'
|
||||||
gem 'omniauth-google-oauth2'
|
gem 'omniauth-google-oauth2'
|
||||||
gem 'omniauth-github'
|
gem 'omniauth-github'
|
||||||
# gem 'omniauth-openid', '~> 1.0.1'
|
# gem 'omniauth-openid', '~> 1.0.1'
|
||||||
# gem 'cancan', '1.6.10'
|
gem 'pundit'
|
||||||
gem 'cancan', git: 'git://github.com/rosa-abf/cancan.git', tag: '1.6.10-abf'
|
|
||||||
|
|
||||||
gem 'ancestry', '~> 2.1'
|
gem 'ancestry'
|
||||||
gem 'paperclip', '~> 4.2'
|
gem 'paperclip'
|
||||||
gem 'resque', '~> 1.25'
|
gem 'resque'
|
||||||
gem 'resque-status', '~> 0.4'
|
gem 'resque-status'
|
||||||
gem 'resque_mailer', '~> 2.2'
|
gem 'resque_mailer'
|
||||||
gem 'resque-scheduler', '~> 2.5.4'
|
gem 'resque-scheduler', '~> 2.5.4'
|
||||||
gem 'perform_later', git: 'git://github.com/KensoDev/perform_later.git' # should be after resque_mailer
|
gem 'perform_later', git: 'git://github.com/KensoDev/perform_later.git' # should be after resque_mailer
|
||||||
gem 'russian', '~> 0.6.0'
|
gem 'russian'
|
||||||
gem 'highline', '~> 1.6.20'
|
gem 'highline', '~> 1.6.20'
|
||||||
gem 'state_machine', '~> 1.2'
|
gem 'state_machines-activerecord'
|
||||||
gem 'redis-rails', '~> 4.0'
|
gem 'redis-rails'
|
||||||
|
|
||||||
gem 'grack', git: 'git://github.com/rosa-abf/grack.git', require: 'git_http'
|
gem 'grack', git: 'git://github.com/rosa-abf/grack.git', require: 'git_http'
|
||||||
gem 'grit', git: 'git://github.com/rosa-abf/grit.git', tag: '2.6.16'
|
gem 'grit', git: 'git://github.com/rosa-abf/grit.git', tag: '2.6.17'
|
||||||
gem 'charlock_holmes', '~> 0.7'
|
gem 'charlock_holmes'
|
||||||
gem 'github-linguist', '3.1.5', require: 'linguist'
|
gem 'github-linguist', '3.1.5', require: 'linguist'
|
||||||
gem 'diff-display', '~> 0.0.1'
|
gem 'diff-display'
|
||||||
|
|
||||||
# Wiki
|
# Wiki
|
||||||
gem "gollum-lib", '~> 3.0'
|
gem 'gollum-lib', '~> 3.0'
|
||||||
gem "redcarpet", '~> 3.1'
|
gem 'redcarpet', '~> 3.2'
|
||||||
gem 'creole'
|
gem 'creole'
|
||||||
gem 'rdiscount'
|
gem 'rdiscount'
|
||||||
# gem 'org-ruby'
|
# gem 'org-ruby'
|
||||||
|
@ -45,37 +44,37 @@ gem 'RedCloth'
|
||||||
gem 'wikicloth'
|
gem 'wikicloth'
|
||||||
|
|
||||||
gem 'newrelic_rpm'
|
gem 'newrelic_rpm'
|
||||||
gem 'whenever', '~> 0.9.0', require: false
|
gem 'whenever', require: false
|
||||||
|
|
||||||
gem 'jbuilder', '~> 2.2'
|
gem 'jbuilder'
|
||||||
gem 'rails3-jquery-autocomplete'
|
gem 'rails3-jquery-autocomplete'
|
||||||
gem 'sprockets', '2.11.0'
|
gem 'sprockets'
|
||||||
gem 'will_paginate', '~> 3.0'
|
gem 'will_paginate'
|
||||||
gem 'meta-tags', '~> 2.0', require: 'meta_tags'
|
gem 'meta-tags', require: 'meta_tags'
|
||||||
gem "haml-rails", '~> 0.5'
|
gem 'haml-rails'
|
||||||
gem 'jquery-rails', '~> 2.3'
|
gem 'jquery-rails'
|
||||||
gem 'jquery-migrate-rails'
|
gem 'jquery-migrate-rails'
|
||||||
gem 'ruby-haml-js', '~> 0.0.5'
|
gem 'ruby-haml-js'
|
||||||
gem 'slim'
|
gem 'slim'
|
||||||
gem 'simple_form', '3.1.0.rc2'
|
gem 'simple_form', '3.1.0.rc2'
|
||||||
gem 'friendly_id', '~> 5.0'
|
gem 'friendly_id'
|
||||||
|
|
||||||
gem 'rack-throttle', '~> 0.3.0'
|
gem 'rack-throttle', '~> 0.3.0'
|
||||||
gem 'rest-client', '~> 1.7'
|
gem 'rest-client'
|
||||||
gem 'ohm', '~> 1.3.2' # Ohm 2 breaks the compatibility with previous versions.
|
gem 'ohm', '~> 1.3.2' # Ohm 2 breaks the compatibility with previous versions.
|
||||||
gem 'ohm-expire', '~> 0.1.3'
|
gem 'ohm-expire', '~> 0.1.3'
|
||||||
|
|
||||||
gem 'ffi', '~> 1.9.3'
|
gem 'ffi'
|
||||||
|
|
||||||
gem 'attr_encrypted', '~> 1.3'
|
gem 'attr_encrypted'
|
||||||
gem "gemoji", "~> 2.1"
|
gem 'gemoji'
|
||||||
|
|
||||||
# AngularJS related stuff
|
# AngularJS related stuff
|
||||||
gem 'underscore-rails'
|
gem 'underscore-rails'
|
||||||
gem 'angularjs-rails', '~> 1.2.15'
|
gem 'angularjs-rails'
|
||||||
gem 'ng-rails-csrf'
|
gem 'ng-rails-csrf'
|
||||||
gem 'momentjs-rails'
|
gem 'momentjs-rails'
|
||||||
gem 'angular-i18n', '0.1.2'
|
gem 'angular-i18n'
|
||||||
gem 'js-routes'
|
gem 'js-routes'
|
||||||
gem 'soundmanager-rails'
|
gem 'soundmanager-rails'
|
||||||
gem 'angular-ui-bootstrap-rails'
|
gem 'angular-ui-bootstrap-rails'
|
||||||
|
@ -84,23 +83,28 @@ gem 'ngmin-rails'
|
||||||
|
|
||||||
gem 'time_diff'
|
gem 'time_diff'
|
||||||
|
|
||||||
gem 'sass-rails', '~> 4.0'
|
gem 'sass-rails'
|
||||||
gem 'coffee-rails', '~> 4.1'
|
gem 'coffee-rails'
|
||||||
gem 'bootstrap-sass', '~> 3.3'
|
gem 'bootstrap-sass'
|
||||||
gem 'font-awesome-rails', '~> 4.2'
|
gem 'font-awesome-rails'
|
||||||
gem 'zeroclipboard-rails', '~> 0.1.0'
|
gem 'zeroclipboard-rails'
|
||||||
|
|
||||||
gem 'compass-rails', '~> 2.0'
|
gem 'compass-rails'
|
||||||
gem 'uglifier', '~> 2.5'
|
gem 'uglifier'
|
||||||
gem 'therubyracer', '~> 0.12.1', platforms: [:mri, :rbx]
|
gem 'therubyracer', platforms: [:mri, :rbx]
|
||||||
gem 'therubyrhino', '~> 2.0', platforms: :jruby
|
gem 'therubyrhino', platforms: :jruby
|
||||||
gem 'sitemap_generator'
|
gem 'sitemap_generator'
|
||||||
|
|
||||||
gem 'codemirror-rails', '~> 4.5'
|
gem 'codemirror-rails', '~> 4.5'
|
||||||
|
|
||||||
|
source 'https://rails-assets.org' do
|
||||||
|
gem 'rails-assets-notifyjs'
|
||||||
|
end
|
||||||
|
|
||||||
|
gem 'rack-utf8_sanitizer'
|
||||||
|
|
||||||
group :production do
|
group :production do
|
||||||
gem "airbrake", '~> 3.1'
|
gem 'airbrake'
|
||||||
#gem 'bluepill', '~> 0.0.60', require: false
|
#gem 'bluepill', '~> 0.0.60', require: false
|
||||||
gem 'puma'
|
gem 'puma'
|
||||||
end
|
end
|
||||||
|
|
259
Gemfile.lock
259
Gemfile.lock
|
@ -10,7 +10,7 @@ GIT
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: git://github.com/activeadmin/activeadmin.git
|
remote: git://github.com/activeadmin/activeadmin.git
|
||||||
revision: ed1fbca8c64af827616c58f274d7be256ca513b6
|
revision: e27ccba8a7ea1f7f3085748decec1f6911f6d5d2
|
||||||
specs:
|
specs:
|
||||||
activeadmin (1.0.0.pre)
|
activeadmin (1.0.0.pre)
|
||||||
arbre (~> 1.0, >= 1.0.2)
|
arbre (~> 1.0, >= 1.0.2)
|
||||||
|
@ -26,13 +26,6 @@ GIT
|
||||||
ransack (~> 1.3)
|
ransack (~> 1.3)
|
||||||
sass-rails
|
sass-rails
|
||||||
|
|
||||||
GIT
|
|
||||||
remote: git://github.com/rosa-abf/cancan.git
|
|
||||||
revision: fe1089b70c08d3ed11bac4f8e69ecb3d1d9adc29
|
|
||||||
tag: 1.6.10-abf
|
|
||||||
specs:
|
|
||||||
cancan (1.6.10)
|
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: git://github.com/rosa-abf/grack.git
|
remote: git://github.com/rosa-abf/grack.git
|
||||||
revision: 020be3fef3fb308b9d214252522aa5945bf6584a
|
revision: 020be3fef3fb308b9d214252522aa5945bf6584a
|
||||||
|
@ -41,8 +34,8 @@ GIT
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: git://github.com/rosa-abf/grit.git
|
remote: git://github.com/rosa-abf/grit.git
|
||||||
revision: a9548c92188cc307e7af1dd41a733e7000a783a9
|
revision: b733f0ceefb44b18a9dec8f509ba5493dab59e4e
|
||||||
tag: 2.6.16
|
tag: 2.6.17
|
||||||
specs:
|
specs:
|
||||||
grit (2.5.0)
|
grit (2.5.0)
|
||||||
diff-lcs (~> 1.1)
|
diff-lcs (~> 1.1)
|
||||||
|
@ -51,34 +44,37 @@ GIT
|
||||||
|
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
|
remote: https://rails-assets.org/
|
||||||
specs:
|
specs:
|
||||||
RedCloth (4.2.9)
|
RedCloth (4.2.9)
|
||||||
actionmailer (4.0.13)
|
actionmailer (4.1.10)
|
||||||
actionpack (= 4.0.13)
|
actionpack (= 4.1.10)
|
||||||
|
actionview (= 4.1.10)
|
||||||
mail (~> 2.5, >= 2.5.4)
|
mail (~> 2.5, >= 2.5.4)
|
||||||
actionpack (4.0.13)
|
actionpack (4.1.10)
|
||||||
activesupport (= 4.0.13)
|
actionview (= 4.1.10)
|
||||||
builder (~> 3.1.0)
|
activesupport (= 4.1.10)
|
||||||
erubis (~> 2.7.0)
|
|
||||||
rack (~> 1.5.2)
|
rack (~> 1.5.2)
|
||||||
rack-test (~> 0.6.2)
|
rack-test (~> 0.6.2)
|
||||||
activemodel (4.0.13)
|
actionview (4.1.10)
|
||||||
activesupport (= 4.0.13)
|
activesupport (= 4.1.10)
|
||||||
builder (~> 3.1.0)
|
builder (~> 3.1)
|
||||||
activerecord (4.0.13)
|
erubis (~> 2.7.0)
|
||||||
activemodel (= 4.0.13)
|
activemodel (4.1.10)
|
||||||
activerecord-deprecated_finders (~> 1.0.2)
|
activesupport (= 4.1.10)
|
||||||
activesupport (= 4.0.13)
|
builder (~> 3.1)
|
||||||
arel (~> 4.0.0)
|
activerecord (4.1.10)
|
||||||
activerecord-deprecated_finders (1.0.3)
|
activemodel (= 4.1.10)
|
||||||
activesupport (4.0.13)
|
activesupport (= 4.1.10)
|
||||||
|
arel (~> 5.0.0)
|
||||||
|
activesupport (4.1.10)
|
||||||
i18n (~> 0.6, >= 0.6.9)
|
i18n (~> 0.6, >= 0.6.9)
|
||||||
minitest (~> 4.2)
|
json (~> 1.7, >= 1.7.7)
|
||||||
multi_json (~> 1.3)
|
minitest (~> 5.1)
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.1)
|
||||||
tzinfo (~> 0.3.37)
|
tzinfo (~> 1.1)
|
||||||
addressable (2.3.7)
|
addressable (2.3.7)
|
||||||
airbrake (3.2.1)
|
airbrake (4.1.0)
|
||||||
builder
|
builder
|
||||||
multi_json
|
multi_json
|
||||||
ancestry (2.1.0)
|
ancestry (2.1.0)
|
||||||
|
@ -89,13 +85,13 @@ GEM
|
||||||
sprockets
|
sprockets
|
||||||
tilt
|
tilt
|
||||||
angular-ui-bootstrap-rails (0.12.0)
|
angular-ui-bootstrap-rails (0.12.0)
|
||||||
angularjs-rails (1.2.26)
|
angularjs-rails (1.3.14)
|
||||||
arbre (1.0.3)
|
arbre (1.0.3)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
arel (4.0.2)
|
arel (5.0.1.20140414130214)
|
||||||
attr_encrypted (1.3.3)
|
attr_encrypted (1.3.3)
|
||||||
encryptor (>= 1.3.0)
|
encryptor (>= 1.3.0)
|
||||||
autoprefixer-rails (5.1.5)
|
autoprefixer-rails (5.1.7)
|
||||||
execjs
|
execjs
|
||||||
json
|
json
|
||||||
bcrypt (3.1.10)
|
bcrypt (3.1.10)
|
||||||
|
@ -108,10 +104,10 @@ GEM
|
||||||
bootstrap-sass (3.3.3)
|
bootstrap-sass (3.3.3)
|
||||||
autoprefixer-rails (>= 5.0.0.1)
|
autoprefixer-rails (>= 5.0.0.1)
|
||||||
sass (>= 3.2.19)
|
sass (>= 3.2.19)
|
||||||
bourbon (4.2.0)
|
bourbon (4.2.1)
|
||||||
sass (~> 3.4)
|
sass (~> 3.4)
|
||||||
thor
|
thor
|
||||||
builder (3.1.4)
|
builder (3.2.2)
|
||||||
callsite (0.0.11)
|
callsite (0.0.11)
|
||||||
cape (1.8.0)
|
cape (1.8.0)
|
||||||
capistrano (2.15.5)
|
capistrano (2.15.5)
|
||||||
|
@ -126,9 +122,9 @@ GEM
|
||||||
chunky_png (1.3.4)
|
chunky_png (1.3.4)
|
||||||
climate_control (0.0.3)
|
climate_control (0.0.3)
|
||||||
activesupport (>= 3.0)
|
activesupport (>= 3.0)
|
||||||
cocaine (0.5.5)
|
cocaine (0.5.7)
|
||||||
climate_control (>= 0.0.3, < 1.0)
|
climate_control (>= 0.0.3, < 1.0)
|
||||||
codemirror-rails (4.8)
|
codemirror-rails (4.13)
|
||||||
railties (>= 3.0, < 5)
|
railties (>= 3.0, < 5)
|
||||||
coderay (1.1.0)
|
coderay (1.1.0)
|
||||||
coffee-rails (4.1.0)
|
coffee-rails (4.1.0)
|
||||||
|
@ -168,6 +164,8 @@ GEM
|
||||||
warden (~> 1.2.3)
|
warden (~> 1.2.3)
|
||||||
diff-display (0.0.1)
|
diff-display (0.0.1)
|
||||||
diff-lcs (1.2.5)
|
diff-lcs (1.2.5)
|
||||||
|
domain_name (0.5.24)
|
||||||
|
unf (>= 0.0.5, < 1.0.0)
|
||||||
encryptor (1.3.0)
|
encryptor (1.3.0)
|
||||||
erubis (2.7.0)
|
erubis (2.7.0)
|
||||||
escape_utils (1.0.1)
|
escape_utils (1.0.1)
|
||||||
|
@ -203,7 +201,7 @@ GEM
|
||||||
diff-lcs (~> 1.1)
|
diff-lcs (~> 1.1)
|
||||||
mime-types (~> 1.15)
|
mime-types (~> 1.15)
|
||||||
posix-spawn (~> 0.3)
|
posix-spawn (~> 0.3)
|
||||||
gli (2.12.2)
|
gli (2.13.0)
|
||||||
gollum-lib (3.0.0)
|
gollum-lib (3.0.0)
|
||||||
github-markup (~> 1.1.0)
|
github-markup (~> 1.1.0)
|
||||||
gitlab-grit (~> 2.6.5)
|
gitlab-grit (~> 2.6.5)
|
||||||
|
@ -231,17 +229,19 @@ GEM
|
||||||
haml (~> 4.0.0)
|
haml (~> 4.0.0)
|
||||||
nokogiri (~> 1.6.0)
|
nokogiri (~> 1.6.0)
|
||||||
ruby_parser (~> 3.5)
|
ruby_parser (~> 3.5)
|
||||||
|
http-cookie (1.0.2)
|
||||||
|
domain_name (~> 0.5)
|
||||||
i18n (0.7.0)
|
i18n (0.7.0)
|
||||||
inherited_resources (1.6.0)
|
inherited_resources (1.6.0)
|
||||||
actionpack (>= 3.2, < 5)
|
actionpack (>= 3.2, < 5)
|
||||||
has_scope (~> 0.6.0.rc)
|
has_scope (~> 0.6.0.rc)
|
||||||
railties (>= 3.2, < 5)
|
railties (>= 3.2, < 5)
|
||||||
responders
|
responders
|
||||||
jbuilder (2.2.7)
|
jbuilder (2.2.9)
|
||||||
activesupport (>= 3.0.0, < 5)
|
activesupport (>= 3.0.0, < 5)
|
||||||
multi_json (~> 1.2)
|
multi_json (~> 1.2)
|
||||||
jquery-migrate-rails (1.2.1)
|
jquery-migrate-rails (1.2.1)
|
||||||
jquery-rails (2.3.0)
|
jquery-rails (3.1.2)
|
||||||
railties (>= 3.0, < 5.0)
|
railties (>= 3.0, < 5.0)
|
||||||
thor (>= 0.14, < 2.0)
|
thor (>= 0.14, < 2.0)
|
||||||
jquery-ui-rails (5.0.3)
|
jquery-ui-rails (5.0.3)
|
||||||
|
@ -250,7 +250,7 @@ GEM
|
||||||
railties (>= 3.2)
|
railties (>= 3.2)
|
||||||
sprockets-rails
|
sprockets-rails
|
||||||
json (1.8.2)
|
json (1.8.2)
|
||||||
jwt (1.2.1)
|
jwt (1.3.0)
|
||||||
kaminari (0.16.3)
|
kaminari (0.16.3)
|
||||||
actionpack (>= 3.0.0)
|
actionpack (>= 3.0.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
|
@ -280,12 +280,12 @@ GEM
|
||||||
railties (>= 3.0.0, < 5.0.0)
|
railties (>= 3.0.0, < 5.0.0)
|
||||||
mime-types (1.25.1)
|
mime-types (1.25.1)
|
||||||
mini_portile (0.6.2)
|
mini_portile (0.6.2)
|
||||||
minitest (4.7.5)
|
minitest (5.6.0)
|
||||||
mock_redis (0.14.0)
|
mock_redis (0.14.0)
|
||||||
momentjs-rails (2.9.0)
|
momentjs-rails (2.9.0)
|
||||||
railties (>= 3.1)
|
railties (>= 3.1)
|
||||||
mono_logger (1.1.0)
|
mono_logger (1.1.0)
|
||||||
multi_json (1.10.1)
|
multi_json (1.11.0)
|
||||||
multi_xml (0.5.5)
|
multi_xml (0.5.5)
|
||||||
multipart-post (2.0.0)
|
multipart-post (2.0.0)
|
||||||
nest (1.1.2)
|
nest (1.1.2)
|
||||||
|
@ -297,7 +297,7 @@ GEM
|
||||||
net-ssh (2.9.2)
|
net-ssh (2.9.2)
|
||||||
net-ssh-gateway (1.2.0)
|
net-ssh-gateway (1.2.0)
|
||||||
net-ssh (>= 2.6.5)
|
net-ssh (>= 2.6.5)
|
||||||
netrc (0.10.2)
|
netrc (0.10.3)
|
||||||
newrelic_rpm (3.10.0.279)
|
newrelic_rpm (3.10.0.279)
|
||||||
ng-rails-csrf (0.1.0)
|
ng-rails-csrf (0.1.0)
|
||||||
ngmin-rails (0.4.0)
|
ngmin-rails (0.4.0)
|
||||||
|
@ -319,7 +319,7 @@ GEM
|
||||||
omniauth (1.2.2)
|
omniauth (1.2.2)
|
||||||
hashie (>= 1.2, < 4)
|
hashie (>= 1.2, < 4)
|
||||||
rack (~> 1.0)
|
rack (~> 1.0)
|
||||||
omniauth-facebook (2.0.0)
|
omniauth-facebook (2.0.1)
|
||||||
omniauth-oauth2 (~> 1.2)
|
omniauth-oauth2 (~> 1.2)
|
||||||
omniauth-github (1.1.2)
|
omniauth-github (1.1.2)
|
||||||
omniauth (~> 1.0)
|
omniauth (~> 1.0)
|
||||||
|
@ -338,14 +338,16 @@ GEM
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
cocaine (~> 0.5.3)
|
cocaine (~> 0.5.3)
|
||||||
mime-types
|
mime-types
|
||||||
pg (0.17.1)
|
pg (0.18.1)
|
||||||
polyamorous (1.1.0)
|
polyamorous (1.1.0)
|
||||||
activerecord (>= 3.0)
|
activerecord (>= 3.0)
|
||||||
posix-spawn (0.3.10)
|
posix-spawn (0.3.10)
|
||||||
protected_attributes (1.0.8)
|
protected_attributes (1.0.9)
|
||||||
activemodel (>= 4.0.1, < 5.0)
|
activemodel (>= 4.0.1, < 5.0)
|
||||||
puma (2.11.1)
|
puma (2.11.1)
|
||||||
rack (>= 1.1, < 2.0)
|
rack (>= 1.1, < 2.0)
|
||||||
|
pundit (0.3.0)
|
||||||
|
activesupport (>= 3.0.0)
|
||||||
pygments.rb (0.6.2)
|
pygments.rb (0.6.2)
|
||||||
posix-spawn (~> 0.3.6)
|
posix-spawn (~> 0.3.6)
|
||||||
yajl-ruby (~> 1.2.0)
|
yajl-ruby (~> 1.2.0)
|
||||||
|
@ -358,21 +360,26 @@ GEM
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
rack-throttle (0.3.0)
|
rack-throttle (0.3.0)
|
||||||
rack (>= 1.0.0)
|
rack (>= 1.0.0)
|
||||||
rails (4.0.13)
|
rack-utf8_sanitizer (1.3.0)
|
||||||
actionmailer (= 4.0.13)
|
rack (~> 1.0)
|
||||||
actionpack (= 4.0.13)
|
rails (4.1.10)
|
||||||
activerecord (= 4.0.13)
|
actionmailer (= 4.1.10)
|
||||||
activesupport (= 4.0.13)
|
actionpack (= 4.1.10)
|
||||||
|
actionview (= 4.1.10)
|
||||||
|
activemodel (= 4.1.10)
|
||||||
|
activerecord (= 4.1.10)
|
||||||
|
activesupport (= 4.1.10)
|
||||||
bundler (>= 1.3.0, < 2.0)
|
bundler (>= 1.3.0, < 2.0)
|
||||||
railties (= 4.0.13)
|
railties (= 4.1.10)
|
||||||
sprockets-rails (~> 2.0)
|
sprockets-rails (~> 2.0)
|
||||||
|
rails-assets-notifyjs (0.3.2)
|
||||||
rails3-generators (1.0.0)
|
rails3-generators (1.0.0)
|
||||||
railties (>= 3.0.0)
|
railties (>= 3.0.0)
|
||||||
rails3-jquery-autocomplete (1.0.15)
|
rails3-jquery-autocomplete (1.0.15)
|
||||||
rails (>= 3.2)
|
rails (>= 3.2)
|
||||||
railties (4.0.13)
|
railties (4.1.10)
|
||||||
actionpack (= 4.0.13)
|
actionpack (= 4.1.10)
|
||||||
activesupport (= 4.0.13)
|
activesupport (= 4.1.10)
|
||||||
rake (>= 0.8.7)
|
rake (>= 0.8.7)
|
||||||
thor (>= 0.18.1, < 2.0)
|
thor (>= 0.18.1, < 2.0)
|
||||||
rake (10.4.2)
|
rake (10.4.2)
|
||||||
|
@ -386,7 +393,7 @@ GEM
|
||||||
rb-inotify (0.9.5)
|
rb-inotify (0.9.5)
|
||||||
ffi (>= 0.5.0)
|
ffi (>= 0.5.0)
|
||||||
rdiscount (2.1.8)
|
rdiscount (2.1.8)
|
||||||
redcarpet (3.2.2)
|
redcarpet (3.2.3)
|
||||||
redis (3.0.7)
|
redis (3.0.7)
|
||||||
redis-actionpack (4.0.0)
|
redis-actionpack (4.0.0)
|
||||||
actionpack (~> 4)
|
actionpack (~> 4)
|
||||||
|
@ -424,28 +431,29 @@ GEM
|
||||||
resque (~> 1.19)
|
resque (~> 1.19)
|
||||||
resque_mailer (2.2.7)
|
resque_mailer (2.2.7)
|
||||||
actionmailer (>= 3.0)
|
actionmailer (>= 3.0)
|
||||||
rest-client (1.7.2)
|
rest-client (1.8.0)
|
||||||
|
http-cookie (>= 1.0.2, < 2.0)
|
||||||
mime-types (>= 1.16, < 3.0)
|
mime-types (>= 1.16, < 3.0)
|
||||||
netrc (~> 0.7)
|
netrc (~> 0.7)
|
||||||
rouge (1.3.4)
|
rouge (1.3.4)
|
||||||
rr (1.1.2)
|
rr (1.1.2)
|
||||||
rspec-core (3.2.0)
|
rspec-core (3.2.1)
|
||||||
rspec-support (~> 3.2.0)
|
rspec-support (~> 3.2.0)
|
||||||
rspec-expectations (3.2.0)
|
rspec-expectations (3.2.0)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.2.0)
|
rspec-support (~> 3.2.0)
|
||||||
rspec-mocks (3.2.0)
|
rspec-mocks (3.2.1)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.2.0)
|
rspec-support (~> 3.2.0)
|
||||||
rspec-rails (3.2.0)
|
rspec-rails (3.2.1)
|
||||||
actionpack (>= 3.0, <= 4.2)
|
actionpack (>= 3.0, < 4.3)
|
||||||
activesupport (>= 3.0, <= 4.2)
|
activesupport (>= 3.0, < 4.3)
|
||||||
railties (>= 3.0, <= 4.2)
|
railties (>= 3.0, < 4.3)
|
||||||
rspec-core (~> 3.2.0)
|
rspec-core (~> 3.2.0)
|
||||||
rspec-expectations (~> 3.2.0)
|
rspec-expectations (~> 3.2.0)
|
||||||
rspec-mocks (~> 3.2.0)
|
rspec-mocks (~> 3.2.0)
|
||||||
rspec-support (~> 3.2.0)
|
rspec-support (~> 3.2.0)
|
||||||
rspec-support (3.2.1)
|
rspec-support (3.2.2)
|
||||||
ruby-haml-js (0.0.5)
|
ruby-haml-js (0.0.5)
|
||||||
execjs
|
execjs
|
||||||
sprockets (>= 2.0.0)
|
sprockets (>= 2.0.0)
|
||||||
|
@ -461,17 +469,19 @@ GEM
|
||||||
safe_yaml (1.0.4)
|
safe_yaml (1.0.4)
|
||||||
sanitize (2.1.0)
|
sanitize (2.1.0)
|
||||||
nokogiri (>= 1.4.4)
|
nokogiri (>= 1.4.4)
|
||||||
sass (3.4.12)
|
sass (3.4.13)
|
||||||
sass-rails (4.0.1)
|
sass-rails (5.0.1)
|
||||||
railties (>= 4.0.0, < 5.0)
|
railties (>= 4.0.0, < 5.0)
|
||||||
sass (>= 3.1.10)
|
sass (~> 3.1)
|
||||||
sprockets-rails (~> 2.0.0)
|
sprockets (>= 2.8, < 4.0)
|
||||||
|
sprockets-rails (>= 2.0, < 4.0)
|
||||||
|
tilt (~> 1.1)
|
||||||
schema_plus (1.8.7)
|
schema_plus (1.8.7)
|
||||||
activerecord (>= 3.2, < 4.3)
|
activerecord (>= 3.2, < 4.3)
|
||||||
valuable
|
valuable
|
||||||
scrivener (0.0.3)
|
scrivener (0.0.3)
|
||||||
sexp_processor (4.4.5)
|
sexp_processor (4.4.5)
|
||||||
shotgun (0.9)
|
shotgun (0.9.1)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
shoulda (3.5.0)
|
shoulda (3.5.0)
|
||||||
shoulda-context (~> 1.0, >= 1.0.1)
|
shoulda-context (~> 1.0, >= 1.0.1)
|
||||||
|
@ -497,20 +507,26 @@ GEM
|
||||||
temple (~> 0.7.3)
|
temple (~> 0.7.3)
|
||||||
tilt (>= 1.3.3, < 2.1)
|
tilt (>= 1.3.3, < 2.1)
|
||||||
soundmanager-rails (1.0.1)
|
soundmanager-rails (1.0.1)
|
||||||
sprockets (2.11.0)
|
sprockets (2.12.3)
|
||||||
hike (~> 1.2)
|
hike (~> 1.2)
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
rack (~> 1.0)
|
rack (~> 1.0)
|
||||||
tilt (~> 1.1, != 1.3.0)
|
tilt (~> 1.1, != 1.3.0)
|
||||||
sprockets-rails (2.0.1)
|
sprockets-rails (2.2.4)
|
||||||
actionpack (>= 3.0)
|
actionpack (>= 3.0)
|
||||||
activesupport (>= 3.0)
|
activesupport (>= 3.0)
|
||||||
sprockets (~> 2.8)
|
sprockets (>= 2.8, < 4.0)
|
||||||
sqlite3 (1.3.10)
|
sqlite3 (1.3.10)
|
||||||
state_machine (1.2.0)
|
state_machines (0.2.2)
|
||||||
|
state_machines-activemodel (0.1.2)
|
||||||
|
activemodel (~> 4.1)
|
||||||
|
state_machines (~> 0.2.0)
|
||||||
|
state_machines-activerecord (0.2.0)
|
||||||
|
activerecord (~> 4.1)
|
||||||
|
state_machines-activemodel (~> 0.1.0)
|
||||||
stringex (2.5.2)
|
stringex (2.5.2)
|
||||||
temple (0.7.5)
|
temple (0.7.5)
|
||||||
test_after_commit (0.4.0)
|
test_after_commit (0.4.1)
|
||||||
activerecord (>= 3.2)
|
activerecord (>= 3.2)
|
||||||
therubyracer (0.12.1)
|
therubyracer (0.12.1)
|
||||||
libv8 (~> 3.16.14.0)
|
libv8 (~> 3.16.14.0)
|
||||||
|
@ -520,20 +536,21 @@ GEM
|
||||||
eventmachine (>= 0.12.6)
|
eventmachine (>= 0.12.6)
|
||||||
rack (>= 1.0.0)
|
rack (>= 1.0.0)
|
||||||
thor (0.19.1)
|
thor (0.19.1)
|
||||||
thread_safe (0.3.4)
|
thread_safe (0.3.5)
|
||||||
tilt (1.4.1)
|
tilt (1.4.1)
|
||||||
time_diff (0.3.0)
|
time_diff (0.3.0)
|
||||||
activesupport
|
activesupport
|
||||||
i18n
|
i18n
|
||||||
timecop (0.7.1)
|
timecop (0.7.3)
|
||||||
tmp_cache (0.1.1)
|
tmp_cache (0.1.1)
|
||||||
twitter-text (1.11.0)
|
twitter-text (1.11.0)
|
||||||
unf (~> 0.1.0)
|
unf (~> 0.1.0)
|
||||||
tzinfo (0.3.43)
|
tzinfo (1.2.2)
|
||||||
uglifier (2.7.0)
|
thread_safe (~> 0.1)
|
||||||
|
uglifier (2.7.1)
|
||||||
execjs (>= 0.3.0)
|
execjs (>= 0.3.0)
|
||||||
json (>= 1.8.0)
|
json (>= 1.8.0)
|
||||||
underscore-rails (1.7.0)
|
underscore-rails (1.8.2)
|
||||||
unf (0.1.4)
|
unf (0.1.4)
|
||||||
unf_ext
|
unf_ext
|
||||||
unf_ext (0.0.6)
|
unf_ext (0.0.6)
|
||||||
|
@ -563,46 +580,45 @@ PLATFORMS
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
RedCloth
|
RedCloth
|
||||||
activeadmin!
|
activeadmin!
|
||||||
airbrake (~> 3.1)
|
airbrake
|
||||||
ancestry (~> 2.1)
|
ancestry
|
||||||
angular-i18n (= 0.1.2)
|
angular-i18n
|
||||||
angular-rails-templates
|
angular-rails-templates
|
||||||
angular-ui-bootstrap-rails
|
angular-ui-bootstrap-rails
|
||||||
angularjs-rails (~> 1.2.15)
|
angularjs-rails
|
||||||
attr_encrypted (~> 1.3)
|
attr_encrypted
|
||||||
better_errors
|
better_errors
|
||||||
binding_of_caller
|
binding_of_caller
|
||||||
bootstrap-sass (~> 3.3)
|
bootstrap-sass
|
||||||
cancan!
|
|
||||||
cape
|
cape
|
||||||
capistrano
|
capistrano
|
||||||
capistrano_colors
|
capistrano_colors
|
||||||
charlock_holmes (~> 0.7)
|
charlock_holmes
|
||||||
codemirror-rails (~> 4.5)
|
codemirror-rails (~> 4.5)
|
||||||
coffee-rails (~> 4.1)
|
coffee-rails
|
||||||
compass-rails (~> 2.0)
|
compass-rails
|
||||||
creole
|
creole
|
||||||
devise (~> 3.3)
|
devise
|
||||||
diff-display (~> 0.0.1)
|
diff-display
|
||||||
factory_girl_rails
|
factory_girl_rails
|
||||||
ffi (~> 1.9.3)
|
ffi
|
||||||
font-awesome-rails (~> 4.2)
|
font-awesome-rails
|
||||||
friendly_id (~> 5.0)
|
friendly_id
|
||||||
gemoji (~> 2.1)
|
gemoji
|
||||||
github-linguist (= 3.1.5)
|
github-linguist (= 3.1.5)
|
||||||
gollum-lib (~> 3.0)
|
gollum-lib (~> 3.0)
|
||||||
grack!
|
grack!
|
||||||
grit!
|
grit!
|
||||||
haml-rails (~> 0.5)
|
haml-rails
|
||||||
highline (~> 1.6.20)
|
highline (~> 1.6.20)
|
||||||
hirb
|
hirb
|
||||||
jbuilder (~> 2.2)
|
jbuilder
|
||||||
jquery-migrate-rails
|
jquery-migrate-rails
|
||||||
jquery-rails (~> 2.3)
|
jquery-rails
|
||||||
js-routes
|
js-routes
|
||||||
localeapp
|
localeapp
|
||||||
mailcatcher
|
mailcatcher
|
||||||
meta-tags (~> 2.0)
|
meta-tags
|
||||||
meta_request
|
meta_request
|
||||||
mock_redis
|
mock_redis
|
||||||
momentjs-rails
|
momentjs-rails
|
||||||
|
@ -615,30 +631,33 @@ DEPENDENCIES
|
||||||
omniauth-facebook
|
omniauth-facebook
|
||||||
omniauth-github
|
omniauth-github
|
||||||
omniauth-google-oauth2
|
omniauth-google-oauth2
|
||||||
paperclip (~> 4.2)
|
paperclip
|
||||||
perform_later!
|
perform_later!
|
||||||
pg (~> 0.17.1)
|
pg
|
||||||
protected_attributes
|
protected_attributes
|
||||||
puma
|
puma
|
||||||
|
pundit
|
||||||
rack-throttle (~> 0.3.0)
|
rack-throttle (~> 0.3.0)
|
||||||
rails (= 4.0.13)
|
rack-utf8_sanitizer
|
||||||
|
rails (= 4.1.10)
|
||||||
|
rails-assets-notifyjs!
|
||||||
rails3-generators
|
rails3-generators
|
||||||
rails3-jquery-autocomplete
|
rails3-jquery-autocomplete
|
||||||
rake
|
rake
|
||||||
rdiscount
|
rdiscount
|
||||||
redcarpet (~> 3.1)
|
redcarpet (~> 3.2)
|
||||||
redis-rails (~> 4.0)
|
redis-rails
|
||||||
resque (~> 1.25)
|
resque
|
||||||
resque-scheduler (~> 2.5.4)
|
resque-scheduler (~> 2.5.4)
|
||||||
resque-status (~> 0.4)
|
resque-status
|
||||||
resque_mailer (~> 2.2)
|
resque_mailer
|
||||||
rest-client (~> 1.7)
|
rest-client
|
||||||
rr
|
rr
|
||||||
rspec-rails
|
rspec-rails
|
||||||
ruby-haml-js (~> 0.0.5)
|
ruby-haml-js
|
||||||
russian (~> 0.6.0)
|
russian
|
||||||
rvm-capistrano
|
rvm-capistrano
|
||||||
sass-rails (~> 4.0)
|
sass-rails
|
||||||
schema_plus (~> 1.5)
|
schema_plus (~> 1.5)
|
||||||
shotgun
|
shotgun
|
||||||
shoulda
|
shoulda
|
||||||
|
@ -648,17 +667,17 @@ DEPENDENCIES
|
||||||
skype
|
skype
|
||||||
slim
|
slim
|
||||||
soundmanager-rails
|
soundmanager-rails
|
||||||
sprockets (= 2.11.0)
|
sprockets
|
||||||
state_machine (~> 1.2)
|
state_machines-activerecord
|
||||||
test_after_commit
|
test_after_commit
|
||||||
therubyracer (~> 0.12.1)
|
therubyracer
|
||||||
therubyrhino (~> 2.0)
|
therubyrhino
|
||||||
time_diff
|
time_diff
|
||||||
timecop
|
timecop
|
||||||
uglifier (~> 2.5)
|
uglifier
|
||||||
underscore-rails
|
underscore-rails
|
||||||
webmock
|
webmock
|
||||||
whenever (~> 0.9.0)
|
whenever
|
||||||
wikicloth
|
wikicloth
|
||||||
will_paginate (~> 3.0)
|
will_paginate
|
||||||
zeroclipboard-rails (~> 0.1.0)
|
zeroclipboard-rails
|
||||||
|
|
|
@ -23,3 +23,4 @@ A ruby translation project managed on [Locale](http://www.localeapp.com/) that's
|
||||||
- The maintainer will then pull translations from the Locale project and push to Github.
|
- The maintainer will then pull translations from the Locale project and push to Github.
|
||||||
|
|
||||||
Happy translating!
|
Happy translating!
|
||||||
|
test 1
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
RosaABF.controller('BuildListsController',
|
RosaABF.controller('BuildListsController',
|
||||||
['$scope', '$http', '$location', '$timeout', 'datepickerPopupConfig', '$cookies',
|
['$scope', '$http', '$location', '$timeout', '$cookies',
|
||||||
function($scope, $http, $location, $timeout, datepickerPopupConfig, $cookies) {
|
function($scope, $http, $location, $timeout, $cookies) {
|
||||||
|
|
||||||
$scope.params = null;
|
$scope.params = null;
|
||||||
$scope.first_run = true;
|
$scope.first_run = true;
|
||||||
|
@ -8,8 +8,8 @@ RosaABF.controller('BuildListsController',
|
||||||
$scope.build_lists = [];
|
$scope.build_lists = [];
|
||||||
$scope.isRequest = false; // Disable 'Search' button
|
$scope.isRequest = false; // Disable 'Search' button
|
||||||
$scope.pages = [];
|
$scope.pages = [];
|
||||||
|
|
||||||
$scope.opened = {};
|
$scope.opened = {};
|
||||||
|
|
||||||
$scope.map_priorities = {
|
$scope.map_priorities = {
|
||||||
<%=BuildList::WAITING_FOR_RESPONSE%>: 13,
|
<%=BuildList::WAITING_FOR_RESPONSE%>: 13,
|
||||||
<%=BuildList::BUILD_PENDING%>: 12,
|
<%=BuildList::BUILD_PENDING%>: 12,
|
||||||
|
@ -26,13 +26,6 @@ RosaABF.controller('BuildListsController',
|
||||||
<%=BuildList::FAILED_PUBLISH%>: 1,
|
<%=BuildList::FAILED_PUBLISH%>: 1,
|
||||||
<%=BuildList::REJECTED_PUBLISH%>: 0
|
<%=BuildList::REJECTED_PUBLISH%>: 0
|
||||||
};
|
};
|
||||||
$scope.minDate = new Date(2010, 1, 1);
|
|
||||||
$scope.maxDate = moment().add(1, 'months').calendar();
|
|
||||||
|
|
||||||
$scope.today = function() {
|
|
||||||
$scope.dt = new Date();
|
|
||||||
};
|
|
||||||
$scope.today();
|
|
||||||
|
|
||||||
$scope.clear = function () {
|
$scope.clear = function () {
|
||||||
//$scope.dt = null;
|
//$scope.dt = null;
|
||||||
|
@ -42,42 +35,22 @@ RosaABF.controller('BuildListsController',
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// Disable weekend selection
|
|
||||||
$scope.disabled = function(date, mode) {
|
|
||||||
return ( mode === 'day' && ( date.getDay() === 0 || date.getDay() === 6 ) );
|
|
||||||
};
|
|
||||||
|
|
||||||
$scope.toggleMin = function() {
|
|
||||||
$scope.minDate = $scope.minDate ? null : new Date();
|
|
||||||
};
|
|
||||||
$scope.toggleMin();
|
|
||||||
|
|
||||||
$scope.dateOptions = {
|
|
||||||
formatYear: 'yy',
|
|
||||||
startingDay: <%= I18n.locale == :ru ? 1 : 0 %>,
|
|
||||||
'show-weeks': false
|
|
||||||
};
|
|
||||||
|
|
||||||
$scope.initDate = $scope.today();
|
|
||||||
$scope.format = 'mediumDate';
|
|
||||||
|
|
||||||
<% if I18n.locale == :ru %>
|
|
||||||
// TRANSLATION
|
|
||||||
datepickerPopupConfig.currentText = 'Сегодня';
|
|
||||||
datepickerPopupConfig.clearText = 'Очистить';
|
|
||||||
datepickerPopupConfig.weeksText = 'Недели';
|
|
||||||
datepickerPopupConfig.closeText = 'Закрыть';
|
|
||||||
<% end %>
|
|
||||||
datepickerPopupConfig.appendToBody = 'true';
|
|
||||||
|
|
||||||
$scope.init = function init() {
|
$scope.init = function init() {
|
||||||
$scope.isOpenServerStatus = $cookies.isOpenServerStatus === 'true' ? true : false;
|
$scope.name_with_owner = $('#name_with_owner').val();
|
||||||
|
if ($scope.name_with_owner) {
|
||||||
|
$scope.build_lists_path = Routes.project_build_lists_path($scope.name_with_owner, {format: 'json'});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$scope.build_lists_path = Routes.build_lists_path({format: 'json'});
|
||||||
|
}
|
||||||
|
|
||||||
|
//$scope.isOpenServerStatus = $cookies.isOpenServerStatus === 'true' ? true : false;
|
||||||
$scope.isOpenFilters = $cookies.isOpenFilters === 'true' ? true : false;
|
$scope.isOpenFilters = $cookies.isOpenFilters === 'true' ? true : false;
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.$watch('isOpenServerStatus', function(){
|
// $scope.$watch('isOpenServerStatus', function(){
|
||||||
$cookies.isOpenServerStatus = $scope.isOpenServerStatus.toString();
|
// $cookies.isOpenServerStatus = $scope.isOpenServerStatus.toString();
|
||||||
}, true);
|
// }, true);
|
||||||
|
|
||||||
$scope.$watch('isOpenFilters', function(){
|
$scope.$watch('isOpenFilters', function(){
|
||||||
$cookies.isOpenFilters = $scope.isOpenFilters.toString();
|
$cookies.isOpenFilters = $scope.isOpenFilters.toString();
|
||||||
|
@ -88,9 +61,9 @@ RosaABF.controller('BuildListsController',
|
||||||
$scope.isRequest = true;
|
$scope.isRequest = true;
|
||||||
|
|
||||||
|
|
||||||
$http.get(Routes.build_lists_path({format: 'json'}), {params: $location.search()}).success(function(results) {
|
$http.get($scope.build_lists_path, {params: $location.search()}).success(function(results) {
|
||||||
// Render Server status
|
// Render Server status
|
||||||
$scope.server_status = results.server_status;
|
$scope.$parent.server_status = results.server_status;
|
||||||
|
|
||||||
// TMP fields
|
// TMP fields
|
||||||
var dictionary = results.dictionary;
|
var dictionary = results.dictionary;
|
||||||
|
|
|
@ -1,10 +1,17 @@
|
||||||
commentService = ($http) ->
|
commentService = ($http) ->
|
||||||
getPath = (kind, project, commentable, id) ->
|
getPath = (kind, project, commentable, id) ->
|
||||||
|
if commentable.kind is 'issue' or commentable.kind is 'pull'
|
||||||
if kind is 'remove' or kind is 'update'
|
if kind is 'remove' or kind is 'update'
|
||||||
return Routes.project_issue_comment_path(project, commentable.id, id)
|
return Routes.project_issue_comment_path(project, commentable.id, id)
|
||||||
else if kind is 'add'
|
else if kind is 'add'
|
||||||
return Routes.project_issue_comments_path(project, commentable.id)
|
return Routes.project_issue_comments_path(project, commentable.id)
|
||||||
|
|
||||||
|
else if commentable.kind is 'commit'
|
||||||
|
if kind is 'remove' or kind is 'update'
|
||||||
|
return Routes.project_commit_comment_path(project, commentable.id, id)
|
||||||
|
else if kind is 'add'
|
||||||
|
return Routes.project_commit_comments_path(project, commentable.id)
|
||||||
|
|
||||||
{
|
{
|
||||||
add: (project, commentable, body) ->
|
add: (project, commentable, body) ->
|
||||||
path = getPath('add', project, commentable)
|
path = getPath('add', project, commentable)
|
||||||
|
@ -24,7 +31,7 @@ commentService = ($http) ->
|
||||||
update: (project, commentable, id) ->
|
update: (project, commentable, id) ->
|
||||||
path = getPath('update', project, commentable, id)
|
path = getPath('update', project, commentable, id)
|
||||||
params = { comment: { body: $('#comment-'+id+'-body').val() }}
|
params = { comment: { body: $('#comment-'+id+'-body').val() }}
|
||||||
$http.put(path, params)
|
$http.patch(path, params)
|
||||||
|
|
||||||
remove: (project, commentable, id) ->
|
remove: (project, commentable, id) ->
|
||||||
path = getPath('remove', project, commentable, id)
|
path = getPath('remove', project, commentable, id)
|
||||||
|
|
|
@ -57,7 +57,7 @@ CommentsController = (Comment, Preview, confirmMessage, $scope, compileHTML, $ro
|
||||||
|
|
||||||
promise = Preview.get_preview(vm.project, body)
|
promise = Preview.get_preview(vm.project, body)
|
||||||
promise.success( (response) ->
|
promise.success( (response) ->
|
||||||
vm.preview_body = response
|
vm.preview_body = response.html
|
||||||
Preview.old_text = body
|
Preview.old_text = body
|
||||||
).error( (response) ->
|
).error( (response) ->
|
||||||
vm.preview_body = 'Error :('
|
vm.preview_body = 'Error :('
|
||||||
|
@ -75,15 +75,22 @@ CommentsController = (Comment, Preview, confirmMessage, $scope, compileHTML, $ro
|
||||||
else
|
else
|
||||||
false
|
false
|
||||||
|
|
||||||
vm.add = ->
|
vm.add = ($event)->
|
||||||
|
$event.preventDefault()
|
||||||
|
$event.stopPropagation()
|
||||||
|
|
||||||
vm.processing = true
|
vm.processing = true
|
||||||
promise = Comment.add(vm.project, vm.commentable, vm.new_body)
|
Comment.add(vm.project, vm.commentable, vm.new_body)
|
||||||
promise.then (response) ->
|
.success (data) ->
|
||||||
element = compileHTML.run($scope, response.data.html)
|
element = compileHTML.run($scope, data.html)
|
||||||
list.append(element)
|
list.append(element)
|
||||||
|
|
||||||
vm.new_body = ''
|
vm.new_body = ''
|
||||||
location.hash = "#comment" + response.data.id;
|
location.hash = "#comment" + data.id;
|
||||||
|
vm.processing = false
|
||||||
|
$.notify(data.message, 'success')
|
||||||
|
.error (data) ->
|
||||||
|
$.notify(data.message, 'error')
|
||||||
vm.processing = false
|
vm.processing = false
|
||||||
|
|
||||||
false
|
false
|
||||||
|
@ -91,8 +98,8 @@ CommentsController = (Comment, Preview, confirmMessage, $scope, compileHTML, $ro
|
||||||
vm.remove = (id) ->
|
vm.remove = (id) ->
|
||||||
return false unless confirmMessage.show()
|
return false unless confirmMessage.show()
|
||||||
vm.processing = true
|
vm.processing = true
|
||||||
promise = Comment.remove(vm.project, vm.commentable, id)
|
Comment.remove(vm.project, vm.commentable, id)
|
||||||
promise.then () ->
|
.success (data)->
|
||||||
parent = $('#comment'+id+',#diff-comment'+id).parents('tr.line-comments')
|
parent = $('#comment'+id+',#diff-comment'+id).parents('tr.line-comments')
|
||||||
if parent.find('.line-comment').length is 1
|
if parent.find('.line-comment').length is 1
|
||||||
# there is only one line comment, remove all line
|
# there is only one line comment, remove all line
|
||||||
|
@ -100,16 +107,21 @@ CommentsController = (Comment, Preview, confirmMessage, $scope, compileHTML, $ro
|
||||||
else
|
else
|
||||||
$('#comment'+id+',#diff-comment'+id+',#update-comment'+id).remove()
|
$('#comment'+id+',#diff-comment'+id+',#update-comment'+id).remove()
|
||||||
|
|
||||||
|
$.notify(data.message, 'success')
|
||||||
|
vm.processing = false
|
||||||
|
.error (data)->
|
||||||
|
$.notify(data.message, 'error')
|
||||||
vm.processing = false
|
vm.processing = false
|
||||||
|
|
||||||
false
|
false
|
||||||
|
|
||||||
vm.update = (id) ->
|
vm.update = (id) ->
|
||||||
vm.processing = true
|
vm.processing = true
|
||||||
promise = Comment.update(vm.project, vm.commentable, id)
|
Comment.update(vm.project, vm.commentable, id)
|
||||||
promise.then (response) ->
|
.success (data) ->
|
||||||
form = $('#comment'+id+ ' .md_and_cm.cm-s-default').html(response.data.body)
|
form = $('#comment'+id+ ' .md_and_cm.cm-s-default').html(data.body)
|
||||||
|
|
||||||
|
$.notify(data.message, 'success')
|
||||||
vm.processing = false
|
vm.processing = false
|
||||||
form = $('.open-comment.comment-'+id)
|
form = $('.open-comment.comment-'+id)
|
||||||
if form.length is 1
|
if form.length is 1
|
||||||
|
@ -117,6 +129,9 @@ CommentsController = (Comment, Preview, confirmMessage, $scope, compileHTML, $ro
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
return false
|
return false
|
||||||
|
.error (data) ->
|
||||||
|
$.notify(data.message, 'error')
|
||||||
|
vm.processing = false
|
||||||
|
|
||||||
vm.showInlineForm = ($event, params = {}) ->
|
vm.showInlineForm = ($event, params = {}) ->
|
||||||
line_comments = findInlineComments($event, params)
|
line_comments = findInlineComments($event, params)
|
||||||
|
@ -170,7 +185,7 @@ CommentsController = (Comment, Preview, confirmMessage, $scope, compileHTML, $ro
|
||||||
vm.commentable = commentable
|
vm.commentable = commentable
|
||||||
vm.processing = false
|
vm.processing = false
|
||||||
vm.k = 10
|
vm.k = 10
|
||||||
if commentable.kind is 'issue'
|
if commentable.kind is 'issue' or commentable.kind is 'commit'
|
||||||
list = $('#comments_list')
|
list = $('#comments_list')
|
||||||
else if commentable.kind is 'pull'
|
else if commentable.kind is 'pull'
|
||||||
list = $('#pull-activity')
|
list = $('#pull-activity')
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
DatePickerController = ($scope, datepickerPopupConfig) ->
|
||||||
|
|
||||||
|
vm = this
|
||||||
|
|
||||||
|
vm.minDate = new Date(2010, 1, 1)
|
||||||
|
vm.maxDate = moment().add(1, 'months').calendar()
|
||||||
|
|
||||||
|
vm.today = ->
|
||||||
|
vm.dt = new Date()
|
||||||
|
|
||||||
|
vm.today()
|
||||||
|
|
||||||
|
vm.clear = ->
|
||||||
|
dt = null
|
||||||
|
|
||||||
|
# Disable weekend selection
|
||||||
|
vm.disabled = (date, mode)->
|
||||||
|
mode is 'day' and ( date.getDay() is 0 or date.getDay() is 6 )
|
||||||
|
|
||||||
|
vm.toggleMin = ->
|
||||||
|
vm.minDate = vm.minDate ? null : new Date()
|
||||||
|
|
||||||
|
vm.toggleMin()
|
||||||
|
|
||||||
|
vm.open_updated_at_start = ($event)->
|
||||||
|
$event.preventDefault()
|
||||||
|
$event.stopPropagation()
|
||||||
|
|
||||||
|
vm.updated_at_start_opened = true
|
||||||
|
|
||||||
|
vm.open_updated_at_end = ($event)->
|
||||||
|
$event.preventDefault()
|
||||||
|
$event.stopPropagation()
|
||||||
|
|
||||||
|
vm.updated_at_end_opened = true
|
||||||
|
|
||||||
|
vm.dateOptions =
|
||||||
|
formatYear: 'yy'
|
||||||
|
startingDay: <%= I18n.locale == :ru ? 1 : 0 %>
|
||||||
|
'show-weeks': false
|
||||||
|
|
||||||
|
vm.initDate = vm.today()
|
||||||
|
vm.format = 'dd/MM/yyyy'
|
||||||
|
|
||||||
|
<% if I18n.locale == :ru %>
|
||||||
|
# TRANSLATION
|
||||||
|
datepickerPopupConfig.currentText = 'Сегодня'
|
||||||
|
datepickerPopupConfig.clearText = 'Очистить'
|
||||||
|
datepickerPopupConfig.weeksText = 'Недели'
|
||||||
|
datepickerPopupConfig.closeText = 'Закрыть'
|
||||||
|
<% end %>
|
||||||
|
#datepickerPopupConfig.appendToBody = 'true'
|
||||||
|
|
||||||
|
angular
|
||||||
|
.module("RosaABF")
|
||||||
|
.controller "DatePickerController", DatePickerController
|
||||||
|
|
||||||
|
DatePickerController.$inject = [
|
||||||
|
'$scope'
|
||||||
|
'datepickerPopupConfig'
|
||||||
|
]
|
|
@ -46,7 +46,7 @@ IssueController = (dataservice, $http, Issue, $rootScope, Preview, Label, confir
|
||||||
|
|
||||||
promise = Preview.get_preview(vm.project, body)
|
promise = Preview.get_preview(vm.project, body)
|
||||||
promise.success( (response) ->
|
promise.success( (response) ->
|
||||||
vm.preview_body = response
|
vm.preview_body = response.html
|
||||||
Preview.old_text = body
|
Preview.old_text = body
|
||||||
).error( (response) ->
|
).error( (response) ->
|
||||||
vm.preview_body = 'Error :('
|
vm.preview_body = 'Error :('
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
RosaABF.controller 'RepositoryProjectsController', ['$scope', '$http', '$location', ($scope, $http, $location) ->
|
RosaABF.controller 'RepositoryProjectsController', ['$scope', '$http', '$location', 'confirmMessage', ($scope, $http, $location, confirmMessage) ->
|
||||||
|
|
||||||
$scope.added = $('#added').val()
|
$scope.added = $('#added').val()
|
||||||
$scope.platform_id = $('#platform_id').val()
|
$scope.platform_id = $('#platform_id').val()
|
||||||
|
@ -51,4 +51,13 @@ RosaABF.controller 'RepositoryProjectsController', ['$scope', '$http', '$locatio
|
||||||
$scope.goToPage = (number) ->
|
$scope.goToPage = (number) ->
|
||||||
$location.search('page', number)
|
$location.search('page', number)
|
||||||
|
|
||||||
|
$scope.removeProject = (project) ->
|
||||||
|
return false unless confirmMessage.show()
|
||||||
|
$http.delete(project.remove_path).success (data) ->
|
||||||
|
$.notify(data.message, 'success')
|
||||||
|
|
||||||
|
$scope.projects = _.reject($scope.projects, (pr) ->
|
||||||
|
return pr.id is project.id
|
||||||
|
)
|
||||||
|
false
|
||||||
]
|
]
|
|
@ -18,36 +18,51 @@ CollaboratorsController = (dataservice, Collaborator, $http, confirmMessage) ->
|
||||||
vm.selected_new_collaborator = item
|
vm.selected_new_collaborator = item
|
||||||
false
|
false
|
||||||
|
|
||||||
vm.addCollaborator = ->
|
vm.addCollaborator = ($event) ->
|
||||||
promise = Collaborator.add(vm.name_with_owner,
|
$event.preventDefault()
|
||||||
|
$event.stopPropagation()
|
||||||
|
|
||||||
|
Collaborator.add(vm.name_with_owner,
|
||||||
vm.selected_new_collaborator,
|
vm.selected_new_collaborator,
|
||||||
vm.new_role,
|
vm.new_role,
|
||||||
vm.project_id)
|
vm.project_id)
|
||||||
promise.success (data) ->
|
.success (data) ->
|
||||||
vm.collaborators.push data
|
vm.collaborators.push data
|
||||||
|
$.notify(data.message, 'success')
|
||||||
|
.error (data) ->
|
||||||
|
$.notify(data.message, 'error')
|
||||||
|
|
||||||
|
vm.new_collaborator_uname = null
|
||||||
vm.selected_new_collaborator = null
|
vm.selected_new_collaborator = null
|
||||||
false
|
false
|
||||||
|
|
||||||
vm.removeCollaborator = (member) ->
|
vm.removeCollaborator = (member, need_confirm = true) ->
|
||||||
return false unless confirmMessage.show()
|
return false if need_confirm and !confirmMessage.show()
|
||||||
promise = Collaborator.remove(vm.name_with_owner, member.id)
|
Collaborator.remove(vm.name_with_owner, member.id)
|
||||||
promise.success (data) ->
|
.success (data) ->
|
||||||
vm.collaborators = _.reject(vm.collaborators, (c) ->
|
vm.collaborators = _.reject(vm.collaborators, (c) ->
|
||||||
c.id is member.id
|
c.id is member.id
|
||||||
)
|
)
|
||||||
|
$.notify(data.message, 'success')
|
||||||
|
.error (data) ->
|
||||||
|
$.notify(data.message, 'error')
|
||||||
|
|
||||||
false
|
false
|
||||||
|
|
||||||
vm.removeCollaborators = ->
|
vm.removeCollaborators = ->
|
||||||
return false unless confirmMessage.show()
|
return false unless confirmMessage.show()
|
||||||
_.each(vm.collaborators, (c) ->
|
_.each(vm.collaborators, (c) ->
|
||||||
vm.removeCollaborator(c) if c.check_delete
|
vm.removeCollaborator(c, false) if c.check_delete
|
||||||
)
|
)
|
||||||
false
|
false
|
||||||
|
|
||||||
vm.updateCollaborator = (member) ->
|
vm.updateCollaborator = (member) ->
|
||||||
return false unless confirmMessage.show()
|
return false unless confirmMessage.show()
|
||||||
Collaborator.update(vm.name_with_owner, member)
|
Collaborator.update(vm.name_with_owner, member)
|
||||||
|
.success (data) ->
|
||||||
|
$.notify(data.message, 'success')
|
||||||
|
.error (data) ->
|
||||||
|
$.notify(data.message, 'error')
|
||||||
false
|
false
|
||||||
|
|
||||||
init = (dataservice) ->
|
init = (dataservice) ->
|
||||||
|
|
|
@ -54,32 +54,49 @@ PullRequestController = (dataservice, $http, ApiPullRequest, ApiProject, DateTim
|
||||||
vm.branch = branch
|
vm.branch = branch
|
||||||
|
|
||||||
vm.reopen = ->
|
vm.reopen = ->
|
||||||
|
return false if vm.processing
|
||||||
|
vm.processing = true
|
||||||
vm.pull_resource.$update
|
vm.pull_resource.$update
|
||||||
pull_request_action: "reopen"
|
pull_request_action: "reopen"
|
||||||
, ->
|
, ->
|
||||||
vm.getPullRequest()
|
vm.getPullRequest()
|
||||||
|
vm.processing = false
|
||||||
|
|
||||||
vm.close = ->
|
vm.close = ->
|
||||||
|
return false if vm.processing
|
||||||
|
vm.processing = true
|
||||||
vm.pull_resource.$update
|
vm.pull_resource.$update
|
||||||
pull_request_action: "close"
|
pull_request_action: "close"
|
||||||
, ->
|
, ->
|
||||||
vm.getPullRequest()
|
vm.getPullRequest()
|
||||||
|
vm.processing = false
|
||||||
|
|
||||||
vm.merge = ->
|
vm.merge = ->
|
||||||
|
return false if vm.processing
|
||||||
|
vm.processing = true
|
||||||
vm.pull_resource.$merge ->
|
vm.pull_resource.$merge ->
|
||||||
vm.getPullRequest()
|
vm.getPullRequest()
|
||||||
|
vm.processing = false
|
||||||
|
|
||||||
vm.deleteBranch = ->
|
vm.deleteBranch = ->
|
||||||
|
return false if vm.processing
|
||||||
|
vm.processing = true
|
||||||
vm.project_resource.$delete_branch vm.branch_params(), (-> # success
|
vm.project_resource.$delete_branch vm.branch_params(), (-> # success
|
||||||
vm.branch = null
|
vm.branch = null
|
||||||
|
vm.processing = false
|
||||||
), -> # error
|
), -> # error
|
||||||
vm.getBranch()
|
vm.getBranch()
|
||||||
|
vm.processing = false
|
||||||
|
|
||||||
vm.restoreBranch = ->
|
vm.restoreBranch = ->
|
||||||
|
return false if vm.processing
|
||||||
|
vm.processing = true
|
||||||
vm.project_resource.$restore_branch vm.branch_params(), (-> # success
|
vm.project_resource.$restore_branch vm.branch_params(), (-> # success
|
||||||
vm.getBranch()
|
vm.getBranch()
|
||||||
|
vm.processing = false
|
||||||
), -> # error
|
), -> # error
|
||||||
vm.getBranch()
|
vm.getBranch()
|
||||||
|
vm.processing = false
|
||||||
|
|
||||||
vm.branch_params = ->
|
vm.branch_params = ->
|
||||||
owner: vm.pull_params.owner
|
owner: vm.pull_params.owner
|
||||||
|
@ -108,9 +125,8 @@ PullRequestController = (dataservice, $http, ApiPullRequest, ApiProject, DateTim
|
||||||
promise = ApiPullRequest.get_diff(vm.pull_params)
|
promise = ApiPullRequest.get_diff(vm.pull_params)
|
||||||
promise.then (response) ->
|
promise.then (response) ->
|
||||||
diff.html(null)
|
diff.html(null)
|
||||||
#html = compileHTML.run($scope, response.data)
|
|
||||||
#diff.html(html)
|
|
||||||
$rootScope.$broadcast('compile_html', { element: diff, html: response.data })
|
$rootScope.$broadcast('compile_html', { element: diff, html: response.data })
|
||||||
|
$('[data-toggle="tooltip"]').tooltip()
|
||||||
vm.processing = false
|
vm.processing = false
|
||||||
vm.is_diff_updated = true
|
vm.is_diff_updated = true
|
||||||
false
|
false
|
||||||
|
|
|
@ -4,14 +4,8 @@ previewService = ($http) ->
|
||||||
old_text: old_text
|
old_text: old_text
|
||||||
get_preview: (name_with_owner, text, old_text) ->
|
get_preview: (name_with_owner, text, old_text) ->
|
||||||
return null if text is old_text
|
return null if text is old_text
|
||||||
path = Routes.project_md_preview_path(
|
path = Routes.project_md_preview_path(name_with_owner)
|
||||||
{
|
$http.post(path, {text: text})
|
||||||
name_with_owner: name_with_owner,
|
|
||||||
text: text
|
|
||||||
}
|
|
||||||
)
|
|
||||||
$http.post(path)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
angular
|
angular
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
$(document).ready ->
|
||||||
|
$(document).on 'click', '#diff_header .panel-body li.list-group-item a', ->
|
||||||
|
href = $(this).attr('href')
|
||||||
|
$(".diff_data.collapse#"+href.slice(1)+"_content").collapse('show')
|
||||||
|
|
||||||
|
return
|
|
@ -0,0 +1,14 @@
|
||||||
|
$(document).ready ->
|
||||||
|
$(document).on 'hide.bs.collapse', '.file .diff_data.collapse', ->
|
||||||
|
$(this).parent().find('.top button span.fa').removeClass('fa-chevron-down').addClass('fa-chevron-up')
|
||||||
|
|
||||||
|
$(document).on 'show.bs.collapse', '.file .diff_data.collapse', ->
|
||||||
|
$(this).parent().find('.top button span.fa').removeClass('fa-chevron-up').addClass('fa-chevron-down')
|
||||||
|
|
||||||
|
$(document).on 'hide.bs.collapse', '#diff_header #collapseList', ->
|
||||||
|
$(this).parent().find('.panel-title a span.fa').removeClass('fa-chevron-down').addClass('fa-chevron-up')
|
||||||
|
|
||||||
|
$(document).on 'show.bs.collapse', '#diff_header #collapseList', ->
|
||||||
|
$(this).parent().find('.panel-title a span.fa').removeClass('fa-chevron-up').addClass('fa-chevron-down')
|
||||||
|
|
||||||
|
return
|
|
@ -27,14 +27,19 @@
|
||||||
|
|
||||||
//= require zeroclipboard
|
//= require zeroclipboard
|
||||||
|
|
||||||
|
//= require notifyjs
|
||||||
|
//= require notifyjs/styles/bootstrap/notify-bootstrap
|
||||||
|
|
||||||
//= require lib/Chart
|
//= require lib/Chart
|
||||||
//= require lib/bootstrap-typeahead
|
//= require lib/bootstrap-typeahead
|
||||||
//= require lib/custom-bootstrap-typeahead
|
//= require lib/custom-bootstrap-typeahead
|
||||||
//= require extra/highlight
|
|
||||||
|
|
||||||
|
//= require extra/highlight
|
||||||
//= require extra/pull
|
//= require extra/pull
|
||||||
//= require extra/scroller
|
//= require extra/scroller
|
||||||
//= require extra/fork
|
//= require extra/fork
|
||||||
|
//= require extra/diff_chevrons
|
||||||
|
//= require extra/diff
|
||||||
|
|
||||||
//= require_self
|
//= require_self
|
||||||
|
|
||||||
|
|
|
@ -225,6 +225,9 @@ textarea.resize-vertical
|
||||||
.update-label, .update-status, .pointer
|
.update-label, .update-status, .pointer
|
||||||
cursor: pointer
|
cursor: pointer
|
||||||
|
|
||||||
|
.no-pointer
|
||||||
|
cursor: default !important
|
||||||
|
|
||||||
#scroller
|
#scroller
|
||||||
position: fixed
|
position: fixed
|
||||||
bottom: 20px
|
bottom: 20px
|
|
@ -3,7 +3,7 @@
|
||||||
overflow-x: auto
|
overflow-x: auto
|
||||||
|
|
||||||
table.table.diff.inline
|
table.table.diff.inline
|
||||||
//border: 1px solid #DDD
|
margin-bottom: 0
|
||||||
|
|
||||||
tr.changes
|
tr.changes
|
||||||
pre
|
pre
|
||||||
|
@ -66,17 +66,6 @@ table.table.diff.inline
|
||||||
.line-comment, #new_inline_comment
|
.line-comment, #new_inline_comment
|
||||||
max-width: 700px
|
max-width: 700px
|
||||||
|
|
||||||
td.diff-image
|
|
||||||
text-align: center
|
|
||||||
|
|
||||||
span.diff-image
|
|
||||||
text-align: center
|
|
||||||
margin: 0
|
|
||||||
padding: 0
|
|
||||||
|
|
||||||
img
|
|
||||||
margin-top: 5px
|
|
||||||
|
|
||||||
div.file div.top
|
div.file div.top
|
||||||
min-height: 28px
|
min-height: 28px
|
||||||
background: #ededed
|
background: #ededed
|
|
@ -1,3 +0,0 @@
|
||||||
accordion .build-log
|
|
||||||
height: 300px
|
|
||||||
overflow-y: auto
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
.build-log
|
||||||
|
pre
|
||||||
|
font-size: 11px
|
|
@ -1,11 +1,10 @@
|
||||||
class AdvisoriesController < ApplicationController
|
class AdvisoriesController < ApplicationController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user! if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user! if APP_CONFIG['anonymous_access']
|
||||||
load_resource find_by: :advisory_id
|
|
||||||
authorize_resource
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@advisories = @advisories.includes(:platforms).search(params[:q]).uniq
|
authorize :advisories
|
||||||
|
@advisories = Advisory.includes(:platforms).search(params[:q]).uniq
|
||||||
@advisories_count = @advisories.count
|
@advisories_count = @advisories.count
|
||||||
@advisories = @advisories.paginate(page: current_page, per_page: Advisory.per_page)
|
@advisories = @advisories.paginate(page: current_page, per_page: Advisory.per_page)
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
|
@ -16,10 +15,12 @@ class AdvisoriesController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
authorize @advisory = Advisory.find_by(advisory_id: params[:id])
|
||||||
@packages_info = @advisory.fetch_packages_info
|
@packages_info = @advisory.fetch_packages_info
|
||||||
end
|
end
|
||||||
|
|
||||||
def search
|
def search
|
||||||
|
authorize :advisories
|
||||||
@advisory = Advisory.by_update_type(params[:bl_type]).search_by_id(params[:query]).first
|
@advisory = Advisory.by_update_type(params[:bl_type]).search_by_id(params[:query]).first
|
||||||
if @advisory.nil?
|
if @advisory.nil?
|
||||||
render nothing: true, status: 404
|
render nothing: true, status: 404
|
||||||
|
|
|
@ -1,27 +1,26 @@
|
||||||
class Api::V1::AdvisoriesController < Api::V1::BaseController
|
class Api::V1::AdvisoriesController < Api::V1::BaseController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:index, :show] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: %i(index show) if APP_CONFIG['anonymous_access']
|
||||||
load_resource :advisory, find_by: :advisory_id
|
before_action :load_advisory, only: %i(show update)
|
||||||
before_filter :find_and_authorize_build_list, only: [:create, :update]
|
before_action :load_build_list, only: %i(create update)
|
||||||
authorize_resource :build_list, only: [:create, :update]
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@advisories = @advisories.includes(:platforms, :projects).paginate(paginate_params)
|
authorize :advisory
|
||||||
respond_to :json
|
@advisories = Advisory.includes(:platforms, :projects).paginate(paginate_params)
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@packages_info = @advisory.fetch_packages_info
|
@packages_info = @advisory.fetch_packages_info
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
authorize :advisory
|
||||||
if @build_list.can_attach_to_advisory? &&
|
if @build_list.can_attach_to_advisory? &&
|
||||||
@build_list.associate_and_create_advisory(params[:advisory]) &&
|
@build_list.associate_and_create_advisory(params[:advisory]) &&
|
||||||
@build_list.save
|
@build_list.save
|
||||||
render_json_response @advisory, 'Advisory has been created successfully'
|
render_json_response @build_list.advisory, 'Advisory has been created successfully'
|
||||||
else
|
else
|
||||||
render_validation_error @advisory, error_message(@build_list, 'Advisory has not been created')
|
render_validation_error @build_list.advisory, error_message(@build_list, 'Advisory has not been created')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -36,9 +35,14 @@ class Api::V1::AdvisoriesController < Api::V1::BaseController
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def find_and_authorize_build_list
|
def load_build_list
|
||||||
@build_list = BuildList.find params[:build_list_id]
|
@build_list = BuildList.find params[:build_list_id]
|
||||||
authorize! :local_admin_manage, @build_list.save_to_platform
|
authorize @build_list.save_to_platform, :local_admin_manage?
|
||||||
|
end
|
||||||
|
|
||||||
|
def load_advisory
|
||||||
|
@advisory = Advisory.find_by(advisory_id: params[:id]) if params[:id]
|
||||||
|
authorize @advisory if @advisory
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
class Api::V1::ArchesController < Api::V1::BaseController
|
class Api::V1::ArchesController < Api::V1::BaseController
|
||||||
before_filter :authenticate_user! unless APP_CONFIG['anonymous_access']
|
before_action :authenticate_user! unless APP_CONFIG['anonymous_access']
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
authorize :arch
|
||||||
@arches = Arch.order(:id).paginate(paginate_params)
|
@arches = Arch.order(:id).paginate(paginate_params)
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,7 @@ class Api::V1::BaseController < ApplicationController
|
||||||
|
|
||||||
helper_method :member_path
|
helper_method :member_path
|
||||||
|
|
||||||
rescue_from CanCan::AccessDenied do |exception|
|
rescue_from Pundit::NotAuthorizedError do |exception|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.json { render json: {message: t('flash.exception_message')}.to_json, status: 403 }
|
format.json { render json: {message: t('flash.exception_message')}.to_json, status: 403 }
|
||||||
format.csv { render text: t('flash.exception_message'), status: 403 }
|
format.csv { render text: t('flash.exception_message'), status: 403 }
|
||||||
|
@ -35,6 +35,7 @@ class Api::V1::BaseController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_subject(subject)
|
def create_subject(subject)
|
||||||
|
authorize subject, :create?
|
||||||
class_name = subject.class.name
|
class_name = subject.class.name
|
||||||
if subject.save
|
if subject.save
|
||||||
render_json_response subject, "#{class_name} has been created successfully"
|
render_json_response subject, "#{class_name} has been created successfully"
|
||||||
|
@ -44,6 +45,7 @@ class Api::V1::BaseController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_member_in_subject(subject, relation = :relations)
|
def update_member_in_subject(subject, relation = :relations)
|
||||||
|
authorize subject, :update_member?
|
||||||
role = params[:role]
|
role = params[:role]
|
||||||
class_name = subject.class.name.downcase
|
class_name = subject.class.name.downcase
|
||||||
if member.present? && role.present? && subject.respond_to?(:owner) && subject.owner != member &&
|
if member.present? && role.present? && subject.respond_to?(:owner) && subject.owner != member &&
|
||||||
|
@ -55,6 +57,7 @@ class Api::V1::BaseController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_member_to_subject(subject, role = 'admin')
|
def add_member_to_subject(subject, role = 'admin')
|
||||||
|
authorize subject, :add_member?
|
||||||
class_name = subject.class.name.downcase
|
class_name = subject.class.name.downcase
|
||||||
if member.present? && subject.add_member(member, role)
|
if member.present? && subject.add_member(member, role)
|
||||||
render_json_response subject, "#{member.class.to_s} '#{member.id}' has been added to #{class_name} successfully"
|
render_json_response subject, "#{member.class.to_s} '#{member.id}' has been added to #{class_name} successfully"
|
||||||
|
@ -64,6 +67,7 @@ class Api::V1::BaseController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_member_from_subject(subject)
|
def remove_member_from_subject(subject)
|
||||||
|
authorize subject, :remove_member?
|
||||||
class_name = subject.class.name.downcase
|
class_name = subject.class.name.downcase
|
||||||
if member.present? && subject.remove_member(member)
|
if member.present? && subject.remove_member(member)
|
||||||
render_json_response subject, "#{member.class.to_s} '#{member.id}' has been removed from #{class_name} successfully"
|
render_json_response subject, "#{member.class.to_s} '#{member.id}' has been removed from #{class_name} successfully"
|
||||||
|
@ -73,11 +77,13 @@ class Api::V1::BaseController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy_subject(subject)
|
def destroy_subject(subject)
|
||||||
|
authorize subject, :destroy?
|
||||||
subject.destroy # later with resque
|
subject.destroy # later with resque
|
||||||
render_json_response subject, "#{subject.class.name} has been destroyed successfully"
|
render_json_response subject, "#{subject.class.name} has been destroyed successfully"
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_subject(subject)
|
def update_subject(subject)
|
||||||
|
authorize subject, :update?
|
||||||
class_name = subject.class.name
|
class_name = subject.class.name
|
||||||
if subject.update_attributes(params[class_name.underscore.to_sym] || {})
|
if subject.update_attributes(params[class_name.underscore.to_sym] || {})
|
||||||
render_json_response subject, "#{class_name} has been updated successfully"
|
render_json_response subject, "#{class_name} has been updated successfully"
|
||||||
|
@ -94,7 +100,7 @@ class Api::V1::BaseController < ApplicationController
|
||||||
id: id,
|
id: id,
|
||||||
message: message
|
message: message
|
||||||
}
|
}
|
||||||
}.to_json, status: status
|
}, status: status
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_validation_error(subject, message)
|
def render_validation_error(subject, message)
|
||||||
|
|
|
@ -1,17 +1,26 @@
|
||||||
class Api::V1::BuildListsController < Api::V1::BaseController
|
class Api::V1::BuildListsController < Api::V1::BaseController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:show, :index] if APP_CONFIG['anonymous_access']
|
before_action :load_build_list, only: %i(
|
||||||
|
cancel
|
||||||
load_and_authorize_resource :build_list, only: [:show, :create, :cancel, :publish, :reject_publish, :create_container, :publish_into_testing, :rerun_tests]
|
create_container
|
||||||
|
publish
|
||||||
|
publish_into_testing
|
||||||
|
reject_publish
|
||||||
|
rerun_tests
|
||||||
|
show
|
||||||
|
)
|
||||||
|
skip_before_action :authenticate_user!, only: %i(show index) if APP_CONFIG['anonymous_access']
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
authorize @build_list
|
||||||
respond_to :json
|
respond_to :json
|
||||||
end
|
end
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
authorize :build_list
|
||||||
@project = Project.find(params[:project_id]) if params[:project_id].present?
|
@project = Project.find(params[:project_id]) if params[:project_id].present?
|
||||||
authorize!(:show, @project) if @project
|
authorize @project, :show? if @project
|
||||||
filter = BuildList::Filter.new(@project, current_user, current_ability, params[:filter] || {})
|
filter = BuildList::Filter.new(@project, current_user, params[:filter] || {})
|
||||||
@build_lists = filter.find.includes(:build_for_platform,
|
@build_lists = filter.find.includes(:build_for_platform,
|
||||||
:save_to_repository,
|
:save_to_repository,
|
||||||
:save_to_platform,
|
:save_to_platform,
|
||||||
|
@ -36,34 +45,45 @@ class Api::V1::BuildListsController < Api::V1::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def cancel
|
def cancel
|
||||||
|
authorize @build_list
|
||||||
render_json :cancel
|
render_json :cancel
|
||||||
end
|
end
|
||||||
|
|
||||||
def publish
|
def publish
|
||||||
|
authorize @build_list
|
||||||
@build_list.publisher = current_user
|
@build_list.publisher = current_user
|
||||||
render_json :publish
|
render_json :publish
|
||||||
end
|
end
|
||||||
|
|
||||||
def reject_publish
|
def reject_publish
|
||||||
|
authorize @build_list
|
||||||
@build_list.publisher = current_user
|
@build_list.publisher = current_user
|
||||||
render_json :reject_publish
|
render_json :reject_publish
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_container
|
def create_container
|
||||||
|
authorize @build_list
|
||||||
render_json :create_container, :publish_container
|
render_json :create_container, :publish_container
|
||||||
end
|
end
|
||||||
|
|
||||||
def rerun_tests
|
def rerun_tests
|
||||||
|
authorize @build_list
|
||||||
render_json :rerun_tests
|
render_json :rerun_tests
|
||||||
end
|
end
|
||||||
|
|
||||||
def publish_into_testing
|
def publish_into_testing
|
||||||
|
authorize @build_list
|
||||||
@build_list.publisher = current_user
|
@build_list.publisher = current_user
|
||||||
render_json :publish_into_testing
|
render_json :publish_into_testing
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
# Private: before_action hook which loads BuidList.
|
||||||
|
def load_build_list
|
||||||
|
@build_list = BuildList.find params[:id]
|
||||||
|
end
|
||||||
|
|
||||||
def render_json(action_name, action_method = nil)
|
def render_json(action_name, action_method = nil)
|
||||||
if @build_list.try("can_#{action_name}?") && @build_list.send(action_method || action_name)
|
if @build_list.try("can_#{action_name}?") && @build_list.send(action_method || action_name)
|
||||||
render_json_response @build_list, t("layout.build_lists.#{action_name}_success")
|
render_json_response @build_list, t("layout.build_lists.#{action_name}_success")
|
||||||
|
|
|
@ -1,23 +1,22 @@
|
||||||
class Api::V1::GroupsController < Api::V1::BaseController
|
class Api::V1::GroupsController < Api::V1::BaseController
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:show] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:show] if APP_CONFIG['anonymous_access']
|
||||||
load_and_authorize_resource
|
before_action :load_group, except: %i(index create)
|
||||||
|
|
||||||
def index
|
def index
|
||||||
# accessible_by(current_ability)
|
authorize :group
|
||||||
@groups = current_user.groups.paginate(paginate_params)
|
@groups = current_user.groups.paginate(paginate_params)
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
respond_to :json
|
authorize @group
|
||||||
end
|
end
|
||||||
|
|
||||||
def members
|
def members
|
||||||
|
authorize @group
|
||||||
@members = @group.members.where('actor_id != ?', @group.owner_id)
|
@members = @group.members.where('actor_id != ?', @group.owner_id)
|
||||||
.order('name').paginate(paginate_params)
|
.order('name').paginate(paginate_params)
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
@ -48,4 +47,11 @@ class Api::V1::GroupsController < Api::V1::BaseController
|
||||||
update_member_in_subject @group, :actors
|
update_member_in_subject @group, :actors
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Group.
|
||||||
|
def load_group
|
||||||
|
@group = Group.find params[:id]
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
class Api::V1::IssuesController < Api::V1::BaseController
|
class Api::V1::IssuesController < Api::V1::BaseController
|
||||||
before_filter :authenticate_user!
|
include Api::V1::Issueable
|
||||||
skip_before_filter :authenticate_user!, only: [:index, :group_index, :show] if APP_CONFIG['anonymous_access']
|
|
||||||
|
|
||||||
load_and_authorize_resource :group, only: :group_index, find_by: :id, parent: false
|
before_action :authenticate_user!
|
||||||
load_and_authorize_resource :project
|
skip_before_action :authenticate_user!, only: %i(index group_index show) if APP_CONFIG['anonymous_access']
|
||||||
skip_load_and_authorize_resource :project, only: [:all_index, :user_index, :group_index]
|
|
||||||
load_and_authorize_resource :issue, through: :project, find_by: :serial_id, only: [:show, :update, :create, :index]
|
before_action :load_group, only: :group_index
|
||||||
|
before_action :load_project
|
||||||
|
skip_before_action :load_project, only: %i(all_index user_index group_index)
|
||||||
|
before_action :load_issue, only: %i(show update index)
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@issues = @project.issues
|
@issues = @project.issues
|
||||||
|
@ -13,12 +15,14 @@ class Api::V1::IssuesController < Api::V1::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def all_index
|
def all_index
|
||||||
project_ids = get_all_project_ids Project.accessible_by(current_ability, :membered).pluck(:id)
|
authorize :issue, :index?
|
||||||
|
project_ids = get_all_project_ids membered_projects.pluck(:id)
|
||||||
@issues = Issue.where(project_id: project_ids)
|
@issues = Issue.where(project_id: project_ids)
|
||||||
render_issues_list
|
render_issues_list
|
||||||
end
|
end
|
||||||
|
|
||||||
def user_index
|
def user_index
|
||||||
|
authorize :issue, :index?
|
||||||
project_ids = get_all_project_ids current_user.projects.pluck(:id)
|
project_ids = get_all_project_ids current_user.projects.pluck(:id)
|
||||||
@issues = Issue.where(project_id: project_ids)
|
@issues = Issue.where(project_id: project_ids)
|
||||||
render_issues_list
|
render_issues_list
|
||||||
|
@ -26,7 +30,7 @@ class Api::V1::IssuesController < Api::V1::BaseController
|
||||||
|
|
||||||
def group_index
|
def group_index
|
||||||
project_ids = @group.projects.pluck(:id)
|
project_ids = @group.projects.pluck(:id)
|
||||||
project_ids = Project.accessible_by(current_ability, :membered).where(id: project_ids).pluck(:id)
|
project_ids = membered_projects.where(id: project_ids).pluck(:id)
|
||||||
@issues = Issue.where(project_id: project_ids)
|
@issues = Issue.where(project_id: project_ids)
|
||||||
render_issues_list
|
render_issues_list
|
||||||
end
|
end
|
||||||
|
@ -40,13 +44,14 @@ class Api::V1::IssuesController < Api::V1::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
@issue = @project.issues.new(params[:issue])
|
||||||
@issue.user = current_user
|
@issue.user = current_user
|
||||||
@issue.assignee = nil if cannot?(:write, @project)
|
@issue.assignee = nil unless policy(@project).write?
|
||||||
create_subject @issue
|
create_subject @issue
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
unless can?(:write, @project)
|
unless policy(@project).write?
|
||||||
params.delete :update_labels
|
params.delete :update_labels
|
||||||
[:assignee_id, :labelings, :labelings_attributes].each do |k|
|
[:assignee_id, :labelings, :labelings_attributes].each do |k|
|
||||||
params[:issue].delete k
|
params[:issue].delete k
|
||||||
|
@ -94,7 +99,7 @@ class Api::V1::IssuesController < Api::V1::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
if params[:labels].present?
|
if params[:labels].present?
|
||||||
labels = params[:labels].split(',').map {|e| e.strip}.select {|e| e.present?}
|
labels = params[:labels].split(',').map(&:strip).select(&:present?)
|
||||||
@issues = @issues.where('labels.name IN (?)', labels)
|
@issues = @issues.where('labels.name IN (?)', labels)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -110,13 +115,4 @@ class Api::V1::IssuesController < Api::V1::BaseController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_all_project_ids default_project_ids
|
|
||||||
project_ids = []
|
|
||||||
if ['created', 'all'].include? params[:filter]
|
|
||||||
# add own issues
|
|
||||||
project_ids = Project.accessible_by(current_ability, :show).joins(:issues).
|
|
||||||
where(issues: {user_id: current_user.id}).pluck('projects.id')
|
|
||||||
end
|
|
||||||
project_ids |= default_project_ids
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,8 @@ class Api::V1::JobsController < Api::V1::BaseController
|
||||||
QUEUES = %w(rpm_worker_observer)
|
QUEUES = %w(rpm_worker_observer)
|
||||||
QUEUE_CLASSES = %w(AbfWorker::RpmWorkerObserver)
|
QUEUE_CLASSES = %w(AbfWorker::RpmWorkerObserver)
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
|
skip_after_action :verify_authorized
|
||||||
|
|
||||||
def shift
|
def shift
|
||||||
@build_list = BuildList.next_build(arch_ids, platform_ids) if current_user.system?
|
@build_list = BuildList.next_build(arch_ids, platform_ids) if current_user.system?
|
||||||
|
@ -21,8 +22,8 @@ class Api::V1::JobsController < Api::V1::BaseController
|
||||||
@build_list ||= build_lists.external_nodes(:everything).first
|
@build_list ||= build_lists.external_nodes(:everything).first
|
||||||
else
|
else
|
||||||
@build_list = build_lists.external_nodes(:owned).for_user(current_user).first
|
@build_list = build_lists.external_nodes(:owned).for_user(current_user).first
|
||||||
@build_list ||= build_lists.external_nodes(:everything).
|
@build_list ||= BuildListPolicy::Scope.new(current_user, build_lists).owned.
|
||||||
accessible_by(current_ability, :related).readonly(false).first
|
external_nodes(:everything).readonly(false).first
|
||||||
end
|
end
|
||||||
set_builder
|
set_builder
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
class Api::V1::MaintainersController < Api::V1::BaseController
|
class Api::V1::MaintainersController < Api::V1::BaseController
|
||||||
before_filter :authenticate_user! unless APP_CONFIG['anonymous_access']
|
before_action :authenticate_user! unless APP_CONFIG['anonymous_access']
|
||||||
load_and_authorize_resource :platform
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
authorize @platform = Platform.find(params[:platform_id]), :show?
|
||||||
@maintainers = BuildList::Package.includes(:project)
|
@maintainers = BuildList::Package.includes(:project)
|
||||||
.actual.by_platform(@platform)
|
.actual.by_platform(@platform)
|
||||||
.like_name(params[:package_name])
|
.like_name(params[:package_name])
|
||||||
.paginate(paginate_params)
|
.paginate(paginate_params)
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
class Api::V1::PlatformsController < Api::V1::BaseController
|
class Api::V1::PlatformsController < Api::V1::BaseController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: :allowed
|
skip_before_action :authenticate_user!, only: :allowed
|
||||||
skip_before_filter :authenticate_user!, only: [:show, :platforms_for_build, :members] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:show, :platforms_for_build, :members] if APP_CONFIG['anonymous_access']
|
||||||
load_and_authorize_resource except: :allowed
|
before_action :load_platform, except: [:index, :allowed, :platforms_for_build, :create]
|
||||||
|
|
||||||
def allowed
|
def allowed
|
||||||
|
authorize :platform
|
||||||
if request.authorization.present?
|
if request.authorization.present?
|
||||||
token, pass = *ActionController::HttpAuthentication::Basic::user_name_and_password(request)
|
token, pass = *ActionController::HttpAuthentication::Basic::user_name_and_password(request)
|
||||||
end
|
end
|
||||||
|
@ -16,25 +17,24 @@ class Api::V1::PlatformsController < Api::V1::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@platforms = @platforms.accessible_by(current_ability, :related)
|
authorize :platform
|
||||||
.by_type(params[:type]).paginate(paginate_params)
|
@platforms = PlatformPolicy::Scope.new(current_user, Platform).show.
|
||||||
respond_to :json
|
by_type(params[:type]).paginate(paginate_params)
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def platforms_for_build
|
def platforms_for_build
|
||||||
@platforms = Platform.availables_main_platforms(current_user, current_ability).paginate(paginate_params)
|
authorize :platform
|
||||||
respond_to do |format|
|
@platforms = Platform.availables_main_platforms(current_user).paginate(paginate_params)
|
||||||
format.json { render :index }
|
render :index
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
platform_params = params[:platform] || {}
|
platform_params = params[:platform] || {}
|
||||||
owner = User.where(id: platform_params[:owner_id]).first
|
owner = User.where(id: platform_params[:owner_id]).first
|
||||||
|
@platform = Platform.new platform_params
|
||||||
@platform.owner = owner || get_owner
|
@platform.owner = owner || get_owner
|
||||||
create_subject @platform
|
create_subject @platform
|
||||||
end
|
end
|
||||||
|
@ -48,7 +48,6 @@ class Api::V1::PlatformsController < Api::V1::BaseController
|
||||||
|
|
||||||
def members
|
def members
|
||||||
@members = @platform.members.order('name').paginate(paginate_params)
|
@members = @platform.members.order('name').paginate(paginate_params)
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_member
|
def add_member
|
||||||
|
@ -79,4 +78,11 @@ class Api::V1::PlatformsController < Api::V1::BaseController
|
||||||
destroy_subject @platform
|
destroy_subject @platform
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Platform.
|
||||||
|
def load_platform
|
||||||
|
authorize @platform = Platform.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,22 +1,23 @@
|
||||||
class Api::V1::ProductBuildListsController < Api::V1::BaseController
|
class Api::V1::ProductBuildListsController < Api::V1::BaseController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:index, :show] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:index, :show] if APP_CONFIG['anonymous_access']
|
||||||
|
|
||||||
load_and_authorize_resource :product, only: :index
|
before_action :load_product, only: :index
|
||||||
load_and_authorize_resource
|
before_action :load_product_build_list, except: [:index, :create]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@product_build_lists = if @product
|
@product_build_lists =
|
||||||
|
if @product
|
||||||
@product.product_build_lists
|
@product.product_build_lists
|
||||||
else
|
else
|
||||||
ProductBuildList.accessible_by current_ability, :read
|
PlatformPolicy::Scope.new(current_user, ProductBuildList.joins(product: :platform)).show
|
||||||
end
|
end
|
||||||
@product_build_lists = @product_build_lists.joins(:product, :project, :arch)
|
@product_build_lists = @product_build_lists.joins(:product, :project, :arch)
|
||||||
@product_build_lists = @product_build_lists.recent.paginate(paginate_params)
|
@product_build_lists = @product_build_lists.recent.paginate(paginate_params)
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
@product_build_list = ProductBuildList.new(params[:product_build_list])
|
||||||
@product_build_list.project ||= @product_build_list.try(:product).try(:project)
|
@product_build_list.project ||= @product_build_list.try(:product).try(:project)
|
||||||
@product_build_list.main_script ||= @product_build_list.try(:product).try(:main_script)
|
@product_build_list.main_script ||= @product_build_list.try(:product).try(:main_script)
|
||||||
@product_build_list.params ||= @product_build_list.try(:product).try(:params)
|
@product_build_list.params ||= @product_build_list.try(:product).try(:params)
|
||||||
|
@ -25,7 +26,6 @@ class Api::V1::ProductBuildListsController < Api::V1::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
@ -44,4 +44,16 @@ class Api::V1::ProductBuildListsController < Api::V1::BaseController
|
||||||
render_validation_error @product_build_list, t("layout.product_build_lists.cancel_fail")
|
render_validation_error @product_build_list, t("layout.product_build_lists.cancel_fail")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
# Private: before_action hook which loads ProductBuildList.
|
||||||
|
def load_product_build_list
|
||||||
|
authorize @product_build_list = ProductBuildList.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Product.
|
||||||
|
def load_product
|
||||||
|
authorize @product = Product.find(params[:product_id]), :show? if params[:product_id]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
class Api::V1::ProductsController < Api::V1::BaseController
|
class Api::V1::ProductsController < Api::V1::BaseController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:index, :show] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:index, :show] if APP_CONFIG['anonymous_access']
|
||||||
|
|
||||||
load_and_authorize_resource
|
before_action :load_product, except: :create
|
||||||
|
|
||||||
def create
|
def create
|
||||||
create_subject @product
|
create_subject @product = Product.new(params[:product])
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
@ -13,10 +13,17 @@ class Api::V1::ProductsController < Api::V1::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
destroy_subject @product
|
destroy_subject @product
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Product.
|
||||||
|
def load_product
|
||||||
|
authorize @product = Product.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,32 +1,25 @@
|
||||||
class Api::V1::ProjectsController < Api::V1::BaseController
|
class Api::V1::ProjectsController < Api::V1::BaseController
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:get_id, :show, :refs_list] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:get_id, :show, :refs_list] if APP_CONFIG['anonymous_access']
|
||||||
|
|
||||||
load_and_authorize_resource :project
|
before_action :load_project, except: [:index, :create, :get_id]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@projects = Project.accessible_by(current_ability, :membered)
|
authorize :project
|
||||||
.paginate(paginate_params)
|
@projects = ProjectPolicy::Scope.new(current_user, Project).
|
||||||
respond_to :json
|
membered.paginate(paginate_params)
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_id
|
def get_id
|
||||||
if @project = Project.find_by_owner_and_name(params[:owner], params[:name])
|
authorize @project = Project.find_by_owner_and_name!(params[:owner], params[:name])
|
||||||
authorize! :show, @project
|
|
||||||
else
|
|
||||||
raise ActiveRecord::RecordNotFound
|
|
||||||
end
|
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def refs_list
|
def refs_list
|
||||||
@refs = @project.repo.branches + @project.repo.tags.select{ |t| t.commit }
|
@refs = @project.repo.branches + @project.repo.tags.select{ |t| t.commit }
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
@ -38,21 +31,20 @@ class Api::V1::ProjectsController < Api::V1::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
@project = Project.new(params[:project])
|
||||||
p_params = params[:project] || {}
|
p_params = params[:project] || {}
|
||||||
owner_type = p_params[:owner_type]
|
owner_type = %w(User Group).find{ |t| t == p_params[:owner_type] }
|
||||||
if owner_type.present? && %w(User Group).include?(owner_type)
|
if owner_type.present?
|
||||||
@project.owner = owner_type.constantize.
|
@project.owner = owner_type.constantize.find_by(id: p_params[:owner_id])
|
||||||
where(id: p_params[:owner_id]).first
|
|
||||||
else
|
else
|
||||||
@project.owner = nil
|
@project.owner = nil
|
||||||
end
|
end
|
||||||
authorize! :write, @project.owner if @project.owner != current_user
|
authorize @project
|
||||||
create_subject @project
|
create_subject @project
|
||||||
end
|
end
|
||||||
|
|
||||||
def members
|
def members
|
||||||
@members = @project.collaborators.order('uname').paginate(paginate_params)
|
@members = @project.collaborators.order('uname').paginate(paginate_params)
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_member
|
def add_member
|
||||||
|
@ -69,7 +61,9 @@ class Api::V1::ProjectsController < Api::V1::BaseController
|
||||||
|
|
||||||
def fork(is_alias = false)
|
def fork(is_alias = false)
|
||||||
owner = (Group.find params[:group_id] if params[:group_id].present?) || current_user
|
owner = (Group.find params[:group_id] if params[:group_id].present?) || current_user
|
||||||
authorize! :write, owner if owner.class == Group
|
authorize @project, :show?
|
||||||
|
authorize owner, :write? if owner.is_a?(Group)
|
||||||
|
|
||||||
if forked = @project.fork(owner, new_name: params[:fork_name], is_alias: is_alias) and forked.valid?
|
if forked = @project.fork(owner, new_name: params[:fork_name], is_alias: is_alias) and forked.valid?
|
||||||
render_json_response forked, 'Project has been forked successfully'
|
render_json_response forked, 'Project has been forked successfully'
|
||||||
else
|
else
|
||||||
|
@ -78,6 +72,14 @@ class Api::V1::ProjectsController < Api::V1::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def alias
|
def alias
|
||||||
|
authorize @project
|
||||||
fork(true)
|
fork(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Project.
|
||||||
|
def load_project
|
||||||
|
authorize @project = Project.find(params[:id])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
class Api::V1::PullRequestsController < Api::V1::BaseController
|
class Api::V1::PullRequestsController < Api::V1::BaseController
|
||||||
respond_to :json
|
include Api::V1::Issueable
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:show, :index, :group_index, :commits, :files] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: %i(show index group_index commits files) if APP_CONFIG['anonymous_access']
|
||||||
|
|
||||||
load_resource :group, only: :group_index, find_by: :id, parent: false
|
before_action :load_group, only: %i(group_index)
|
||||||
load_resource :project
|
before_action :load_project, except: %i(all_index user_index)
|
||||||
load_resource :issue, through: :project, find_by: :serial_id, parent: false, only: [:show, :index, :commits, :files, :merge, :update]
|
before_action :load_issue, only: %i(show index commits files merge update)
|
||||||
load_and_authorize_resource instance_name: :pull, through: :issue, singleton: true, only: [:show, :index, :commits, :files, :merge, :update]
|
before_action :load_pull, only: %i(show index commits files merge update)
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@pulls = @project.pull_requests
|
@pulls = @project.pull_requests
|
||||||
|
@ -16,13 +16,15 @@ class Api::V1::PullRequestsController < Api::V1::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def all_index
|
def all_index
|
||||||
project_ids = get_all_project_ids Project.accessible_by(current_ability, :membered).pluck(:id)
|
authorize :pull_request, :index?
|
||||||
|
project_ids = get_all_project_ids membered_projects.pluck(:id)
|
||||||
@pulls = PullRequest.where('pull_requests.to_project_id IN (?)', project_ids)
|
@pulls = PullRequest.where('pull_requests.to_project_id IN (?)', project_ids)
|
||||||
@pulls_url = api_v1_pull_requests_path format: :json
|
@pulls_url = api_v1_pull_requests_path format: :json
|
||||||
render_pulls_list
|
render_pulls_list
|
||||||
end
|
end
|
||||||
|
|
||||||
def user_index
|
def user_index
|
||||||
|
authorize :pull_request, :index?
|
||||||
project_ids = get_all_project_ids current_user.projects.pluck(:id)
|
project_ids = get_all_project_ids current_user.projects.pluck(:id)
|
||||||
@pulls = PullRequest.where('pull_requests.to_project_id IN (?)', project_ids)
|
@pulls = PullRequest.where('pull_requests.to_project_id IN (?)', project_ids)
|
||||||
@pulls_url = pull_requests_api_v1_user_path format: :json
|
@pulls_url = pull_requests_api_v1_user_path format: :json
|
||||||
|
@ -31,31 +33,31 @@ class Api::V1::PullRequestsController < Api::V1::BaseController
|
||||||
|
|
||||||
def group_index
|
def group_index
|
||||||
project_ids = @group.projects.pluck(:id)
|
project_ids = @group.projects.pluck(:id)
|
||||||
project_ids = Project.accessible_by(current_ability, :membered).where(id: project_ids).pluck(:id)
|
project_ids = membered_projects.where(id: project_ids).pluck(:id)
|
||||||
@pulls = PullRequest.where(to_project_id: project_ids)
|
@pulls = PullRequest.where(to_project_id: project_ids)
|
||||||
@pulls_url = pull_requests_api_v1_group_path
|
@pulls_url = pull_requests_api_v1_group_path
|
||||||
render_pulls_list
|
render_pulls_list
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
redirect_to api_v1_project_issue_path(@project.id, @issue.serial_id) if @pull.nil?
|
redirect_to api_v1_project_issue_path(@project.id, @issue.serial_id) and return if @pull.nil?
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
from_project = Project.find(pull_params[:from_project_id]) if pull_params[:from_project_id].present?
|
from_project = Project.find_by(id: pull_params[:from_project_id])
|
||||||
from_project ||= @project
|
from_project ||= @project
|
||||||
authorize! :read, from_project
|
authorize from_project, :show?
|
||||||
|
|
||||||
@pull = @project.pull_requests.new
|
@pull = @project.pull_requests.build
|
||||||
@pull.build_issue title: pull_params[:title], body: pull_params[:body]
|
@pull.build_issue title: pull_params[:title], body: pull_params[:body]
|
||||||
@pull.from_project = from_project
|
@pull.from_project = from_project
|
||||||
@pull.to_ref, @pull.from_ref = pull_params[:to_ref], pull_params[:from_ref]
|
@pull.to_ref, @pull.from_ref = pull_params[:to_ref], pull_params[:from_ref]
|
||||||
@pull.issue.assignee_id = pull_params[:assignee_id] if can?(:write, @project)
|
@pull.issue.assignee_id = pull_params[:assignee_id] if policy(@project).write?
|
||||||
@pull.issue.user, @pull.issue.project = current_user, @project
|
@pull.issue.user, @pull.issue.project = current_user, @project
|
||||||
@pull.issue.new_pull_request = true
|
@pull.issue.new_pull_request = true
|
||||||
render_validation_error(@pull, "#{@pull.class.name} has not been created") && return unless @pull.valid?
|
render_validation_error(@pull, "#{@pull.class.name} has not been created") && return unless @pull.valid?
|
||||||
|
|
||||||
|
authorize @pull
|
||||||
@pull.save # set pull id
|
@pull.save # set pull id
|
||||||
@pull.reload
|
@pull.reload
|
||||||
@pull.check(false) # don't make event transaction
|
@pull.check(false) # don't make event transaction
|
||||||
|
@ -71,13 +73,13 @@ class Api::V1::PullRequestsController < Api::V1::BaseController
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@pull = @project.pull_requests.includes(:issue).where(issues: {serial_id: params[:id]}).first
|
@pull = @project.pull_requests.includes(:issue).where(issues: {serial_id: params[:id]}).first
|
||||||
authorize! :update, @pull
|
authorize @pull
|
||||||
|
|
||||||
if pull_params.present?
|
if pull_params.present?
|
||||||
attrs = pull_params.slice(:title, :body)
|
attrs = pull_params.slice(:title, :body)
|
||||||
attrs.merge!(assignee_id: pull_params[:assignee_id]) if can?(:write, @project)
|
attrs.merge!(assignee_id: pull_params[:assignee_id]) if policy(@project).write?
|
||||||
|
|
||||||
if (action = pull_params[:status]) && %w(close reopen).include?(pull_params[:status])
|
if action = %w(close reopen).find{ |s| s == pull_params[:status] }
|
||||||
if @pull.send("can_#{action}?")
|
if @pull.send("can_#{action}?")
|
||||||
@pull.set_user_and_time current_user
|
@pull.set_user_and_time current_user
|
||||||
need_check = true if action == 'reopen' && @pull.valid?
|
need_check = true if action == 'reopen' && @pull.valid?
|
||||||
|
@ -96,16 +98,17 @@ class Api::V1::PullRequestsController < Api::V1::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def commits
|
def commits
|
||||||
|
authorize @pull
|
||||||
@commits = @pull.repo.commits_between(@pull.to_commit, @pull.from_commit).paginate(paginate_params)
|
@commits = @pull.repo.commits_between(@pull.to_commit, @pull.from_commit).paginate(paginate_params)
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def files
|
def files
|
||||||
|
authorize @pull
|
||||||
@stats = @pull.diff_stats.zip(@pull.diff).paginate(paginate_params)
|
@stats = @pull.diff_stats.zip(@pull.diff).paginate(paginate_params)
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def merge
|
def merge
|
||||||
|
authorize @pull
|
||||||
class_name = @pull.class.name
|
class_name = @pull.class.name
|
||||||
if @pull.merge!(current_user)
|
if @pull.merge!(current_user)
|
||||||
render_json_response @pull, "#{class_name} has been merged successfully"
|
render_json_response @pull, "#{class_name} has been merged successfully"
|
||||||
|
@ -116,6 +119,12 @@ class Api::V1::PullRequestsController < Api::V1::BaseController
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
# Private: before_action hook which loads PullRequest.
|
||||||
|
def load_pull
|
||||||
|
@pull = @issue.pull_request
|
||||||
|
authorize @pull, :show? if @pull
|
||||||
|
end
|
||||||
|
|
||||||
def render_pulls_list
|
def render_pulls_list
|
||||||
@pulls = @pulls.includes(issue: [:user, :assignee])
|
@pulls = @pulls.includes(issue: [:user, :assignee])
|
||||||
if params[:status] == 'closed'
|
if params[:status] == 'closed'
|
||||||
|
@ -154,21 +163,8 @@ class Api::V1::PullRequestsController < Api::V1::BaseController
|
||||||
@pulls = @pulls.where('issues.created_at >= to_timestamp(?)', params[:since]) if params[:since] =~ /\A\d+\z/
|
@pulls = @pulls.where('issues.created_at >= to_timestamp(?)', params[:since]) if params[:since] =~ /\A\d+\z/
|
||||||
@pulls = @pulls.paginate(paginate_params)
|
@pulls = @pulls.paginate(paginate_params)
|
||||||
|
|
||||||
respond_to do |format|
|
render :index
|
||||||
format.json { render :index }
|
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def get_all_project_ids default_project_ids
|
|
||||||
project_ids = []
|
|
||||||
if ['created', 'all'].include? params[:filter]
|
|
||||||
# add own pulls
|
|
||||||
project_ids = Project.accessible_by(current_ability, :show).joins(:issues).
|
|
||||||
where(issues: {user_id: current_user.id}).pluck('projects.id')
|
|
||||||
end
|
|
||||||
project_ids |= default_project_ids
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def pull_params
|
def pull_params
|
||||||
@pull_params ||= params[:pull_request] || {}
|
@pull_params ||= params[:pull_request] || {}
|
||||||
|
|
|
@ -1,18 +1,15 @@
|
||||||
class Api::V1::RepositoriesController < Api::V1::BaseController
|
class Api::V1::RepositoriesController < Api::V1::BaseController
|
||||||
respond_to :csv, only: :packages
|
respond_to :csv, only: :packages
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:show, :projects] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:show, :projects] if APP_CONFIG['anonymous_access']
|
||||||
|
before_action :load_repository
|
||||||
load_and_authorize_resource :repository, through: :platform, shallow: true
|
|
||||||
|
|
||||||
def show
|
def show
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def projects
|
def projects
|
||||||
@projects = @repository.projects.recent.paginate(paginate_params)
|
@projects = @repository.projects.recent.paginate(paginate_params)
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
@ -32,7 +29,6 @@ class Api::V1::RepositoriesController < Api::V1::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def key_pair
|
def key_pair
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Only one request per 15 minutes for each platform
|
# Only one request per 15 minutes for each platform
|
||||||
|
@ -40,7 +36,7 @@ class Api::V1::RepositoriesController < Api::V1::BaseController
|
||||||
key, now = [@repository.platform.id, :repository_packages], Time.zone.now
|
key, now = [@repository.platform.id, :repository_packages], Time.zone.now
|
||||||
last_request = Rails.cache.read(key)
|
last_request = Rails.cache.read(key)
|
||||||
if last_request.present? && last_request + 15.minutes > now
|
if last_request.present? && last_request + 15.minutes > now
|
||||||
raise CanCan::AccessDenied
|
raise Pundit::NotAuthorizedError
|
||||||
else
|
else
|
||||||
|
|
||||||
Rails.cache.write(key, now, expires_at: 15.minutes)
|
Rails.cache.write(key, now, expires_at: 15.minutes)
|
||||||
|
@ -77,7 +73,7 @@ class Api::V1::RepositoriesController < Api::V1::BaseController
|
||||||
|
|
||||||
def add_project
|
def add_project
|
||||||
if project = Project.where(id: params[:project_id]).first
|
if project = Project.where(id: params[:project_id]).first
|
||||||
if can?(:read, project)
|
if policy(project).read?
|
||||||
begin
|
begin
|
||||||
@repository.projects << project
|
@repository.projects << project
|
||||||
render_json_response @repository, "Project '#{project.id}' has been added to repository successfully"
|
render_json_response @repository, "Project '#{project.id}' has been added to repository successfully"
|
||||||
|
@ -110,4 +106,11 @@ class Api::V1::RepositoriesController < Api::V1::BaseController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Repository.
|
||||||
|
def load_repository
|
||||||
|
authorize @repository = Repository.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
|
@ -1,14 +1,12 @@
|
||||||
class Api::V1::SearchController < Api::V1::BaseController
|
class Api::V1::SearchController < Api::V1::BaseController
|
||||||
before_filter :authenticate_user! unless APP_CONFIG['anonymous_access']
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
search = Search.new(params[:query], current_ability, paginate_params)
|
authorize :search
|
||||||
|
|
||||||
|
search = Search.new(params[:query], current_user, paginate_params)
|
||||||
types = Search::TYPES.find{ |t| t == params[:type] } || Search::TYPES
|
types = Search::TYPES.find{ |t| t == params[:type] } || Search::TYPES
|
||||||
@results = {}
|
@results = {}
|
||||||
[types].flatten.each do |type|
|
[types].flatten.each do |type|
|
||||||
@results[type] = search.send(type)
|
@results[type] = search.send(type)
|
||||||
end
|
end
|
||||||
|
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -1,19 +1,16 @@
|
||||||
class Api::V1::UsersController < Api::V1::BaseController
|
class Api::V1::UsersController < Api::V1::BaseController
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:show] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:show] if APP_CONFIG['anonymous_access']
|
||||||
load_and_authorize_resource :user, only: :show
|
before_action :load_user, only: %i(show)
|
||||||
before_filter :set_current_user, except: :show
|
before_action :set_current_user, except: :show
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@user = User.opened.find params[:id] # dont show system users
|
@user = User.opened.find params[:id] # dont show system users
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def show_current_user
|
def show_current_user
|
||||||
respond_to do |format|
|
render :show
|
||||||
format.json { render :show }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
@ -37,15 +34,18 @@ class Api::V1::UsersController < Api::V1::BaseController
|
||||||
else
|
else
|
||||||
render_json_response @user, error_message(@user.notifier, 'User notification settings have not been updated'), 422
|
render_json_response @user, error_message(@user.notifier, 'User notification settings have not been updated'), 422
|
||||||
end
|
end
|
||||||
else
|
|
||||||
respond_to :json
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def set_current_user
|
def set_current_user
|
||||||
@user = current_user
|
authorize @user = current_user
|
||||||
|
end
|
||||||
|
|
||||||
|
# Private: before_action hook which loads User.
|
||||||
|
def load_user
|
||||||
|
authorize @user = User.find(params[:id])
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
class ApplicationController < ActionController::Base
|
class ApplicationController < ActionController::Base
|
||||||
|
include StrongParams
|
||||||
|
include Pundit
|
||||||
|
|
||||||
AIRBRAKE_IGNORE = [
|
AIRBRAKE_IGNORE = [
|
||||||
ActionController::InvalidAuthenticityToken,
|
ActionController::InvalidAuthenticityToken,
|
||||||
AbstractController::ActionNotFound
|
AbstractController::ActionNotFound
|
||||||
|
@ -9,12 +12,15 @@ class ApplicationController < ActionController::Base
|
||||||
layout :layout_by_resource
|
layout :layout_by_resource
|
||||||
|
|
||||||
# Hack to prevent token auth on all pages except atom feed:
|
# Hack to prevent token auth on all pages except atom feed:
|
||||||
prepend_before_filter -> { redirect_to(new_user_session_path) if params[:token] && params[:token].is_a?(String) && params[:format] != 'atom'}
|
prepend_before_action -> { redirect_to(new_user_session_path) if params[:token] && params[:token].is_a?(String) && params[:format] != 'atom'}
|
||||||
|
|
||||||
before_filter :set_locale
|
before_action :set_locale
|
||||||
before_filter -> { EventLog.current_controller = self },
|
before_action -> { EventLog.current_controller = self },
|
||||||
only: [:create, :destroy, :open_id, :cancel, :publish, :change_visibility] # :update
|
only: [:create, :destroy, :open_id, :cancel, :publish, :change_visibility] # :update
|
||||||
after_filter -> { EventLog.current_controller = nil }
|
before_action :banned?
|
||||||
|
after_action -> { EventLog.current_controller = nil }
|
||||||
|
after_action :verify_authorized, unless: :devise_controller?
|
||||||
|
skip_after_action :verify_authorized, only: %i(render_500 render_404)
|
||||||
|
|
||||||
helper_method :get_owner
|
helper_method :get_owner
|
||||||
|
|
||||||
|
@ -27,7 +33,7 @@ class ApplicationController < ActionController::Base
|
||||||
AbstractController::ActionNotFound, with: :render_404
|
AbstractController::ActionNotFound, with: :render_404
|
||||||
end
|
end
|
||||||
|
|
||||||
rescue_from CanCan::AccessDenied do |exception|
|
rescue_from Pundit::NotAuthorizedError do |exception|
|
||||||
redirect_to forbidden_url, alert: t("flash.exception_message")
|
redirect_to forbidden_url, alert: t("flash.exception_message")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -40,6 +46,15 @@ class ApplicationController < ActionController::Base
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
# Disables access to site for banned users
|
||||||
|
def banned?
|
||||||
|
if user_signed_in? && current_user.access_locked?
|
||||||
|
sign_out current_user
|
||||||
|
flash[:error] = I18n.t('devise.failure.locked')
|
||||||
|
redirect_to root_path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# For this example, we are simply using token authentication
|
# For this example, we are simply using token authentication
|
||||||
# via parameters. However, anyone could use Rails's token
|
# via parameters. However, anyone could use Rails's token
|
||||||
# authentication features to get the token from a header.
|
# authentication features to get the token from a header.
|
||||||
|
@ -75,6 +90,8 @@ class ApplicationController < ActionController::Base
|
||||||
if Rails.env.production? && !AIRBRAKE_IGNORE.include?(e.class)
|
if Rails.env.production? && !AIRBRAKE_IGNORE.include?(e.class)
|
||||||
notify_airbrake(e)
|
notify_airbrake(e)
|
||||||
end
|
end
|
||||||
|
Rails.logger.error e.message
|
||||||
|
Rails.logger.error e.backtrace.inspect
|
||||||
render_error 500
|
render_error 500
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class AutocompletesController < ApplicationController
|
class AutocompletesController < ApplicationController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
|
skip_after_action :verify_authorized
|
||||||
|
|
||||||
def autocomplete_user_uname
|
def autocomplete_user_uname
|
||||||
results = User.opened.search(params[:query]).search_order.limit(5)
|
results = User.opened.search(params[:query]).search_order.limit(5)
|
||||||
|
@ -13,7 +14,8 @@ class AutocompletesController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def autocomplete_extra_build_list
|
def autocomplete_extra_build_list
|
||||||
bl = BuildList.for_extra_build_lists(params[:term], current_ability, save_to_platform).first
|
bl = BuildListPolicy::Scope.new(current_user, BuildList).read.
|
||||||
|
for_extra_build_lists(params[:term], save_to_platform).first
|
||||||
results << { :id => bl.id,
|
results << { :id => bl.id,
|
||||||
:value => bl.id,
|
:value => bl.id,
|
||||||
:label => "#{bl.id} (#{bl.project.name} - #{bl.arch.name})",
|
:label => "#{bl.id} (#{bl.project.name} - #{bl.arch.name})",
|
||||||
|
@ -29,16 +31,16 @@ class AutocompletesController < ApplicationController
|
||||||
value: mb.id,
|
value: mb.id,
|
||||||
label: "#{mb.id} - #{mb.name}",
|
label: "#{mb.id} - #{mb.name}",
|
||||||
path: platform_mass_build_path(mb.save_to_platform, mb)
|
path: platform_mass_build_path(mb.save_to_platform, mb)
|
||||||
} if mb && can?(:show, mb)
|
} if mb && policy(mb).show?
|
||||||
render json: results.to_json
|
render json: results.to_json
|
||||||
end
|
end
|
||||||
|
|
||||||
def autocomplete_extra_repositories
|
def autocomplete_extra_repositories
|
||||||
# Only personal and build for platform repositories can be attached to the build
|
# Only personal and build for platform repositories can be attached to the build
|
||||||
Platform.includes(:repositories).search(params[:term]).search_order
|
platforms = PlatformPolicy::Scope.new(current_user, Platform).show.
|
||||||
.accessible_by(current_ability, :read).limit(5)
|
includes(:repositories).search(params[:term]).search_order.limit(5).
|
||||||
.where("platforms.platform_type = 'personal' OR platforms.id = ?",
|
where("platforms.platform_type = 'personal' OR platforms.id = ?", params[:build_for_platform_id])
|
||||||
params[:build_for_platform_id].to_i).each do |platform|
|
platforms.each do |platform|
|
||||||
platform.repositories.each do |repository|
|
platform.repositories.each do |repository|
|
||||||
results <<
|
results <<
|
||||||
{
|
{
|
||||||
|
@ -56,7 +58,7 @@ class AutocompletesController < ApplicationController
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def save_to_platform
|
def save_to_platform
|
||||||
@save_to_platform ||= Platform.find(params[:platform_id])
|
@save_to_platform ||= Platform.find_cached(params[:platform_id])
|
||||||
end
|
end
|
||||||
|
|
||||||
def results
|
def results
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
module Api
|
||||||
|
module V1
|
||||||
|
module Issueable
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
protected
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Group.
|
||||||
|
def load_group
|
||||||
|
authorize @group = Group.find(params[:id]), :show?
|
||||||
|
end
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Project.
|
||||||
|
def load_project
|
||||||
|
authorize @project = Project.find(params[:project_id]), :show?
|
||||||
|
end
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Issue.
|
||||||
|
def load_issue
|
||||||
|
authorize @issue = @project.issues.find_by!(serial_id: params[:id]), :show?
|
||||||
|
end
|
||||||
|
|
||||||
|
# Private: Get membered projects.
|
||||||
|
#
|
||||||
|
# Returns the ActiveRecord::Relation instance.
|
||||||
|
def membered_projects
|
||||||
|
@membered_projects ||= ProjectPolicy::Scope.new(current_user, Project).membered
|
||||||
|
end
|
||||||
|
|
||||||
|
# Private: Get project ids which available for current user.
|
||||||
|
#
|
||||||
|
# Returns the Array of project ids.
|
||||||
|
def get_all_project_ids(default_project_ids)
|
||||||
|
project_ids = []
|
||||||
|
if %w(created all).include? params[:filter]
|
||||||
|
# add own issues
|
||||||
|
project_ids = Project.opened.joins(:issues).
|
||||||
|
where(issues: {user_id: current_user.id}).
|
||||||
|
pluck('projects.id')
|
||||||
|
end
|
||||||
|
project_ids | default_project_ids
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,9 @@
|
||||||
|
module StrongParams
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
protected
|
||||||
|
|
||||||
|
def permit_params(param_name, *accessible)
|
||||||
|
(params[param_name] || ActionController::Parameters.new).permit(*accessible.flatten)
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,4 +1,5 @@
|
||||||
class ContactsController < ApplicationController
|
class ContactsController < ApplicationController
|
||||||
|
skip_after_action :verify_authorized
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@form = Feedback.new(current_user)
|
@form = Feedback.new(current_user)
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
class Groups::BaseController < ApplicationController
|
class Groups::BaseController < ApplicationController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
before_filter :find_group
|
before_action :find_group
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Group.
|
||||||
def find_group
|
def find_group
|
||||||
if group_id = params[:uname] || params[:group_id] || params[:id]
|
if group_id = params[:uname] || params[:group_id] || params[:id]
|
||||||
@group = Group.find_by_insensitive_uname! group_id
|
@group = Group.find_by_insensitive_uname! group_id
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
class Groups::MembersController < Groups::BaseController
|
class Groups::MembersController < Groups::BaseController
|
||||||
before_filter -> { authorize! :manage_members, @group }
|
before_action -> { authorize @group, :manage_members? }
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@members = @group.members.order(:uname) - [@group.owner]
|
@members = @group.members.order(:uname) - [@group.owner]
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
raise CanCan::AccessDenied if @group.owner_id.to_s == params[:member_id]
|
raise Pundit::NotAuthorizedError if @group.owner_id.to_s == params[:member_id]
|
||||||
|
|
||||||
relation = @group.actors.where(actor_id: params[:member_id], actor_type: 'User').first
|
relation = @group.actors.where(actor_id: params[:member_id], actor_type: 'User').first
|
||||||
relation ||= @group.actors.build(actor_id: params[:member_id], actor_type: 'User')
|
relation ||= @group.actors.build(actor_id: params[:member_id], actor_type: 'User')
|
||||||
|
@ -25,7 +25,7 @@ class Groups::MembersController < Groups::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def add
|
def add
|
||||||
@user = User.where(id: params[:member_id]).first
|
@user = User.find_by(id: params[:member_id])
|
||||||
if !@user
|
if !@user
|
||||||
flash[:error] = t("flash.collaborators.wrong_user", uname: params[:user_uname])
|
flash[:error] = t("flash.collaborators.wrong_user", uname: params[:user_uname])
|
||||||
elsif @group.add_member(@user, params[:role])
|
elsif @group.add_member(@user, params[:role])
|
||||||
|
|
|
@ -2,15 +2,16 @@ class Groups::ProfileController < Groups::BaseController
|
||||||
include AvatarHelper
|
include AvatarHelper
|
||||||
include PaginateHelper
|
include PaginateHelper
|
||||||
|
|
||||||
load_and_authorize_resource class: Group, instance_name: 'group'
|
skip_before_action :authenticate_user!, only: :show if APP_CONFIG['anonymous_access']
|
||||||
skip_before_filter :authenticate_user!, only: :show if APP_CONFIG['anonymous_access']
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
authorize :group
|
||||||
@groups = current_user.groups.paginate(page: params[:group_page]) # accessible_by(current_ability)
|
@groups = current_user.groups.paginate(page: params[:group_page]) # accessible_by(current_ability)
|
||||||
@groups = @groups.search(params[:query]) if params[:query].present?
|
@groups = @groups.search(params[:query]) if params[:query].present?
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
authorize @group
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html do
|
format.html do
|
||||||
@members = @group.members.order(:uname)
|
@members = @group.members.order(:uname)
|
||||||
|
@ -21,9 +22,10 @@ class Groups::ProfileController < Groups::BaseController
|
||||||
when 'open'
|
when 'open'
|
||||||
@projects = @projects.opened
|
@projects = @projects.opened
|
||||||
when 'hidden'
|
when 'hidden'
|
||||||
@projects = @projects.by_visibilities('hidden').accessible_by(current_ability, :read)
|
@projects = @projects.by_visibilities('hidden')
|
||||||
|
@projects = @projects.none unless policy(@group).reader?
|
||||||
else
|
else
|
||||||
@projects = @projects.accessible_by(current_ability, :read)
|
@projects = @projects.opened unless policy(@group).reader?
|
||||||
end
|
end
|
||||||
@total_items = @projects.count
|
@total_items = @projects.count
|
||||||
@projects = @projects.paginate(paginate_params)
|
@projects = @projects.paginate(paginate_params)
|
||||||
|
@ -33,13 +35,15 @@ class Groups::ProfileController < Groups::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
authorize @group = current_user.own_groups.build
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
|
authorize @group
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@group = current_user.own_groups.new params[:group]
|
authorize @group = current_user.own_groups.build(params[:group])
|
||||||
if @group.save
|
if @group.save
|
||||||
flash[:notice] = t('flash.group.saved')
|
flash[:notice] = t('flash.group.saved')
|
||||||
redirect_to group_path(@group)
|
redirect_to group_path(@group)
|
||||||
|
@ -51,6 +55,7 @@ class Groups::ProfileController < Groups::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
authorize @group
|
||||||
if @group.update_attributes(params[:group])
|
if @group.update_attributes(params[:group])
|
||||||
update_avatar(@group, params)
|
update_avatar(@group, params)
|
||||||
flash[:notice] = t('flash.group.saved')
|
flash[:notice] = t('flash.group.saved')
|
||||||
|
@ -62,12 +67,14 @@ class Groups::ProfileController < Groups::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
|
authorize @group
|
||||||
@group.destroy
|
@group.destroy
|
||||||
flash[:notice] = t("flash.group.destroyed")
|
flash[:notice] = t("flash.group.destroyed")
|
||||||
redirect_to groups_path
|
redirect_to groups_path
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_user
|
def remove_user
|
||||||
|
authorize @group
|
||||||
Relation.by_actor(current_user).by_target(@group).destroy_all
|
Relation.by_actor(current_user).by_target(@group).destroy_all
|
||||||
redirect_to groups_path
|
redirect_to groups_path
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
class HomeController < ApplicationController
|
class HomeController < ApplicationController
|
||||||
before_filter :authenticate_user!, only: [:activity, :issues, :pull_requests]
|
before_action :authenticate_user!, only: [:activity, :issues, :pull_requests]
|
||||||
|
skip_after_action :verify_authorized
|
||||||
|
|
||||||
def root
|
def root
|
||||||
render 'pages/tour/abf-tour-project-description-1'
|
respond_to do |format|
|
||||||
|
format.html { render 'pages/tour/abf-tour-project-description-1' }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def activity
|
def activity
|
||||||
|
@ -23,7 +26,7 @@ class HomeController < ApplicationController
|
||||||
def issues
|
def issues
|
||||||
@created_issues = current_user.issues
|
@created_issues = current_user.issues
|
||||||
@assigned_issues = Issue.where(assignee_id: current_user.id)
|
@assigned_issues = Issue.where(assignee_id: current_user.id)
|
||||||
pr_ids = Project.accessible_by(current_ability, :membered).uniq.pluck(:id)
|
pr_ids = ProjectPolicy::Scope.new(current_user, Project).membered.uniq.pluck(:id)
|
||||||
@all_issues = Issue.where(project_id: pr_ids)
|
@all_issues = Issue.where(project_id: pr_ids)
|
||||||
@created_issues, @assigned_issues, @all_issues =
|
@created_issues, @assigned_issues, @all_issues =
|
||||||
if action_name == 'issues'
|
if action_name == 'issues'
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
class PagesController < ApplicationController
|
class PagesController < ApplicationController
|
||||||
|
skip_after_action :verify_authorized
|
||||||
|
|
||||||
def tour_inside
|
def tour_inside
|
||||||
@entries = case params[:id]
|
@entries = case params[:id]
|
||||||
|
|
|
@ -1,2 +1,11 @@
|
||||||
class Platforms::BaseController < ApplicationController
|
class Platforms::BaseController < ApplicationController
|
||||||
|
before_action :load_platform
|
||||||
|
|
||||||
|
protected
|
||||||
|
|
||||||
|
def load_platform
|
||||||
|
return unless params[:platform_id]
|
||||||
|
authorize @platform = Platform.find_cached(params[:platform_id]), :show?
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
class Platforms::ContentsController < Platforms::BaseController
|
class Platforms::ContentsController < Platforms::BaseController
|
||||||
include PaginateHelper
|
include PaginateHelper
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: :index if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: :index if APP_CONFIG['anonymous_access']
|
||||||
|
|
||||||
load_and_authorize_resource :platform
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
|
@ -22,7 +20,7 @@ class Platforms::ContentsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_file
|
def remove_file
|
||||||
authorize!(:remove_file, @platform)
|
authorize @platform
|
||||||
PlatformContent.remove_file(@platform, params[:path])
|
PlatformContent.remove_file(@platform, params[:path])
|
||||||
render nothing: true
|
render nothing: true
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
class Platforms::KeyPairsController < Platforms::BaseController
|
class Platforms::KeyPairsController < Platforms::BaseController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
|
|
||||||
load_and_authorize_resource :platform
|
|
||||||
load_and_authorize_resource only: [:create, :destroy]
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@key_pair = KeyPair.new
|
@key_pair = KeyPair.new
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
@key_pair = KeyPair.new params[:key_pair]
|
||||||
@key_pair.user_id = current_user.id
|
@key_pair.user_id = current_user.id
|
||||||
|
authorize @key_pair
|
||||||
if @key_pair.save
|
if @key_pair.save
|
||||||
flash[:notice] = t('flash.key_pairs.saved')
|
flash[:notice] = t('flash.key_pairs.saved')
|
||||||
redirect_to platform_key_pairs_path(@key_pair.repository.platform) and return
|
redirect_to platform_key_pairs_path(@key_pair.repository.platform) and return
|
||||||
|
@ -21,6 +19,7 @@ class Platforms::KeyPairsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
|
authorize @key_pair = @platform.key_pairs.find(params[:id])
|
||||||
if @key_pair.destroy
|
if @key_pair.destroy
|
||||||
flash[:notice] = t('flash.key_pairs.destroyed')
|
flash[:notice] = t('flash.key_pairs.destroyed')
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
class Platforms::MaintainersController < ApplicationController
|
class Platforms::MaintainersController < Platforms::BaseController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:index] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:index] if APP_CONFIG['anonymous_access']
|
||||||
load_and_authorize_resource :platform
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@maintainer = BuildList::Package.new(params[:build_list_package])
|
@maintainer = BuildList::Package.new(params[:build_list_package])
|
||||||
|
|
|
@ -1,31 +1,33 @@
|
||||||
class Platforms::MassBuildsController < Platforms::BaseController
|
class Platforms::MassBuildsController < Platforms::BaseController
|
||||||
include DatatableHelper
|
include DatatableHelper
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:index, :get_list] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:index, :get_list] if APP_CONFIG['anonymous_access']
|
||||||
|
|
||||||
load_resource :platform
|
|
||||||
load_and_authorize_resource :through => :platform, :shallow => true
|
|
||||||
|
|
||||||
|
before_action :find_mass_build, only: %i(show publish cancel get_list)
|
||||||
|
|
||||||
def new
|
def new
|
||||||
if params[:mass_build_id].present?
|
if params[:mass_build_id].present?
|
||||||
@mass_build = @platform.mass_builds.find(params[:mass_build_id]).dup
|
@mass_build = @platform.mass_builds.find(params[:mass_build_id]).dup
|
||||||
@mass_build.arches = Arch.where(name: @mass_build.arch_names.split(', ')).pluck(:id)
|
@mass_build.arches = Arch.where(name: @mass_build.arch_names.split(', ')).pluck(:id)
|
||||||
end
|
end
|
||||||
|
authorize @mass_build ||= @platform.mass_builds.build
|
||||||
@mass_build.arches ||= @platform.platform_arch_settings.by_default.pluck(:arch_id)
|
@mass_build.arches ||= @platform.platform_arch_settings.by_default.pluck(:arch_id)
|
||||||
@mass_build.repositories ||= []
|
@mass_build.repositories ||= []
|
||||||
@mass_build.arches.map!(&:to_s)
|
@mass_build.arches.map!(&:to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
authorize @platform.mass_builds.find(params[:id])
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
@mass_build = @platform.mass_builds.build(params[:mass_build])
|
||||||
@mass_build.user = current_user
|
@mass_build.user = current_user
|
||||||
@mass_build.arches = params[:arches] || []
|
@mass_build.arches = params[:arches] || []
|
||||||
@mass_build.repositories ||= params[:repositories] || []
|
@mass_build.repositories ||= params[:repositories] || []
|
||||||
|
|
||||||
|
authorize @mass_build
|
||||||
if @mass_build.save
|
if @mass_build.save
|
||||||
redirect_to(platform_mass_builds_path(@platform), notice: t("flash.platform.build_all_success"))
|
redirect_to(platform_mass_builds_path(@platform), notice: t("flash.platform.build_all_success"))
|
||||||
else
|
else
|
||||||
|
@ -57,7 +59,6 @@ class Platforms::MassBuildsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_list
|
def get_list
|
||||||
|
|
||||||
text =
|
text =
|
||||||
case params[:kind]
|
case params[:kind]
|
||||||
when 'failed_builds_list', 'tests_failed_builds_list', 'success_builds_list'
|
when 'failed_builds_list', 'tests_failed_builds_list', 'success_builds_list'
|
||||||
|
@ -67,4 +68,11 @@ class Platforms::MassBuildsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
render text: text
|
render text: text
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
# Private: before_action hook which loads MassBuild.
|
||||||
|
def find_mass_build
|
||||||
|
authorize @mass_build = @platform.mass_builds.find(params[:id])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
class Platforms::PlatformsController < Platforms::BaseController
|
class Platforms::PlatformsController < Platforms::BaseController
|
||||||
include FileStoreHelper
|
include FileStoreHelper
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:advisories, :members, :show] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:advisories, :members, :show] if APP_CONFIG['anonymous_access']
|
||||||
load_and_authorize_resource
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
authorize :platform
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html {}
|
format.html {}
|
||||||
|
|
||||||
format.json {
|
format.json {
|
||||||
@platforms = @platforms.accessible_by(current_ability, :related)
|
@platforms = PlatformPolicy::Scope.new(current_user, Platform).related
|
||||||
@platforms_count = @platforms.count
|
@platforms_count = @platforms.count
|
||||||
@platforms = @platforms.paginate(page: current_page, per_page: Platform.per_page)
|
@platforms = @platforms.paginate(page: current_page, per_page: Platform.per_page)
|
||||||
}
|
}
|
||||||
|
@ -21,17 +21,19 @@ class Platforms::PlatformsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
authorize @platform = Platform.new
|
||||||
@admin_uname = current_user.uname
|
@admin_uname = current_user.uname
|
||||||
@admin_id = current_user.id
|
@admin_id = current_user.id
|
||||||
@platform = Platform.new
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
|
authorize @platform
|
||||||
@admin_id = @platform.owner.id
|
@admin_id = @platform.owner.id
|
||||||
@admin_uname = @platform.owner.uname
|
@admin_uname = @platform.owner.uname
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
authorize @platform = Platform.new(params[:platform])
|
||||||
@admin_id = params[:admin_id]
|
@admin_id = params[:admin_id]
|
||||||
@admin_uname = params[:admin_uname]
|
@admin_uname = params[:admin_uname]
|
||||||
# FIXME: do not allow manipulate owner model, only platforms onwer_id and onwer_type
|
# FIXME: do not allow manipulate owner model, only platforms onwer_id and onwer_type
|
||||||
|
@ -47,6 +49,7 @@ class Platforms::PlatformsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
authorize @platform
|
||||||
@admin_id = params[:admin_id]
|
@admin_id = params[:admin_id]
|
||||||
@admin_uname = params[:admin_uname]
|
@admin_uname = params[:admin_uname]
|
||||||
|
|
||||||
|
@ -54,7 +57,6 @@ class Platforms::PlatformsController < Platforms::BaseController
|
||||||
platform_params = platform_params.slice(:description, :platform_arch_settings_attributes, :released, :automatic_metadata_regeneration, :default_branch)
|
platform_params = platform_params.slice(:description, :platform_arch_settings_attributes, :released, :automatic_metadata_regeneration, :default_branch)
|
||||||
platform_params[:owner] = User.find(@admin_id) if @admin_id.present?
|
platform_params[:owner] = User.find(@admin_id) if @admin_id.present?
|
||||||
|
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html do
|
format.html do
|
||||||
if @platform.update_attributes(platform_params)
|
if @platform.update_attributes(platform_params)
|
||||||
|
@ -76,6 +78,7 @@ class Platforms::PlatformsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def regenerate_metadata
|
def regenerate_metadata
|
||||||
|
authorize @platform
|
||||||
if @platform.regenerate
|
if @platform.regenerate
|
||||||
flash[:notice] = I18n.t('flash.platform.saved')
|
flash[:notice] = I18n.t('flash.platform.saved')
|
||||||
else
|
else
|
||||||
|
@ -85,6 +88,7 @@ class Platforms::PlatformsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def change_visibility
|
def change_visibility
|
||||||
|
authorize @platform
|
||||||
if @platform.change_visibility
|
if @platform.change_visibility
|
||||||
flash[:notice] = I18n.t("flash.platform.saved")
|
flash[:notice] = I18n.t("flash.platform.saved")
|
||||||
redirect_to @platform
|
redirect_to @platform
|
||||||
|
@ -96,12 +100,14 @@ class Platforms::PlatformsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def clone
|
def clone
|
||||||
|
authorize @platform
|
||||||
@cloned = Platform.new
|
@cloned = Platform.new
|
||||||
@cloned.name = @platform.name + "_clone"
|
@cloned.name = @platform.name + "_clone"
|
||||||
@cloned.description = @platform.description + "_clone"
|
@cloned.description = @platform.description + "_clone"
|
||||||
end
|
end
|
||||||
|
|
||||||
def make_clone
|
def make_clone
|
||||||
|
authorize @platform
|
||||||
@cloned = @platform.full_clone params[:platform].merge(owner: current_user)
|
@cloned = @platform.full_clone params[:platform].merge(owner: current_user)
|
||||||
if @cloned.persisted?
|
if @cloned.persisted?
|
||||||
flash[:notice] = I18n.t("flash.platform.clone_success")
|
flash[:notice] = I18n.t("flash.platform.clone_success")
|
||||||
|
@ -113,16 +119,19 @@ class Platforms::PlatformsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
|
authorize @platform
|
||||||
@platform.destroy # later with resque
|
@platform.destroy # later with resque
|
||||||
flash[:notice] = t("flash.platform.destroyed")
|
flash[:notice] = t("flash.platform.destroyed")
|
||||||
redirect_to platforms_path
|
redirect_to platforms_path
|
||||||
end
|
end
|
||||||
|
|
||||||
def members
|
def members
|
||||||
|
authorize @platform
|
||||||
@members = @platform.members.order(:uname)
|
@members = @platform.members.order(:uname)
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_members
|
def remove_members
|
||||||
|
authorize @platform
|
||||||
User.where(id: params[:members]).each do |user|
|
User.where(id: params[:members]).each do |user|
|
||||||
@platform.remove_member(user)
|
@platform.remove_member(user)
|
||||||
end
|
end
|
||||||
|
@ -130,7 +139,8 @@ class Platforms::PlatformsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_member
|
def add_member
|
||||||
member = User.where(id: params[:member_id]).first
|
authorize @platform
|
||||||
|
member = User.find_by(id: params[:member_id])
|
||||||
if !member
|
if !member
|
||||||
flash[:error] = t("flash.collaborators.wrong_user", uname: params[:member_id])
|
flash[:error] = t("flash.collaborators.wrong_user", uname: params[:member_id])
|
||||||
elsif @platform.add_member(member)
|
elsif @platform.add_member(member)
|
||||||
|
@ -142,13 +152,22 @@ class Platforms::PlatformsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def advisories
|
def advisories
|
||||||
|
authorize @platform
|
||||||
@advisories = @platform.advisories.paginate(page: params[:page])
|
@advisories = @platform.advisories.paginate(page: params[:page])
|
||||||
end
|
end
|
||||||
|
|
||||||
def clear
|
def clear
|
||||||
|
authorize @platform
|
||||||
@platform.clear
|
@platform.clear
|
||||||
flash[:notice] = t('flash.repository.clear')
|
flash[:notice] = t('flash.repository.clear')
|
||||||
redirect_to edit_platform_path(@platform)
|
redirect_to edit_platform_path(@platform)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Platform.
|
||||||
|
def load_platform
|
||||||
|
authorize @platform = Platform.find_cached(params[:id]), :show? if params[:id]
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
class Platforms::ProductBuildListsController < Platforms::BaseController
|
class Platforms::ProductBuildListsController < Platforms::BaseController
|
||||||
include FileStoreHelper
|
include FileStoreHelper
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:index, :show, :log] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:index, :show, :log] if APP_CONFIG['anonymous_access']
|
||||||
before_filter :redirect_to_full_path_if_short_url, only: [:show, :update]
|
before_action :redirect_to_full_path_if_short_url, only: [:show, :update]
|
||||||
load_and_authorize_resource :platform, except: :index
|
|
||||||
load_and_authorize_resource :product, through: :platform, except: :index
|
before_action :load_product, except: :index
|
||||||
load_and_authorize_resource :product_build_list, through: :product, except: :index
|
before_action :load_product_build_list, except: [:index, :new, :create]
|
||||||
load_and_authorize_resource only: [:index, :show, :log, :cancel, :update]
|
|
||||||
|
|
||||||
def new
|
def new
|
||||||
product = @product_build_list.product
|
@product_build_list = @product.product_build_lists.new
|
||||||
@product_build_list.params = product.params
|
@product_build_list.params = @product.params
|
||||||
@product_build_list.main_script = product.main_script
|
@product_build_list.main_script = @product.main_script
|
||||||
@product_build_list.time_living = product.time_living
|
@product_build_list.time_living = @product.time_living
|
||||||
@product_build_list.project_version = product.project_version
|
@product_build_list.project_version = @product.project_version
|
||||||
@product_build_list.project = product.project
|
@product_build_list.project = @product.project
|
||||||
unless @product_build_list.project
|
unless @product_build_list.project
|
||||||
flash[:error] = t('flash.product_build_list.no_project')
|
flash[:error] = t('flash.product_build_list.no_project')
|
||||||
redirect_to edit_platform_product_path(@platform, @product)
|
redirect_to edit_platform_product_path(@platform, @product)
|
||||||
|
@ -53,6 +52,7 @@ class Platforms::ProductBuildListsController < Platforms::BaseController
|
||||||
pbl.user = current_user
|
pbl.user = current_user
|
||||||
pbl.base_url = "http://#{request.host_with_port}"
|
pbl.base_url = "http://#{request.host_with_port}"
|
||||||
|
|
||||||
|
authorize pbl
|
||||||
if pbl.save
|
if pbl.save
|
||||||
flash[:notice] = t('flash.product.build_started')
|
flash[:notice] = t('flash.product.build_started')
|
||||||
redirect_to [@platform, @product]
|
redirect_to [@platform, @product]
|
||||||
|
@ -73,8 +73,11 @@ class Platforms::ProductBuildListsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
authorize :product_build_list
|
||||||
@product_build_list = ProductBuildList.new(params[:product_build_list])
|
@product_build_list = ProductBuildList.new(params[:product_build_list])
|
||||||
@product_build_list.status = nil if params[:product_build_list].blank?
|
@product_build_list.status = nil if params[:product_build_list].try(:[], :status).blank?
|
||||||
|
@product_build_lists = @platform.product_build_lists if @platform
|
||||||
|
@product_build_lists ||= PlatformPolicy::Scope.new(current_user, ProductBuildList.joins(product: :platform)).show
|
||||||
if @product_build_list.product_id.present?
|
if @product_build_list.product_id.present?
|
||||||
@product_build_lists = @product_build_lists.where(id: @product_build_list.product_id)
|
@product_build_lists = @product_build_lists.where(id: @product_build_list.product_id)
|
||||||
else
|
else
|
||||||
|
@ -84,7 +87,7 @@ class Platforms::ProductBuildListsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
@product_build_lists = @product_build_lists.
|
@product_build_lists = @product_build_lists.
|
||||||
includes(:project, product: :platform).
|
includes(:project, product: :platform).
|
||||||
recent.paginate(page: params[:page])
|
recent.paginate(page: current_page)
|
||||||
@build_server_status = AbfWorkerStatusPresenter.new.products_status
|
@build_server_status = AbfWorkerStatusPresenter.new.products_status
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -98,4 +101,14 @@ class Platforms::ProductBuildListsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Private: before_action hook which loads ProductBuildList.
|
||||||
|
def load_product_build_list
|
||||||
|
authorize @product_build_list = ProductBuildList.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Product.
|
||||||
|
def load_product
|
||||||
|
authorize @product = Product.find(params[:product_id]), :show? if params[:product_id]
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
class Platforms::ProductsController < Platforms::BaseController
|
class Platforms::ProductsController < Platforms::BaseController
|
||||||
include GitHelper
|
include GitHelper
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:index, :show] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:index, :show] if APP_CONFIG['anonymous_access']
|
||||||
|
|
||||||
load_and_authorize_resource :platform
|
before_action :load_product, except: %i(index new create autocomplete_project)
|
||||||
load_and_authorize_resource :product, through: :platform, except: :autocomplete_project
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@products = @products.paginate(page: params[:page])
|
authorize @platform.products.new
|
||||||
|
@products = @platform.products.paginate(page: params[:page])
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@product = @platform.products.new
|
authorize @product = @platform.products.new
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
authorize @product = @platform.products.build(params[:product])
|
||||||
if @product.save
|
if @product.save
|
||||||
flash[:notice] = t('flash.product.saved')
|
flash[:notice] = t('flash.product.saved')
|
||||||
redirect_to platform_product_path(@platform, @product)
|
redirect_to platform_product_path(@platform, @product)
|
||||||
|
@ -53,9 +53,17 @@ class Platforms::ProductsController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def autocomplete_project
|
def autocomplete_project
|
||||||
@items = Project.accessible_by(current_ability, :membered)
|
authorize :project
|
||||||
.by_owner_and_name(params[:query]).limit(20)
|
@items = ProjectPolicy::Scope.new(current_user, Project).membered.
|
||||||
|
by_owner_and_name(params[:query]).limit(20)
|
||||||
#items.select! {|e| e.repo.branches.count > 0}
|
#items.select! {|e| e.repo.branches.count > 0}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Product.
|
||||||
|
def load_product
|
||||||
|
authorize @product = Product.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,14 +4,15 @@ class Platforms::RepositoriesController < Platforms::BaseController
|
||||||
include RepositoriesHelper
|
include RepositoriesHelper
|
||||||
include PaginateHelper
|
include PaginateHelper
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:index, :show, :projects_list] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:index, :show, :projects_list] if APP_CONFIG['anonymous_access']
|
||||||
|
|
||||||
load_and_authorize_resource :platform
|
before_action :load_repository, except: [:index, :create, :new]
|
||||||
load_and_authorize_resource :repository, through: :platform, shallow: true
|
before_action :set_members, only: [:edit, :update]
|
||||||
before_filter :set_members, only: [:edit, :update]
|
before_action -> { @repository = @platform.repositories.find(params[:id]) if params[:id] }
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
@repositories = @platform.repositories
|
||||||
@repositories = Repository.custom_sort(@repositories).paginate(page: current_page)
|
@repositories = Repository.custom_sort(@repositories).paginate(page: current_page)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -23,6 +24,7 @@ class Platforms::RepositoriesController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
authorize @repository = @platform.repositories.build(params[:repository])
|
||||||
if @repository.update_attributes params[:repository].slice(:description, :synchronizing_publications, :publish_builds_only_from_branch).merge(publish_without_qa: (params[:repository][:publish_without_qa] || @repository.publish_without_qa))
|
if @repository.update_attributes params[:repository].slice(:description, :synchronizing_publications, :publish_builds_only_from_branch).merge(publish_without_qa: (params[:repository][:publish_without_qa] || @repository.publish_without_qa))
|
||||||
flash[:notice] = I18n.t("flash.repository.updated")
|
flash[:notice] = I18n.t("flash.repository.updated")
|
||||||
redirect_to platform_repository_path(@platform, @repository)
|
redirect_to platform_repository_path(@platform, @repository)
|
||||||
|
@ -34,14 +36,14 @@ class Platforms::RepositoriesController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_members
|
def remove_members
|
||||||
User.where(id: params[:members]).each do |user|
|
User.where(id: params[:members]).find_each do |user|
|
||||||
@repository.remove_member(user)
|
@repository.remove_member(user)
|
||||||
end
|
end
|
||||||
redirect_to edit_platform_repository_path(@platform, @repository)
|
redirect_to edit_platform_repository_path(@platform, @repository)
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_member
|
def add_member
|
||||||
if member = User.where(id: params[:member_id]).first
|
if member = User.find_by(id: params[:member_id])
|
||||||
if @repository.add_member(member)
|
if @repository.add_member(member)
|
||||||
flash[:notice] = t('flash.repository.members.successfully_added', name: member.uname)
|
flash[:notice] = t('flash.repository.members.successfully_added', name: member.uname)
|
||||||
else
|
else
|
||||||
|
@ -52,11 +54,12 @@ class Platforms::RepositoriesController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@repository = Repository.new
|
authorize @repository = @platform.repositories.new
|
||||||
@platform_id = params[:platform_id]
|
@platform_id = params[:platform_id]
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
|
authorize @repository
|
||||||
@repository.destroy
|
@repository.destroy
|
||||||
|
|
||||||
flash[:notice] = t("flash.repository.destroyed")
|
flash[:notice] = t("flash.repository.destroyed")
|
||||||
|
@ -64,7 +67,7 @@ class Platforms::RepositoriesController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@repository = @platform.repositories.build(params[:repository])
|
authorize @repository = @platform.repositories.build(params[:repository])
|
||||||
if @repository.save
|
if @repository.save
|
||||||
flash[:notice] = t('flash.repository.saved')
|
flash[:notice] = t('flash.repository.saved')
|
||||||
redirect_to platform_repository_path(@platform, @repository)
|
redirect_to platform_repository_path(@platform, @repository)
|
||||||
|
@ -75,6 +78,7 @@ class Platforms::RepositoriesController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_project
|
def add_project
|
||||||
|
authorize @repository
|
||||||
if projects_list = params.try(:[], :repository).try(:[], :projects_list)
|
if projects_list = params.try(:[], :repository).try(:[], :projects_list)
|
||||||
@repository.add_projects projects_list, current_user
|
@repository.add_projects projects_list, current_user
|
||||||
redirect_to platform_repository_path(@platform, @repository), notice: t('flash.repository.projects_will_be_added')
|
redirect_to platform_repository_path(@platform, @repository), notice: t('flash.repository.projects_will_be_added')
|
||||||
|
@ -82,7 +86,7 @@ class Platforms::RepositoriesController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
if params[:project_id].present?
|
if params[:project_id].present?
|
||||||
@project = Project.find(params[:project_id])
|
@project = Project.find(params[:project_id])
|
||||||
if can?(:read, @project)
|
if policy(@project).read?
|
||||||
begin
|
begin
|
||||||
@repository.projects << @project
|
@repository.projects << @project
|
||||||
flash[:notice] = t('flash.repository.project_added')
|
flash[:notice] = t('flash.repository.project_added')
|
||||||
|
@ -140,12 +144,17 @@ class Platforms::RepositoriesController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
if params[:project_id].present?
|
if params[:project_id].present?
|
||||||
ProjectToRepository.where(project_id: params[:project_id], repository_id: @repository.id).destroy_all
|
ProjectToRepository.where(project_id: params[:project_id], repository_id: @repository.id).destroy_all
|
||||||
redirect_to platform_repository_path(@platform, @repository), notice: t('flash.repository.project_removed')
|
message = t('flash.repository.project_removed')
|
||||||
|
respond_to do |format|
|
||||||
|
format.html {redirect_to platform_repository_path(@platform, @repository), notice: message}
|
||||||
|
format.json {render json: { message: message }}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def regenerate_metadata
|
def regenerate_metadata
|
||||||
if @repository.regenerate(params[:build_for_platform_id])
|
authorize @repository
|
||||||
|
if @repository.regenerate(params[:repository].try :[], :build_for_platform_id)
|
||||||
flash[:notice] = t('flash.repository.regenerate_in_queue')
|
flash[:notice] = t('flash.repository.regenerate_in_queue')
|
||||||
else
|
else
|
||||||
flash[:error] = t('flash.repository.regenerate_already_in_queue')
|
flash[:error] = t('flash.repository.regenerate_already_in_queue')
|
||||||
|
@ -166,6 +175,11 @@ class Platforms::RepositoriesController < Platforms::BaseController
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Repository.
|
||||||
|
def load_repository
|
||||||
|
authorize @repository = @platform.repositories.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
def set_members
|
def set_members
|
||||||
@members = @repository.members.order('name')
|
@members = @repository.members.order('name')
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
class Platforms::TokensController < Platforms::BaseController
|
class Platforms::TokensController < Platforms::BaseController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
|
|
||||||
load_resource :platform
|
before_action :load_token, except: [:index, :create, :new]
|
||||||
load_and_authorize_resource :through => :platform, :shallow => true
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
authorize! :local_admin_manage, @platform
|
authorize @platform, :local_admin_manage?
|
||||||
@tokens = @platform.tokens.includes(:creator, :updater)
|
@tokens = @platform.tokens.includes(:creator, :updater)
|
||||||
.paginate(per_page: 20, page: params[:page])
|
.paginate(per_page: 20, page: params[:page])
|
||||||
end
|
end
|
||||||
|
@ -24,11 +23,13 @@ class Platforms::TokensController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
authorize @token = @platform.tokens.new
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@token = @platform.tokens.build params[:token]
|
@token = @platform.tokens.build params[:token]
|
||||||
@token.creator = current_user
|
@token.creator = current_user
|
||||||
|
authorize @token
|
||||||
if @token.save
|
if @token.save
|
||||||
flash[:notice] = t('flash.tokens.saved')
|
flash[:notice] = t('flash.tokens.saved')
|
||||||
redirect_to platform_tokens_path(@platform)
|
redirect_to platform_tokens_path(@platform)
|
||||||
|
@ -39,4 +40,11 @@ class Platforms::TokensController < Platforms::BaseController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
protected
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Repository.
|
||||||
|
def load_token
|
||||||
|
authorize @token = @platform.tokens.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
class Projects::BaseController < ApplicationController
|
class Projects::BaseController < ApplicationController
|
||||||
prepend_before_filter :find_project
|
prepend_before_action :authenticate_user_and_find_project
|
||||||
before_filter :init_statistics
|
before_action :init_statistics
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
@ -11,8 +11,10 @@ class Projects::BaseController < ApplicationController
|
||||||
@users = @users.sort_by(&:uname).first(10)
|
@users = @users.sort_by(&:uname).first(10)
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_project
|
def authenticate_user_and_find_project
|
||||||
@project = Project.find_by_owner_and_name! params[:name_with_owner] if params[:name_with_owner].present?
|
authenticate_user
|
||||||
|
return if params[:name_with_owner].blank?
|
||||||
|
authorize @project = Project.find_by_owner_and_name!(params[:name_with_owner]), :show?
|
||||||
end
|
end
|
||||||
|
|
||||||
def init_statistics
|
def init_statistics
|
||||||
|
|
|
@ -2,28 +2,23 @@ class Projects::BuildListsController < Projects::BaseController
|
||||||
include FileStoreHelper
|
include FileStoreHelper
|
||||||
include BuildListsHelper
|
include BuildListsHelper
|
||||||
|
|
||||||
NESTED_ACTIONS = [:index, :new, :create]
|
NESTED_ACTIONS = [:index, :new, :create, :list]
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:show, :index, :log] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:show, :index, :log] if APP_CONFIG['anonymous_access']
|
||||||
|
|
||||||
before_filter :find_build_list, only: [:show, :publish, :cancel, :update, :log, :create_container, :dependent_projects]
|
before_action :load_build_list, except: NESTED_ACTIONS
|
||||||
|
|
||||||
load_and_authorize_resource :project, only: [:new, :create]
|
before_action :create_from_build_list, only: :new
|
||||||
load_resource :project, only: :index, parent: false
|
|
||||||
load_and_authorize_resource :build_list, through: :project, only: NESTED_ACTIONS, shallow: true
|
|
||||||
load_and_authorize_resource except: NESTED_ACTIONS
|
|
||||||
|
|
||||||
before_filter :create_from_build_list, only: :new
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
authorize!(:show, @project) if @project
|
authorize :build_list
|
||||||
params[:filter].each{|k,v| params[:filter].delete(k) if v.blank? } if params[:filter]
|
params[:filter].each{|k,v| params[:filter].delete(k) if v.blank? } if params[:filter]
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html
|
format.html
|
||||||
format.json do
|
format.json do
|
||||||
@filter = BuildList::Filter.new(@project, current_user, current_ability, params[:filter] || {})
|
@filter = BuildList::Filter.new(@project, current_user, params[:filter] || {})
|
||||||
params[:page] = params[:page].to_i == 0 ? nil : params[:page]
|
params[:page] = params[:page].to_i == 0 ? nil : params[:page]
|
||||||
params[:per_page] = if BuildList::Filter::PER_PAGE.include? params[:per_page].to_i
|
params[:per_page] = if BuildList::Filter::PER_PAGE.include? params[:per_page].to_i
|
||||||
params[:per_page].to_i
|
params[:per_page].to_i
|
||||||
|
@ -46,6 +41,7 @@ class Projects::BuildListsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
authorize @build_list = @project.build_lists.build
|
||||||
if params[:show] == 'inline' && params[:build_list_id].present?
|
if params[:show] == 'inline' && params[:build_list_id].present?
|
||||||
render json: new_build_list_data(@build_list, @project, params), layout: false
|
render json: new_build_list_data(@build_list, @project, params), layout: false
|
||||||
else
|
else
|
||||||
|
@ -73,7 +69,8 @@ class Projects::BuildListsController < Projects::BaseController
|
||||||
@build_list.priority = current_user.build_priority # User builds more priority than mass rebuild with zero priority
|
@build_list.priority = current_user.build_priority # User builds more priority than mass rebuild with zero priority
|
||||||
|
|
||||||
flash_options = { project_version: @build_list.project_version, arch: arch.name, build_for_platform: build_for_platform.name }
|
flash_options = { project_version: @build_list.project_version, arch: arch.name, build_for_platform: build_for_platform.name }
|
||||||
if authorize!(:create, @build_list) && @build_list.save
|
authorize @build_list
|
||||||
|
if @build_list.save
|
||||||
build_lists << @build_list
|
build_lists << @build_list
|
||||||
notices << t('flash.build_list.saved', flash_options)
|
notices << t('flash.build_list.saved', flash_options)
|
||||||
else
|
else
|
||||||
|
@ -125,8 +122,6 @@ class Projects::BuildListsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def dependent_projects
|
def dependent_projects
|
||||||
raise CanCan::AccessDenied if @build_list.save_to_platform.personal?
|
|
||||||
|
|
||||||
if request.post?
|
if request.post?
|
||||||
prs = params[:build_list]
|
prs = params[:build_list]
|
||||||
if prs.present? && prs[:projects].present? && prs[:arches].present?
|
if prs.present? && prs[:projects].present? && prs[:arches].present?
|
||||||
|
@ -211,6 +206,16 @@ class Projects::BuildListsController < Projects::BaseController
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
# Private: before_action hook which loads BuidList.
|
||||||
|
def load_build_list
|
||||||
|
authorize @build_list =
|
||||||
|
if @project
|
||||||
|
@project.build_lists
|
||||||
|
else
|
||||||
|
BuildList
|
||||||
|
end.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
def do_and_back(action, prefix, success = 'success', fail = 'fail')
|
def do_and_back(action, prefix, success = 'success', fail = 'fail')
|
||||||
result = @build_list.send("can_#{action}?") && @build_list.send(action)
|
result = @build_list.send("can_#{action}?") && @build_list.send(action)
|
||||||
message = result ? success : fail
|
message = result ? success : fail
|
||||||
|
@ -218,10 +223,6 @@ class Projects::BuildListsController < Projects::BaseController
|
||||||
redirect_to :back
|
redirect_to :back
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_build_list
|
|
||||||
@build_list = BuildList.find(params[:id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_from_build_list
|
def create_from_build_list
|
||||||
return if params[:build_list_id].blank?
|
return if params[:build_list_id].blank?
|
||||||
build_list = @project.build_lists.find(params[:build_list_id])
|
build_list = @project.build_lists.find(params[:build_list_id])
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
class Projects::CollaboratorsController < Projects::BaseController
|
class Projects::CollaboratorsController < Projects::BaseController
|
||||||
respond_to :html, :json
|
respond_to :html, :json
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
load_resource :project
|
before_action :authorize_collaborators
|
||||||
before_filter :authorize_collaborators
|
|
||||||
|
|
||||||
before_filter :find_users
|
before_action :find_users
|
||||||
before_filter :find_groups
|
before_action :find_groups
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@collaborators = Collaborator.find_by_project(@project)
|
@collaborators = Collaborator.find_by_project(@project)
|
||||||
|
@ -29,26 +28,36 @@ class Projects::CollaboratorsController < Projects::BaseController
|
||||||
@collaborator.project = @project
|
@collaborator.project = @project
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
if @collaborator.save
|
if @collaborator.save
|
||||||
format.json { render partial: 'collaborator', locals: {collaborator: @collaborator} }
|
format.json { render partial: 'collaborator', locals: {collaborator: @collaborator, success: true} }
|
||||||
else
|
else
|
||||||
format.json { render text: 'error', status: 422 }
|
format.json { render json: {message:t('flash.collaborators.error_in_adding')}, status: 422 }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@c = Collaborator.find(params[:id])
|
cb = Collaborator.find(params[:id])
|
||||||
if @c.update_attributes(params[:collaborator])
|
respond_to do |format|
|
||||||
respond_with @c
|
if cb.update_attributes(params[:collaborator])
|
||||||
|
format.json { render json: {message:t('flash.collaborators.successfully_updated', uname: cb.actor.uname)} }
|
||||||
else
|
else
|
||||||
raise
|
format.json { render json: {message:t('flash.collaborators.error_in_updating')}, status: 422 }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
@cb = Collaborator.find(params[:id])
|
cb = Collaborator.find(params[:id])
|
||||||
@cb.destroy if @cb
|
respond_to do |format|
|
||||||
respond_with @cb
|
if cb.present? && cb.destroy
|
||||||
|
format.json { render json: {message:t('flash.collaborators.successfully_removed', uname: cb.actor.uname)} }
|
||||||
|
else
|
||||||
|
format.json {
|
||||||
|
render json: {message:t('flash.collaborators.error_in_removing', uname: cb.try(:actor).try(:uname))},
|
||||||
|
status: 422
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
@ -64,6 +73,6 @@ class Projects::CollaboratorsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def authorize_collaborators
|
def authorize_collaborators
|
||||||
authorize! :update, @project
|
authorize @project, :update?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
class Projects::CommentsController < Projects::BaseController
|
class Projects::CommentsController < Projects::BaseController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
load_and_authorize_resource :project
|
before_action :find_commentable
|
||||||
before_filter :find_commentable
|
before_action :find_or_build_comment
|
||||||
before_filter :find_or_build_comment
|
|
||||||
load_and_authorize_resource new: :new_line
|
|
||||||
|
|
||||||
include CommentsHelper
|
include CommentsHelper
|
||||||
|
|
||||||
|
@ -12,14 +10,14 @@ class Projects::CommentsController < Projects::BaseController
|
||||||
if !@comment.set_additional_data params
|
if !@comment.set_additional_data params
|
||||||
format.json {
|
format.json {
|
||||||
render json: {
|
render json: {
|
||||||
error: I18n.t("flash.comment.save_error"),
|
message: I18n.t("flash.comment.save_error"),
|
||||||
message: @comment.errors.full_messages
|
error: @comment.errors.full_messages
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif @comment.save
|
elsif @comment.save
|
||||||
format.json {}
|
format.json {}
|
||||||
else
|
else
|
||||||
format.json { render json: { error: I18n.t("flash.comment.save_error") }, status: 422 }
|
format.json { render json: { message: I18n.t("flash.comment.save_error") }, status: 422 }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -28,17 +26,24 @@ class Projects::CommentsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
status, message = if @comment.update_attributes(params[:comment])
|
respond_to do |format|
|
||||||
[200, view_context.markdown(@comment.body)]
|
if @comment.update_attributes(params[:comment])
|
||||||
|
format.json { render json: {message:t('flash.comment.updated'), body: view_context.markdown(@comment.body)} }
|
||||||
else
|
else
|
||||||
[422, 'error']
|
format.json { render json: {message:t('flash.comment.error_in_updating')}, status: 422 }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
render json: {body: message}, status: status
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
@comment.destroy
|
respond_to do |format|
|
||||||
render json: nil
|
if @comment.present? && @comment.destroy
|
||||||
|
format.json { render json: {message: I18n.t('flash.comment.destroyed')} }
|
||||||
|
else
|
||||||
|
format.json {
|
||||||
|
render json: {message: t('flash.comment.error_in_deleting')}, status: 422 }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
@ -51,5 +56,6 @@ class Projects::CommentsController < Projects::BaseController
|
||||||
def find_or_build_comment
|
def find_or_build_comment
|
||||||
@comment = params[:id].present? && Comment.where(automatic: false).find(params[:id]) ||
|
@comment = params[:id].present? && Comment.where(automatic: false).find(params[:id]) ||
|
||||||
current_user.comments.build(params[:comment]) {|c| c.commentable = @commentable; c.project = @project}
|
current_user.comments.build(params[:comment]) {|c| c.commentable = @commentable; c.project = @project}
|
||||||
|
authorize @comment
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
class Projects::CommitSubscribesController < Projects::BaseController
|
class Projects::CommitSubscribesController < Projects::BaseController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
load_and_authorize_resource :project
|
before_action :find_commit
|
||||||
|
|
||||||
before_filter :find_commit
|
|
||||||
|
|
||||||
def create
|
def create
|
||||||
if Subscribe.subscribe_to_commit(@options)
|
if Subscribe.subscribe_to_commit(@options)
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
class Projects::Git::BaseController < Projects::BaseController
|
class Projects::Git::BaseController < Projects::BaseController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
if APP_CONFIG['anonymous_access']
|
if APP_CONFIG['anonymous_access']
|
||||||
skip_before_filter :authenticate_user!, only: %i(show index blame raw archive diff tags branches)
|
skip_before_action :authenticate_user!, only: %i(show index blame raw archive diff tags branches)
|
||||||
before_filter :authenticate_user, only: %i(show index blame raw archive diff tags branches)
|
before_action :authenticate_user, only: %i(show index blame raw archive diff tags branches)
|
||||||
end
|
end
|
||||||
|
|
||||||
load_and_authorize_resource :project
|
before_action :set_treeish_and_path
|
||||||
before_filter :set_treeish_and_path
|
before_action :set_branch_and_tree
|
||||||
before_filter :set_branch_and_tree
|
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
class Projects::Git::BlobsController < Projects::Git::BaseController
|
class Projects::Git::BlobsController < Projects::Git::BaseController
|
||||||
before_filter :set_blob
|
before_action :set_blob
|
||||||
before_filter -> {authorize! :write, @project}, only: [:edit, :update]
|
before_action -> {authorize @project, :write? }, only: [:edit, :update]
|
||||||
|
|
||||||
def show
|
def show
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,7 +14,7 @@ class Projects::Git::CommitsController < Projects::Git::BaseController
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html
|
format.html
|
||||||
format.diff { render text: (@commit.diffs.map(&:diff).join("\n") rescue ''), content_type: "text/plain" }
|
format.diff { render text: (@commit.show.map(&:diff).join("\n") rescue ''), content_type: "text/plain" }
|
||||||
format.patch { render text: (@commit.to_patch rescue ''), content_type: "text/plain" }
|
format.patch { render text: (@commit.to_patch rescue ''), content_type: "text/plain" }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
class Projects::Git::TreesController < Projects::Git::BaseController
|
class Projects::Git::TreesController < Projects::Git::BaseController
|
||||||
|
|
||||||
before_filter -> { redirect_to_project }, only: :show
|
skip_before_action :set_branch_and_tree, only: :archive
|
||||||
skip_before_filter :set_branch_and_tree, :set_treeish_and_path, only: :archive
|
skip_before_action :set_treeish_and_path, only: :archive
|
||||||
before_filter -> { raise Grit::NoSuchPathError if params[:treeish] != @branch.try(:name) }, only: [:branch, :destroy]
|
before_action :redirect_to_project, only: :show
|
||||||
|
before_action :resolve_treeish, only: [:branch, :destroy]
|
||||||
|
|
||||||
skip_authorize_resource :project, only: [:destroy, :restore_branch, :create]
|
# skip_authorize_resource :project, only: [:destroy, :restore_branch, :create]
|
||||||
before_filter -> { authorize!(:write, @project) }, only: [:destroy, :restore_branch, :create]
|
before_action -> { authorize(@project, :show?) }, only: [:show, :archive, :tags, :branches]
|
||||||
|
|
||||||
def show
|
def show
|
||||||
unless request.xhr?
|
unless request.xhr?
|
||||||
|
@ -53,16 +54,19 @@ class Projects::Git::TreesController < Projects::Git::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def restore_branch
|
def restore_branch
|
||||||
|
authorize @project, :write?
|
||||||
status = @project.create_branch(@treeish, params[:sha], current_user) ? 200 : 422
|
status = @project.create_branch(@treeish, params[:sha], current_user) ? 200 : 422
|
||||||
render nothing: true, status: status
|
render nothing: true, status: status
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
authorize @project, :write?
|
||||||
status = @project.create_branch(params[:new_ref], params[:from_ref], current_user) ? 200 : 422
|
status = @project.create_branch(params[:new_ref], params[:from_ref], current_user) ? 200 : 422
|
||||||
render nothing: true, status: status
|
render nothing: true, status: status
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
|
authorize @project, :write?
|
||||||
status = @branch && @project.delete_branch(@branch, current_user) ? 200 : 422
|
status = @branch && @project.delete_branch(@branch, current_user) ? 200 : 422
|
||||||
render nothing: true, status: status
|
render nothing: true, status: status
|
||||||
end
|
end
|
||||||
|
@ -81,6 +85,10 @@ class Projects::Git::TreesController < Projects::Git::BaseController
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
def resolve_treeish
|
||||||
|
raise Grit::NoSuchPathError if params[:treeish] != @branch.try(:name)
|
||||||
|
end
|
||||||
|
|
||||||
def redirect_to_project
|
def redirect_to_project
|
||||||
if params[:treeish] == @project.resolve_default_branch && params[:path].blank? && !request.xhr?
|
if params[:treeish] == @project.resolve_default_branch && params[:path].blank? && !request.xhr?
|
||||||
redirect_to @project
|
redirect_to @project
|
||||||
|
|
|
@ -1,22 +1,23 @@
|
||||||
class Projects::HooksController < Projects::BaseController
|
class Projects::HooksController < Projects::BaseController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
load_and_authorize_resource :project
|
before_action -> { authorize @project, :update? }
|
||||||
load_and_authorize_resource :hook, through: :project
|
before_action :load_hook, except: %i(index new create)
|
||||||
|
|
||||||
def index
|
def index
|
||||||
authorize! :edit, @project
|
|
||||||
@name = params[:name]
|
@name = params[:name]
|
||||||
@hooks = @project.hooks.for_name(@name).order('name asc, created_at desc')
|
@hooks = @project.hooks.for_name(@name).order('name asc, created_at desc')
|
||||||
render(:show) if @name.present?
|
render(:show) if @name.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
@hook = @project.hooks.build
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
authorize @hook = @project.hooks.build(params[:hook])
|
||||||
if @hook.save
|
if @hook.save
|
||||||
redirect_to project_hooks_path(@project, name: @hook.name), notice: t('flash.hook.created')
|
redirect_to project_hooks_path(@project, name: @hook.name), notice: t('flash.hook.created')
|
||||||
else
|
else
|
||||||
|
@ -41,4 +42,11 @@ class Projects::HooksController < Projects::BaseController
|
||||||
redirect_to project_hooks_path(@project, name: @hook.name)
|
redirect_to project_hooks_path(@project, name: @hook.name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Hook.
|
||||||
|
def load_hook
|
||||||
|
authorize @hook = @project.hooks.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
class Projects::IssuesController < Projects::BaseController
|
class Projects::IssuesController < Projects::BaseController
|
||||||
NON_RESTFUL_ACTION = [:create_label, :update_label, :destroy_label]
|
before_action :authenticate_user!
|
||||||
before_filter :authenticate_user!
|
skip_before_action :authenticate_user!, only: [:index, :show] if APP_CONFIG['anonymous_access']
|
||||||
skip_before_filter :authenticate_user!, only: [:index, :show] if APP_CONFIG['anonymous_access']
|
before_action :load_issue, only: %i(show edit update destroy)
|
||||||
load_resource :project
|
before_action :load_and_authorize_label, only: %i(create_label update_label destroy_label)
|
||||||
load_and_authorize_resource :issue, through: :project, find_by: :serial_id, only: [:show, :edit, :update, :destroy, :new, :create, :index]
|
before_action :find_collaborators, only: :search_collaborators
|
||||||
before_filter :load_and_authorize_label, only: NON_RESTFUL_ACTION
|
|
||||||
before_filter :find_collaborators, only: [:new, :create, :show, :search_collaborators]
|
|
||||||
|
|
||||||
layout false, only: [:update, :search_collaborators]
|
layout false, only: [:update, :search_collaborators]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
raise Pundit::NotAuthorizedError unless @project.has_issues?
|
||||||
|
|
||||||
params[:kind] = params[:kind] == 'pull_requests' ? 'pull_requests' : 'issues'
|
params[:kind] = params[:kind] == 'pull_requests' ? 'pull_requests' : 'issues'
|
||||||
params[:filter] = params[:filter].in?(['created', 'assigned']) ? params[:filter] : 'all'
|
params[:filter] = params[:filter].in?(['created', 'assigned']) ? params[:filter] : 'all'
|
||||||
params[:sort] = params[:sort] == 'submitted' ? 'submitted' : 'updated'
|
params[:sort] = params[:sort] == 'submitted' ? 'submitted' : 'updated'
|
||||||
|
@ -22,10 +22,11 @@ class Projects::IssuesController < Projects::BaseController
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { render 'index' }
|
format.html { render 'index' }
|
||||||
format.json do
|
format.json do
|
||||||
|
all_issues =
|
||||||
if params[:kind] == 'pull_requests'
|
if params[:kind] == 'pull_requests'
|
||||||
all_issues = @project.issues.joins(:pull_request)
|
@project.issues.joins(:pull_request)
|
||||||
else
|
else
|
||||||
all_issues = @project.issues.without_pull_requests
|
@project.issues.without_pull_requests
|
||||||
end
|
end
|
||||||
|
|
||||||
@all_issues = all_issues
|
@all_issues = all_issues
|
||||||
|
@ -74,15 +75,18 @@ class Projects::IssuesController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
authorize @issue = @project.issues.build
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
@issue = @project.issues.build(params[:issue])
|
||||||
@issue.user_id = current_user.id
|
@issue.user_id = current_user.id
|
||||||
|
|
||||||
unless can?(:write, @project)
|
unless policy(@project).write?
|
||||||
@issue.assignee_id = nil
|
@issue.assignee_id = nil
|
||||||
@issue.labelings = []
|
@issue.labelings = []
|
||||||
end
|
end
|
||||||
|
authorize @issue
|
||||||
if @issue.save
|
if @issue.save
|
||||||
@issue.subscribe_creator(current_user.id)
|
@issue.subscribe_creator(current_user.id)
|
||||||
flash[:notice] = I18n.t("flash.issue.saved")
|
flash[:notice] = I18n.t("flash.issue.saved")
|
||||||
|
@ -104,7 +108,7 @@ class Projects::IssuesController < Projects::BaseController
|
||||||
|
|
||||||
format.json {
|
format.json {
|
||||||
status = 200
|
status = 200
|
||||||
unless can?(:write, @project)
|
unless policy(@project).write?
|
||||||
params.delete :update_labels
|
params.delete :update_labels
|
||||||
[:assignee_id, :labelings, :labelings_attributes].each do |k|
|
[:assignee_id, :labelings, :labelings_attributes].each do |k|
|
||||||
params[:issue].delete k
|
params[:issue].delete k
|
||||||
|
@ -165,8 +169,14 @@ class Projects::IssuesController < Projects::BaseController
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Issue.
|
||||||
|
def load_issue
|
||||||
|
authorize @issue = @project.issues.find_by!(serial_id: params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Label.
|
||||||
def load_and_authorize_label
|
def load_and_authorize_label
|
||||||
authorize! :write, @project
|
authorize @project, :write?
|
||||||
@label = Label.find(params[:label_id]) if params[:label_id]
|
@label = @project.labels.find(params[:label_id]) if params[:label_id]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,12 +2,12 @@ class Projects::ProjectsController < Projects::BaseController
|
||||||
include DatatableHelper
|
include DatatableHelper
|
||||||
include ProjectsHelper
|
include ProjectsHelper
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
load_and_authorize_resource id_param: :name_with_owner # to force member actions load
|
before_action :who_owns, only: [:new, :create, :mass_import, :run_mass_import]
|
||||||
before_filter :who_owns, only: [:new, :create, :mass_import, :run_mass_import]
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@projects = Project.accessible_by(current_ability, :membered).search(params[:search])
|
authorize :project
|
||||||
|
@projects = ProjectPolicy::Scope.new(current_user, Project).membered.search(params[:search])
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html {
|
format.html {
|
||||||
@groups = current_user.groups
|
@groups = current_user.groups
|
||||||
|
@ -24,18 +24,19 @@ class Projects::ProjectsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
authorize :project
|
||||||
@project = Project.new
|
@project = Project.new
|
||||||
end
|
end
|
||||||
|
|
||||||
def mass_import
|
def mass_import
|
||||||
|
authorize :project
|
||||||
@project = Project.new(mass_import: true)
|
@project = Project.new(mass_import: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
def run_mass_import
|
def run_mass_import
|
||||||
@project = Project.new params[:project]
|
@project = Project.new params[:project]
|
||||||
@project.owner = choose_owner
|
@project.owner = choose_owner
|
||||||
authorize! :write, @project.owner if @project.owner.class == Group
|
authorize @project
|
||||||
authorize! :add_project, Repository.find(params[:project][:add_to_repository_id])
|
|
||||||
@project.valid?
|
@project.valid?
|
||||||
@project.errors.messages.slice! :url
|
@project.errors.messages.slice! :url
|
||||||
if @project.errors.messages.blank? # We need only url validation
|
if @project.errors.messages.blank? # We need only url validation
|
||||||
|
@ -48,15 +49,14 @@ class Projects::ProjectsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
@project_aliases = Project.where.not(id: @project.id).
|
authorize @project
|
||||||
where('alias_from_id IN (:ids) OR id IN (:ids)', { ids: [@project.alias_from_id, @project.id] }).
|
@project_aliases = Project.project_aliases(@project).paginate(page: current_page)
|
||||||
paginate(page: current_page)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@project = Project.new params[:project]
|
@project = Project.new params[:project]
|
||||||
@project.owner = choose_owner
|
@project.owner = choose_owner
|
||||||
authorize! :write, @project.owner if @project.owner.class == Group
|
authorize @project
|
||||||
|
|
||||||
if @project.save
|
if @project.save
|
||||||
flash[:notice] = t('flash.project.saved')
|
flash[:notice] = t('flash.project.saved')
|
||||||
|
@ -69,6 +69,7 @@ class Projects::ProjectsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
authorize @project
|
||||||
params[:project].delete(:maintainer_id) if params[:project][:maintainer_id].blank?
|
params[:project].delete(:maintainer_id) if params[:project][:maintainer_id].blank?
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html do
|
format.html do
|
||||||
|
@ -84,18 +85,19 @@ class Projects::ProjectsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
format.json do
|
format.json do
|
||||||
if @project.update_attributes(params[:project])
|
if @project.update_attributes(params[:project])
|
||||||
render json: { notice: I18n.t('flash.project.saved') }.to_json
|
render json: { notice: I18n.t('flash.project.saved') }
|
||||||
else
|
else
|
||||||
render json: { error: I18n.t('flash.project.save_error') }.to_json, status: 422
|
render json: { error: I18n.t('flash.project.save_error') }, status: 422
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def schedule
|
def schedule
|
||||||
|
authorize @project
|
||||||
p_to_r = @project.project_to_repositories.where(repository_id: params[:repository_id]).first
|
p_to_r = @project.project_to_repositories.where(repository_id: params[:repository_id]).first
|
||||||
unless p_to_r.repository.publish_without_qa
|
unless p_to_r.repository.publish_without_qa
|
||||||
authorize! :local_admin_manage, p_to_r.repository.platform
|
authorize p_to_r.repository.platform, :local_admin_manage?
|
||||||
end
|
end
|
||||||
p_to_r.user_id = current_user.id
|
p_to_r.user_id = current_user.id
|
||||||
p_to_r.enabled = params[:enabled].present?
|
p_to_r.enabled = params[:enabled].present?
|
||||||
|
@ -109,6 +111,7 @@ class Projects::ProjectsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
|
authorize @project
|
||||||
@project.destroy
|
@project.destroy
|
||||||
flash[:notice] = t("flash.project.destroyed")
|
flash[:notice] = t("flash.project.destroyed")
|
||||||
redirect_to @project.owner
|
redirect_to @project.owner
|
||||||
|
@ -116,8 +119,7 @@ class Projects::ProjectsController < Projects::BaseController
|
||||||
|
|
||||||
def fork(is_alias = false)
|
def fork(is_alias = false)
|
||||||
owner = (Group.find params[:group] if params[:group].present?) || current_user
|
owner = (Group.find params[:group] if params[:group].present?) || current_user
|
||||||
authorize! :write, owner if owner.class == Group
|
authorize owner, :write?
|
||||||
|
|
||||||
if forked = @project.fork(owner, new_name: params[:fork_name], is_alias: is_alias) and forked.valid?
|
if forked = @project.fork(owner, new_name: params[:fork_name], is_alias: is_alias) and forked.valid?
|
||||||
redirect_to forked, notice: t("flash.project.forked")
|
redirect_to forked, notice: t("flash.project.forked")
|
||||||
else
|
else
|
||||||
|
@ -128,15 +130,18 @@ class Projects::ProjectsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def alias
|
def alias
|
||||||
|
authorize @project
|
||||||
fork(true)
|
fork(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
def possible_forks
|
def possible_forks
|
||||||
|
authorize @project
|
||||||
render partial: 'projects/git/base/forks', layout: false,
|
render partial: 'projects/git/base/forks', layout: false,
|
||||||
locals: { owner: current_user, name: (params[:name].presence || @project.name) }
|
locals: { owner: current_user, name: (params[:name].presence || @project.name) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def sections
|
def sections
|
||||||
|
authorize @project, :update?
|
||||||
if request.patch?
|
if request.patch?
|
||||||
if @project.update_attributes(params[:project])
|
if @project.update_attributes(params[:project])
|
||||||
flash[:notice] = t('flash.project.saved')
|
flash[:notice] = t('flash.project.saved')
|
||||||
|
@ -149,6 +154,7 @@ class Projects::ProjectsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_user
|
def remove_user
|
||||||
|
authorize @project
|
||||||
@project.relations.by_actor(current_user).destroy_all
|
@project.relations.by_actor(current_user).destroy_all
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html do
|
format.html do
|
||||||
|
@ -160,6 +166,7 @@ class Projects::ProjectsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def autocomplete_maintainers
|
def autocomplete_maintainers
|
||||||
|
authorize @project
|
||||||
term, limit = params[:query], params[:limit] || 10
|
term, limit = params[:query], params[:limit] || 10
|
||||||
items = User.member_of_project(@project)
|
items = User.member_of_project(@project)
|
||||||
.where("users.name ILIKE ? OR users.uname ILIKE ?", "%#{term}%", "%#{term}%")
|
.where("users.name ILIKE ? OR users.uname ILIKE ?", "%#{term}%", "%#{term}%")
|
||||||
|
@ -168,10 +175,15 @@ class Projects::ProjectsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def preview
|
def preview
|
||||||
render inline: view_context.markdown(params[:text]), layout: false
|
authorize @project
|
||||||
|
respond_to do |format|
|
||||||
|
format.json {}
|
||||||
|
format.html {render inline: view_context.markdown(params[:text]), layout: false}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def refs_list
|
def refs_list
|
||||||
|
authorize @project
|
||||||
refs = @project.repo.branches_and_tags.map(&:name)
|
refs = @project.repo.branches_and_tags.map(&:name)
|
||||||
@selected = params[:selected] if refs.include?(params[:selected])
|
@selected = params[:selected] if refs.include?(params[:selected])
|
||||||
@selected ||= @project.resolve_default_branch
|
@selected ||= @project.resolve_default_branch
|
||||||
|
|
|
@ -1,20 +1,19 @@
|
||||||
class Projects::PullRequestsController < Projects::BaseController
|
class Projects::PullRequestsController < Projects::BaseController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:index, :show] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:index, :show] if APP_CONFIG['anonymous_access']
|
||||||
load_and_authorize_resource :project
|
|
||||||
|
|
||||||
load_resource :issue, through: :project, find_by: :serial_id, parent: false, except: [:index, :autocomplete_to_project]
|
before_action :load_issue, except: %i(index autocomplete_to_project new create)
|
||||||
load_and_authorize_resource instance_name: :pull, through: :issue, singleton: true, except: [:index, :autocomplete_to_project]
|
before_action :load_pull, except: %i(index autocomplete_to_project new create)
|
||||||
before_filter :find_collaborators, only: [:new, :create, :show]
|
|
||||||
|
|
||||||
def new
|
def new
|
||||||
to_project = find_destination_project(false)
|
to_project = find_destination_project(false)
|
||||||
authorize! :read, to_project
|
authorize to_project, :show?
|
||||||
|
|
||||||
@pull = to_project.pull_requests.new
|
@pull = to_project.pull_requests.new
|
||||||
@pull.issue = to_project.issues.new
|
@issue = @pull.issue = to_project.issues.new
|
||||||
set_attrs
|
set_attrs
|
||||||
|
|
||||||
|
authorize @pull
|
||||||
if PullRequest.check_ref(@pull, 'to', @pull.to_ref) && PullRequest.check_ref(@pull, 'from', @pull.from_ref) || @pull.uniq_merge
|
if PullRequest.check_ref(@pull, 'to', @pull.to_ref) && PullRequest.check_ref(@pull, 'from', @pull.from_ref) || @pull.uniq_merge
|
||||||
flash.now[:warning] = @pull.errors.full_messages.join('. ')
|
flash.now[:warning] = @pull.errors.full_messages.join('. ')
|
||||||
else
|
else
|
||||||
|
@ -33,15 +32,17 @@ class Projects::PullRequestsController < Projects::BaseController
|
||||||
redirect :back
|
redirect :back
|
||||||
end
|
end
|
||||||
to_project = find_destination_project
|
to_project = find_destination_project
|
||||||
authorize! :read, to_project
|
authorize to_project, :show?
|
||||||
|
|
||||||
@pull = to_project.pull_requests.new pull_params
|
@pull = to_project.pull_requests.new pull_params
|
||||||
@pull.issue.assignee_id = (params[:issue] || {})[:assignee_id] if can?(:write, to_project)
|
@issue = @pull.issue
|
||||||
|
@pull.issue.assignee_id = (params[:issue] || {})[:assignee_id] if policy(to_project).write?
|
||||||
@pull.issue.user, @pull.issue.project, @pull.from_project = current_user, to_project, @project
|
@pull.issue.user, @pull.issue.project, @pull.from_project = current_user, to_project, @project
|
||||||
@pull.from_project_owner_uname = @pull.from_project.owner.uname
|
@pull.from_project_owner_uname = @pull.from_project.owner.uname
|
||||||
@pull.from_project_name = @pull.from_project.name
|
@pull.from_project_name = @pull.from_project.name
|
||||||
@pull.issue.new_pull_request = true
|
@pull.issue.new_pull_request = true
|
||||||
|
|
||||||
|
authorize @pull
|
||||||
if @pull.valid? # FIXME more clean/clever logics
|
if @pull.valid? # FIXME more clean/clever logics
|
||||||
@pull.save # set pull id
|
@pull.save # set pull id
|
||||||
@pull.reload
|
@pull.reload
|
||||||
|
@ -67,11 +68,13 @@ class Projects::PullRequestsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def merge
|
def merge
|
||||||
|
authorize @pull
|
||||||
status = @pull.merge!(current_user) ? 200 : 422
|
status = @pull.merge!(current_user) ? 200 : 422
|
||||||
render nothing: true, status: status
|
render nothing: true, status: status
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
authorize @pull
|
||||||
status = 422
|
status = 422
|
||||||
if (action = params[:pull_request_action]) && %w(close reopen).include?(params[:pull_request_action])
|
if (action = params[:pull_request_action]) && %w(close reopen).include?(params[:pull_request_action])
|
||||||
if @pull.send("can_#{action}?")
|
if @pull.send("can_#{action}?")
|
||||||
|
@ -106,7 +109,7 @@ class Projects::PullRequestsController < Projects::BaseController
|
||||||
term = params[:query].to_s.strip.downcase
|
term = params[:query].to_s.strip.downcase
|
||||||
[ Project.where(id: @project.pull_requests.last.try(:to_project_id)),
|
[ Project.where(id: @project.pull_requests.last.try(:to_project_id)),
|
||||||
@project.ancestors,
|
@project.ancestors,
|
||||||
Project.accessible_by(current_ability, :membered)
|
ProjectPolicy::Scope.new(current_user, Project).membered
|
||||||
].each do |p|
|
].each do |p|
|
||||||
items.concat p.by_owner_and_name(term)
|
items.concat p.by_owner_and_name(term)
|
||||||
end
|
end
|
||||||
|
@ -116,6 +119,17 @@ class Projects::PullRequestsController < Projects::BaseController
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Issue.
|
||||||
|
def load_issue
|
||||||
|
@issue = @project.issues.find_by!(serial_id: params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
# Private: before_action hook which loads PullRequest.
|
||||||
|
def load_pull
|
||||||
|
@pull = @issue.pull_request
|
||||||
|
authorize @pull, :show? if @pull
|
||||||
|
end
|
||||||
|
|
||||||
def pull_params
|
def pull_params
|
||||||
@pull_params ||= params[:pull_request].presence
|
@pull_params ||= params[:pull_request].presence
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
class Projects::SubscribesController < Projects::BaseController
|
class Projects::SubscribesController < Projects::BaseController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
|
|
||||||
load_and_authorize_resource :project
|
before_action :load_issue
|
||||||
load_and_authorize_resource :issue, through: :project, find_by: :serial_id
|
|
||||||
load_and_authorize_resource :subscribe, through: :issue, find_by: :user_id
|
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@subscribe = @issue.subscribes.build(user_id: current_user.id)
|
authorize @subscribe = @issue.subscribes.build(user_id: current_user.id)
|
||||||
if @subscribe.save
|
if @subscribe.save
|
||||||
flash[:notice] = I18n.t("flash.subscribe.saved")
|
flash[:notice] = I18n.t("flash.subscribe.saved")
|
||||||
redirect_to :back
|
redirect_to :back
|
||||||
|
@ -17,9 +15,17 @@ class Projects::SubscribesController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
|
authorize @subscribe = @issue.subscribes.find_by(user_id: current_user.id)
|
||||||
@subscribe.destroy
|
@subscribe.destroy
|
||||||
|
|
||||||
flash[:notice] = t("flash.subscribe.destroyed")
|
flash[:notice] = t("flash.subscribe.destroyed")
|
||||||
redirect_to :back
|
redirect_to :back
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
# Private: before_action hook which loads Issue.
|
||||||
|
def load_issue
|
||||||
|
authorize @issue = @project.issues.find_by!(serial_id: params[:issue_id]), :show?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,13 +4,12 @@ require 'cgi'
|
||||||
class Projects::WikiController < Projects::BaseController
|
class Projects::WikiController < Projects::BaseController
|
||||||
WIKI_OPTIONS = {}
|
WIKI_OPTIONS = {}
|
||||||
|
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_filter :authenticate_user!, only: [:show, :index, :git, :compare, :compare_wiki, :history, :wiki_history, :search, :pages] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:show, :index, :git, :compare, :compare_wiki, :history, :wiki_history, :search, :pages] if APP_CONFIG['anonymous_access']
|
||||||
load_resource :project
|
|
||||||
|
|
||||||
before_filter :authorize_read_actions, only: [:index, :show, :git, :compare, :compare_wiki, :history, :wiki_history, :search, :pages]
|
before_action :authorize_read_actions, only: [:index, :show, :git, :compare, :compare_wiki, :history, :wiki_history, :search, :pages]
|
||||||
before_filter :authorize_write_actions, only: [:edit, :update, :new, :create, :destroy, :revert, :revert_wiki, :preview]
|
before_action :authorize_write_actions, only: [:edit, :update, :new, :create, :destroy, :revert, :revert_wiki, :preview]
|
||||||
before_filter :get_wiki
|
before_action :get_wiki
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@name = 'Home'
|
@name = 'Home'
|
||||||
|
@ -262,11 +261,11 @@ class Projects::WikiController < Projects::BaseController
|
||||||
def show_or_create_page
|
def show_or_create_page
|
||||||
if @page
|
if @page
|
||||||
@content = @page.formatted_data
|
@content = @page.formatted_data
|
||||||
@editable = can?(:write, @project)
|
@editable = policy(@project).write?
|
||||||
render :show
|
render :show
|
||||||
elsif file = @wiki.file(@name)
|
elsif file = @wiki.file(@name)
|
||||||
render text: file.raw_data, content_type: file.mime_type
|
render text: file.raw_data, content_type: file.mime_type
|
||||||
elsif can? :write, @project
|
elsif policy(@project).write?
|
||||||
@new = true
|
@new = true
|
||||||
render :new
|
render :new
|
||||||
else
|
else
|
||||||
|
@ -279,11 +278,10 @@ class Projects::WikiController < Projects::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def authorize_read_actions
|
def authorize_read_actions
|
||||||
authorize! :show, @project
|
authorize @project, :show?
|
||||||
end
|
end
|
||||||
|
|
||||||
def authorize_write_actions
|
def authorize_write_actions
|
||||||
authorize! :write, @project
|
authorize @project, :write?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
class SearchController < ApplicationController
|
class SearchController < ApplicationController
|
||||||
include PaginateHelper
|
include PaginateHelper
|
||||||
|
|
||||||
before_filter :authenticate_user! unless APP_CONFIG['anonymous_access']
|
before_action :authenticate_user! unless APP_CONFIG['anonymous_access']
|
||||||
# load_and_authorize_resource
|
skip_after_action :verify_authorized
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@type = Search::TYPES.find{ |t| t == params[:type] } || Search::TYPES.first
|
@type = Search::TYPES.find{ |t| t == params[:type] } || Search::TYPES.first
|
||||||
@query = params[:query]
|
@query = params[:query]
|
||||||
@search = Search.new(@query, current_ability, paginate_params)
|
@search = Search.new(@query, current_user, paginate_params)
|
||||||
@collection = @search.send(@type)
|
@collection = @search.send(@type)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
class SitemapController < ApplicationController
|
class SitemapController < ApplicationController
|
||||||
|
skip_after_action :verify_authorized
|
||||||
|
|
||||||
def show
|
def show
|
||||||
redirect_to "/sitemaps/#{request.host_with_port.gsub(/www./, '')}/sitemap.xml.gz"
|
redirect_to "/sitemaps/#{request.host_with_port.gsub(/www./, '')}/sitemap.xml.gz"
|
||||||
|
|
|
@ -11,6 +11,7 @@ class StatisticsController < ApplicationController
|
||||||
]
|
]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
authorize :statistic
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html
|
format.html
|
||||||
format.json do
|
format.json do
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
class Users::BaseController < ApplicationController
|
class Users::BaseController < ApplicationController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
before_filter :find_user
|
before_action :find_user
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
||||||
|
|
||||||
def find_for_ouath(auth, resource=nil)
|
def find_for_ouath(auth, resource=nil)
|
||||||
provider, uid = auth['provider'], auth['uid']
|
provider, uid = auth['provider'], auth['uid']
|
||||||
authentication = Authentication.find_or_initialize_by_provider_and_uid(provider, uid)
|
authentication = Authentication.find_or_initialize_by(provider: provider, uid: uid)
|
||||||
if authentication.new_record?
|
if authentication.new_record?
|
||||||
if user_signed_in? # New authentication method for current_user
|
if user_signed_in? # New authentication method for current_user
|
||||||
authentication.user = current_user
|
authentication.user = current_user
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
class Users::ProfileController < Users::BaseController
|
class Users::ProfileController < Users::BaseController
|
||||||
include PaginateHelper
|
include PaginateHelper
|
||||||
|
|
||||||
skip_before_filter :authenticate_user!, only: :show if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: :show if APP_CONFIG['anonymous_access']
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
authorize @user
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html do
|
format.html do
|
||||||
@groups = @user.groups.order(:uname)
|
@groups = @user.groups.order(:uname)
|
||||||
|
@ -14,9 +15,9 @@ class Users::ProfileController < Users::BaseController
|
||||||
when 'open'
|
when 'open'
|
||||||
@projects = @projects.opened
|
@projects = @projects.opened
|
||||||
when 'hidden'
|
when 'hidden'
|
||||||
@projects = @projects.by_visibilities('hidden').accessible_by(current_ability, :read)
|
@projects = ProjectPolicy::Scope.new(current_user, @projects.by_visibilities('hidden')).read
|
||||||
else
|
else
|
||||||
@projects = @projects.accessible_by(current_ability, :read)
|
@projects = ProjectPolicy::Scope.new(current_user, @projects).read
|
||||||
end
|
end
|
||||||
@total_items = @projects.count
|
@total_items = @projects.count
|
||||||
@projects = @projects.paginate(paginate_params)
|
@projects = @projects.paginate(paginate_params)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
class Users::RegisterRequestsController < ApplicationController
|
class Users::RegisterRequestsController < ApplicationController
|
||||||
before_filter :user_choose_locale
|
before_action :user_choose_locale
|
||||||
layout 'invite'
|
layout 'invite'
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
class Users::RegistrationsController < Devise::RegistrationsController
|
class Users::RegistrationsController < Devise::RegistrationsController
|
||||||
before_filter :update_sanitized_params, if: :devise_controller?
|
before_action :update_sanitized_params, if: :devise_controller?
|
||||||
|
|
||||||
# POST /resource
|
# POST /resource
|
||||||
def create
|
def create
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
class Users::SettingsController < Users::BaseController
|
class Users::SettingsController < Users::BaseController
|
||||||
include AvatarHelper
|
include AvatarHelper
|
||||||
|
|
||||||
before_filter :set_current_user
|
before_action :set_current_user
|
||||||
|
before_action -> { authorize @user, :update? }
|
||||||
|
|
||||||
def profile
|
def profile
|
||||||
if request.patch?
|
if request.patch?
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
class Users::SshKeysController < Users::BaseController
|
class Users::SshKeysController < Users::BaseController
|
||||||
before_filter :set_current_user
|
before_action :set_current_user
|
||||||
|
before_action -> { authorize current_user, :update? }
|
||||||
|
skip_before_action :find_user
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@ssh_key = SshKey.new
|
@ssh_key = SshKey.new
|
||||||
|
@ -10,12 +12,11 @@ class Users::SshKeysController < Users::BaseController
|
||||||
|
|
||||||
if @ssh_key.save
|
if @ssh_key.save
|
||||||
flash[:notice] = t 'flash.ssh_keys.saved'
|
flash[:notice] = t 'flash.ssh_keys.saved'
|
||||||
redirect_to ssh_keys_path
|
|
||||||
else
|
else
|
||||||
flash[:error] = t 'flash.ssh_keys.save_error'
|
flash[:error] = t 'flash.ssh_keys.save_error'
|
||||||
# flash[:warning] = @ssh_key.errors.full_messages.join('. ') unless @ssh_key.errors.blank?
|
flash[:warning] = @ssh_key.errors.full_messages.join('. ') unless @ssh_key.errors.blank?
|
||||||
render :index
|
|
||||||
end
|
end
|
||||||
|
redirect_to ssh_keys_path
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
|
|
|
@ -1,16 +1,18 @@
|
||||||
class Users::UsersController < Users::BaseController
|
class Users::UsersController < Users::BaseController
|
||||||
skip_before_filter :authenticate_user!, only: [:allowed, :check, :discover]
|
skip_before_action :authenticate_user!, only: [:allowed, :check, :discover]
|
||||||
before_filter :find_user_by_key, only: [:allowed, :discover]
|
skip_after_action :verify_authorized
|
||||||
|
before_action :find_user_by_key, only: [:allowed, :discover]
|
||||||
|
|
||||||
def allowed
|
def allowed
|
||||||
project = Project.find_by_owner_and_name! params[:project]
|
project = Project.find_by_owner_and_name! params[:project]
|
||||||
action = case params[:action_type]
|
pp = ProjectPolicy.new(@user, project)
|
||||||
|
can = case params[:action_type]
|
||||||
when 'git-upload-pack'
|
when 'git-upload-pack'
|
||||||
then :read
|
pp.read?
|
||||||
when 'git-receive-pack'
|
when 'git-receive-pack'
|
||||||
then :write
|
pp.write?
|
||||||
end
|
end
|
||||||
render inline: (!@user.access_locked? && Ability.new(@user).can?(action, project)).to_s
|
render inline: (!@user.access_locked? && can).to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
def check
|
def check
|
||||||
|
|
|
@ -93,7 +93,7 @@ module ApplicationHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def alert_class(type)
|
def alert_class(type)
|
||||||
case type.to_s
|
case type
|
||||||
when 'error', 'alert'
|
when 'error', 'alert'
|
||||||
'alert-danger'
|
'alert-danger'
|
||||||
when 'notice'
|
when 'notice'
|
||||||
|
|
|
@ -20,7 +20,7 @@ module BuildListsHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def availables_main_platforms
|
def availables_main_platforms
|
||||||
Platform.availables_main_platforms current_user, current_ability
|
Platform.availables_main_platforms current_user
|
||||||
end
|
end
|
||||||
|
|
||||||
def dependent_projects(package)
|
def dependent_projects(package)
|
||||||
|
@ -294,8 +294,9 @@ module BuildListsHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def default_extra_repos(project)
|
def default_extra_repos(project)
|
||||||
project.repositories.joins(:platform).accessible_by(current_ability, :read)
|
scope = project.repositories.joins(:platform).where(platforms: { platform_type: 'personal' })
|
||||||
.where(platforms: { platform_type: 'personal' }).map do |extra|
|
scope = PlatformPolicy::Scope.new(current_user, scope).show
|
||||||
|
scope.map do |extra|
|
||||||
{
|
{
|
||||||
id: extra.id,
|
id: extra.id,
|
||||||
platform_id: extra.platform.id,
|
platform_id: extra.platform.id,
|
||||||
|
|
|
@ -1,23 +1,31 @@
|
||||||
module CommitHelper
|
module CommitHelper
|
||||||
MAX_FILES_WITHOUT_COLLAPSE = 25
|
MAX_FILES_WITHOUT_COLLAPSE = 25
|
||||||
|
|
||||||
def render_commit_stats(stats)
|
def render_commit_stats(options = {})
|
||||||
res = ["<table class='table table-responsive boffset0'>"]
|
stats = options[:stats]
|
||||||
|
diff = options[:diff]
|
||||||
|
repo = options[:repo]
|
||||||
|
commit = options[:commit]
|
||||||
|
parent_commit = commit.parents.try(:first)
|
||||||
|
|
||||||
|
res = ["<ul class='list-group boffset0'>"]
|
||||||
ind=0
|
ind=0
|
||||||
stats.files.each do |filename, adds, deletes, total|
|
stats.files.each do |filename, adds, deletes, total|
|
||||||
res << "<tr>"
|
file_name = get_filename_in_diff(diff[ind], filename)
|
||||||
res << "<td><a href='#diff-#{ind}'>#{h(filename.rtruncate 120)}</a></td>"
|
file_status = t "layout.projects.diff.#{get_file_status_in_diff(diff[ind])}"
|
||||||
res << "<td class='diffstat'>"
|
res << "<li class='list-group-item'>"
|
||||||
res << I18n.t("layout.projects.inline_changes_count", count: total).strip +
|
res << "<div class='row'>"
|
||||||
" (" +
|
res << "<div class='col-sm-8'>"
|
||||||
I18n.t("layout.projects.inline_additions_count", count: adds).strip +
|
res << "<a href='#diff-#{ind}' data-toggle='tooltip' data-placement='top' title='#{file_status}'>"
|
||||||
", " +
|
res << "#{diff_file_icon(diff[ind])} #{h(file_name)}"
|
||||||
I18n.t("layout.projects.inline_deletions_count", count: deletes).strip +
|
res << "</a></div>"
|
||||||
")"
|
res << render_file_changes(diff: diff[ind], adds: adds, deletes: deletes, total: total,
|
||||||
res << "</td>"
|
repo: repo, commit: commit, parent_commit: parent_commit, file_status: file_status)
|
||||||
|
res << "</div"
|
||||||
|
res << "</li>"
|
||||||
ind +=1
|
ind +=1
|
||||||
end
|
end
|
||||||
res << "</table>"
|
res << "</ul>"
|
||||||
|
|
||||||
wrap_commit_header_list(stats, res)
|
wrap_commit_header_list(stats, res)
|
||||||
end
|
end
|
||||||
|
@ -29,7 +37,8 @@ module CommitHelper
|
||||||
res << "<div class='panel-heading' role='tab' id='heading'>"
|
res << "<div class='panel-heading' role='tab' id='heading'>"
|
||||||
res << "<h4 class='panel-title'>"
|
res << "<h4 class='panel-title'>"
|
||||||
res << "<a data-toggle='collapse' data-parent='#diff_header' href='#collapseList' aria-expanded='true' aria-controls='collapseList'>"
|
res << "<a data-toggle='collapse' data-parent='#diff_header' href='#collapseList' aria-expanded='true' aria-controls='collapseList'>"
|
||||||
res << "#{diff_commit_header_message(stats)}</a>"
|
res << "<span class='fa fa-chevron-#{is_stats_open ? 'down' : 'up'}'></span>"
|
||||||
|
res << " #{diff_commit_header_message(stats)}</a>"
|
||||||
res << "</h4>"
|
res << "</h4>"
|
||||||
res << "</div>"
|
res << "</div>"
|
||||||
res << "<div id='collapseList' class='panel-collapse collapse #{is_stats_open}' role='tabpanel' aria-labelledby='collapseList'>"
|
res << "<div id='collapseList' class='panel-collapse collapse #{is_stats_open}' role='tabpanel' aria-labelledby='collapseList'>"
|
||||||
|
@ -72,9 +81,116 @@ module CommitHelper
|
||||||
Russian.p(commits_count, *commits_pluralization_arr)
|
Russian.p(commits_count, *commits_pluralization_arr)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def is_file_open_in_diff(blob, diff)
|
||||||
|
return true if blob.binary? && blob.render_as == :image
|
||||||
|
return true if diff.diff.blank? && diff.a_mode != diff.b_mode
|
||||||
|
diff.diff.present? && diff.diff.split("\n").count <= DiffHelper::MAX_LINES_WITHOUT_COLLAPSE
|
||||||
|
end
|
||||||
|
|
||||||
|
def file_blob_in_diff(repo, commit_id, diff)
|
||||||
|
return if repo.nil? || commit_id.nil? || diff.nil?
|
||||||
|
tree = repo.tree(commit_id)
|
||||||
|
blob = diff.renamed_file ? (tree / diff.b_path) : (tree / (diff.a_path || diff.b_path))
|
||||||
|
blob || diff.a_blob || diff.b_blob
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_commit_id_for_file(diff, commit, parent_commit)
|
||||||
|
diff.deleted_file ? parent_commit.id : commit.id
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_file_status_in_diff(diff)
|
||||||
|
if diff.renamed_file
|
||||||
|
:renamed_file
|
||||||
|
elsif diff.new_file
|
||||||
|
:new_file
|
||||||
|
elsif diff.deleted_file
|
||||||
|
:deleted_file
|
||||||
|
else
|
||||||
|
:changed_file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_filename_in_diff(diff, filename)
|
||||||
|
if diff.renamed_file
|
||||||
|
"#{diff.a_path.rtruncate 50} => #{diff.b_path.rtruncate 50}"
|
||||||
|
else
|
||||||
|
filename.rtruncate(100)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def commits_pluralization_arr
|
def commits_pluralization_arr
|
||||||
pluralize ||= t('layout.commits.pluralize').map {|base, title| title.to_s}
|
pluralize ||= t('layout.commits.pluralize').map {|base, title| title.to_s}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def render_file_changes(options = {})
|
||||||
|
diff = options[:diff]
|
||||||
|
adds = options[:adds]
|
||||||
|
deletes = options[:deletes]
|
||||||
|
total = options[:total]
|
||||||
|
repo = options[:repo]
|
||||||
|
file_status = options[:file_status]
|
||||||
|
commit_id = get_commit_id_for_file(diff, options[:commit], options[:parent_commit])
|
||||||
|
blob = file_blob_in_diff(repo, commit_id, diff)
|
||||||
|
|
||||||
|
res = ''
|
||||||
|
res << "<div class='col-sm-3'>"
|
||||||
|
res << "<div class='pull-right'>"
|
||||||
|
if blob.binary?
|
||||||
|
res << "<strong class='text-primary'>#{t 'layout.projects.diff.binary'} #{file_status}</strong>"
|
||||||
|
elsif total > 0
|
||||||
|
res << "<strong class='text-success'>+#{adds}</strong> <strong class='text-danger'>-#{deletes}</strong>"
|
||||||
|
else # total == 0
|
||||||
|
res << "<strong class='text-primary'>#{t 'layout.projects.diff.without_changes'}</strong>"
|
||||||
|
end
|
||||||
|
res << "</div>"
|
||||||
|
res << "</div>"
|
||||||
|
|
||||||
|
res << "<div class='col-sm-1'>"
|
||||||
|
res << render_progress_bar(adds, deletes, total, blob)
|
||||||
|
res << "</div>"
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
def render_progress_bar(adds, deletes, total, blob)
|
||||||
|
res = ''
|
||||||
|
pluses = 0
|
||||||
|
minuses = 0
|
||||||
|
|
||||||
|
if total > 0
|
||||||
|
pluses = ((adds/(adds+deletes).to_f)*100).round
|
||||||
|
minuses = 100 - pluses
|
||||||
|
end
|
||||||
|
|
||||||
|
title = if total >0
|
||||||
|
t 'layout.projects.inline_changes_count', count: total
|
||||||
|
elsif !blob.binary?
|
||||||
|
t 'layout.projects.diff.without_changes'
|
||||||
|
else
|
||||||
|
'BIN'
|
||||||
|
end
|
||||||
|
|
||||||
|
res << "<div class='progress' style='margin-bottom: 0' data-toggle='tooltip' data-placement='top' title='#{title}'>"
|
||||||
|
res << "<div class='progress-bar progress-bar-success' style='width: #{pluses}%'></div>"
|
||||||
|
res << "<div class='progress-bar progress-bar-danger' style='width: #{minuses}%'></div>"
|
||||||
|
res << "</div>"
|
||||||
|
res
|
||||||
|
end
|
||||||
|
|
||||||
|
def diff_file_icon(diff)
|
||||||
|
icon = case get_file_status_in_diff(diff)
|
||||||
|
when :renamed_file
|
||||||
|
'fa-caret-square-o-right text-info'
|
||||||
|
when :new_file
|
||||||
|
'fa-plus-square text-success'
|
||||||
|
when :deleted_file
|
||||||
|
'fa-minus-square text-danger'
|
||||||
|
when :changed_file
|
||||||
|
'fa-pencil-square text-primary'
|
||||||
|
else
|
||||||
|
'fa-exclamation-circle text-danger'
|
||||||
|
end
|
||||||
|
"<i class='fa #{icon}'></i>"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,35 +1,49 @@
|
||||||
module DiffHelper
|
module DiffHelper
|
||||||
MAX_FILES_WITHOUT_COLLAPSE = 25
|
include CommitHelper
|
||||||
|
|
||||||
MAX_LINES_WITHOUT_COLLAPSE = 50
|
MAX_LINES_WITHOUT_COLLAPSE = 50
|
||||||
|
|
||||||
def render_diff_stats(stats)
|
def render_diff_stats(options = {})
|
||||||
path = @pull.try(:id) ? polymorphic_path([@project, @pull]) : ''
|
stats = options[:stats]
|
||||||
|
diff = options[:diff]
|
||||||
|
repo = options[:repo]
|
||||||
|
commit = options[:commit]
|
||||||
|
parent_commit = options[:common_ancestor]
|
||||||
|
|
||||||
res = ["<table class='table table-responsive boffset0'>"]
|
res = ["<ul class='list-group boffset0'>"]
|
||||||
stats.each_with_index do |stat, ind|
|
stats.each_with_index do |stat, ind|
|
||||||
res << "<tr>"
|
adds = stat.additions
|
||||||
res << "<td>#{link_to stat.filename.rtruncate(120), "#{path}#diff-#{ind}"}</td>"
|
deletes = stat.deletions
|
||||||
res << "<td class='diffstat'>"
|
total = adds + deletes
|
||||||
res << I18n.t("layout.projects.inline_changes_count", count: stat.additions + stat.deletions).strip +
|
file_name = get_filename_in_diff(diff[ind], stat.filename)
|
||||||
" (" +
|
file_status = t "layout.projects.diff.#{get_file_status_in_diff(diff[ind])}"
|
||||||
I18n.t("layout.projects.inline_additions_count", count: stat.additions).strip +
|
|
||||||
", " +
|
res << "<li class='list-group-item'>"
|
||||||
I18n.t("layout.projects.inline_deletions_count", count: stat.deletions).strip +
|
res << "<div class='row'>"
|
||||||
")"
|
res << "<div class='col-sm-8'>"
|
||||||
res << "</td>"
|
res << "<a href='#diff-#{ind}' data-toggle='tooltip' data-placement='top' title='#{file_status}'>"
|
||||||
|
res << "#{diff_file_icon(diff[ind])} #{h(file_name)}"
|
||||||
|
res << "</a></div>"
|
||||||
|
res << render_file_changes(diff: diff[ind], adds: adds, deletes: deletes, total: total,
|
||||||
|
repo: repo, commit: commit, parent_commit: parent_commit, file_status: file_status)
|
||||||
|
res << "</div"
|
||||||
|
res << "</li>"
|
||||||
|
ind +=1
|
||||||
end
|
end
|
||||||
res << '</table>'
|
res << "</ul>"
|
||||||
wrap_header_list(stats, res)
|
|
||||||
|
wrap_diff_header_list(stats, res)
|
||||||
end
|
end
|
||||||
|
|
||||||
def wrap_header_list(stats, list)
|
def wrap_diff_header_list(stats, list)
|
||||||
is_stats_open = stats.count <= MAX_FILES_WITHOUT_COLLAPSE ? 'in' : ''
|
is_stats_open = stats.count <= MAX_FILES_WITHOUT_COLLAPSE ? 'in' : ''
|
||||||
res = ["<div class='panel-group' id='diff_header' role='tablist' aria-multiselectable='false'>"]
|
res = ["<div class='panel-group' id='diff_header' role='tablist' aria-multiselectable='false'>"]
|
||||||
res << "<div class='panel panel-default'>"
|
res << "<div class='panel panel-default'>"
|
||||||
res << "<div class='panel-heading' role='tab' id='heading'>"
|
res << "<div class='panel-heading' role='tab' id='heading'>"
|
||||||
res << "<h4 class='panel-title'>"
|
res << "<h4 class='panel-title'>"
|
||||||
res << "<a data-toggle='collapse' data-parent='#diff_header' href='#collapseList' aria-expanded='true' aria-controls='collapseList'>"
|
res << "<a data-toggle='collapse' data-parent='#diff_header' href='#collapseList' aria-expanded='true' aria-controls='collapseList'>"
|
||||||
res << "#{diff_header_message(stats)}</a>"
|
res << "<span class='fa fa-chevron-#{is_stats_open ? 'down' : 'up'}'></span>"
|
||||||
|
res << " #{diff_header_message(stats)}</a>"
|
||||||
res << "</h4>"
|
res << "</h4>"
|
||||||
res << "</div>"
|
res << "</div>"
|
||||||
res << "<div id='collapseList' class='panel-collapse collapse #{is_stats_open}' role='tabpanel' aria-labelledby='collapseList'>"
|
res << "<div id='collapseList' class='panel-collapse collapse #{is_stats_open}' role='tabpanel' aria-labelledby='collapseList'>"
|
||||||
|
|
|
@ -153,7 +153,7 @@ module MarkdownHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def reference_issue(identifier)
|
def reference_issue(identifier)
|
||||||
if issue = Issue.find_by_hash_tag(identifier, current_ability, @project)
|
if issue = Issue.find_by_hash_tag(identifier, current_user, @project)
|
||||||
if issue.pull_request
|
if issue.pull_request
|
||||||
title = "#{PullRequest.model_name.human}: #{issue.title}"
|
title = "#{PullRequest.model_name.human}: #{issue.title}"
|
||||||
url = project_pull_request_path(issue.project, issue.pull_request)
|
url = project_pull_request_path(issue.project, issue.pull_request)
|
||||||
|
|
|
@ -3,7 +3,7 @@ module MassBuildHelper
|
||||||
def link_to_list platform, mass_build, which
|
def link_to_list platform, mass_build, which
|
||||||
link_to t("layout.mass_builds.#{which}"),
|
link_to t("layout.mass_builds.#{which}"),
|
||||||
get_list_platform_mass_build_path(platform, mass_build, kind: which, format: :txt),
|
get_list_platform_mass_build_path(platform, mass_build, kind: which, format: :txt),
|
||||||
target: "_blank" if can?(:get_list, mass_build)
|
target: "_blank" if policy(mass_build).get_list?
|
||||||
end
|
end
|
||||||
|
|
||||||
def link_to_mass_build(mass_build)
|
def link_to_mass_build(mass_build)
|
||||||
|
|
|
@ -17,7 +17,7 @@ module ProjectsHelper
|
||||||
|
|
||||||
def available_project_to_repositories(project)
|
def available_project_to_repositories(project)
|
||||||
project.project_to_repositories.includes(repository: :platform).select do |p_to_r|
|
project.project_to_repositories.includes(repository: :platform).select do |p_to_r|
|
||||||
p_to_r.repository.publish_without_qa ? true : can?(:local_admin_manage, p_to_r.repository.platform)
|
p_to_r.repository.publish_without_qa ? true : policy(p_to_r.repository.platform).local_admin_manage?
|
||||||
end.sort_by do |p_to_r|
|
end.sort_by do |p_to_r|
|
||||||
"#{p_to_r.repository.platform.name}/#{p_to_r.repository.name}"
|
"#{p_to_r.repository.platform.name}/#{p_to_r.repository.name}"
|
||||||
end.map do |p_to_r|
|
end.map do |p_to_r|
|
||||||
|
@ -33,8 +33,8 @@ module ProjectsHelper
|
||||||
|
|
||||||
def mass_import_repositories_for_group_select
|
def mass_import_repositories_for_group_select
|
||||||
groups = {}
|
groups = {}
|
||||||
Platform.accessible_by(current_ability, :related).order(:name).each do |platform|
|
PlatformPolicy::Scope.new(current_user, Platform).related.order(:name).each do |platform|
|
||||||
next unless can?(:local_admin_manage, platform)
|
next unless policy(platform).local_admin_manage?
|
||||||
groups[platform.name] = Repository.custom_sort(platform.repositories).map{ |r| [r.name, r.id] }
|
groups[platform.name] = Repository.custom_sort(platform.repositories).map{ |r| [r.name, r.id] }
|
||||||
end
|
end
|
||||||
groups.to_a
|
groups.to_a
|
||||||
|
@ -70,7 +70,9 @@ module ProjectsHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def alone_member?(project)
|
def alone_member?(project)
|
||||||
Relation.by_target(project).by_actor(current_user).size > 0
|
Rails.cache.fetch(['ProjectsHelper#alone_member?', project, current_user]) do
|
||||||
|
Relation.by_target(project).by_actor(current_user).exists?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def participant_path(participant)
|
def participant_path(participant)
|
||||||
|
|
|
@ -8,7 +8,7 @@ module PullRequestHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def pull_status_label pull_status, options = {}
|
def pull_status_label pull_status, options = {}
|
||||||
statuses = {'ready' => 'success', 'closed' => 'important', 'merged' => 'important', 'blocked' => 'warning'}
|
statuses = {'ready' => 'success', 'closed' => 'default', 'merged' => 'info', 'blocked' => 'warning'}
|
||||||
options[:class] = "#{options[:class]} label label-#{statuses[pull_status]}"
|
options[:class] = "#{options[:class]} label label-#{statuses[pull_status]}"
|
||||||
content_tag :span, t("projects.pull_requests.statuses.#{pull_status}"), options
|
content_tag :span, t("projects.pull_requests.statuses.#{pull_status}"), options
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,6 +15,7 @@ module UsersHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def gravatar_url(email, size = 30)
|
def gravatar_url(email, size = 30)
|
||||||
"https://secure.gravatar.com/avatar/#{Digest::MD5.hexdigest(email.downcase)}?s=#{size}&r=pg"
|
hex = email.present? ? Digest::MD5.hexdigest(email.try :downcase) : ''
|
||||||
|
"https://secure.gravatar.com/avatar/#{}?s=#{size}&r=pg"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,7 +14,7 @@ module AbfWorker
|
||||||
end
|
end
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
return if restart_task
|
return if subject.valid? && restart_task
|
||||||
if options['feedback_from_user']
|
if options['feedback_from_user']
|
||||||
user = User.find options['feedback_from_user']
|
user = User.find options['feedback_from_user']
|
||||||
return if !user.system? && subject.builder != user
|
return if !user.system? && subject.builder != user
|
||||||
|
|
|
@ -6,13 +6,12 @@ module BuildLists
|
||||||
build_list = BuildList.find(build_list_id)
|
build_list = BuildList.find(build_list_id)
|
||||||
return if build_list.save_to_platform.personal?
|
return if build_list.save_to_platform.personal?
|
||||||
user = User.find(user_id)
|
user = User.find(user_id)
|
||||||
ability = Ability.new(user)
|
|
||||||
|
|
||||||
return unless ability.can?(:show, build_list)
|
return unless BuildListPolicy.new(user, build_list).show?
|
||||||
|
|
||||||
arches = Arch.where(id: arch_ids).to_a
|
arches = Arch.where(id: arch_ids).to_a
|
||||||
Project.where(id: project_ids).to_a.each do |project|
|
Project.where(id: project_ids).to_a.each do |project|
|
||||||
next unless ability.can?(:write, project)
|
next unless ProjectPolicy.new(user, project).write?
|
||||||
|
|
||||||
build_for_platform = save_to_platform = build_list.build_for_platform
|
build_for_platform = save_to_platform = build_list.build_for_platform
|
||||||
save_to_repository = save_to_platform.repositories.find{ |r| r.projects.exists?(project.id) }
|
save_to_repository = save_to_platform.repositories.find{ |r| r.projects.exists?(project.id) }
|
||||||
|
@ -48,7 +47,7 @@ module BuildLists
|
||||||
use_extra_tests
|
use_extra_tests
|
||||||
).each { |field| bl.send("#{field}=", options[field]) }
|
).each { |field| bl.send("#{field}=", options[field]) }
|
||||||
|
|
||||||
ability.can?(:create, bl) && bl.save
|
BuildListPolicy.new(user, bl).create? && bl.save
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue