public static void FillUserFromModel(this UserDto user, UserModel loginModel, AuthModel authModel) { var access = new AccessDto { Id = authModel.AccessId, Type = (loginModel.Remember ? AuthType.Cookie : AuthType.Session) }; switch (loginModel.LoggedUntil) { case LoggedUntil.Hour: access.ValidUntil = DateTime.UtcNow.AddHours(1); break; case LoggedUntil.Day: access.ValidUntil = DateTime.UtcNow.AddDays(1); break; case LoggedUntil.Week: access.ValidUntil = DateTime.UtcNow.AddDays(7); break; case LoggedUntil.Month: access.ValidUntil = DateTime.UtcNow.AddMonths(1); break; case LoggedUntil.Year: access.ValidUntil = DateTime.UtcNow.AddYears(1); break; default: throw new ArgumentOutOfRangeException(); } user.AccessList.Add(access); }
public bool SendAuthenticationEmail(UserDto user, AuthModel authModel, string loginUrl) { var access = user.AccessList.First(x => x.Id.Equals(authModel.AccessId)); try { var body = "Hi!\n" + "\n" + "Browse to the URL below to manage your MCNotifier account.\n" + "\n" + $"{loginUrl}\n" + "\n" + $"This access link will expire on {access.ValidUntil} (UTC).\n" + "\n" + "Regards,\n" + "The MCNotifier Team."; const string subject = "Access to your MCNotifier account"; var message = BuildMessage(user.Email, subject, body); SendEmail(message); } catch (Exception) { return false; // log me } return true; }
public AccessModel GetUserAccess(AuthModel auth) { var user = GetUser(auth.Email); if (user == null) throw new Exception("User not found!"); var access = user.AccessList.FirstOrDefault(x => x.Id.Equals(auth.AccessId) && x.ValidUntil > DateTime.UtcNow); var accessModel = _mapper.Map<AccessModel>(access) ?? new AccessModel { Type = AuthType.Invalid }; accessModel.Email = user.Email; return accessModel; }
public bool Login(UserModel model) { var authModel = new AuthModel(model.Email); var user = GetUser(model.Email); if (user == null) { user = new UserDto(); user.FillNewUserFromModel(model, authModel); } else { user.FillUserFromModel(model, authModel); } //SetWatchlist(model, user, false); if (!SetUser(user)) { throw new Exception("Could not save user to database!"); } var loginAuth = _encryptionService.Encrypt(authModel); var loginUrl = _context.Request.GetHostUrl() + "/User/Auth?token=" + loginAuth; return _emailService.SendAuthenticationEmail(user, authModel, loginUrl); }
public static void FillNewUserFromModel(this UserDto user, UserModel loginModel, AuthModel authModel) { user.Email = loginModel.Email; user.FillUserFromModel(loginModel, authModel); }