public async Task <ResponseModelBase> ConfirmAccount(Guid accountId, Guid confirmCode) { var account = await ldb.FindByUniqueId(accountId); 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")); } //Regenerate the code so the link doesn't work anymore await ldb.ChangeConfirmCode(account); account.IsEmailConfirmed = true; await ldb.UpdateUser(account); return(Models.OkModel.Of("email_confirmed")); }
public async Task <ResponseModelBase> GetUserInfo(Guid userId) { var usr = await ldb.FindByUniqueId(userId); if (usr == null) { return(ErrorModel.Of("user_not_found")); } return(OkModel.Of(new UserInfoResponseModel(usr))); }
public async Task <ResponseModelBase> ConfirmGiftProduct(Guid userId, Guid confirmCode, string productKey, string addressToGiftTo) { var user = await ldb.FindByUniqueId(userId); var userToGiveTo = await ldb.FindByEmailAddress(addressToGiftTo); if (user == null || userToGiveTo == null) { return(ErrorModel.Of("user_not_found")); } if (user.UniqueConfirmationCode != confirmCode) { return(ErrorModel.Of("email_confirmation_code_incorrect")); } var productObject = user.OwnedProducts.Where(a => a.ProductKey == productKey).FirstOrDefault(); if (productObject == null) { return(ErrorModel.Of("product_key_not_found")); } //Transfer it user.OwnedProducts.Remove(productObject); userToGiveTo.OwnedProducts.Add(productObject); //Transform it into a gift object //productObject.EditionId = new Guid("e6c94547-355b-4d39-a5f0-513a3cc3b807"); user.UniqueConfirmationCode = Guid.NewGuid(); await ldb.UpdateUser(user); await ldb.UpdateUser(userToGiveTo); //And send the email await Backend.EmailSender.SendEmail(userToGiveTo, Backend.EmailSender.ProductKeyGiftedTemplate, new Dictionary <string, string>() { { "-giftingUser-", user.Username }, { "-displayName-", productObject.DisplayName }, { "-productName-", productObject.ProductName }, { "-productId-", productObject.ProductId.ToString() }, { "-editionName-", productObject.EditionName }, { "-editionId-", productObject.EditionId.ToString() }, { "-productKey-", productObject.ProductKey }, { "-downloadUrl-", (await Backend.ProductDatabase.GetProduct( productObject.ProductId, productObject.EditionId)).Product.DownloadUrl }, { "-redemptionDate-", DateTime.UtcNow.ToString("G") } }); return(OkModel.Of("product_key_gifted")); }
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> ChangeForgottenPassword([FromBody] ForgotPasswordDoChangeRequestModel model) { if (!ModelState.IsValid) { return(ErrorModel.Of("invalid_request")); } if (model.NewPassword.Length < 8) { return(ErrorModel.Of("password_too_short")); } //Change their password var user = await ldb.FindByUniqueId(model.UserId); //validate user if (user == null) { return(ErrorModel.Of("user_not_found")); } //and code if (user.UniqueConfirmationCode != model.ConfirmationCode) { return(ErrorModel.Of("email_confirmation_code_incorrect")); } user.PasswordHashes = await Task.Run(() => PasswordHasher.GenerateHashPermutations(model.NewPassword)); user.UniqueConfirmationCode = Guid.NewGuid(); //Clear all sessions ldb.DBContext.Sessions.RemoveRange(user.ActiveSessions); user.ActiveSessions.Clear(); //And login tokens ldb.DBContext.ServerTokens.RemoveRange(user.ActiveServerTokens); user.ActiveServerTokens.Clear(); //And save await ldb.UpdateUser(user); return(Models.OkModel.Of("password_changed")); }