Example #1
0
        internal async Task <RegisterResult> Register(string emailAdress, string password)
        {
            if (CredentialUtil.GetCredential("BalanceKeeper.Desktop" + emailAdress) != null)
            {
                return(await Task <RegisterResult> .FromResult(new RegisterResult()
                {
                    Succes = false, IsError = true, ErrorType = RegisterErrorType.ModelError, Errors = new List <IdentityError>()
                    {
                        new IdentityError()
                        {
                            Code = "UE", Description = "Gebruikersnaam bestaat al"
                        }
                    }
                }));
            }
            CredentialUtil.SetCredentials("BalanceKeeper.Desktop" + emailAdress, emailAdress, password, CredentialManagement.PersistanceType.LocalComputer);

            return(await Task <RegisterResult> .FromResult(new RegisterResult()
            {
                Succes = true
            }));
        }
Example #2
0
        private static async Task CreateSession()
        {
            var httpClientHandler = new HttpClientHandler
            {
                AllowAutoRedirect = false
            };

            _downloadProgressTrackingHandler = new ProgressMessageHandler(httpClientHandler);

            SessionClient = new HttpClient(_downloadProgressTrackingHandler)
            {
                BaseAddress = new Uri("http://courses.finki.ukim.mk/"),
            };
            SessionClient.DefaultRequestHeaders.UserAgent.ParseAdd("CoursesDownloader-C# Console App");

            HttpResponseMessage login = null;

            while (true)
            {
                Console.WriteLine("Establishing connection with courses");

                try
                {
                    login = await SessionClient.GetAsyncHttp("http://courses.finki.ukim.mk/login/index.php");

                    if (!login.IsSuccessStatusCode)
                    {
                        throw new HttpRequestException();
                    }
                }
                catch (HttpRequestException)
                {
                    Console.WriteLine("Connection cannot be established");
                    var shouldRetry = MenuChooseItem.AskYesNoQuestion("Do you want to try again? [Y/N] ",
                                                                      Console.Clear,
                                                                      () => { Environment.Exit(0); });

                    if (shouldRetry) // onYes
                    {
                        continue;
                    }
                }

                break;
            }

            Console.WriteLine("Preparing CAS login");

            var text = await login.Content.ReadAsStringAsync();

            login.Dispose();

            var doc = new HtmlDocument();

            doc.LoadHtml(text);

            var hiddenInput = doc.DocumentNode.SelectNodes("//form//input[@type=\"hidden\"]");

            var loginData = new Dictionary <string, string>();

            foreach (var x in hiddenInput)
            {
                loginData[x.Attributes.First(t => t.Name == "name").Value] = x.Attributes.First(t => t.Name == "value").Value;
            }

EnterCredentialsAgain:

            var(username, password) = CredentialUtil.GetCredential(CASTarget);

            while (username.IsNullOrEmpty() || password.IsNullOrEmpty())
            {
                username = ConsoleUtils.ReadLine("Please enter your CAS username >>> ", ConsoleIOType.Question);
                password = ConsoleUtils.ReadLine("Please enter your CAS password >>> ", ConsoleIOType.Question, true);

                CredentialUtil.SetCredentials(CASTarget, username, password);
            }

            loginData["username"] = username;
            loginData["password"] = password;

            using (var loginDataContent = new FormUrlEncodedContent(loginData.ToArray()))
            {
                Console.WriteLine("Logging into CAS");

                using (var response = await SessionClient.PostAsyncHttp(login.RequestMessage.RequestUri, loginDataContent))
                {
                    // if redirected to CAS, wrong password or username
                    if (response.RequestMessage.RequestUri.Host == new Uri(CASTarget).Host)
                    {
                        ConsoleUtils.WriteLine("The username or password you entered is incorrect. Please try again");
                        CredentialUtil.RemoveCredentials(CASTarget); // remove incorrect credentials
                        goto EnterCredentialsAgain;
                    }

                    FindSessKey(await response.Content.ReadAsStringAsync());
                }
            }

            LoginTime = DateTime.Now;
        }