public async Task <ResponseModelBase> DisavowAccount(Guid accountId, Guid confirmCode) { var account = await ldb.FindByUniqueId(accountId); //Delete the account if (account == null) { return(ErrorModel.Of("user_not_found")); } if (account.IsEmailConfirmed) { return(ErrorModel.Of("email_already_confirmed")); } if (account.UniqueConfirmationCode != confirmCode) { return(ErrorModel.Of("email_confirmation_code_incorrect")); } //Delete the account: they disavowed it await ldb.DeleteUser(account); return(Models.OkModel.Of("account_deleted")); }
public async Task <ResponseModelBase> DeleteAccount(Guid userId, Guid confirmCode) { var usr = await ldb.FindByUniqueId(userId); if (usr == null) { return(ErrorModel.Of("user_not_found")); } if (usr.UniqueConfirmationCode != confirmCode) { return(ErrorModel.Of("email_confirmation_code_incorrect")); } await ldb.DeleteUser(usr); return(Models.OkModel.Of("account_deleted")); }
public async Task <ResponseModelBase> DoDBCleanup() { try { //Clean up sessions and tokens var oldSessions = ldb.DBContext.Sessions.Include(a => a.Owner).Where(a => DateTime.UtcNow > a.ExpiryDate); var oldTokens = ldb.DBContext.ServerTokens.Include(a => a.Owner).Where(a => DateTime.UtcNow > a.ExpiryDate); int sessCt = 0, tknCt = 0; foreach (var sess in oldSessions) { sessCt++; //remove index from user object sess?.Owner?.With(ldb.DBContext)?.RemoveSession(sess); } await ldb.Save(); foreach (var tkn in oldTokens) { tknCt++; //remove index from user object tkn?.Owner?.With(ldb.DBContext)?.RemoveToken(tkn); } await ldb.Save(); //Remove accounts more than 7 days old that are not verified var oldUsers = ldb.DBContext.Users.Where(a => !a.IsEmailConfirmed) .Where(a => (DateTime.UtcNow - a.EmailConfirmationSent).TotalDays > 7).ToList(); var usrCt = oldUsers.Count(); oldUsers.ForEach(async a => await ldb.DeleteUser(a)); await ldb.Save(); return(Models.OkModel.Of($"{tknCt} tokens removed, {sessCt} sessions removed, {usrCt} users removed")); } catch (Exception e) { return(ErrorModel.Of(e)); } }