Inheritance: IHttpResult, IStreamWriter
コード例 #1
0
        public void Can_send_ResponseStream_test_with_Custom_Header()
        {
            var mockResponse = new HttpResponseMock();

            var customText = "<h1>Custom Stream</h1>";
            var customTextBytes = customText.ToUtf8Bytes();
            var ms = new MemoryStream();
            ms.Write(customTextBytes, 0, customTextBytes.Length);

            var httpResult = new HttpResult(ms, ContentType.Html)
            {
                Headers =
                {
                    {"X-Custom","Header"}
                }
            };

            var reponseWasAutoHandled = mockResponse.WriteToResponse(httpResult, ContentType.Html);

            Assert.That(reponseWasAutoHandled, Is.True);

            var writtenString = mockResponse.GetOutputStreamAsString();
            Assert.That(writtenString, Is.EqualTo(customText));
            Assert.That(mockResponse.Headers["X-Custom"], Is.EqualTo("Header"));
        }
コード例 #2
0
 public object Any(PlainText request) 
 {
     string contentType = "text/plain";
     var response = new HttpResult(request.Text, contentType);
     if(request.SetContentTypeBrutally) {
         response.ContentType = contentType;
     }
     return response;
 }
コード例 #3
0
        public object Get(PartialFromMemory request)
        {
            var customText = "123456789012345678901234567890";
            var customTextBytes = customText.ToUtf8Bytes();
            var ms = new MemoryStream();
            ms.Write(customTextBytes, 0, customTextBytes.Length);

            var httpResult = new HttpResult(ms, "audio/mpeg");
            return httpResult;
        }
コード例 #4
0
        public void Can_handle_null_HttpResult_StatusDescription()
        {
            var mockResponse = new HttpResponseMock();

            var httpResult = new HttpResult();
            httpResult.StatusDescription = null;

            mockResponse.WriteToResponse(httpResult, ContentType.Html);

            Assert.IsNotNull(mockResponse.StatusDescription);
        }
コード例 #5
0
		public object Get(FileUpload request)
		{
			if (request.RelativePath.IsNullOrEmpty())
				throw new ArgumentNullException("RelativePath");

			var filePath = ("~/" + request.RelativePath).MapProjectPath();
			if (!File.Exists(filePath))
				throw new FileNotFoundException(request.RelativePath);

			var result = new HttpResult(new FileInfo(filePath));
			return result;
		}
コード例 #6
0
		public object Get(FileUpload request)
		{
			if (request.RelativePath.IsNullOrEmpty())
				throw new ArgumentNullException("RelativePath");

			var filePath = ("~/" + request.RelativePath).MapHostAbsolutePath();
			if (!File.Exists(filePath))
				throw new FilterInvalidBodyAccessException(request.RelativePath);

			var result = new HttpResult(new FileInfo(filePath));
			return result;
		}
コード例 #7
0
        public void Can_send_ResponseText_test_with_StatusDescription()
        {
            var mockResponse = new HttpResponseMock();

            var customStatus = "Custom Status Description";

            var httpResult = new HttpResult(System.Net.HttpStatusCode.Accepted, customStatus);

            var reponseWasAutoHandled = mockResponse.WriteToResponse(httpResult, ContentType.Html);

            Assert.That(reponseWasAutoHandled, Is.True);

            var statusDesc = mockResponse.StatusDescription;
            Assert.That(mockResponse.StatusCode, Is.EqualTo(System.Net.HttpStatusCode.Accepted));
            Assert.That(statusDesc, Is.EqualTo(customStatus));
        }
コード例 #8
0
		public object Get(DeployFileDto request)
		{
			if (!string.IsNullOrEmpty(request.Id))
			{
				var file = this._fileManager.GetFile(request.Id);
                if(request.RawData)
                {
                    var result = new HttpResult(_fileManager.GetFileDataStream(request.Id), "application/octet-stream");
                    result.Headers.Add("Content-Disposition", "attachment; filename=" + file.FileName);
                    return result;
                }
                else 
                {
				    return file;
                }
			}
			else
			{
				return this._fileManager.GetFileList();
			}
		}
コード例 #9
0
        public void Can_send_ResponseText_test_with_Custom_Header()
        {
            var mockResponse = new HttpResponseMock();

            var customText = "<h1>Custom Text</h1>";

            var httpResult = new HttpResult(customText, ContentType.Html) {
                Headers =
                {
                    {"X-Custom","Header"}
                }
            };

            var reponseWasAutoHandled = mockResponse.WriteToResponse(httpResult, ContentType.Html);

            Assert.That(reponseWasAutoHandled, Is.True);

            var writtenString = mockResponse.GetOutputStreamAsString();
            Assert.That(writtenString, Is.EqualTo(customText));
            Assert.That(mockResponse.Headers["X-Custom"], Is.EqualTo("Header"));
        }
