public ILeanKitIntegration Create(long boardId, ILeanKitAccountAuth accountAuth, IntegrationSettings settings)
        {
            var clientFactory = new LeanKitClientFactory();
            var apiClient     = clientFactory.Create(accountAuth);

            return(new LeanKitIntegration(boardId, apiClient, settings));
        }
        public AssetFile Download(ILeanKitAccountAuth accountAuth, string resource)
        {
            var request = WebRequest.Create(accountAuth.GetAccountUrl() + resource) as HttpWebRequest;

            if (request == null)
            {
                throw new Exception("Error downloading file. Could not create HttpWebRequest");
            }
            request.UserAgent = _leanKitUserAgent;
            AddAuth(request, accountAuth);

            var response = request.GetResponse() as HttpWebResponse;

            byte[] fileBytes;
            using (var responseStream = response.GetResponseStream())
            {
                var buffer = new byte[4096];
                using (var ms = new MemoryStream())
                {
                    int read;
                    while ((read = responseStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        ms.Write(buffer, 0, read);
                    }
                    fileBytes = ms.ToArray();
                }
            }
            return(new AssetFile
            {
                FileBytes = fileBytes,
                ContentType = response.ContentType,
                ContentLength = response.ContentLength
            });
        }
 public T Post <T>(ILeanKitAccountAuth accountAuth, string resource) where T : new()
 {
     return(Process <T>(accountAuth,
                        new RestRequest(Method.POST)
     {
         Resource = resource, RequestFormat = DataFormat.Json
     }));
 }
            internal BoardSubscription(ILeanKitAccountAuth auth, long boardId, int pollingFrequency)
            {
                _boardId = boardId;
				LkClientApi = new LeanKitClientFactory().Create(auth);
	            var settings = new IntegrationSettings {CheckForUpdatesIntervalSeconds = pollingFrequency};
	            Integration = new LeanKitIntegrationFactory().Create(_boardId, auth, settings);

                new Thread(WatchThread).Start();
            }
        private static void ValidateResponse(IRestResponse <AsyncResponse> response,
                                             ILeanKitAccountAuth leanKitAccountAuth,
                                             IRestRequest request)
        {
            var requestedResource = GetRequestUri(leanKitAccountAuth.GetAccountUrl());

            var logAuthString = FormatApiRequestInfo(leanKitAccountAuth, request, true);

            if (response == null)
            {
                throw new LeanKitAPIException("A failure occurred retrieving the response from the API.");
            }

            if (response.ResponseUri != null && response.ResponseUri.Host != requestedResource.Host)
            {
                throw new InvalidAPIResourceException();
            }

            if (response.ResponseStatus == ResponseStatus.Error)
            {
                throw new LeanKitAPIException(response.ErrorException);
            }

            switch (response.StatusCode)
            {
            case HttpStatusCode.Unauthorized:
                throw new UnauthorizedAccessException(response.StatusDescription + ": " + logAuthString);
            }

            AsyncResponse responseData = response.Data;

            if (responseData == null)
            {
                throw new LeanKitAPIException("Unable to process the response from the API.");
            }

            switch ((ResponseCode)responseData.ReplyCode)
            {
            case ResponseCode.UnauthorizedAccess:
                throw new UnauthorizedAccessException(responseData.ReplyText + ": " + logAuthString);

            case ResponseCode.NoData:
                throw new NoDataException(responseData.ReplyText);

            case ResponseCode.FatalException:
            case ResponseCode.MinorException:
            case ResponseCode.UserException:
                throw new LeanKitAPIException(responseData.ReplyText, (ResponseCode)responseData.ReplyCode);
            }

            //check to make sure there is data
            if (string.IsNullOrEmpty(responseData.ReplyData))
            {
                throw new LeanKitAPIException(responseData.ReplyText + ": " + logAuthString, (ResponseCode)responseData.ReplyCode);
            }
        }
        public ILeanKitApi Create(ILeanKitAccountAuth accountAuth, string dateFormat)
        {
            var settings = new IntegrationSettings()
            {
                DateFormat = dateFormat
            };
            var leanKitClient = new LeanKitClient(new RestSharpCommandProcessor(new ValidationService(null), settings));

            return(leanKitClient.Initialize(accountAuth));
        }
        public T Get <T>(ILeanKitAccountAuth accountAuth, string resource, object body) where T : new()
        {
            var restRequest = new RestRequest(Method.GET)
            {
                Resource = resource, RequestFormat = DataFormat.Json
            };

            restRequest.AddBody(body);
            return(Process <T>(accountAuth, restRequest));
        }
Exemplo n.º 8
0
 protected override void OnStartFixture()
 {
     TestConfig = Test <Configuration> .Item;
     TestAuth   = new LeanKitBasicAuth
     {
         Hostname            = TestConfig.LeanKit.Url,
         UrlTemplateOverride = "http://{0}.leankit.com",
         Username            = TestConfig.LeanKit.User,
         Password            = TestConfig.LeanKit.Password
     };
 }
 private static void AddAuth(WebRequest request, ILeanKitAccountAuth auth)
 {
     if (auth is LeanKitBasicAuth)
     {
         var basicAuth = auth as LeanKitBasicAuth;
         request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(basicAuth.Username + ":" + basicAuth.Password)));
     }
     else if (auth is LeanKitTokenAuth)
     {
         request.Headers.Add("Authorization", "Token " + (auth as LeanKitTokenAuth).Token);
     }
 }
