/// <summary> /// Closes this request. /// </summary> public void Close() { if (IsOpen) { WriteResponse(new byte[0]); var record = Record.CreateEndRequest(RequestId); record.Send(ResponseStream); ResponseStream.Flush(); if (!KeepAlive) { // If the response stream is a regular FCGIStream and KeepAlive is false, disconnect it var fcgiStream = ResponseStream as FCGIStream; if (fcgiStream != null) { fcgiStream.Disconnect(); } if (ManagingApp != null) { ManagingApp.ConnectionClosed(ResponseStream as FCGIStream); } } if (ManagingApp != null) { ManagingApp.RequestClosed(this); } } IsOpen = false; }
/// <summary>Flush</summary> public override void Flush() { byte[] bb = TempBuffer.GetBuffer(); if (bb != null && bb.Length > 0) { // 書き換え処理 Encoding enc = Response.ContentEncoding; string content = enc.GetString(bb); // JSON形式なので、JsonConvertでaccess_tokenを抜き出す。 Dictionary <string, object> accessTokenResponse = JsonConvert.DeserializeObject <Dictionary <string, object> >(content); // access_tokenを if (accessTokenResponse.ContainsKey("access_token")) { string access_token = (string)accessTokenResponse["access_token"]; string id_token = OidcTokenEditor.ChangeToIdTokenFromAccessToken(access_token, "", HashClaimType.None); if (!string.IsNullOrEmpty(id_token)) { // responseにid_tokenとして、このJWTを追加する。 accessTokenResponse.Add("id_token", id_token); bb = enc.GetBytes(JsonConvert.SerializeObject(accessTokenResponse)); } } } ResponseStream.Write(bb, 0, bb.Length); ResponseStream.Flush(); }
/// <summary>Flush</summary> public override void Flush() { byte[] bb = TempBuffer.GetBuffer(); if (bb != null && bb.Length > 0) { // 書き換え処理 Encoding enc = Response.ContentEncoding; string content = enc.GetString(bb); // JSON形式なので、JsonConvertでaccess_tokenを抜き出す。 Dictionary <string, object> accessTokenResponse = JsonConvert.DeserializeObject <Dictionary <string, object> >(content); // access_tokenを if (accessTokenResponse.ContainsKey(OAuth2AndOIDCConst.AccessToken)) { string access_token = (string)accessTokenResponse[OAuth2AndOIDCConst.AccessToken]; string id_token = IdToken.ChangeToIdTokenFromAccessToken( access_token, "", "", HashClaimType.None, ASPNETIdentityConfig.OAuth2JWT_pfx, ASPNETIdentityConfig.OAuth2JWTPassword); if (!string.IsNullOrEmpty(id_token)) { // responseにid_tokenとして、このJWTを追加する。 accessTokenResponse.Add(OAuth2AndOIDCConst.IDToken, id_token); bb = enc.GetBytes(JsonConvert.SerializeObject(accessTokenResponse)); } } } ResponseStream.Write(bb, 0, bb.Length); ResponseStream.Flush(); }
public void Given_a_stream_when_I_am_not_text_I_do_not_expect_to_attempt_translation() { var stream = new MemoryStream(); var lang = new Mock <ILanguage>(); var languagePacks = new Mock <ILanguagePackService>(); languagePacks.Setup(s => s.GetLanguagePack(It.IsAny <string>())) .Returns(new Dictionary <string, string>() { { "TestArea.Some other stuff", "translated" } }); var translator = new Translator(lang.Object, languagePacks.Object); var response = new Mock <IResponse>(); response.Setup(r => r.Encoding).Returns(Encoding.UTF8); response.Setup(r => r.IsText).Returns(false); var responseStream = new ResponseStream(stream, response.Object, translator); var testBytes = Encoding.UTF8.GetBytes("Some stuff %%Civica.Lang:TestArea.Some other stuff%% yet some more stuff"); responseStream.Write(testBytes, 0, testBytes.Length); responseStream.Flush(); stream.Position = 0; Assert.AreEqual(stream.Length, 72); var output = new Byte[72]; stream.Read(output, 0, 72); Assert.AreEqual(Encoding.UTF8.GetString(output), "Some stuff %%Civica.Lang:TestArea.Some other stuff%% yet some more stuff"); }
public void Given_a_stream_when_I_write_to_it_using_a_count_I_expect_the_get_same_results_written_in_my_underlying_stream() { var stream = new MemoryStream(); var lang = new Mock <ILanguage>(); var languagePacks = new Mock <ILanguagePackService>(); var translator = new Translator(lang.Object, languagePacks.Object); var response = new Mock <IResponse>(); response.Setup(r => r.Encoding).Returns(Encoding.UTF8); response.Setup(r => r.IsText).Returns(true); var responseStream = new ResponseStream(stream, response.Object, translator); var testBytes = Encoding.UTF8.GetBytes("A test"); responseStream.Write(testBytes, 0, testBytes.Length - 2); responseStream.Flush(); stream.Position = 0; Assert.AreEqual(stream.Length, 4); var output = new Byte[4]; stream.Read(output, 0, 4); Assert.AreEqual(Encoding.UTF8.GetString(output), "A te"); }
public void Given_a_stream_when_my_tag_bit_of_the_key_is_split_over_two_writes_I_expect_it_to_be_replaced() { var stream = new MemoryStream(); var lang = new Mock <ILanguage>(); var languagePacks = new Mock <ILanguagePackService>(); var translator = new Translator(lang.Object, languagePacks.Object); var response = new Mock <IResponse>(); response.Setup(r => r.Encoding).Returns(Encoding.UTF8); response.Setup(r => r.IsText).Returns(true); var responseStream = new ResponseStream(stream, response.Object, translator); var testBytes = Encoding.UTF8.GetBytes("Some stuff %"); responseStream.Write(testBytes, 0, testBytes.Length); testBytes = Encoding.UTF8.GetBytes("%Civica.Lang:TestArea.Some other stuff%% yet some more stuff"); responseStream.Write(testBytes, 0, testBytes.Length); responseStream.Flush(); stream.Position = 0; Assert.AreEqual(stream.Length, 47); var output = new Byte[47]; stream.Read(output, 0, 47); Assert.AreEqual(Encoding.UTF8.GetString(output), "Some stuff Some other stuff yet some more stuff"); }
public void Given_a_stream_when_I_have_an_unclosed_tag_I_do_not_expect_it_to_be_replaced() { var stream = new MemoryStream(); var lang = new Mock <ILanguage>(); var languagePacks = new Mock <ILanguagePackService>(); var translator = new Translator(lang.Object, languagePacks.Object); var response = new Mock <IResponse>(); response.Setup(r => r.Encoding).Returns(Encoding.UTF8); response.Setup(r => r.IsText).Returns(true); var responseStream = new ResponseStream(stream, response.Object, translator); var testBytes = Encoding.UTF8.GetBytes("Some stuff %%Civica.Lang:TestArea.Some other stuff"); responseStream.Write(testBytes, 0, testBytes.Length); responseStream.Flush(); stream.Position = 0; Assert.AreEqual(stream.Length, 50); var output = new Byte[50]; stream.Read(output, 0, 50); Assert.AreEqual(Encoding.UTF8.GetString(output), "Some stuff %%Civica.Lang:TestArea.Some other stuff"); }
public void Given_a_stream_when_I_have_two_language_replacements_I_expect_them_to_be_default_replaced() { var stream = new MemoryStream(); var lang = new Mock <ILanguage>(); var languagePacks = new Mock <ILanguagePackService>(); var translator = new Translator(lang.Object, languagePacks.Object); var response = new Mock <IResponse>(); response.Setup(r => r.Encoding).Returns(Encoding.UTF8); response.Setup(r => r.IsText).Returns(true); var responseStream = new ResponseStream(stream, response.Object, translator); var testBytes = Encoding.UTF8.GetBytes("Some stuff %%Civica.Lang:TestArea.Some other stuff%% yet some more stuff %%Civica.Lang:TestArea.SubArea.A bit more%%"); responseStream.Write(testBytes, 0, testBytes.Length); responseStream.Flush(); stream.Position = 0; Assert.AreEqual(stream.Length, 58); var output = new Byte[58]; stream.Read(output, 0, 58); Assert.AreEqual(Encoding.UTF8.GetString(output), "Some stuff Some other stuff yet some more stuff A bit more"); }
private async Task WriteHeadAsync() { string head = string.Format("HTTP/1.1 {0} {1}\r\n{2}\r\n", StatusCode, HttpStatusCodes.StatusCodes[StatusCode], Header.ToString()); var headBytes = Encoding.UTF8.GetBytes(head); await ResponseStream.WriteAsync(Encoding.UTF8.GetBytes(head), 0, headBytes.Length); ResponseStream.Flush(); isHeaderWritten = true; }
/// <summary>Flush</summary> public override void Flush() { byte[] bb = TempBuffer.GetBuffer(); if (bb != null && bb.Length > 0) { // 書き換え処理 Encoding enc = Response.ContentEncoding; string content = enc.GetString(bb); // JSON形式なので、JsonConvertでaccess_tokenを抜き出す。 Dictionary <string, object> accessTokenResponse = JsonConvert.DeserializeObject <Dictionary <string, object> >(content); // refresh_tokenを削除 if (accessTokenResponse.ContainsKey(OAuth2AndOIDCConst.RefreshToken)) { accessTokenResponse.Remove(OAuth2AndOIDCConst.RefreshToken); bb = enc.GetBytes(JsonConvert.SerializeObject(accessTokenResponse)); } } ResponseStream.Write(bb, 0, bb.Length); ResponseStream.Flush(); }
public override void Flush() { ResponseStream.Flush(); }