Example #1
0
    private void showLoginWidget()
    {
        var loginWidget = new LoginWidget(this);

        this.Add(loginWidget);
        loginWidget.Show();
    }
Example #2
0
        public LoginWidgetTests(LoginWidgetTestsFixture fixture)
        {
            _fixture = fixture;

            _loginWidget = new LoginWidget(_fixture.Token)
            {
                AllowedTimeOffset = 60
            };
        }
        protected AuthenticateResult HandleAuthenticateSync()
        {
            if (!Request.Headers.TryGetValue("Authorization", out var headerRow))
            {
                return(AuthenticateResult.NoResult());
            }
            if (!AuthenticationHeaderValue.TryParse(headerRow.ToString(), out var header))
            {
                return(AuthenticateResult.NoResult());
            }
            if (header.Scheme != "TelegramWidget")
            {
                return(AuthenticateResult.NoResult());
            }

            byte[] infoInBase64;
            try
            {
                infoInBase64 = Convert.FromBase64String(header.Parameter);
            }
            catch
            {
                return(AuthenticateResult.Fail($"invalid base64 content"));
            }

            var jsonParam = Encoding.UTF8.GetString(infoInBase64);
            TelegramUserInfo userInfo;

            try
            {
                userInfo = JsonSerializer.Deserialize <TelegramUserInfo>(jsonParam);
            }
            catch
            {
                return(AuthenticateResult.Fail($"invalid json content in base64 string"));
            }

            var loginWidget = new LoginWidget(telegramBotOptions.Value.AccessToken)
            {
                AllowedTimeOffset = (long)TimeSpan.FromDays(10).TotalSeconds
            };
            var userInfoAsDictionary = ReadUserInfoAsDictionary(userInfo);

            var authResult = loginWidget.CheckAuthorization(userInfoAsDictionary);

            if (authResult != Authorization.Valid)
            {
                return(AuthenticateResult.Fail($"Incorrect telegram info: {authResult}"));
            }
            var tgIdentity        = TelegramWidgetClaimsIdentityGenerator.GetIdentityForUserInfo(userInfo);
            var internalPrincipal = internalClaimsIdentityGenerator.Generate(userInfo);

            var principal = new ClaimsPrincipal(new ClaimsIdentity[] { tgIdentity, internalPrincipal });

            return(AuthenticateResult.Success(new AuthenticationTicket(principal, AuthenticationSchemeConstants.TelegramWidgetAuthenticationScheme)));
        }
Example #4
0
        public Authorization LinkAccount(TelegramAccount account)
        {
            if (!IsConnected)
            {
                Console.WriteLine("Not connected to Telegram.");
                return(Authorization.MissingFields);
            }

            LoginWidget widget = new LoginWidget(OTHubSettings.Instance.Telegram.BotKey);

            var dict = account.ToStringDictionary();

            return(widget.CheckAuthorization(dict));
        }
Example #5
0
        public void LoginActionTest()
        {
            LoginWidget loginWidget = LoginPage.Navigate(Driver).GetLoginWidget();

            LoginPage.MaximizeWindowSize(Driver);

            loginWidget.EmailInputElement.SendKeys(LoginPage.AdminEmail);
            loginWidget.PasswordInputElement.SendKeys(LoginPage.AdminPassword);
            MainPage dashboardPage = loginWidget.Login();

            loginWidget.WaitForMainPage();

            Assert.AreEqual(dashboardPage.GetTitleWidget().TitleElement.Text, "Dashboard");
        }
        public void Real_Data_Valid()
        {
            LoginWidget loginWidget = new LoginWidget(LoginWidgetTestsFixture.RealLifeDataTests_Token)
            {
                AllowedTimeOffset = int.MaxValue
            };

            foreach (SortedDictionary <string, string> testData in LoginWidgetTestsFixture.RealLifeDataTests)
            {
                Authorization authorizationResult = loginWidget.CheckAuthorization(testData);

                Assert.Equal(Authorization.Valid, authorizationResult);
            }
        }
