public async Task<ActionResult> Signup(SignupModel model)
        {
            if (ModelState.IsValid)
            {
                using (var userManager = HttpContext.GetOwinContext().GetUserManager<LambdaUserManager>())
                {
                    var user = userManager.FindByEmail(model.Email);
                    if (user != null)
                    {
                        ModelState.AddModelError("Email", "User exists already.");
                    }
                    else
                    {

                        user = new LambdaUser
                            {
                                UserName = model.UserName,
                                Status = UserStatus.Created,
                                Password = model.Password,
                                Emails = new List<string>() {model.Email},
                                TimezoneOffset = model.Timezoneoffset,
                                CreatedAt = DateTime.UtcNow
                            };

                        var result = await userManager.CreateAsync(user);
                        if (result.Succeeded)
                        {
                            var scheme = this.Request.Url == null ? "http" : this.Request.Url.Scheme;
                            var url = this.Url.Action("Check", "Account", new { id = user.Id }, scheme);

                            var body = string.Format(Settings.Default.ValidationEmailBody, model.UserName, url);
                            userManager.SendEmailAsync(model.Email, Settings.Default.ValidationEmailSubject, body);
                            //sendEmailTask.Wait();

                            TempData["ValidationModel"] = new ValidationModel()
                                {
                                    Id = user.Id,
                                    Email = model.Email,
                                    UserName = model.UserName,
                                    Message = "Validation email has been sent to your email."
                                };
                            return RedirectToAction("Validation", "Account");
                        }

                        if (result.Errors != null && result.Errors.Any())
                            ModelState.AddModelError("", result.Errors.FirstOrDefault());
                    }
                }
            }

            return View(model);
        }
        public ActionResult SendEmail(string id, string email)
        {
            if (!string.IsNullOrWhiteSpace(id))
            {
                using (var userManager = HttpContext.GetOwinContext().GetUserManager<LambdaUserManager>())
                {
                    var user = userManager.FindById(id);
                    if (user != null)
                    {
                        var scheme = this.Request.Url == null ? "http" : this.Request.Url.Scheme;
                        var url = this.Url.Action("Check", "Account", new { id = user.Id }, scheme);

                        var body = string.Format(Settings.Default.ValidationEmailBody, user.UserName, url);
                        userManager.SendEmailAsync(email, Settings.Default.ValidationEmailSubject, body);
                        //sendEmailTask.Wait();
                    }
                }
            }

            TempData["ValidationModel"] = new ValidationModel()
                {
                    Id = id,
                    Email = email,
                    Message = "Validation email has been sent already."
                };
            return RedirectToAction("Validation", "Account");
        }
        public async Task<ActionResult> Signin(SigninModel model)
        {
            if (ModelState.IsValid)
            {
                using (var userManager = HttpContext.GetOwinContext().GetUserManager<LambdaUserManager>())
                {
                    var user = userManager.FindByEmail(model.Email);
                    if (user == null)
                    {
                        ModelState.AddModelError("Email", "User does not exist.");
                        return View(model);
                    }

                    if (user.Status == UserStatus.Created)
                    {
                        TempData["ValidationModel"] = new ValidationModel()
                            {
                                Id = user.Id,
                                Email = model.Email,
                                UserName = user.UserName,
                                Message =
                                    "Validation email has been sent to your email, this is the last step before using Lambda website."
                            };
                        return RedirectToAction("Validation", "Account");
                    }

                    if(user.Status == UserStatus.Locked)
                    {
                        ModelState.AddModelError("Email", "Your account has been locked, please contact administrator to unlock.");
                        return View(model);
                    }
                    if(user.Status == UserStatus.Discarded)
                    {
                        ModelState.AddModelError("Email", "This account has been deleted already.");
                        return View(model);
                    }

                    using (var signinManager = HttpContext.GetOwinContext().GetUserManager<LambdaUserManager.LambdaySignInManager>())
                    {
                        var status = await signinManager.PasswordSignInAsync(model.Email, model.Password, isPersistent: true, shouldLockout: false);
                        switch (status)
                        {
                            case SignInStatus.Success:
                                return RedirectToAction("Index", "Weight");
                            default:
                                ModelState.AddModelError("Password", "Email or Password is not correct.");
                                return View(model);
                        }
                    }
                }
            }

            return View(model);
        }