Exemplo n.º 10
0
            internal BoardSubscription(ILeanKitAccountAuth auth, long boardId, int pollingFrequency)
            {
                _boardId    = boardId;
                LkClientApi = new LeanKitClientFactory().Create(auth);
                var settings = new IntegrationSettings {
                    CheckForUpdatesIntervalSeconds = pollingFrequency
                };

                Integration = new LeanKitIntegrationFactory().Create(_boardId, auth, settings);

                new Thread(WatchThread).Start();
            }
        public T Post <T>(ILeanKitAccountAuth accountAuth, string resource, object body) where T : new()
        {
            var restRequest = new RestRequest(Method.POST)
            {
                Resource       = resource,
                RequestFormat  = DataFormat.Json,
                JsonSerializer = new JsonSerializer()
            };

            restRequest.AddBody(body);
            return(Process <T>(accountAuth, restRequest));
        }
 private static IAuthenticator GetAuthenticator(ILeanKitAccountAuth auth)
 {
     if (auth is LeanKitBasicAuth)
     {
         var basicAuth = auth as LeanKitBasicAuth;
         return(new HttpBasicAuthenticator(basicAuth.Username, basicAuth.Password));
     }
     if (auth is LeanKitTokenAuth)
     {
         return(new TokenAuthenticator((auth as LeanKitTokenAuth).Token));
     }
     throw new ArgumentException("Unknown ILeanKitAccountAuth type");
 }
        public ILeanKitApi Subscribe(ILeanKitAccountAuth auth, long boardId, int pollingFrequency, Action<long, BoardChangedEventArgs, ILeanKitApi> notification)
        {
            if (notification == null)
            {
                throw new Exception("Must provide subscription notification function");
            }
            lock (BoardSubscriptions)
            {
                if (!BoardSubscriptions.ContainsKey(boardId))
                {
	                BoardSubscriptions[boardId] = new BoardSubscription(auth, boardId, pollingFrequency);
                }
 
                BoardSubscriptions[boardId].Notifications.Add(notification);
                
                return BoardSubscriptions[boardId].LkClientApi;
            }
        }