Example #7
0
        protected override async Task <HandleRequestResult> HandleRemoteAuthenticateAsync()
        {
            TelegramOAuthHandler telegramOAuthHandler = this;

            LoginWidget loginWidget = new LoginWidget(telegramOAuthHandler.Options.ClientSecret);

            Dictionary <string, string> parameters =
                telegramOAuthHandler.Context.Request.Query.Keys.ToDictionary(k => k,
                                                                             v => telegramOAuthHandler.Context.Request.Query[v].FirstOrDefault());


            Authorization authorized = loginWidget.CheckAuthorization(parameters);

            if (authorized != Authorization.Valid)
            {
                return(HandleRequestResult.Fail($"Authorization state: {authorized}"));
            }

            TelegramUser telegramUser = new TelegramUser(parameters[Fields.Id]);

            ClaimsIdentity identity = new ClaimsIdentity(new[]
            {
                new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", telegramUser.Id, "http://www.w3.org/2001/XMLSchema#string", telegramOAuthHandler.ClaimsIssuer),
                //new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", telegramUser.Username,"http://www.w3.org/2001/XMLSchema#string", telegramOAuthHandler.ClaimsIssuer)
            }, telegramOAuthHandler.ClaimsIssuer);

            AuthenticationProperties authenticationProperties = null;

            var cookie = Request.Cookies["__Telegram"];

            if (string.IsNullOrEmpty(cookie))
            {
                return(HandleRequestResult.Fail("State cookie not present"));
            }

            authenticationProperties = telegramOAuthHandler.Options.StateDataFormat.Unprotect(cookie);

            if (authenticationProperties == null)
            {
                return(HandleRequestResult.Fail("Authentication properties null"));
            }

            JObject user = JObject.FromObject(telegramUser);

            Response.Cookies.Delete("__Telegram");
            return(HandleRequestResult.Success(await telegramOAuthHandler.CreateTicketAsync(identity,
                                                                                            authenticationProperties, OAuthTokenResponse.Success(user))));
        }
