diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2018-09-20 13:30:14 +0200 |
---|---|---|
committer | Kamil Trzciński <ayufan@ayufan.eu> | 2018-09-20 13:30:14 +0200 |
commit | 5a4461dfa1862f007b9a1de8d621d5978006009e (patch) | |
tree | 9fda0f918c8c88bf70f92acace52b8edd766f5bb | |
parent | 34447c588486e5fc9deb4498b34c9d71117a496e (diff) | |
download | gitlab-ce-feature-flags-backend.tar.gz |
Refactor API interfacefeature-flags-backend
-rw-r--r-- | app/controllers/projects/feature_flags_controller.rb | 1 | ||||
-rw-r--r-- | app/helpers/feature_flags_helper.rb | 11 | ||||
-rw-r--r-- | app/views/projects/feature_flags/_configure_feature_flags_modal.html.haml | 23 | ||||
-rw-r--r-- | lib/api/api.rb | 2 | ||||
-rw-r--r-- | lib/api/feature_flags.rb | 50 | ||||
-rw-r--r-- | lib/api/unleash.rb | 41 |
6 files changed, 73 insertions, 55 deletions
diff --git a/app/controllers/projects/feature_flags_controller.rb b/app/controllers/projects/feature_flags_controller.rb index 19e1751db16..41389e47c4f 100644 --- a/app/controllers/projects/feature_flags_controller.rb +++ b/app/controllers/projects/feature_flags_controller.rb @@ -9,7 +9,6 @@ class Projects::FeatureFlagsController < Projects::ApplicationController def index @feature_flags = project.operations_feature_flags - @unleash_instanceid = project.feature_flag_access_token end def new diff --git a/app/helpers/feature_flags_helper.rb b/app/helpers/feature_flags_helper.rb new file mode 100644 index 00000000000..7986b4144da --- /dev/null +++ b/app/helpers/feature_flags_helper.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module FeatureFlagsHelper + def unleash_api_url(project) + "#{root_url(only_path: false)}api/v4/feature_flags/projects/#{project.id}/unleash" + end + + def unleash_api_instanceid(project) + project.feature_flag_access_token + end +end diff --git a/app/views/projects/feature_flags/_configure_feature_flags_modal.html.haml b/app/views/projects/feature_flags/_configure_feature_flags_modal.html.haml index 2dae91771e0..81816dd637f 100644 --- a/app/views/projects/feature_flags/_configure_feature_flags_modal.html.haml +++ b/app/views/projects/feature_flags/_configure_feature_flags_modal.html.haml @@ -15,9 +15,8 @@ .form-group = label_tag :api_url, s_('FeatureFlags|API URL'), class: 'label-light' .input-group - - unleash_api_url = "#{root_url(only_path: false)}api/v4/unleash" = text_field_tag :api_url, - unleash_api_url, + unleash_api_url(@project), readonly: true, class: "form-control js-select-on-focus" %span.input-group-append @@ -28,29 +27,29 @@ class: "input-group-text btn btn-default") .form-group - = label_tag :application_name, s_('FeatureFlags|Application name'), class: 'label-light' + = label_tag :instance_id, s_('FeatureFlags|Instance ID'), class: 'label-light' .input-group - = text_field_tag :application_name, - @project.id, + = text_field_tag :instance_id, + unleash_api_instanceid(@project), readonly: true, class: "form-control js-select-on-focus" %span.input-group-append - = clipboard_button(target: '#application_name', - title: _("Copy name to clipboard"), + = clipboard_button(target: '#instance_id', + title: _("Copy ID to clipboard"), placement: "left", container: '#configure-feature-flags-modal', class: "input-group-text btn btn-default") .form-group - = label_tag :instance_id, s_('FeatureFlags|Instance ID'), class: 'label-light' + = label_tag :application_name, s_('FeatureFlags|Application name'), class: 'label-light' .input-group - = text_field_tag :instance_id, - @unleash_instanceid, + = text_field_tag :application_name, + "production", readonly: true, class: "form-control js-select-on-focus" %span.input-group-append - = clipboard_button(target: '#instance_id', - title: _("Copy ID to clipboard"), + = clipboard_button(target: '#application_name', + title: _("Copy name to clipboard"), placement: "left", container: '#configure-feature-flags-modal', class: "input-group-text btn btn-default") diff --git a/lib/api/api.rb b/lib/api/api.rb index 820f47d1d91..96acaf0d502 100644 --- a/lib/api/api.rb +++ b/lib/api/api.rb @@ -99,6 +99,7 @@ module API mount ::API::Environments mount ::API::Events mount ::API::Features + mount ::API::FeatureFlags mount ::API::Files mount ::API::GroupBoards mount ::API::GroupMilestones @@ -146,7 +147,6 @@ module API mount ::API::Templates mount ::API::Todos mount ::API::Triggers - mount ::API::Unleash mount ::API::Users mount ::API::Variables mount ::API::Version diff --git a/lib/api/feature_flags.rb b/lib/api/feature_flags.rb new file mode 100644 index 00000000000..dff43544a75 --- /dev/null +++ b/lib/api/feature_flags.rb @@ -0,0 +1,50 @@ +module API + class FeatureFlags < Grape::API + include PaginationParams + + resource :feature_flags do + resource :projects, requirements: API::PROJECT_ENDPOINT_REQUIREMENTS do + params do + requires :id, type: String, desc: 'The ID of a project' + end + route_param :id do + resource :unleash do + before do + authenticate_by_unleash_access_token! + end + + get 'features' do + present project, with: Entities::UnleashFeatures + end + + post 'client/register' do + # not supported yet + status :ok + end + + post 'client/metrics' do + # not supported yet + status :ok + end + end + end + end + + helpers do + def project + @project ||= find_project(params[:id]) + end + + def unleash_instanceid + params[:instanceid] || env[:HTTP_UNLEASH_INSTANCEID] + end + + def authenticate_by_unleash_access_token! + unless Operations::FeatureFlagsAccessToken.find_by(token: unleash_instanceid, project: project) + unauthorized! + end + end + end + end + end +end diff --git a/lib/api/unleash.rb b/lib/api/unleash.rb deleted file mode 100644 index e4f9d00d3ff..00000000000 --- a/lib/api/unleash.rb +++ /dev/null @@ -1,41 +0,0 @@ -module API - class Unleash < Grape::API - include PaginationParams - - before do - unauthorized! unless access_token - end - - get ':unleash/features' do - present @project, with: Entities::UnleashFeatures - end - - post 'unleash/client/register' do - status :ok - end - - post 'unleash/client/metrics' do - status :ok - end - - private - - helpers do - def project - @project ||= find_project(unleash_appname) - end - - def access_token - @access_token ||= ProjectFeatureFlagsAccessToken.find_by(token: unleash_instanceid, project: project) - end - - def unleash_appname - params[:appname] || env[:HTTP_UNLEASH_APPNAME] - end - - def unleash_instanceid - params[:instanceid] || env[:HTTP_UNLEASH_INSTANCEID] - end - end - end -end |