2
2
3
3
class Travis ::Api ::App
4
4
class SettingsEndpoint < Endpoint
5
+ include ActiveSupport ::Callbacks
6
+ extend ActiveSupport ::Concern
7
+
8
+ define_callbacks :after_save
9
+ set_callback :after_save , :after , :save_audit
10
+
5
11
set ( :prefix ) { "/settings/" << name [ /[^:]+$/ ] . underscore }
6
12
7
13
class << self
@@ -19,7 +25,7 @@ def subclass(name)
19
25
end
20
26
21
27
def create_settings_class ( name )
22
- klass = Class . new ( self ) do
28
+ Class . new ( self ) do
23
29
define_method ( :name ) { name }
24
30
before { authenticate_by_mode! }
25
31
define_routes!
@@ -50,7 +56,15 @@ def update
50
56
record . update ( JSON . parse ( request . body . read ) [ singular_name ] )
51
57
52
58
if record . valid?
59
+ @changes = {
60
+ env_vars : {
61
+ created : "name: #{ record . name } , is_public: #{ record . public } , branch: #{ record . branch || 'all' } "
62
+ }
63
+ } if is_env_var?
64
+
53
65
repo_settings . save
66
+ run_callbacks :after_save if is_env_var?
67
+
54
68
respond_with ( record , type : singular_name , version : :v2 )
55
69
else
56
70
status 422
@@ -64,7 +78,15 @@ def create
64
78
record = collection . create ( JSON . parse ( request . body . read ) [ singular_name ] )
65
79
66
80
if record . valid?
81
+ @changes = {
82
+ env_vars : {
83
+ created : "name: #{ record . name } , is_public: #{ record . public } , branch: #{ record . branch || 'all' } "
84
+ }
85
+ } if is_env_var?
86
+
67
87
repo_settings . save
88
+ run_callbacks :after_save if is_env_var?
89
+
68
90
respond_with ( record , type : singular_name , version : :v2 )
69
91
else
70
92
status 422
@@ -76,7 +98,15 @@ def destroy
76
98
disallow_migrating! ( repo )
77
99
78
100
record = collection . destroy ( params [ :id ] ) || record_not_found
101
+ @changes = {
102
+ env_vars : {
103
+ destroyed : "name: #{ record . name } , is_public: #{ record . public } , branch: #{ record . branch || 'all' } "
104
+ }
105
+ } if is_env_var?
106
+
79
107
repo_settings . save
108
+ run_callbacks :after_save if is_env_var?
109
+
80
110
respond_with ( record , type : singular_name , version : :v2 )
81
111
end
82
112
@@ -89,15 +119,15 @@ def collection
89
119
end
90
120
91
121
def repo
92
- Repository . find ( params [ :repository_id ] )
122
+ @repo = Repository . find ( params [ :repository_id ] )
93
123
end
94
124
95
125
# This method can't be called "settings" because it clashes with
96
126
# Sinatra's method
97
127
def repo_settings
98
128
@settings ||= begin
99
- service ( :find_repo_settings , id : params [ 'repository_id' ] . to_i ) . run
100
- end || halt ( 404 , error : "Couldn't find repository" )
129
+ service ( :find_repo_settings , id : params [ 'repository_id' ] . to_i ) . run
130
+ end || halt ( 404 , error : "Couldn't find repository" )
101
131
end
102
132
103
133
def record
@@ -107,5 +137,28 @@ def record
107
137
def record_not_found
108
138
halt ( 404 , { error : "Could not find a requested setting" } )
109
139
end
140
+
141
+ def changes
142
+ @changes
143
+ end
144
+
145
+ def is_env_var?
146
+ singular_name == 'env_var'
147
+ end
148
+
149
+ private
150
+
151
+ def save_audit
152
+ change_source = access_token . app_id == 2 ? 'admin-v2' : 'travis-api'
153
+ Travis ::API ::V3 ::Models ::Audit . create! (
154
+ owner : current_user ,
155
+ change_source : change_source ,
156
+ source : @repo ,
157
+ source_changes : {
158
+ settings : self . changes
159
+ }
160
+ )
161
+ @changes = { }
162
+ end
110
163
end
111
164
end
0 commit comments