@@ -93,4 +93,82 @@ class Api::V2::RegistrationCommandsControllerTest < ActionController::TestCase
9393 assert_includes response , "--header 'Authorization: Bearer"
9494 end
9595 end
96+
97+ describe 'Smart Proxy authentication' do
98+ test 'smart proxy with Registration and Templates features can generate registration command' do
99+ Setting [ :restrict_registered_smart_proxies ] = true
100+
101+ features = [ FactoryBot . create ( :feature , name : 'Registration' ) , FactoryBot . create ( :feature , name : 'Templates' ) ]
102+ proxy = FactoryBot . create ( :smart_proxy , features : features , url : 'https://proxy.example.com' )
103+
104+ @request . env [ 'HTTPS' ] = 'on'
105+ @request . env [ 'SSL_CLIENT_S_DN' ] = 'CN=proxy.example.com'
106+ @request . env [ 'SSL_CLIENT_VERIFY' ] = 'SUCCESS'
107+
108+ post :create
109+ assert_response :success
110+ assert_equal proxy , @controller . detected_proxy
111+ end
112+
113+ test 'smart proxy without Registration feature cannot generate registration command' do
114+ Setting [ :restrict_registered_smart_proxies ] = true
115+ reset_api_credentials
116+ User . current = nil
117+
118+ features = [ FactoryBot . create ( :feature , name : 'Templates' ) ]
119+ FactoryBot . create ( :smart_proxy , features : features , url : 'https://proxy.example.com' )
120+
121+ @request . env [ 'HTTPS' ] = 'on'
122+ @request . env [ 'SSL_CLIENT_S_DN' ] = 'CN=proxy.example.com'
123+ @request . env [ 'SSL_CLIENT_VERIFY' ] = 'SUCCESS'
124+
125+ post :create
126+ assert_response :forbidden
127+ end
128+
129+ test 'smart proxy without Templates feature cannot generate registration command' do
130+ Setting [ :restrict_registered_smart_proxies ] = true
131+ reset_api_credentials
132+ User . current = nil
133+
134+ features = [ FactoryBot . create ( :feature , name : 'Registration' ) ]
135+ FactoryBot . create ( :smart_proxy , features : features , url : 'https://proxy.example.com' )
136+
137+ @request . env [ 'HTTPS' ] = 'on'
138+ @request . env [ 'SSL_CLIENT_S_DN' ] = 'CN=proxy.example.com'
139+ @request . env [ 'SSL_CLIENT_VERIFY' ] = 'SUCCESS'
140+
141+ post :create
142+ assert_response :forbidden
143+ end
144+
145+ test 'unregistered smart proxy cannot generate registration command' do
146+ Setting [ :restrict_registered_smart_proxies ] = true
147+ reset_api_credentials
148+ User . current = nil
149+
150+ @request . env [ 'HTTPS' ] = 'on'
151+ @request . env [ 'SSL_CLIENT_S_DN' ] = 'CN=unknown.example.com'
152+ @request . env [ 'SSL_CLIENT_VERIFY' ] = 'SUCCESS'
153+
154+ post :create
155+ assert_response :forbidden
156+ end
157+
158+ test 'smart proxy with unverified SSL cert cannot generate registration command' do
159+ Setting [ :restrict_registered_smart_proxies ] = true
160+ reset_api_credentials
161+ User . current = nil
162+
163+ features = [ FactoryBot . create ( :feature , name : 'Registration' ) , FactoryBot . create ( :feature , name : 'Templates' ) ]
164+ FactoryBot . create ( :smart_proxy , features : features , url : 'https://proxy.example.com' )
165+
166+ @request . env [ 'HTTPS' ] = 'on'
167+ @request . env [ 'SSL_CLIENT_S_DN' ] = 'CN=proxy.example.com'
168+ @request . env [ 'SSL_CLIENT_VERIFY' ] = 'FAILED'
169+
170+ post :create
171+ assert_response :forbidden
172+ end
173+ end
96174end
0 commit comments