public JsonResult TfsLogin(string tfsUrl, string serviceIdUsername, string serviceIdPassword)
        {
            bool success = true;
            string errorMessage = null;

            try
            {
                var principal = new UserDataPrincipal(tfsUrl, serviceIdUsername, serviceIdPassword);
                new TeamProject(principal).EnsureAuthenticated(false);

                var authCookie = principal.CreateAuthCookie();
                Response.AppendCookie(authCookie);
            }
            catch (Exception ex)
            {
                success = false;
                errorMessage = ex.GetType().Name + ": " + ex.Message + Environment.NewLine + ex.ToString();
            }

            return Json(
                new
                {
                    Success = success,
                    ErrorMessage = errorMessage,
                    RedirectUrl = Url.Action("Edit","Test")
                });
        }
 public TeamProject(UserDataPrincipal principal)
 {
     _principal = principal;
 }
        public static UserDataPrincipal InitFromHeaders(HttpRequestHeaders headers)
        {
            var authHeader = headers.Authorization;
            var tfsUrl = headers.GetTfsUrl();
            if (authHeader == null ||
                !authHeader.Scheme.Equals("basic", StringComparison.OrdinalIgnoreCase) ||
                String.IsNullOrWhiteSpace(tfsUrl))
            {
                return null;
            }

            string userName = null;
            string password = null;

            string decodedAuthHeader = Encoding.Default.GetString(Convert.FromBase64String(authHeader.Parameter));
            var usernamePasswordTokens = decodedAuthHeader.Split(new[] { ':' }, 2, StringSplitOptions.RemoveEmptyEntries);
            if (usernamePasswordTokens.Length >= 2)
            {
                userName = usernamePasswordTokens[0];
                password = usernamePasswordTokens[1];
            }

            if (String.IsNullOrWhiteSpace(tfsUrl) || String.IsNullOrWhiteSpace(userName) || String.IsNullOrWhiteSpace(password))
                return null;

            var principal = new UserDataPrincipal(tfsUrl, userName, password);
            return principal;
        }