コード例 #10
0
        public HttpResult Post(CreateMessage request)
        {
            // POST does not support update
            //if (request.Id > 0)
            //    return new HttpResult(HttpStatusCode.NotFound, "POST does not support updating idividual messages.");

            //var id = request.Id;
            var ds = new DataStore();
            var id = ds.InsertMessage(request);

            var client = new EmailClient();
            var emailResult = client.Send(request);

            var response = new MessageResponse
            {
                Id = id,
                Success = true
            };

            if (emailResult.Success)
            {
                ds.InsertMessageStatus(id, 2);
            }
            else
            {
                ds.InsertMessageStatus(id, 3, emailResult.Message, emailResult.SmtpException);
                response.Result = emailResult.Message;
                response.Success = false;
            }

            var result = new HttpResult(response)
            {
                StatusCode = HttpStatusCode.Created,
                StatusDescription = RequestContext.AbsoluteUri.CombineWith(id)
            };

            return result;
        }
コード例 #11
0
        public override object Authenticate(IServiceBase authService, IAuthSession session, Auth request)
        {
            var tokens = Init(authService, ref session, request);

            var httpReq = authService.RequestContext.Get<IHttpRequest>();
            var httpMethod = httpReq.HttpMethod;
            if (httpMethod == HttpMethods.Post)
            {
                var openIdUrl = httpReq.GetParam("OpenIdUrl") ?? base.AuthRealm;
                if (openIdUrl.IsNullOrEmpty())
                    throw new ArgumentException("'OpenIdUrl' is required a required field");

                try
                {
                    using (var openid = new OpenIdRelyingParty())
                    {
                        var openIdRequest = openid.CreateRequest(openIdUrl);

                        AddAttributeExchangeExtensions(openIdRequest);

                        // This is where you would add any OpenID extensions you wanted
                        // to include in the authentication request.
                        openIdRequest.AddExtension(CreateClaimsRequest(httpReq));

                        // Send your visitor to their Provider for authentication.
                        var openIdResponse = openIdRequest.RedirectingResponse;
                        var contentType = openIdResponse.Headers[HttpHeaders.ContentType];
                        var httpResult = new HttpResult(openIdResponse.ResponseStream, contentType) {
                            StatusCode = openIdResponse.Status,
                            StatusDescription = "Moved Temporarily",
                        };
                        foreach (string header in openIdResponse.Headers)
                        {
                            httpResult.Headers[header] = openIdResponse.Headers[header];
                        }
                        // Save the current session to keep the ReferrerUrl available (similar to Facebook provider)
                        authService.SaveSession(session, SessionExpiry);
                        return httpResult;
                    }
                }
                catch (ProtocolException ex)
                {
                    Log.Error("Failed to login to {0}".Fmt(openIdUrl), ex);
                    return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "Unknown"));
                }
            }

            if (httpMethod == HttpMethods.Get)
            {
                using (var openid = new OpenIdRelyingParty())
                {
                    var response = openid.GetResponse();
                    if (response != null)
                    {
                        switch (response.Status)
                        {
                            case AuthenticationStatus.Authenticated:

                                var authInfo = CreateAuthInfo(response);

                                // Use FormsAuthentication to tell ASP.NET that the user is now logged in,
                                // with the OpenID Claimed Identifier as their username.
                                session.IsAuthenticated = true;
                                authService.SaveSession(session, SessionExpiry);
                                OnAuthenticated(authService, session, tokens, authInfo);

                                //Haz access!
                                return authService.Redirect(session.ReferrerUrl.AddHashParam("s", "1"));

                            case AuthenticationStatus.Canceled:
                                return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "ProviderCancelled"));

                            case AuthenticationStatus.Failed:
                                return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "Unknown"));
                        }
                    }
                }
            }

            //Shouldn't get here
            return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "Unknown"));
        }
