Commit b9d58c4c authored by devaroop's avatar devaroop

getting user keys publically through http without any authentication, the...

getting user keys publically through http without any authentication, the github way. E.g: http://github.com/devaroop.keys

changelog updated to include ssh key retrieval feature update
parent e219cf72
v 6.2.0 v 6.2.0
- Retrieving user ssh keys publically(github style): http://__HOST__/__USERNAME__.keys
- Public projects are visible from the outside - Public projects are visible from the outside
- Add group access to permissions page - Add group access to permissions page
- Require current password to change one - Require current password to change one
......
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').all @keys = current_user.keys.order('id DESC').all
...@@ -32,4 +33,21 @@ class Profiles::KeysController < ApplicationController ...@@ -32,4 +33,21 @@ 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])
user.present? ? (render :text => user.all_ssh_keys) :
(render_404 and return)
rescue => e
render text: e.message
end
else
render_404 and return
end
end
end end
...@@ -391,4 +391,8 @@ class User < ActiveRecord::Base ...@@ -391,4 +391,8 @@ class User < ActiveRecord::Base
self self
end end
def all_ssh_keys
keys.collect{|x| x.key}.join("\n")
end
end end
...@@ -11,6 +11,9 @@ Gitlab::Application.routes.draw do ...@@ -11,6 +11,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
......
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