public async Task InvokeAsync(HttpContext context) { if (!context.Request.Method.Equals("POST", StringComparison.OrdinalIgnoreCase)) { await _next(context); return; } var wallet = await _walletService.GetWalletAsync(_walletOptions.WalletConfiguration, _walletOptions.WalletCredentials); var endpoint = await _provisioningService.GetProvisioningAsync(wallet); if (context.Request.ContentLength != null) { var body = new byte[(int)context.Request.ContentLength]; await context.Request.Body.ReadAsync(body, 0, body.Length); var decrypted = await _messageSerializer.UnpackAsync <IEnvelopeMessage>(body, wallet, endpoint.Endpoint.Verkey); var decoded = JsonConvert.DeserializeObject <IContentMessage>(decrypted.Content); switch (decoded) { case ConnectionRequestMessage request: await _connectionService.ProcessRequestAsync(wallet, request); break; case ConnectionResponseMessage response: await _connectionService.ProcessResponseAsync(wallet, response); break; case CredentialOfferMessage offer: await _credentialService.ProcessOfferAsync(wallet, offer); break; case CredentialRequestMessage request: await _credentialService.ProcessCredentialRequestAsync(wallet, request); break; case CredentialMessage credential: var pool = await _poolService.GetPoolAsync(_poolOptions.PoolName, _poolOptions.ProtocolVersion); await _credentialService.ProcessCredentialAsync(pool, wallet, credential); break; case ProofMessage _: break; } context.Response.StatusCode = 200; await context.Response.WriteAsync(string.Empty); return; } throw new Exception("Empty content length"); }