(t *testing.T)
| 155 | } |
| 156 | |
| 157 | func TestShouldCheckAdminRBAC(t *testing.T) { |
| 158 | for _, requireInterfaceAuth := range []bool{false, true} { |
| 159 | t.Run(fmt.Sprintf("requireInterfaceAuth=%t", requireInterfaceAuth), func(t *testing.T) { |
| 160 | config := BootstrapStartupConfigForTest(t) |
| 161 | config.API.AdminInterfaceAuthentication = base.Ptr(requireInterfaceAuth) |
| 162 | config.API.MetricsInterfaceAuthentication = base.Ptr(requireInterfaceAuth) |
| 163 | sc, closeFn := StartServerWithConfig(t, &config) |
| 164 | defer closeFn() |
| 165 | |
| 166 | for _, sgcollectable := range []bool{true, false} { |
| 167 | t.Run(fmt.Sprintf("sgcollectable=%t", sgcollectable), func(t *testing.T) { |
| 168 | // make sure assertion counts are correct |
| 169 | require.Equal(t, int64(0), base.SyncGatewayStats.GlobalStats.ResourceUtilizationStats().AssertionFailCount.Value()) |
| 170 | defer func() { |
| 171 | base.SyncGatewayStats.GlobalStats.ResourceUtilizationStats().AssertionFailCount.Set(0) |
| 172 | }() |
| 173 | adminHandler := newHandler(sc, adminPrivs, adminServer, httptest.NewRecorder(), &http.Request{}, handlerOptions{sgcollect: sgcollectable}) |
| 174 | metricsHandler := newHandler(sc, metricsPrivs, metricsServer, httptest.NewRecorder(), &http.Request{}, handlerOptions{sgcollect: sgcollectable}) |
| 175 | if requireInterfaceAuth { |
| 176 | require.True(t, adminHandler.shouldCheckAdminRBAC()) |
| 177 | require.True(t, metricsHandler.shouldCheckAdminRBAC()) |
| 178 | } else { |
| 179 | require.False(t, adminHandler.shouldCheckAdminRBAC()) |
| 180 | |
| 181 | require.False(t, metricsHandler.shouldCheckAdminRBAC()) |
| 182 | } |
| 183 | invalidAuthHeader := http.Header{} |
| 184 | invalidAuthHeader.Add("Authorization", "SGCollect invalid") |
| 185 | // with invalid sgcollect token |
| 186 | adminHandler = newHandler(sc, adminPrivs, adminServer, httptest.NewRecorder(), &http.Request{Header: invalidAuthHeader}, handlerOptions{sgcollect: sgcollectable}) |
| 187 | metricsHandler = newHandler(sc, metricsPrivs, metricsServer, httptest.NewRecorder(), &http.Request{Header: invalidAuthHeader}, handlerOptions{sgcollect: sgcollectable}) |
| 188 | if requireInterfaceAuth { |
| 189 | if base.IsDevMode() && !sgcollectable { |
| 190 | require.PanicsWithValue(t, base.AssertionFailedPrefix+sgcollectTokenInvalidRequest, func() { adminHandler.shouldCheckAdminRBAC() }) |
| 191 | } else { |
| 192 | require.True(t, adminHandler.shouldCheckAdminRBAC(), "expected invalid token to still require auth") |
| 193 | } |
| 194 | require.True(t, metricsHandler.shouldCheckAdminRBAC(), "expected invalid token to still require auth") |
| 195 | } else { |
| 196 | require.False(t, adminHandler.shouldCheckAdminRBAC()) |
| 197 | require.False(t, metricsHandler.shouldCheckAdminRBAC()) |
| 198 | |
| 199 | } |
| 200 | // with valid sgcollect token, but sgcollect on the handler is disabled |
| 201 | require.NoError(t, sc.SGCollect.createNewToken()) |
| 202 | |
| 203 | validAuthHeader := http.Header{} |
| 204 | validAuthHeader.Add("Authorization", fmt.Sprintf("SGCollect %s", sc.SGCollect.Token)) |
| 205 | adminHandler = newHandler(sc, adminPrivs, adminServer, httptest.NewRecorder(), &http.Request{Header: validAuthHeader}, handlerOptions{sgcollect: false}) |
| 206 | metricsHandler = newHandler(sc, metricsPrivs, metricsServer, httptest.NewRecorder(), &http.Request{Header: validAuthHeader}, handlerOptions{sgcollect: false}) |
| 207 | if requireInterfaceAuth { |
| 208 | if base.IsDevMode() { |
| 209 | require.PanicsWithValue(t, base.AssertionFailedPrefix+sgcollectTokenInvalidRequest, func() { adminHandler.shouldCheckAdminRBAC() }) |
| 210 | } else { |
| 211 | require.True(t, adminHandler.shouldCheckAdminRBAC(), "expected invalid token to still require auth") |
| 212 | } |
| 213 | require.True(t, metricsHandler.shouldCheckAdminRBAC(), "expected invalid token to still require auth") |
| 214 | } else { |
nothing calls this directly
no test coverage detected