Example #8
0
        public void GateCreatedByAdminIsNotVisibleByUser()
        {
            LoginWidget loginWidget = LoginPage.Navigate(Driver).GetLoginWidget();

            LoginPage.MaximizeWindowSize(Driver);

            loginWidget.EmailInputElement.SendKeys(LoginPage.AdminEmail);
            loginWidget.PasswordInputElement.SendKeys(LoginPage.AdminPassword);
            MainPage mainPage = loginWidget.Login();

            loginWidget.WaitForMainPage();

            NavbarWidget navbarWidget = mainPage.GetNavbarWidget();

            GatesPage gatesPage = navbarWidget.NavigateToGates();

            navbarWidget.WaitForGatePage();

            GateListWidget gateListWidget = gatesPage.GetGateListWidget();

            gateListWidget.CreateGate();
            gateListWidget.WaitCreateGateWidget();

            CreateGateWidget createGateWidget = gatesPage.GetCreateGateWidget();

            createGateWidget.NameInputElement.SendKeys("test");
            createGateWidget.Create();

            TitleWidget titleWidget = mainPage.GetTitleWidget();

            titleWidget.Logout();

            loginWidget.EmailInputElement.SendKeys(LoginPage.UserEmail);
            loginWidget.PasswordInputElement.SendKeys(LoginPage.UserPassword);
            loginWidget.Login();
            loginWidget.WaitForMainPage();

            navbarWidget.NavigateToGates();

            var nameList = gateListWidget.GetAllTableNameData();

            CollectionAssert.DoesNotContain(nameList, "test");
        }
        public async Task <IActionResult> LoginCallback(int id, string first_name, string username, string photo_url, string auth_date, string hash)
        {
            Dictionary <string, string> fields = new Dictionary <string, string>()
            {
                { "id", id.ToString() },
                { "first_name", first_name },
                { "username", username },
                { "photo_url", photo_url },
                { "auth_date", auth_date },
                { "hash", hash }
            };

            var loginWidget = new LoginWidget(AppSettingsProvider.BotApiKey);

            try
            {
                if (loginWidget.CheckAuthorization(fields) == Authorization.Valid)
                {
                    var aspnetuser = await _appUsersManagerService.GetUserAsync(fields["username"], long.Parse(fields["id"]));

                    _appUsersManagerService.Update_Photourl(aspnetuser.TelegramId, fields["photo_url"]);

                    //sign the user and go to home
                    await _signInManager.SignInAsync(aspnetuser, isPersistent : false);
                }
            }
            catch (Exception ex)
            {
                var log = new Log();
                log.LogMessage(ex.Message + " " + ex.StackTrace + " " + ex.InnerException);
                _appdb.Logger.Add(log);
                _appdb.SaveChangesAsync().Wait();
            }

            return(RedirectToAction("Index", "Home"));
        }
        private void CreateLoginPage()
        {
            Guid parentPageID = new Guid(SampleConstants.InternalResourcesGroupPageId);
            var hasCreatedPage = SampleUtilities.CreateLocalizedPage(new Guid(SampleConstants.LoginPageId), "Login", parentPageID, false, false, "en");
            if (hasCreatedPage)
            {
                SampleUtilities.SetTemplateToLocalizedPage(new Guid(SampleConstants.LoginPageId), new Guid(SampleConstants.EducationTemplateId), "en");

                // Add layout control
                var mainLayoutControl = new LayoutControl();
                var mainLayoutColumns = new List<ColumnDetails>();

                var mainLayoutColumn1 = new ColumnDetails()
                {
                    ColumnSpaces = new ColumnSpaces(0, 15, 0, 0),
                    PlaceholderId = "Left",
                    ColumnWidthPercentage = 50
                };
                mainLayoutColumns.Add(mainLayoutColumn1);

                var mainLayoutColumn2 = new ColumnDetails()
                {
                    ColumnSpaces = new ColumnSpaces(0, 0, 0, 15),
                    PlaceholderId = "Right",
                    ColumnWidthPercentage = 50
                };
                mainLayoutColumns.Add(mainLayoutColumn2);

                mainLayoutControl.Layout = SampleUtilities.GenerateLayoutTemplate(mainLayoutColumns, string.Empty);
                mainLayoutControl.ID = "Main";
                SampleUtilities.AddControlToLocalizedPage(new Guid(SampleConstants.LoginPageId), mainLayoutControl, "content", "50% + 50% (custom)", "en");

                ContentBlockBase pageTitle = new ContentBlockBase();
                pageTitle.Html = "<h1>Login</h1>";
                SampleUtilities.AddControlToLocalizedPage(new Guid(SampleConstants.LoginPageId), pageTitle, "Main_Left", "Content block", "en");

                LoginWidget login = new LoginWidget();
                SampleUtilities.AddControlToLocalizedPage(new Guid(SampleConstants.LoginPageId), login, "Main_Left", "Login", "en");

                string registerPageUrl = string.Empty;
                var count = 0;
                App.WorkWith().Pages().Where(pN => pN.Id == new Guid(SampleConstants.RegistrationPageId)).Count(out count);
                if (count != 0)
                {
                    PageNode node = App.WorkWith().Page(new Guid(SampleConstants.RegistrationPageId)).Get();
                    registerPageUrl = node.UrlName;
                }

                ContentBlock registerInfo = new ContentBlock();
                registerInfo.Html =
                    String.Format(@"<div>
                    <div>
                    <p>Please click on ""Register"" and complete the form on the next screen to register for our service. You will receive a confirmation email during the next few minutes. <br />
                    <br />
                    Once registered, you are ready to use our service in full mode.&nbsp;</p>
                    <p><strong>You need to be logged in to:</strong></p>
                    <ul>
                        <li>post in forums</li>
                        <li>manage your account</li>
                        <li>download documents</li>
                    </ul>
                    <a class=""important"" href=""{0}"">Register</a></div>
                    </div>", registerPageUrl);

                SampleUtilities.AddControlToLocalizedPage(new Guid(SampleConstants.LoginPageId), registerInfo, "Main_Right", "Login", "en");
            }

            hasCreatedPage = SampleUtilities.CreateLocalizedPage(new Guid(SampleConstants.LoginPageId), "Login", parentPageID, false, false, "de");
            if (hasCreatedPage)
            {
                SampleUtilities.SetTemplateToLocalizedPage(new Guid(SampleConstants.LoginPageId), new Guid(SampleConstants.EducationTemplateId), "de");

                // Add layout control
                var mainLayoutControl = new LayoutControl();
                var mainLayoutColumns = new List<ColumnDetails>();

                var mainLayoutColumn1 = new ColumnDetails()
                {
                    ColumnSpaces = new ColumnSpaces(0, 15, 0, 0),
                    PlaceholderId = "Left",
                    ColumnWidthPercentage = 50
                };
                mainLayoutColumns.Add(mainLayoutColumn1);

                var mainLayoutColumn2 = new ColumnDetails()
                {
                    ColumnSpaces = new ColumnSpaces(0, 0, 0, 15),
                    PlaceholderId = "Right",
                    ColumnWidthPercentage = 50
                };
                mainLayoutColumns.Add(mainLayoutColumn2);

                mainLayoutControl.Layout = SampleUtilities.GenerateLayoutTemplate(mainLayoutColumns, string.Empty);
                mainLayoutControl.ID = "Main";
                SampleUtilities.AddControlToLocalizedPage(new Guid(SampleConstants.LoginPageId), mainLayoutControl, "content", "50% + 50% (custom)", "de");

                ContentBlockBase pageTitle = new ContentBlockBase();
                pageTitle.Html = "<h1>Login</h1>";
                SampleUtilities.AddControlToLocalizedPage(new Guid(SampleConstants.LoginPageId), pageTitle, "Main_Left", "Content block", "de");

                LoginWidget login = new LoginWidget();
                SampleUtilities.AddControlToLocalizedPage(new Guid(SampleConstants.LoginPageId), login, "Main_Left", "Login", "de");

                string registerPageUrl = string.Empty;
                var count = 0;
                App.WorkWith().Pages().Where(pN => pN.Id == new Guid(SampleConstants.RegistrationPageId)).Count(out count);
                if (count != 0)
                {
                    PageNode node = App.WorkWith().Page(new Guid(SampleConstants.RegistrationPageId)).Get();
                    registerPageUrl = node.UrlName;
                }

                ContentBlock registerInfo = new ContentBlock();
                registerInfo.Html =
                    String.Format(@"<div>
                    <p>Bitte klicken Sie auf ""Registrieren"" und f&uuml;llen Sie das Formular auf der n&auml;chsten Seite, um f&uuml;r unseren Service registrieren. Sie erhalten eine Best&auml;tigung per E-Mail in den n&auml;chsten Minuten erhalten.<br />
                    <br />
                    Einmal registriert, k&ouml;nnen Sie unseren Service in Voll-Modus verwenden.&nbsp;</p>
                    <p><strong>Sie m&uuml;ssen registriert sein, um Folgendes machen zu k&ouml;nnen:</strong></p>
                    <ul>
                        <li>In den Foren schreiben</li>
                        <li>Ihr Account managen</li>
                        <li>Dokumente herunterladen</li>
                    </ul>
                    <p><a href=""{0}"">Registrierung</a></p>
                    </div>", registerPageUrl);

                SampleUtilities.AddControlToLocalizedPage(new Guid(SampleConstants.LoginPageId), registerInfo, "Main_Right", "Login", "de");
            }
        }