/// <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); } } }
/// <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)); }
/// <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<SignInStatus>.</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); } }
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)); } }
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))); }
public MainPageViewModel() { _progressUpdate = new SerialDisposable(); var realmConfig = new RealmConfig(); _config = realmConfig.Config; ObjectWithProgress = new ObjectWithProgress(); realmConfig.AddObject(ObjectWithProgress); StartProgressCommand = new DelegateCommand(StartProgress); }
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()); }
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")); }
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; } }); }); }