public static LoginInfo ToModel(this ILogin login) { if (login == null) return null; var flags = login.Flags; var result = new LoginInfo() { Id = login.Id, TenantId = login.TenantId, UserName = login.UserName, LastLoggedInOn = login.LastLoggedInOn, SuspendedUntil = login.SuspendedUntil, Expires = login.Expires, Flags = login.Flags, MultiFactorLoginFactors = login.MultiFactorLoginFactors, PasswordResetFactors = login.PasswordResetFactors, IncompleteFactors = login.IncompleteFactors, //Deprecated, use Flags property DoNotConcealMembership = flags.IsSet(LoginFlags.DoNotConcealMembership), RequireMultiFactorLogin = flags.IsSet(LoginFlags.RequireMultiFactor), OneTimePassword = flags.IsSet(LoginFlags.OneTimePassword), Disabled = flags.IsSet(LoginFlags.Disabled), Suspended = flags.IsSet(LoginFlags.Suspended), }; //If suspension expired, fix the result; we do not fix login entity - it will be cleared when user logs in; // the trouble here is that we might not have permissions to update login at this moment, only read it if(result.Suspended) { var utcNow = EntityHelper.GetSession(login).Context.App.TimeService.UtcNow; if(login.SuspendedUntil < utcNow) { result.Suspended = false; result.SuspendedUntil = null; } } return result; }
public LoginInfo UpdateLoginInfo(LoginInfo loginInfo) { var login = GetCurrentLogin(); Context.ThrowIfNull(login, ClientFaultCodes.ContentMissing, "LoginInfo", "LoginInfo is missing."); Context.ThrowIf(loginInfo.Id != login.Id, ClientFaultCodes.InvalidValue, "Id", "Invalid login Id, must match current user's login id."); _loginManager.UpdateLogin(login, loginInfo); return login.ToModel(); }