private static void SaveLogin(Request request)
		{
			"Saving Target login information.".Debug();

			var dir = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory;
			if (dir == null) throw new Exception("Could not access application folder.");

			var storagefile = Path.Combine(dir.FullName, "config-edit.json");
			var localStorage = new LocalStorage<Configuration>(storagefile);
			var config = File.Exists(storagefile) ? localStorage.Load() : new Configuration();

			config.Target = new ServerConfiguration
			{
				Type = request.Type,
				Protocol = request.Protocol,
				Host = request.Host,
				User = request.User,
				Password = request.Password
			};

			localStorage.Save(config);
		}
		private ILeanKitApi Connect(Request request, bool saveLogin = false)
		{

			LeanKitClientFactory = new LeanKitClientFactory();
			var account = new LeanKitAccountAuth
				{
					Hostname = request.Host,
					Username = request.User,
					Password = request.Password,
					UrlTemplateOverride = request.Host
				};

			if (saveLogin) SaveLogin(account);

			// expand host if necessary
			if (account.Hostname == "kanban-cibuild")
				account.UrlTemplateOverride = "http://kanban-cibuild.localkanban.com/";
			else if (!account.Hostname.Contains("http://"))
				account.UrlTemplateOverride = "https://" + account.Hostname + ".leankit.com/";
			
			string.Format("Attempting connection to {0}", request).Debug();

			return LeanKitClientFactory.Create(account);

		}
		private static IConnection Connect(Request request, out ConnectionResult result)
		{
			result = ConnectionResult.UnknownTarget;
			if (request.Type == null) return null;

			IConnection target;

			switch (request.Type.ToLowerInvariant())
			{
				case "tfs":
					target = new TfsConnection();
					result = target.Connect(request.Url, request.User, request.Password);
					break;
				case "jira":
					target = new JiraConnection();
					result = target.Connect(request.Url, request.User, request.Password);
					break;
				case "githubissues":
					target = new GitHubIssuesConnection();
					result = target.Connect(request.Host, request.User, request.Password);
					break;
				case "githubpulls":
					target = new GitHubPullsConnection();
					result = target.Connect(request.Host, request.User, request.Password);
					break;
				default:
					target = null;
					break;
			}
			return target;
		}