2
2
3
3
class Travis ::Api ::App
4
4
class SettingsEndpoint < Endpoint
5
+ include ActiveSupport ::Callbacks
6
+
7
+ define_callbacks :after_save
8
+
9
+ set_callback :after_save , :after , :save_audit
5
10
set ( :prefix ) { "/settings/" << name [ /[^:]+$/ ] . underscore }
6
11
7
12
class << self
@@ -38,6 +43,7 @@ def define_routes!
38
43
# Rails style methods for easy overriding
39
44
def index
40
45
respond_with ( collection , type : name , version : :v2 )
46
+
41
47
end
42
48
43
49
def show
@@ -48,9 +54,12 @@ def update
48
54
disallow_migrating! ( repo )
49
55
50
56
record . update ( JSON . parse ( request . body . read ) [ singular_name ] )
51
-
52
57
if record . valid?
58
+ @changes = { :"env_vars" => { created : "name: #{ record . name } , is_public: #{ record . public } , branch: #{ record . branch || 'all' } " } } if is_env_var?
59
+
53
60
repo_settings . save
61
+ run_callbacks :after_save if is_env_var?
62
+
54
63
respond_with ( record , type : singular_name , version : :v2 )
55
64
else
56
65
status 422
@@ -62,9 +71,12 @@ def create
62
71
disallow_migrating! ( repo )
63
72
64
73
record = collection . create ( JSON . parse ( request . body . read ) [ singular_name ] )
65
-
66
74
if record . valid?
75
+ @changes = { :"env_vars" => { created : "name: #{ record . name } , is_public: #{ record . public } , branch: #{ record . branch || 'all' } " } } if is_env_var?
76
+
67
77
repo_settings . save
78
+ run_callbacks :after_save if is_env_var?
79
+
68
80
respond_with ( record , type : singular_name , version : :v2 )
69
81
else
70
82
status 422
@@ -76,7 +88,11 @@ def destroy
76
88
disallow_migrating! ( repo )
77
89
78
90
record = collection . destroy ( params [ :id ] ) || record_not_found
91
+ @changes = { :"env_vars" => { destroyed : "name: #{ record . name } , is_public: #{ record . public } , branch: #{ record . branch || 'all' } " } } if is_env_var?
92
+
79
93
repo_settings . save
94
+ run_callbacks :after_save if is_env_var?
95
+
80
96
respond_with ( record , type : singular_name , version : :v2 )
81
97
end
82
98
@@ -89,7 +105,7 @@ def collection
89
105
end
90
106
91
107
def repo
92
- Repository . find ( params [ :repository_id ] )
108
+ @repo = Repository . find ( params [ :repository_id ] )
93
109
end
94
110
95
111
# This method can't be called "settings" because it clashes with
@@ -107,5 +123,21 @@ def record
107
123
def record_not_found
108
124
halt ( 404 , { error : "Could not find a requested setting" } )
109
125
end
126
+
127
+ def changes
128
+ @changes
129
+ end
130
+
131
+ def is_env_var?
132
+ singular_name == 'env_var'
133
+ end
134
+
135
+ private
136
+
137
+ def save_audit
138
+ change_source = access_token . app_id == 2 ? 'admin-v2' : 'travis-api'
139
+ Travis ::API ::V3 ::Models ::Audit . create! ( owner : current_user , change_source : change_source , source : @repo , source_changes : { settings : self . changes } )
140
+ @changes = { }
141
+ end
110
142
end
111
143
end
0 commit comments