Esempio n. 1
0
        /// <summary>
        /// Signs in a user using a username and password.
        /// </summary>
        /// <param name="userName">The username of the user.</param>
        /// <param name="password">The password of the user.</param>
        /// <param name="isPersistent">Whether the user session is persistent.</param>
        /// <param name="shouldLockout">Whether the user should be locked out.</param>
        /// <returns>Returns a sign in status.</returns>
        public override async Task <SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout)
        {
            var currentRealm = RealmConfig.GetCurrentRealm();

            if (currentRealm == null)
            {
                throw new InvalidOperationException("Must be joined to realm before attempting to sign in");
            }

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Add("Authorization", "BASIC " + Convert.ToBase64String(Encoding.UTF8.GetBytes(currentRealm.ApplicationId + ":" + currentRealm.ApplicationSecret)));

                var content = new StringContent($"grant_type=password&username={userName}&password={password}&scope={currentRealm.Address}/imsi");

                // HACK: have to remove the headers before adding them...
                content.Headers.Remove("Content-Type");
                content.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

                Trace.TraceInformation("Begin authentication for {0}", userName);
                var result = await client.PostAsync($"{currentRealm.Address}/auth/oauth2_token", content);

                if (result.IsSuccessStatusCode)
                {
                    return(await this.SignInAsync(result, userName));
                }
                else
                {
                    Trace.TraceWarning("Cannot login: {0}", await result.Content.ReadAsStringAsync());
                    return(SignInStatus.Failure);
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Displays the index view.
        /// </summary>
        /// <returns>Returns the index view.</returns>
        public ActionResult Index()
        {
            if (!RealmConfig.IsJoinedToRealm())
            {
                return(RedirectToAction("JoinRealm", "Realm"));
            }

            var viewModel = new DashboardViewModel();

            try
            {
                if (PolicyPermission.TryDemand(this.User, Constants.UnrestrictedMetadata))
                {
                    viewModel.Applets = appletService.GetAllApplets().Select(a => new AppletViewModel(a));
                }

                if (PolicyPermission.TryDemand(this.User, Constants.CreateDevice))
                {
                    viewModel.Devices = securityDeviceService.GetAllDevices().Select(d => new DeviceViewModel(d)).OrderBy(d => d.CreationTime).ThenBy(d => d.Name).Take(15);
                }

                if (PolicyPermission.TryDemand(this.User, Constants.AlterRoles))
                {
                    viewModel.Roles = securityRoleService.GetAllRoles().OrderBy(r => r.Name).Take(15).Select(r => new RoleViewModel(r));
                }
            }
            catch (Exception e)
            {
                Trace.TraceError($"Unable to create dashboard view model: {e}");
                this.TempData["error"] = Locale.UnexpectedErrorMessage;
            }

            return(View(viewModel));
        }
Esempio n. 3
0
        /// <summary>
        /// Tfas the sign in asynchronous.
        /// </summary>
        /// <param name="username">The username.</param>
        /// <param name="password">The password.</param>
        /// <param name="tfaSecret">The tfa secret.</param>
        /// <returns>Task&lt;SignInStatus&gt;.</returns>
        /// <exception cref="System.InvalidOperationException">Must be joined to realm before attempting to sign in</exception>
        public async Task <SignInStatus> TfaSignInAsync(string username, string password, string tfaSecret)
        {
            var currentRealm = RealmConfig.GetCurrentRealm();

            if (currentRealm == null)
            {
                throw new InvalidOperationException("Must be joined to realm before attempting to sign in");
            }

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Add("Authorization", "BASIC " + Convert.ToBase64String(Encoding.UTF8.GetBytes(currentRealm.ApplicationId + ":" + currentRealm.ApplicationSecret)));
                client.DefaultRequestHeaders.Add("X-OpenIZ-TfaSecret", tfaSecret);

                var content = new StringContent($"grant_type=password&username={username}&password={password}&scope={currentRealm.Address}/imsi");

                // HACK: have to remove the headers before adding them...
                content.Headers.Remove("Content-Type");
                content.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

                var result = await client.PostAsync($"{currentRealm.Address}/auth/oauth2_token", content);

                if (result.IsSuccessStatusCode)
                {
                    var response = JObject.Parse(await result.Content.ReadAsStringAsync());

                    this.AccessToken = response.GetValue("access_token").ToString();

                    return(SignInStatus.Success);
                }

                return(SignInStatus.Failure);
            }
        }
Esempio n. 4
0
        public async Task <ActionResult> Login(LoginModel model, string returnUrl)
        {
            var result = SignInStatus.Failure;

            try
            {
                if (!ModelState.IsValid)
                {
                    return(View(model));
                }

                result = await SignInManager.PasswordSignInAsync(model.Username, model.Password, false, shouldLockout : false);
            }
            catch (Exception e)
            {
                Trace.TraceError($"Unable to login: {e}");
            }

            switch (result)
            {
            case SignInStatus.Success:
                try
                {
                    // set the credentials
                    this.ImsiClient.Client.Credentials = new AmiCredentials(this.User, this.SignInManager.AccessToken);

                    var user = this.GetUserEntityBySecurityUserKey(Guid.Parse(SignInManager.AuthenticationManager.AuthenticationResponseGrant.Identity.GetUserId()));

                    if (user != null)
                    {
                        // Default to english
                        var languageCode = LocalizationConfig.LanguageCode.English;

                        var language = user.LanguageCommunication.FirstOrDefault(u => u.IsPreferred);
                        if (language != null)
                        {
                            languageCode = language.LanguageCode;
                        }

                        Response.Cookies.Add(new HttpCookie(LocalizationConfig.LanguageCookieName, languageCode));
                    }

                    this.auditService.AuditLogin(model.Username, RealmConfig.GetCurrentRealm().DeviceId);
                }
                catch (Exception e)
                {
                    Trace.TraceError($"Unable to set the users default language, reverting to english: {e}");
                }

                Response.Cookies.Add(new HttpCookie("access_token", SignInManager.AccessToken));
                return(RedirectToLocal(returnUrl));

            default:
                ModelState.AddModelError("", Locale.IncorrectUsernameOrPassword);
                return(View(model));
            }
        }
Esempio n. 5
0
        public ActionResult Index()
        {
            if (!RealmConfig.IsJoinedToRealm())
            {
                return(RedirectToAction("Index", "Home"));
            }

            var realm = unitOfWork.RealmRepository.Get(r => r.ObsoletionTime == null).Single();

            return(View(new RealmViewModel(realm)));
        }
Esempio n. 6
0
        public MainPageViewModel()
        {
            _progressUpdate = new SerialDisposable();
            var realmConfig = new RealmConfig();

            _config = realmConfig.Config;

            ObjectWithProgress = new ObjectWithProgress();

            realmConfig.AddObject(ObjectWithProgress);

            StartProgressCommand = new DelegateCommand(StartProgress);
        }
Esempio n. 7
0
        public ActionResult Login(string returnUrl)
        {
            if (!RealmConfig.IsJoinedToRealm())
            {
                return(RedirectToAction("JoinRealm", "Realm"));
            }

            if (User.Identity.IsAuthenticated)
            {
                return(RedirectToAction("Index", "Home"));
            }

            ViewBag.ReturnUrl = returnUrl;
            return(View());
        }
Esempio n. 8
0
        public ActionResult LogOff()
        {
            try
            {
                this.TempData.Clear();

                HttpContext.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie);

                this.Response.Cookies.Remove("access_token");

                this.auditService.AuditLogOff(this.User, RealmConfig.GetCurrentRealm().DeviceId);
            }
            catch (Exception e)
            {
                Trace.TraceError($"Unable to logoff: {e}");
            }

            return(RedirectToAction("Login", "Account"));
        }
