コード例 #1
0
        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"));
        }
コード例 #2
0
        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)));
        }
コード例 #3
0
        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"));
        }
コード例 #4
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"));
        }
コード例 #5
0
        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"));
        }