summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/assets/stylesheets/base/layout.scss22
-rw-r--r--app/assets/stylesheets/generic/buttons.scss4
-rw-r--r--app/assets/stylesheets/generic/sidebar.scss11
-rw-r--r--app/assets/stylesheets/pages/projects.scss1
-rw-r--r--app/controllers/dashboard/projects_controller.rb1
-rw-r--r--app/controllers/passwords_controller.rb40
-rw-r--r--app/controllers/projects/services_controller.rb4
-rw-r--r--app/helpers/projects_helper.rb2
-rw-r--r--app/models/project.rb6
-rw-r--r--app/models/project_services/gitlab_ci_service.rb20
-rw-r--r--app/models/project_team.rb4
-rw-r--r--app/models/user.rb4
-rw-r--r--app/services/ci/create_project_service.rb30
-rw-r--r--app/services/git_push_service.rb2
-rw-r--r--app/services/projects/fork_service.rb8
-rw-r--r--app/views/dashboard/projects/starred.html.haml3
-rw-r--r--app/views/devise/passwords/new.html.haml2
-rw-r--r--app/views/layouts/_page.html.haml2
-rw-r--r--app/views/projects/commits/_commit.html.haml2
-rw-r--r--app/views/projects/notes/_note.html.haml6
-rw-r--r--app/views/shared/_field.html.haml7
21 files changed, 100 insertions, 81 deletions
diff --git a/app/assets/stylesheets/base/layout.scss b/app/assets/stylesheets/base/layout.scss
index b91c15d8910..f0569a5e673 100644
--- a/app/assets/stylesheets/base/layout.scss
+++ b/app/assets/stylesheets/base/layout.scss
@@ -1,18 +1,34 @@
html {
overflow-y: scroll;
+ height: 100%;
+ margin: 0;
&.touch .tooltip { display: none !important; }
body {
padding-top: $header-height;
+ height: 100%;
+ margin: 0;
}
}
.container {
padding-top: 0;
+ height: 100%;
+ width: 100%;
z-index: 5;
}
+.content {
+ height: 100%;
+ width: 100%;
+}
+
+.content section {
+ height: 100%;
+ display: table-row;
+}
+
.container .content {
margin: 0 0;
}
@@ -24,3 +40,9 @@ html {
.container-limited {
max-width: $fixed-layout-width;
}
+
+.max-height {
+ height: 100%;
+ display: table;
+ width: 100%;
+} \ No newline at end of file
diff --git a/app/assets/stylesheets/generic/buttons.scss b/app/assets/stylesheets/generic/buttons.scss
index cf76f538e01..a5fe5890447 100644
--- a/app/assets/stylesheets/generic/buttons.scss
+++ b/app/assets/stylesheets/generic/buttons.scss
@@ -94,6 +94,7 @@ body {
@mixin btn-info {
@include border-radius(2px);
+ @include transition (all 0.2s ease 0s);
border-width: 1px;
border-style: solid;
@@ -116,6 +117,7 @@ body {
&:active {
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
+
border-width: 1px;
border-style: solid;
}
@@ -123,6 +125,7 @@ body {
@mixin btn-middle {
@include border-radius(2px);
+ @include transition (all 0.2s ease 0s);
border-width: 1px;
border-style: solid;
@@ -145,6 +148,7 @@ body {
&:active {
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
+
border-width: 1px;
border-style: solid;
}
diff --git a/app/assets/stylesheets/generic/sidebar.scss b/app/assets/stylesheets/generic/sidebar.scss
index c5ea3aca7ca..d30fc6e189d 100644
--- a/app/assets/stylesheets/generic/sidebar.scss
+++ b/app/assets/stylesheets/generic/sidebar.scss
@@ -1,4 +1,7 @@
.page-with-sidebar {
+ min-height: 100%;
+ height: 100%;
+
.sidebar-wrapper {
position: fixed;
top: 0;
@@ -18,15 +21,19 @@
}
.content-wrapper {
- min-height: 100vh;
+ min-height: 900px;
+ display: table;
width: 100%;
padding: 20px;
background: #EAEBEC;
+ height: 100%;
+ width: 100%;
.container-fluid {
background: #FFF;
padding: $gl-padding;
- min-height: 90vh;
+ height: 100%;
+ min-height: 100%;
&.container-blank {
background: none;
diff --git a/app/assets/stylesheets/pages/projects.scss b/app/assets/stylesheets/pages/projects.scss
index 818aa10aefe..b7d046e891a 100644
--- a/app/assets/stylesheets/pages/projects.scss
+++ b/app/assets/stylesheets/pages/projects.scss
@@ -510,4 +510,3 @@ pre.light-well {
.inline-form {
display: inline-block;
}
-
diff --git a/app/controllers/dashboard/projects_controller.rb b/app/controllers/dashboard/projects_controller.rb
index 467d0f81aca..58e9049f158 100644
--- a/app/controllers/dashboard/projects_controller.rb
+++ b/app/controllers/dashboard/projects_controller.rb
@@ -20,6 +20,7 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController
@projects = current_user.starred_projects
@projects = @projects.includes(:namespace, :forked_from_project, :tags)
@projects = @projects.sort(@sort = params[:sort])
+ @last_push = current_user.recent_push
@groups = []
respond_to do |format|
diff --git a/app/controllers/passwords_controller.rb b/app/controllers/passwords_controller.rb
index edf43935f3c..2025158d065 100644
--- a/app/controllers/passwords_controller.rb
+++ b/app/controllers/passwords_controller.rb
@@ -1,20 +1,7 @@
class PasswordsController < Devise::PasswordsController
-
- def create
- email = resource_params[:email]
- resource_found = resource_class.find_by_email(email)
- if resource_found && resource_found.ldap_user?
- flash[:alert] = "Cannot reset password for LDAP user."
- respond_with({}, location: after_sending_reset_password_instructions_path_for(resource_name)) and return
- end
-
- self.resource = resource_class.send_reset_password_instructions(resource_params)
- if successfully_sent?(resource)
- respond_with({}, location: after_sending_reset_password_instructions_path_for(resource_name))
- else
- respond_with(resource)
- end
- end
+ before_action :resource_from_email, only: [:create]
+ before_action :prevent_ldap_reset, only: [:create]
+ before_action :throttle_reset, only: [:create]
def edit
super
@@ -35,4 +22,25 @@ class PasswordsController < Devise::PasswordsController
end
end
end
+
+ protected
+
+ def resource_from_email
+ email = resource_params[:email]
+ self.resource = resource_class.find_by_email(email)
+ end
+
+ def prevent_ldap_reset
+ return unless resource && resource.ldap_user?
+
+ redirect_to after_sending_reset_password_instructions_path_for(resource_name),
+ alert: "Cannot reset password for LDAP user."
+ end
+
+ def throttle_reset
+ return unless resource && resource.recently_sent_password_reset?
+
+ redirect_to new_password_path(resource_name),
+ alert: I18n.t('devise.passwords.recently_reset')
+ end
end
diff --git a/app/controllers/projects/services_controller.rb b/app/controllers/projects/services_controller.rb
index 3a22ed832ac..3047ee8a1ff 100644
--- a/app/controllers/projects/services_controller.rb
+++ b/app/controllers/projects/services_controller.rb
@@ -58,6 +58,8 @@ class Projects::ServicesController < Projects::ApplicationController
end
def service_params
- params.require(:service).permit(ALLOWED_PARAMS)
+ service_params = params.require(:service).permit(ALLOWED_PARAMS)
+ service_params.delete("password") if service_params["password"].blank?
+ service_params
end
end
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 7b4747ce3d7..a0220af4c30 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -296,7 +296,7 @@ module ProjectsHelper
def readme_cache_key
sha = @project.commit.try(:sha) || 'nil'
- [@project.id, sha, "readme"].join('-')
+ [@project.path_with_namespace, sha, "readme"].join('-')
end
def round_commit_count(project)
diff --git a/app/models/project.rb b/app/models/project.rb
index 06a66bbf494..b90a82da9f2 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -751,13 +751,9 @@ class Project < ActiveRecord::Base
gitlab_ci_project || create_gitlab_ci_project
end
- def enable_ci(user)
- # Enable service
+ def enable_ci
service = gitlab_ci_service || create_gitlab_ci_service
service.active = true
service.save
-
- # Create Ci::Project
- Ci::CreateProjectService.new.execute(user, self)
end
end
diff --git a/app/models/project_services/gitlab_ci_service.rb b/app/models/project_services/gitlab_ci_service.rb
index 436d4cfed81..6d2cf79b691 100644
--- a/app/models/project_services/gitlab_ci_service.rb
+++ b/app/models/project_services/gitlab_ci_service.rb
@@ -22,12 +22,17 @@ class GitlabCiService < CiService
include Gitlab::Application.routes.url_helpers
after_save :compose_service_hook, if: :activated?
+ after_save :ensure_gitlab_ci_project, if: :activated?
def compose_service_hook
hook = service_hook || build_service_hook
hook.save
end
+ def ensure_gitlab_ci_project
+ project.ensure_gitlab_ci_project
+ end
+
def supported_events
%w(push tag_push)
end
@@ -67,21 +72,6 @@ class GitlabCiService < CiService
:error
end
- def fork_registration(new_project, current_user)
- params = OpenStruct.new({
- id: new_project.id,
- default_branch: new_project.default_branch
- })
-
- ci_project = Ci::Project.find_by!(gitlab_id: project.id)
-
- Ci::CreateProjectService.new.execute(
- current_user,
- params,
- ci_project
- )
- end
-
def commit_coverage(sha, ref)
get_ci_commit(sha, ref).coverage
rescue ActiveRecord::RecordNotFound
diff --git a/app/models/project_team.rb b/app/models/project_team.rb
index 56e49af2324..f602a965364 100644
--- a/app/models/project_team.rb
+++ b/app/models/project_team.rb
@@ -135,6 +135,10 @@ class ProjectTeam
!!find_member(user_id)
end
+ def human_max_access(user_id)
+ Gitlab::Access.options.key max_member_access(user_id)
+ end
+
def max_member_access(user_id)
access = []
access << project.project_members.find_by(user_id: user_id).try(:access_field)
diff --git a/app/models/user.rb b/app/models/user.rb
index ef687f737cc..1069f8e3664 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -328,6 +328,10 @@ class User < ActiveRecord::Base
@reset_token
end
+ def recently_sent_password_reset?
+ reset_password_sent_at.present? && reset_password_sent_at >= 1.minute.ago
+ end
+
def disable_two_factor!
update_attributes(
two_factor_enabled: false,
diff --git a/app/services/ci/create_project_service.rb b/app/services/ci/create_project_service.rb
deleted file mode 100644
index f42babd2388..00000000000
--- a/app/services/ci/create_project_service.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-module Ci
- class CreateProjectService
- include Gitlab::Application.routes.url_helpers
-
- def execute(current_user, params, forked_project = nil)
- @project = Ci::Project.parse(params)
-
- Ci::Project.transaction do
- @project.save!
-
- gl_project = ::Project.find(@project.gitlab_id)
- gl_project.build_missing_services
- gl_project.gitlab_ci_service.update_attributes(active: true)
- end
-
- if forked_project
- # Copy settings
- settings = forked_project.attributes.select do |attr_name, value|
- ["public", "shared_runners_enabled", "allow_git_fetch"].include? attr_name
- end
-
- @project.update(settings)
- end
-
- Ci::EventService.new.create_project(current_user, @project)
-
- @project
- end
- end
-end
diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb
index 8193b6e192d..f9a8265d2d4 100644
--- a/app/services/git_push_service.rb
+++ b/app/services/git_push_service.rb
@@ -58,7 +58,7 @@ class GitPushService
# If CI was disabled but .gitlab-ci.yml file was pushed
# we enable CI automatically
if !project.gitlab_ci? && gitlab_ci_yaml?(newrev)
- project.enable_ci(user)
+ project.enable_ci
end
EventCreateService.new.push(project, user, @push_data)
diff --git a/app/services/projects/fork_service.rb b/app/services/projects/fork_service.rb
index 2e995d6fd51..46374a3909a 100644
--- a/app/services/projects/fork_service.rb
+++ b/app/services/projects/fork_service.rb
@@ -18,7 +18,13 @@ module Projects
if new_project.persisted?
if @project.gitlab_ci?
- @project.gitlab_ci_service.fork_registration(new_project, @current_user)
+ new_project.enable_ci
+
+ settings = @project.gitlab_ci_project.attributes.select do |attr_name, value|
+ ["public", "shared_runners_enabled", "allow_git_fetch"].include? attr_name
+ end
+
+ new_project.gitlab_ci_project.update(settings)
end
end
diff --git a/app/views/dashboard/projects/starred.html.haml b/app/views/dashboard/projects/starred.html.haml
index 339362701d4..f75f2e0a32a 100644
--- a/app/views/dashboard/projects/starred.html.haml
+++ b/app/views/dashboard/projects/starred.html.haml
@@ -3,6 +3,9 @@
= render 'dashboard/projects_head'
+- if @last_push
+ = render "events/event_last_push", event: @last_push
+
- if @projects.any?
= render 'projects'
- else
diff --git a/app/views/devise/passwords/new.html.haml b/app/views/devise/passwords/new.html.haml
index 29ffe8a8be3..535e85869e5 100644
--- a/app/views/devise/passwords/new.html.haml
+++ b/app/views/devise/passwords/new.html.haml
@@ -6,7 +6,7 @@
.devise-errors
= devise_error_messages!
.clearfix.append-bottom-20
- = f.email_field :email, placeholder: "Email", class: "form-control", required: true, value: params[:user_email]
+ = f.email_field :email, placeholder: "Email", class: "form-control", required: true, value: params[:user_email], autofocus: true
.clearfix
= f.submit "Reset password", class: "btn-primary btn"
diff --git a/app/views/layouts/_page.html.haml b/app/views/layouts/_page.html.haml
index 2468687b56d..1f4ade81ed2 100644
--- a/app/views/layouts/_page.html.haml
+++ b/app/views/layouts/_page.html.haml
@@ -25,5 +25,5 @@
= render "layouts/flash"
%div{ class: container_class }
.content
- .clearfix
+ .clearfix.max-height
= yield
diff --git a/app/views/projects/commits/_commit.html.haml b/app/views/projects/commits/_commit.html.haml
index efad4cb1473..cddd5aa3a83 100644
--- a/app/views/projects/commits/_commit.html.haml
+++ b/app/views/projects/commits/_commit.html.haml
@@ -5,7 +5,7 @@
- note_count = notes.user.count
- ci_commit = project.ci_commit(commit.sha)
-- cache_key = [project.id, commit.id, note_count]
+- cache_key = [project.path_with_namespace, commit.id, note_count]
- cache_key.push(ci_commit.status) if ci_commit
= cache(cache_key) do
diff --git a/app/views/projects/notes/_note.html.haml b/app/views/projects/notes/_note.html.haml
index cf5d5d6d8ba..1638ad6891a 100644
--- a/app/views/projects/notes/_note.html.haml
+++ b/app/views/projects/notes/_note.html.haml
@@ -14,10 +14,10 @@
= icon('trash-o')
- unless note.system
- - member = note.project.team.find_member(note.author.id)
- - if member
+ - access = note.project.team.human_max_access(note.author.id)
+ - if access
%span.note-role.label
- = member.human_access
+ = access
= link_to_member(note.project, note.author, avatar: false)
diff --git a/app/views/shared/_field.html.haml b/app/views/shared/_field.html.haml
index 45ec49280d2..8d6e16f74c3 100644
--- a/app/views/shared/_field.html.haml
+++ b/app/views/shared/_field.html.haml
@@ -8,7 +8,10 @@
- help = field[:help]
.form-group
- = form.label name, title, class: "control-label"
+ - if type == "password" && value.present?
+ = form.label name, "Change #{title}", class: "control-label"
+ - else
+ = form.label name, title, class: "control-label"
.col-sm-10
- if type == 'text'
= form.text_field name, class: "form-control", placeholder: placeholder
@@ -19,6 +22,6 @@
- elsif type == 'select'
= form.select name, options_for_select(choices, value ? value : default_choice), {}, { class: "form-control" }
- elsif type == 'password'
- = form.password_field name, value: value, class: 'form-control'
+ = form.password_field name, autocomplete: "new-password", class: 'form-control'
- if help
%span.help-block= help