Esempio n. 9
0
        private static void RunRealmInManyThreads()
        {
            var realmConfig = new RealmConfig("RealmObject.realm");

            var threads = new List <Thread>();

            for (int index = 0; index < 10; index++)
            {
                threads.Add(new Thread(() =>
                {
                    var realm = Realm.GetInstance(realmConfig.Config);

                    realm.RunInTransaction(() =>
                    {
                        for (int i = 0; i < 10000; i++)
                        {
                            realm.Add(new Dog {
                                Name = "temp", Age = 10
                            });
                        }
                    });

                    realm.All <Dog>().ToList();
                }));
            }

            foreach (var thread in threads)
            {
                thread.Start();
                thread.Join();
            }

            var realmWithoutUsing = Realm.GetInstance(realmConfig.Config);

            var dogsWithoutUsing = realmWithoutUsing.All <Dog>();

            realmWithoutUsing.RunInTransaction(() =>
            {
                foreach (var dog in dogsWithoutUsing)
                {
                    dog.Age = 20;
                }
            });

            var disposableRealmConfig = new RealmConfig("RealmObject_disposable.realm");

            var disposabledThreads = new List <Thread>();

            for (int index = 0; index < 10; index++)
            {
                disposabledThreads.Add(new Thread(() =>
                {
                    Realm.GetInstance(disposableRealmConfig.Config).Using(realm =>
                    {
                        realm.RunInTransaction(() =>
                        {
                            for (int i = 0; i < 10000; i++)
                            {
                                realm.Add(new Dog
                                {
                                    Name = "temp",
                                    Age  = 10
                                });
                            }
                        });

                        realm.All <Dog>().ToList();
                    });
                }));
            }

            foreach (var disposabledThread in disposabledThreads)
            {
                disposabledThread.Start();
                disposabledThread.Join();
            }

            Realm.GetInstance(realmConfig.Config).Using(realm =>
            {
                var dogWithUsing = realm.All <Dog>();

                realm.RunInTransaction(() =>
                {
                    foreach (var dog in dogWithUsing)
                    {
                        dog.Age = 20;
                    }
                });
            });
        }