コード例 #12
0
        public override object Authenticate(IServiceBase authService, IAuthSession session, Auth request)
        {
            var tokens = this.Init(authService, ref session, request);

            var authServer = new AuthorizationServerDescription { AuthorizationEndpoint = new Uri(this.AuthorizeUrl), TokenEndpoint = new Uri(this.AccessTokenUrl) };
            var authClient = new WebServerClient(authServer, this.ConsumerKey, ClientCredentialApplicator.PostParameter(this.ConsumerSecret));
            IAuthorizationState authState;

            try
            {
                authState = authClient.ProcessUserAuthorization();
                //authState = authClient.ProcessUserAuthorization(new HttpRequestWrapper(HttpContext.Current.Request));
            }
            catch (ProtocolException ex)
            {
                Log.Error("Failed to login to {0}".Fmt(this.Provider), ex);
                return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "ProcessUserAuthorization"));
            }

            if (authState == null)
            {
                try
                {
                    var authReq = authClient.PrepareRequestUserAuthorization(this.Scopes, new Uri(this.CallbackUrl));
                    var authContentType = authReq.Headers[HttpHeaders.ContentType];
                    var httpResult = new HttpResult(authReq.ResponseStream, authContentType) { StatusCode = authReq.Status, StatusDescription = "Moved Temporarily" };
                    foreach (string header in authReq.Headers)
                    {
                        httpResult.Headers[header] = authReq.Headers[header];
                    }

                    foreach (string name in authReq.Cookies)
                    {
                        var cookie = authReq.Cookies[name];

                        if (cookie != null)
                        {
                            httpResult.SetSessionCookie(name, cookie.Value, cookie.Path);
                        }
                    }

                    authService.SaveSession(session, this.SessionExpiry);
                    return httpResult;
                }
                catch (ProtocolException ex)
                {
                    Log.Error("Failed to login to {0}".Fmt(this.Provider), ex);
                    return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "Unknown"));
                }
            }

            var accessToken = authState.AccessToken;
            if (accessToken != null)
            {
                try
                {
                    tokens.AccessToken = accessToken;
                    tokens.RefreshToken = authState.RefreshToken;
                    tokens.RefreshTokenExpiry = authState.AccessTokenExpirationUtc;
                    session.IsAuthenticated = true;
                    var authInfo = this.CreateAuthInfo(accessToken);
                    this.OnAuthenticated(authService, session, tokens, authInfo);
                    return authService.Redirect(session.ReferrerUrl.AddHashParam("s", "1"));
                }
                catch (WebException we)
                {
                    var statusCode = ((HttpWebResponse)we.Response).StatusCode;
                    if (statusCode == HttpStatusCode.BadRequest)
                    {
                        return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "AccessTokenFailed"));
                    }
                }
            }

            return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "RequestTokenFailed"));
        }
コード例 #13
0
 public object Get(PartialFromText request)
 {
     const string customText = "123456789012345678901234567890";
     var httpResult = new HttpResult(customText, "text/plain");
     return httpResult;
 }
コード例 #14
0
        public void Can_use_fileStream()
        {
            byte[] fileBytes = uploadedTextFile.ReadFully();
            string fileText = Encoding.ASCII.GetString(fileBytes);

            "File content size {0}".Print(fileBytes.Length);
            "File content is {0}".Print(fileText);

            var mockRequest = new HttpRequestMock();
            var mockResponse = new HttpResponseMock();
            mockRequest.Headers.Add("Range", "bytes=6-8");

            var httpResult = new HttpResult(uploadedTextFile, "audio/mpeg");

            bool reponseWasAutoHandled = mockResponse.WriteToResponse(mockRequest, httpResult);
            Assert.That(reponseWasAutoHandled, Is.True);

            string writtenString = mockResponse.GetOutputStreamAsString();
            Assert.That(writtenString, Is.EqualTo(fileText.Substring(6, 3)));

            Assert.That(mockResponse.Headers["Content-Range"], Is.EqualTo("bytes 6-8/33"));
            Assert.That(mockResponse.Headers["Content-Length"], Is.EqualTo(writtenString.Length.ToString()));
            Assert.That(mockResponse.Headers["Accept-Ranges"], Is.EqualTo("bytes"));
            Assert.That(mockResponse.StatusCode, Is.EqualTo(206));
        }
コード例 #15
0
        public void Can_seek_from_middle_to_middle()
        {
            var mockRequest = new HttpRequestMock();
            mockRequest.Headers.Add("Range", "bytes=3-5");
            var mockResponse = new HttpResponseMock();

            string customText = "1234567890";
            byte[] customTextBytes = customText.ToUtf8Bytes();
            var ms = new MemoryStream();
            ms.Write(customTextBytes, 0, customTextBytes.Length);


            var httpResult = new HttpResult(ms, "audio/mpeg");

            bool reponseWasAutoHandled = mockResponse.WriteToResponse(mockRequest, httpResult);
            Assert.That(reponseWasAutoHandled, Is.True);

            string writtenString = mockResponse.GetOutputStreamAsString();
            Assert.That(writtenString, Is.EqualTo("456"));

            Assert.That(mockResponse.Headers["Content-Range"], Is.EqualTo("bytes 3-5/10"));
            Assert.That(mockResponse.Headers["Content-Length"], Is.EqualTo(writtenString.Length.ToString()));
            Assert.That(mockResponse.Headers["Accept-Ranges"], Is.EqualTo("bytes"));
            Assert.That(mockResponse.StatusCode, Is.EqualTo(206));
        }