Exemplo n.º 14
0
        public ILeanKitApi Subscribe(ILeanKitAccountAuth auth, long boardId, int pollingFrequency, Action <long, BoardChangedEventArgs, ILeanKitApi> notification)
        {
            if (notification == null)
            {
                throw new Exception("Must provide subscription notification function");
            }
            lock (BoardSubscriptions)
            {
                if (BoardSubscriptions.ContainsKey(boardId))
                {
                    return(BoardSubscriptions[boardId].LkClientApi);
                }

                BoardSubscriptions[boardId] = new BoardSubscription(auth, boardId, pollingFrequency);
                BoardSubscriptions[boardId].Notifications.Add(notification);

                return(BoardSubscriptions[boardId].LkClientApi);
            }
        }
        private T Process <T>(ILeanKitAccountAuth accountAuth, IRestRequest request) where T : new()
        {
            var errorMessages = _validationService.ValidateRequest((RestRequest)request);

            if (errorMessages.Count > 0)
            {
                var ex = new ValidationException("Provided request parameters are invalid.");
                ex.Data["ErrorMessages"] = errorMessages;
                throw ex;
            }
            var client = new RestClient
            {
                BaseUrl       = new Uri(accountAuth.GetAccountUrl()),
                Authenticator = GetAuthenticator(accountAuth),
                UserAgent     = LeanKitUserAgent
            };

            var response = RetryRequest(request, accountAuth, client);

            var asyncResponse = response.Data;

            if (string.IsNullOrEmpty(asyncResponse.ReplyData))
            {
                return(new T());
            }
            var rawJson = asyncResponse.ReplyData;

            var authUserDateFormat = _settings.DateFormat;

            var isoDateTimeConverter = new IsoDateTimeConverter {
                DateTimeFormat = authUserDateFormat
            };

            rawJson = rawJson.Substring(1, rawJson.Length - 2);

            var retVal = JsonConvert.DeserializeObject <T>(rawJson, new JsonSerializerSettings
            {
                Error      = HandleError,
                Converters = { isoDateTimeConverter }
            });

            return(retVal);
        }
        private static string FormatApiRequestInfo(ILeanKitAccountAuth leanKitAccountAuth, IRestRequest request, bool hidePassword = false)
        {
            var accountAuthStringStringBuilder = new StringBuilder();

            accountAuthStringStringBuilder.Append("Attempted Authentication Information: ");
            accountAuthStringStringBuilder.Append("Hostname: ");
            accountAuthStringStringBuilder.Append(leanKitAccountAuth.Hostname != null
                                ? leanKitAccountAuth.Hostname + ", "
                                : "Unknown, ");

            var basicAuth = leanKitAccountAuth as LeanKitBasicAuth;

            if (basicAuth != null)
            {
                accountAuthStringStringBuilder.Append("Username: "******", "
                    : "Unknown, ");

                if (!hidePassword)
                {
                    accountAuthStringStringBuilder.Append("Password: "******", "
                        : "Unknown, ");
                }
            }

            var tokenAuth = leanKitAccountAuth as LeanKitTokenAuth;

            if (tokenAuth != null && !hidePassword)
            {
                accountAuthStringStringBuilder.Append("Token: ");
                accountAuthStringStringBuilder.Append(tokenAuth.Token != null
                    ? tokenAuth.Token + ", "
                    : "Unknown, ");
            }
            accountAuthStringStringBuilder.Append("Resource: ");
            accountAuthStringStringBuilder.Append(request.Resource != null ? request.Resource + ", " : "Unknown, ");

            return(accountAuthStringStringBuilder.ToString());
        }
        public T PostFile <T>(ILeanKitAccountAuth accountAuth, string resource, Dictionary <string, object> parameters, string fileName, string mimeType, byte[] fileBytes) where T : new()
        {
            var boundary    = string.Format("----------{0:N}", Guid.NewGuid());
            var contentType = "multipart/form-data; boundary=" + boundary;
            var formBytes   = GetMultipartFormData(parameters, boundary, fileName, mimeType, fileBytes);

            var request = WebRequest.Create(accountAuth.GetAccountUrl() + resource) as HttpWebRequest;

            if (request == null)
            {
                throw new Exception("Error posting file. Could not create HttpWebRequest");
            }

            request.Method        = "POST";
            request.ContentType   = contentType;
            request.ContentLength = formBytes.Length;
            request.UserAgent     = _leanKitUserAgent;
            AddAuth(request, accountAuth);

            using (var requestStream = request.GetRequestStream())
            {
                requestStream.Write(formBytes, 0, formBytes.Length);
                requestStream.Close();
            }

            var response       = request.GetResponse() as HttpWebResponse;
            var responseStream = new StreamReader(response.GetResponseStream());
            var result         = responseStream.ReadToEnd();

            response.Close();

            //var task = PostFileAsync(accountAuth, resource, parameters, fileName, fileBytes);
            //var result = task.Result;

            if (string.IsNullOrEmpty(result))
            {
                return(new T());
            }
            var asyncResponse = JsonConvert.DeserializeObject <AsyncResponse2>(result);

            if (asyncResponse == null || asyncResponse.ReplyData == null || asyncResponse.ReplyData.Length == 0)
            {
                return(new T());
            }

            var rawJson = asyncResponse.ReplyData[0].ToString();

            if (string.IsNullOrEmpty(rawJson))
            {
                return(new T());
            }

            var authUserDateFormat = _settings.DateFormat + " hh:mm:ss t";

            var retVal = JsonConvert.DeserializeObject <T>(rawJson, new JsonSerializerSettings
            {
                Error            = HandleError,
                DateFormatString = authUserDateFormat
            });

            return(retVal);
        }
