Welcome to mirror list, hosted at ThFree Co, Russian Federation.

variables.rb « ci « admin « api « lib - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: a443f7f3476e9888d4edcab2981374c832024d9e (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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# frozen_string_literal: true

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

        before { authenticated_as_admin! }

        feature_category :secrets_management

        namespace 'admin' do
          namespace 'ci' do
            namespace 'variables' do
              desc 'List all instance-level variables' do
                success Entities::Ci::Variable
                tags %w[ci_variables]
              end
              params do
                use :pagination
              end
              get '/' do
                variables = ::Ci::InstanceVariable.all

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

              desc 'Get the details of a specific instance-level variable' do
                success Entities::Ci::Variable
                failure [{ code: 404, message: 'Instance Variable Not Found' }]
                tags %w[ci_variables]
              end
              params do
                requires :key, type: String, desc: 'The key of a 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
                failure [{ code: 400, message: '400 Bad Request' }]
                tags %w[ci_variables]
              end
              route_setting :log_safety, { safe: %w[key], unsafe: %w[value] }
              params do
                requires :key,
                  type: String,
                  desc: 'The key of the variable. Max 255 characters'

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

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

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

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

                optional :raw,
                  type: Boolean,
                  desc: 'Whether the variable will be expanded'

                optional :variable_type,
                  type: String,
                  values: ::Ci::InstanceVariable.variable_types.keys,
                  desc: 'The type of a variable. Available types are: env_var (default) and file'
              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 instance-level variable' do
                success Entities::Ci::Variable
                failure [{ code: 404, message: 'Instance Variable Not Found' }]
                tags %w[ci_variables]
              end
              route_setting :log_safety, { safe: %w[key], unsafe: %w[value] }
              params do
                optional :key,
                  type: String,
                  desc: 'The key of a variable'

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

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

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

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

                optional :raw,
                  type: Boolean,
                  desc: 'Whether the variable will be expanded'

                optional :variable_type,
                  type: String,
                  values: ::Ci::InstanceVariable.variable_types.keys,
                  desc: 'The type of a variable. Available types are: env_var (default) and 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
                failure [{ code: 404, message: 'Instance Variable Not Found' }]
                tags %w[ci_variables]
              end
              params do
                requires :key, type: String, desc: 'The key of a 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