Commit aef78288 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge pull request #5261 from devaroop/retrieve_ssh_keys_by_ssh

ssh keys publically available for sysadmins via http, the github way
parents 1284f21c 4b9c28bc
v 6.6.0 v 6.6.0
- Retrieving user ssh keys publically(github style): http://__HOST__/__USERNAME__.keys
- Permissions: Developer now can manage issue tracker (modify any issue) - Permissions: Developer now can manage issue tracker (modify any issue)
- Improve Code Compare page performance - Improve Code Compare page performance
- Group avatar - Group avatar
......
class Profiles::KeysController < ApplicationController class Profiles::KeysController < ApplicationController
layout "profile" layout "profile"
skip_before_filter :authenticate_user!, only: [:get_keys]
def index def index
@keys = current_user.keys.order('id DESC') @keys = current_user.keys.order('id DESC')
...@@ -32,4 +33,24 @@ class Profiles::KeysController < ApplicationController ...@@ -32,4 +33,24 @@ class Profiles::KeysController < ApplicationController
format.js { render nothing: true } format.js { render nothing: true }
end end
end end
# Get all keys of a user(params[:username]) in a text format
# Helpful for sysadmins to put in respective servers
def get_keys
if params[:username].present?
begin
user = User.find_by_username(params[:username])
if user.present?
render text: user.all_ssh_keys.join('\n')
else
render_404 and return
end
rescue => e
render text: e.message
end
else
render_404 and return
end
end
end end
...@@ -435,4 +435,8 @@ class User < ActiveRecord::Base ...@@ -435,4 +435,8 @@ class User < ActiveRecord::Base
def short_website_url def short_website_url
website_url.gsub(/https?:\/\//, '') website_url.gsub(/https?:\/\//, '')
end end
def all_ssh_keys
keys.map(&:key)
end
end end
...@@ -12,6 +12,9 @@ Gitlab::Application.routes.draw do ...@@ -12,6 +12,9 @@ Gitlab::Application.routes.draw do
API::API.logger Rails.logger API::API.logger Rails.logger
mount API::API => '/api' mount API::API => '/api'
# Get all keys of user
get ':username.keys' => 'profiles/keys#get_keys' , constraints: { username: /.*/ }
constraint = lambda { |request| request.env["warden"].authenticate? and request.env['warden'].user.admin? } constraint = lambda { |request| request.env["warden"].authenticate? and request.env['warden'].user.admin? }
constraints constraint do constraints constraint do
mount Sidekiq::Web, at: "/admin/sidekiq", as: :sidekiq mount Sidekiq::Web, at: "/admin/sidekiq", as: :sidekiq
......
...@@ -303,6 +303,17 @@ describe User do ...@@ -303,6 +303,17 @@ describe User do
end end
end end
describe 'all_ssh_keys' do
it { should have_many(:keys).dependent(:destroy) }
it "should have all ssh keys" do
user = create :user
key = create :key, key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD33bWLBxu48Sev9Fert1yzEO4WGcWglWF7K/AwblIUFselOt/QdOL9DSjpQGxLagO1s9wl53STIO8qGS4Ms0EJZyIXOEFMjFJ5xmjSy+S37By4sG7SsltQEHMxtbtFOaW5LV2wCrX+rUsRNqLMamZjgjcPO0/EgGCXIGMAYW4O7cwGZdXWYIhQ1Vwy+CsVMDdPkPgBXqK7nR/ey8KMs8ho5fMNgB5hBw/AL9fNGhRw3QTD6Q12Nkhl4VZES2EsZqlpNnJttnPdp847DUsT6yuLRlfiQfz5Cn9ysHFdXObMN5VYIiPFwHeYCZp1X2S4fDZooRE8uOLTfxWHPXwrhqSH", user_id: user.id
user.all_ssh_keys.should include(key.key)
end
end
describe :avatar_type do describe :avatar_type do
let(:user) { create(:user) } let(:user) { create(:user) }
......
...@@ -176,6 +176,11 @@ describe Profiles::KeysController, "routing" do ...@@ -176,6 +176,11 @@ describe Profiles::KeysController, "routing" do
it "to #destroy" do it "to #destroy" do
delete("/profile/keys/1").should route_to('profiles/keys#destroy', id: '1') delete("/profile/keys/1").should route_to('profiles/keys#destroy', id: '1')
end end
# get all the ssh-keys of a user
it "to #get_keys" do
get("/foo.keys").should route_to('profiles/keys#get_keys', username: 'foo')
end
end end
# profile_avatar DELETE /profile/avatar(.:format) profiles/avatars#destroy # profile_avatar DELETE /profile/avatar(.:format) profiles/avatars#destroy
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment