public async Task <JsonResult> OnPostAsync([FromBody] ClientRegisterVM input)
        {
            var user = new IdentityUser {
                UserName = input.User.Email.ToLower(), Email = input.User.Email
            };
            var result = await _userManager.CreateAsync(user, input.User.Password);

            var errorList = new List <string>();

            dynamic jsonResponse = new JObject();

            if (result.Succeeded)
            {
                SystemUser sysUser = new SystemUser()
                {
                    Email = input.User.Email,
                    Role  = "Client"
                };

                Client client = new Client
                {
                    ClientName        = input.Client.ClientName,
                    ClientEmail       = input.User.Email,
                    ClientPhoneNumber = input.Client.ClientPhoneNumber,
                    ClientCity        = input.Client.ClientCity,
                    ClientState       = input.Client.ClientState,
                    ClientDescription = input.Client.ClientDescription
                };
                _context.SystemUser.Add(sysUser);
                sysUser.Client.Add(client);
                _context.SaveChanges();

                AuthRepo registerRepo = new AuthRepo(_signInManager, _config, _serviceProvider, _context);
                var      tokenString  = registerRepo.GenerateJSONWebToken(user);
                jsonResponse.token  = tokenString;
                jsonResponse.status = "OK";
                jsonResponse.role   = "Client";
                jsonResponse.email  = sysUser.Email;
                jsonResponse.id     = client.ClientId;
                jsonResponse.name   = client.ClientName;
                return(Json(jsonResponse));
            }

            foreach (IdentityError error in result.Errors)
            {
                errorList.Add(error.Description);
            }

            jsonResponse.status      = 422;
            jsonResponse.description = errorList[0];
            jsonResponse.token       = "";
            return(Json(jsonResponse));
        }
        public async Task <IActionResult> ClientRegister([FromBody] ClientRegisterVM model)
        {
            model.ReturnUrl = PayPingOauthConsentUrl;
            try
            {
                //Check Existance of User Email
                var request = new RestRequest("EmailExist", Method.GET);
                request.AddQueryParameter("Email", model.Email);
                var result = await _client.ExecuteTaskAsync <ResultVM>(request);

                //If result is FALSE, then you can register user
                if (result.StatusCode == HttpStatusCode.OK && !result.Data.exist)
                {
                    var registerRequest = new RestRequest("ClientRegisterInit", Method.POST);
                    registerRequest.AddJsonBody(model);
                    var resultId = await _client.ExecuteTaskAsync <ResultVM>(registerRequest);

                    //If user Registered successfully, then redirect it to this url(PayPing Dashboard)
                    //then user must click on notification to redirect itself to the Oauth Consent page
                    if (resultId.StatusCode == HttpStatusCode.OK && !string.IsNullOrEmpty(resultId.Data.Id))
                    {
                        return(Ok("https://oauth.payping.ir/client/ClientRegister?registerId=" + resultId.Data.Id));
                    }
                    else
                    {
                        return(BadRequest("مشکلی در دریافت آیدی ثبت نام وجود دارد"));
                    }
                }
                else
                {
                    return(BadRequest("مشکلی در ایمیل وارد شده وجود دارد"));
                }
            }
            catch (System.Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }