示例#1
0
            private RevokeApiKeysRequest GetRevokeApiKeyRequest()
            {
                var revokeApiKeysRequest  = new RevokeApiKeysRequest();
                var apiKeyRevokeViewModel = new ApiKeyRevokeViewModel(null, "apiKey1", "https://leakedUrl1",
                                                                      Enum.GetName(typeof(CredentialRevocationSource), CredentialRevocationSource.GitHub), true);

                revokeApiKeysRequest.SelectedApiKeys = new List <string> {
                    JsonConvert.SerializeObject(apiKeyRevokeViewModel)
                };

                return(revokeApiKeysRequest);
            }
示例#2
0
            public async Task GivenRequestWithEmptySelectedApiKeys_ItReturnsErrorMessage()
            {
                // Arrange
                var apiKeysController = GetController <ApiKeysController>();

                // Act
                var revokeApiKeysRequest = new RevokeApiKeysRequest();

                revokeApiKeysRequest.SelectedApiKeys = new List <string>();
                await apiKeysController.Revoke(revokeApiKeysRequest);

                // Assert
                Assert.Equal("The API keys revoking request contains null or empty selected API keys.", apiKeysController.TempData["ErrorMessage"]);
            }
        public async Task <ActionResult> Revoke(RevokeApiKeysRequest revokeApiKeysRequest)
        {
            if (revokeApiKeysRequest == null)
            {
                TempData["ErrorMessage"] = "The API keys revoking request can not be null.";
                return(View(nameof(Index)));
            }
            if (revokeApiKeysRequest.SelectedApiKeys == null || revokeApiKeysRequest.SelectedApiKeys.Count == 0)
            {
                TempData["ErrorMessage"] = "The API keys revoking request contains null or empty selected API keys.";
                return(View(nameof(Index)));
            }

            try
            {
                foreach (var selectedApiKey in revokeApiKeysRequest.SelectedApiKeys)
                {
                    var apiKeyInfo = JsonConvert.DeserializeObject <ApiKeyRevokeViewModel>(selectedApiKey);

                    var apiKeyCredential    = _authenticationService.GetApiKeyCredential(apiKeyInfo.ApiKey);
                    var revocationSourceKey = (CredentialRevocationSource)Enum.Parse(typeof(CredentialRevocationSource), apiKeyInfo.RevocationSource);

                    var credentialRevokedMessage = new CredentialRevokedMessage(
                        _messageServiceConfiguration,
                        credential: apiKeyCredential,
                        leakedUrl: apiKeyInfo.LeakedUrl,
                        revocationSource: apiKeyInfo.RevocationSource,
                        manageApiKeyUrl: Url.ManageMyApiKeys(relativeUrl: false),
                        contactUrl: Url.Contact(relativeUrl: false));
                    await _messageService.SendMessageAsync(credentialRevokedMessage);

                    await _authenticationService.RevokeApiKeyCredential(apiKeyCredential, revocationSourceKey, commitChanges : false);
                }

                await _entitiesContext.SaveChangesAsync();
            }
            catch (Exception e)
            {
                _telemetryService.TraceException(e);
                TempData["ErrorMessage"] = "Failed to revoke the API keys, and please check the telemetry for details.";
                return(RedirectToAction("Index"));
            }

            TempData["Message"] = "Successfully revoke the selected API keys.";
            return(RedirectToAction("Index"));
        }