Пример #1
0
        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"));
        }
Пример #2
0
        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"));
        }
Пример #3
0
        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));
            }
        }