summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzciński <ayufan@ayufan.eu>2018-09-20 13:30:14 +0200
committerKamil Trzciński <ayufan@ayufan.eu>2018-09-20 13:30:14 +0200
commit5a4461dfa1862f007b9a1de8d621d5978006009e (patch)
tree9fda0f918c8c88bf70f92acace52b8edd766f5bb
parent34447c588486e5fc9deb4498b34c9d71117a496e (diff)
downloadgitlab-ce-feature-flags-backend.tar.gz
Refactor API interfacefeature-flags-backend
-rw-r--r--app/controllers/projects/feature_flags_controller.rb1
-rw-r--r--app/helpers/feature_flags_helper.rb11
-rw-r--r--app/views/projects/feature_flags/_configure_feature_flags_modal.html.haml23
-rw-r--r--lib/api/api.rb2
-rw-r--r--lib/api/feature_flags.rb50
-rw-r--r--lib/api/unleash.rb41
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