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