コード例 #16
0
        public void Can_respond_to_non_range_requests_with_200_OK_response()
        {
            var mockRequest = new HttpRequestMock();
            var mockResponse = new HttpResponseMock();

            string customText = "1234567890";
            byte[] customTextBytes = customText.ToUtf8Bytes();
            var ms = new MemoryStream();
            ms.Write(customTextBytes, 0, customTextBytes.Length);

            var httpResult = new HttpResult(ms, "audio/mpeg");            

            bool reponseWasAutoHandled = mockResponse.WriteToResponse(mockRequest, httpResult);
            Assert.That(reponseWasAutoHandled, Is.True);

            string writtenString = mockResponse.GetOutputStreamAsString();
            Assert.That(writtenString, Is.EqualTo(customText));

            Assert.That(mockResponse.Headers["Content-Range"], Is.Null);
            Assert.That(mockResponse.Headers["Accept-Ranges"], Is.EqualTo("bytes"));
            Assert.That(mockResponse.StatusCode, Is.EqualTo(200));
        }
コード例 #17
0
        public object Get(DownloadLicense downloadRequest)
        {
            var cacheKey = UrnId.Create<Model.License>("IssueToken", downloadRequest.Token.ToString());
            var license = cacheClient.Get<Portable.Licensing.License>(cacheKey);

            if (license == null)
                return new HttpResult(HttpStatusCode.NotFound);

            var responseStream = new MemoryStream();
            license.Save(responseStream);

            var response = new HttpResult(responseStream, "application/xml");
            response.Headers[HttpHeaders.ContentDisposition] = "attachment; filename=License.lic";

            return response;
        }
コード例 #18
0
 public object Get(PlainTextRequest request)
 {
     var response = new HttpResult("Hello, World!", "text/plain");
     return response;
 }
コード例 #19
0
        public override object Authenticate(IServiceBase authService, IAuthSession session, Auth request)
        {
            var tokens = Init(authService, ref session, request);

            var httpMethod = authService.RequestContext.Get<IHttpRequest>().HttpMethod;
            if (httpMethod == HttpMethod.Post)
            {
                var openIdUrl = base.AuthRealm;
                try
                {
                    using (var openid = new OpenIdRelyingParty())
                    {
                        var openIdRequest = openid.CreateRequest(openIdUrl);

                        AddAttributeExchangeExtensions(openIdRequest);

                        // This is where you would add any OpenID extensions you wanted
                        // to include in the authentication request.
                        openIdRequest.AddExtension(ClaimsRequest);

                        // Send your visitor to their Provider for authentication.
                        var openIdResponse = openIdRequest.RedirectingResponse;
                        var contentType = openIdResponse.Headers[HttpHeaders.ContentType];
                        var httpResult = new HttpResult(openIdResponse.ResponseStream, contentType) {
                            StatusCode = openIdResponse.Status,
                            StatusDescription = "Moved Temporarily",
                        };
                        foreach (string header in openIdResponse.Headers)
                        {
                            httpResult.Headers[header] = openIdResponse.Headers[header];
                        }
                        return httpResult;
                    }
                }
                catch (ProtocolException ex)
                {
                    Log.Error("Falied to login to {0}".Fmt(openIdUrl), ex);
                    return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "Unknown"));
                }
            }
            else if (httpMethod == HttpMethod.Get)
            {
                var openid = new OpenIdRelyingParty();
                var response = openid.GetResponse();
                if (response != null)
                {
                    switch (response.Status)
                    {
                        case AuthenticationStatus.Authenticated:
                            // This is where you would look for any OpenID extension responses included
                            // in the authentication assertion.
                            var claimsResponse = response.GetExtension<ClaimsResponse>();
                            var authInfo = claimsResponse.ToDictionary();

                            authInfo["user_id"] = response.ClaimedIdentifier; //a url

                            // Store off the "friendly" username to display -- NOT for username lookup
                            authInfo["openid_ref"] = response.FriendlyIdentifierForDisplay;

                            var provided = GetAttributeEx(response);
                            foreach (var entry in provided)
                            {
                                authInfo[entry.Key] = entry.Value;
                            }

                            // Use FormsAuthentication to tell ASP.NET that the user is now logged in,
                            // with the OpenID Claimed Identifier as their username.

                            session.IsAuthenticated = true;
                            authService.SaveSession(session, SessionExpiry);
                            OnAuthenticated(authService, session, tokens, authInfo);

                            //Haz access!
                            return authService.Redirect(session.ReferrerUrl.AddHashParam("s", "1"));

                        case AuthenticationStatus.Canceled:
                            return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "ProviderCancelled"));

                        case AuthenticationStatus.Failed:
                            return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "Unknown"));
                    }
                }
            }

            //Shouldn't get here
            return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "Unknown"));
        }