summaryrefslogtreecommitdiff
path: root/lib/api/admin/ci/variables.rb
blob: 654d3a481626c8fb79fe7ff8e2b4335ffdeeb292 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# frozen_string_literal: true

module API
  module Admin
    module Ci
      class Variables < ::API::Base
        include PaginationParams

        before { authenticated_as_admin! }

        feature_category :continuous_integration

        namespace 'admin' do
          namespace 'ci' do
            namespace 'variables' do
              desc 'Get instance-level variables' do
                success Entities::Ci::Variable
              end
              params do
                use :pagination
              end
              get '/' do
                variables = ::Ci::InstanceVariable.all

                present paginate(variables), with: Entities::Ci::Variable
              end

              desc 'Get a specific variable from a group' do
                success Entities::Ci::Variable
              end
              params do
                requires :key, type: String, desc: 'The key of the variable'
              end
              get ':key' do
                key = params[:key]
                variable = ::Ci::InstanceVariable.find_by_key(key)

                break not_found!('InstanceVariable') unless variable

                present variable, with: Entities::Ci::Variable
              end

              desc 'Create a new instance-level variable' do
                success Entities::Ci::Variable
              end
              params do
                requires :key,
                  type: String,
                  desc: 'The key of the variable'

                requires :value,
                  type: String,
                  desc: 'The value of the variable'

                optional :protected,
                  type: String,
                  desc: 'Whether the variable is protected'

                optional :masked,
                  type: String,
                  desc: 'Whether the variable is masked'

                optional :variable_type,
                  type: String,
                  values: ::Ci::InstanceVariable.variable_types.keys,
                  desc: 'The type of variable, must be one of env_var or file. Defaults to env_var'
              end
              post '/' do
                variable_params = declared_params(include_missing: false)

                variable = ::Ci::InstanceVariable.new(variable_params)

                if variable.save
                  present variable, with: Entities::Ci::Variable
                else
                  render_validation_error!(variable)
                end
              end

              desc 'Update an existing instance-variable' do
                success Entities::Ci::Variable
              end
              params do
                optional :key,
                  type: String,
                  desc: 'The key of the variable'

                optional :value,
                  type: String,
                  desc: 'The value of the variable'

                optional :protected,
                  type: String,
                  desc: 'Whether the variable is protected'

                optional :masked,
                  type: String,
                  desc: 'Whether the variable is masked'

                optional :variable_type,
                  type: String,
                  values: ::Ci::InstanceVariable.variable_types.keys,
                  desc: 'The type of variable, must be one of env_var or file'
              end
              put ':key' do
                variable = ::Ci::InstanceVariable.find_by_key(params[:key])

                break not_found!('InstanceVariable') unless variable

                variable_params = declared_params(include_missing: false).except(:key)

                if variable.update(variable_params)
                  present variable, with: Entities::Ci::Variable
                else
                  render_validation_error!(variable)
                end
              end

              desc 'Delete an existing instance-level variable' do
                success Entities::Ci::Variable
              end
              params do
                requires :key, type: String, desc: 'The key of the variable'
              end
              delete ':key' do
                variable = ::Ci::InstanceVariable.find_by_key(params[:key])
                not_found!('InstanceVariable') unless variable

                variable.destroy

                no_content!
              end
            end
          end
        end
      end
    end
  end
end