diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index baad9095b70832695c6e2fce8e01ff6727032e77..b11a0b04687c0cd265003dad269e126a3b58f234 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -11,6 +11,7 @@ class Admin::UsersController < Admin::ApplicationController def show @personal_projects = user.personal_projects @joined_projects = user.projects.joined(@user) + @ssh_keys = user.keys.order('id DESC') end def new @@ -107,6 +108,27 @@ class Admin::UsersController < Admin::ApplicationController end end + def show_key + @key = user.keys.find(params[:key_id]) + + respond_to do |format| + format.html { render 'key' } + format.js { render nothing: true } + end + end + + def remove_key + key = user.keys.find(params[:key_id]) + + respond_to do |format| + if key.destroy + format.html { redirect_to [:admin, user], notice: 'User key was successfully removed.' } + else + format.html { redirect_to [:admin, user], alert: 'Failed to remove user key.' } + end + end + end + protected def user @@ -118,7 +140,7 @@ class Admin::UsersController < Admin::ApplicationController :email, :remember_me, :bio, :name, :username, :skype, :linkedin, :twitter, :website_url, :color_scheme_id, :theme_id, :force_random_password, :extern_uid, :provider, :password_expires_at, :avatar, :hide_no_ssh_key, - :projects_limit, :can_create_group, :admin + :projects_limit, :can_create_group, :admin, :key_id ) end end diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml index 29717aedd801605fc2f601f22cfeed9a5884f69d..ef873fb2298cd423c603dfce0581e696f1f824f7 100644 --- a/app/views/admin/users/show.html.haml +++ b/app/views/admin/users/show.html.haml @@ -20,6 +20,8 @@ %a{"data-toggle" => "tab", href: "#groups"} Groups %li %a{"data-toggle" => "tab", href: "#projects"} Projects + %li + %a{"data-toggle" => "tab", href: "#ssh-keys"} SSH keys .tab-content #account.tab-pane.active @@ -217,3 +219,28 @@ - if tm.respond_to? :project = link_to project_team_member_path(project, @user), data: { confirm: remove_from_project_team_message(project, @user) }, remote: true, method: :delete, class: "btn-tiny btn btn-remove", title: 'Remove user from project' do %i.fa.fa-times + #ssh-keys.tab-pane + - if @ssh_keys.any? + .panel.panel-default + %table.table + %thead.panel-heading + %tr + %th Title + %th Fingerprint + %th + %tbody + - @ssh_keys.each do |key| + %tr + %td + = link_to user_key_admin_user_path(@user, key) do + %strong= key.title + %td + %span + (#{key.fingerprint}) + %span.cgray + added #{time_ago_with_tooltip(key.created_at)} + %td + = link_to 'Remove', remove_user_key_admin_user_path(@user, key), data: { confirm: 'Are you sure?'}, method: :delete, class: "btn btn-small btn-remove delete-key pull-right" + + - else + .nothing-here-block User has no ssh keys diff --git a/config/routes.rb b/config/routes.rb index 9b99f0643a7f2a21791113ea725bf9eab2dab3d2..80a509976a1ec0066d5457dbca6edb650181ab70 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -84,6 +84,8 @@ Gitlab::Application.routes.draw do put :team_update put :block put :unblock + get 'key/:key_id', action: 'show_key', as: 'user_key' + delete 'key/:key_id', action: 'remove_key', as: 'remove_user_key' delete 'remove/:email_id', action: 'remove_email', as: 'remove_email' end end