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 } #{ record . public } #{ 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 } #{ record . public } #{ 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 } #{ record . public } #{ 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,7 +118,7 @@ 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 
@@ -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