Exemplo n.º 18
0
 public ILeanKitApi Initialize(LeanKitAccountAuth accountAuth)
 {
     _accountAuth = accountAuth.ToBasicAuth();
     return(this);
 }
Exemplo n.º 19
0
 public ILeanKitApi Initialize(ILeanKitAccountAuth accountAuth)
 {
     _accountAuth = accountAuth;
     return(this);
 }
Exemplo n.º 20
0
		public ILeanKitApi Initialize(LeanKitAccountAuth accountAuth)
		{
			_accountAuth = accountAuth.ToBasicAuth();
			return this;
		}
Exemplo n.º 21
0
		public ILeanKitApi Initialize(ILeanKitAccountAuth accountAuth)
		{
			_accountAuth = accountAuth;
			return this;
		}
        public ILeanKitApi Create(ILeanKitAccountAuth accountAuth)
        {
            var leanKitClient = new LeanKitClient(new RestSharpCommandProcessor(new ValidationService(null), new IntegrationSettings()));

            return(leanKitClient.Initialize(accountAuth));
        }
		public ILeanKitIntegration Create(long boardId, ILeanKitAccountAuth accountAuth, IntegrationSettings settings)
		{
			var clientFactory = new LeanKitClientFactory();
			var apiClient = clientFactory.Create(accountAuth);
			return new LeanKitIntegration(boardId, apiClient, settings);
		}
        private static IRestResponse <AsyncResponse> RetryRequest(IRestRequest request, ILeanKitAccountAuth accountAuth,
                                                                  RestClient client)
        {
            IRestResponse <AsyncResponse> response = new RestResponse <AsyncResponse>();

            for (var tryCount = 0; tryCount <= 10; tryCount++)
            {
                try
                {
                    response = client.Execute <AsyncResponse>(request);
                    ValidateResponse(response, accountAuth, request);
                    break;
                }
                catch (NoDataException)
                {
                    return(response);
                }
                catch (Exception)
                {
                    if (tryCount == 10)
                    {
                        throw;
                    }
                    Thread.Sleep(1000);
                }
            }
            return(response);
        }
		public ILeanKitApi Create(ILeanKitAccountAuth accountAuth)
		{
			var leanKitClient = new LeanKitClient(new RestSharpCommandProcessor(new ValidationService(null), new IntegrationSettings()));
			return leanKitClient.Initialize(accountAuth);			
		}
		protected override void OnStartFixture()
		{
			TestConfig = Test<Configuration>.Item;
			TestAuth = new LeanKitBasicAuth
			{
				Hostname = TestConfig.LeanKit.Url,
				UrlTemplateOverride = "http://{0}.leankit.com",
				Username = TestConfig.LeanKit.User,
				Password = TestConfig.LeanKit.Password
			};
		}
		public ILeanKitApi Create(ILeanKitAccountAuth accountAuth, string dateFormat)
		{
			var settings = new IntegrationSettings() {DateFormat = dateFormat};
			var leanKitClient = new LeanKitClient(new RestSharpCommandProcessor(new ValidationService(null), settings));
			return leanKitClient.Initialize(accountAuth);
		}