22
33class Travis ::Api ::App
44 class SettingsEndpoint < Endpoint
5+ include ActiveSupport ::Callbacks
6+
7+ define_callbacks :after_save
8+ set_callback :after_save , :after , :save_audit
9+
510 set ( :prefix ) { "/settings/" << name [ /[^:]+$/ ] . underscore }
611
712 class << self
@@ -19,7 +24,7 @@ def subclass(name)
1924 end
2025
2126 def create_settings_class ( name )
22- klass = Class . new ( self ) do
27+ Class . new ( self ) do
2328 define_method ( :name ) { name }
2429 before { authenticate_by_mode! }
2530 define_routes!
@@ -50,7 +55,15 @@ def update
5055 record . update ( JSON . parse ( request . body . read ) [ singular_name ] )
5156
5257 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+
5364 repo_settings . save
65+ run_callbacks :after_save if is_env_var?
66+
5467 respond_with ( record , type : singular_name , version : :v2 )
5568 else
5669 status 422
@@ -64,7 +77,15 @@ def create
6477 record = collection . create ( JSON . parse ( request . body . read ) [ singular_name ] )
6578
6679 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+
6786 repo_settings . save
87+ run_callbacks :after_save if is_env_var?
88+
6889 respond_with ( record , type : singular_name , version : :v2 )
6990 else
7091 status 422
@@ -76,7 +97,15 @@ def destroy
7697 disallow_migrating! ( repo )
7798
7899 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+
79106 repo_settings . save
107+ run_callbacks :after_save if is_env_var?
108+
80109 respond_with ( record , type : singular_name , version : :v2 )
81110 end
82111
@@ -89,15 +118,15 @@ def collection
89118 end
90119
91120 def repo
92- Repository . find ( params [ :repository_id ] )
121+ @repo = Repository . find ( params [ :repository_id ] )
93122 end
94123
95124 # This method can't be called "settings" because it clashes with
96125 # Sinatra's method
97126 def repo_settings
98127 @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" )
101130 end
102131
103132 def record
@@ -107,5 +136,28 @@ def record
107136 def record_not_found
108137 halt ( 404 , { error : "Could not find a requested setting" } )
109138 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
110162 end
111163end
0 commit comments