summaryrefslogtreecommitdiff
path: root/app/controllers/settings/keys_controller.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/settings/keys_controller.rb')
-rw-r--r--app/controllers/settings/keys_controller.rb60
1 files changed, 60 insertions, 0 deletions
diff --git a/app/controllers/settings/keys_controller.rb b/app/controllers/settings/keys_controller.rb
new file mode 100644
index 00000000000..1eb70f6a58d
--- /dev/null
+++ b/app/controllers/settings/keys_controller.rb
@@ -0,0 +1,60 @@
+# frozen_string_literal: true
+
+class Settings::KeysController < Settings::ApplicationController
+ skip_before_action :authenticate_user!, only: [:get_keys]
+
+ def index
+ @keys = current_user.keys.order_id_desc
+ @key = Key.new
+ end
+
+ def show
+ @key = current_user.keys.find(params[:id])
+ end
+
+ def create
+ @key = Keys::CreateService.new(current_user, key_params.merge(ip_address: request.remote_ip)).execute
+
+ if @key.persisted?
+ redirect_to settings_key_path(@key)
+ else
+ @keys = current_user.keys.select(&:persisted?)
+ render :index
+ end
+ end
+
+ def destroy
+ @key = current_user.keys.find(params[:id])
+ Keys::DestroyService.new(current_user).execute(@key)
+
+ respond_to do |format|
+ format.html { redirect_to settings_keys_url, status: :found }
+ format.js { head :ok }
+ 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 = UserFinder.new(params[:username]).find_by_username
+ if user.present?
+ render plain: user.all_ssh_keys.join("\n")
+ else
+ return render_404
+ end
+ rescue => e
+ render html: e.message
+ end
+ else
+ return render_404
+ end
+ end
+
+ private
+
+ def key_params
+ params.require(:key).permit(:title, :key)
+ end
+end