using BuddyFinance.Integration; using BuddyFinance.Integration.Models; using BuddyFinance.Integration.Models.Account; using BuddyFinance.Integration.Models.Enums; using BuddyFinance.WebApi.Filters; using System.Collections.Generic; using System.Configuration; using System.Web.Http; namespace BuddyFinance.WebApi.Controllers { /// /// Manage accounts /// [RoutePrefix("api/account")] public class AccountController : BaseController { private SecurityIntegrator _securityIntegrator; /// /// /// public AccountController() { _securityIntegrator = new SecurityIntegrator(); } /// /// Get all accounts /// /// [HttpGet] [Route("all")] public BaseResult> All() { return _securityIntegrator.UserAccounts(); } /// /// Returns a user provided a user Id /// /// User ID /// [HttpGet] [Route("{userId}")] // api/account/123 public BaseResult GetById(int userId) { return _securityIntegrator.Get(userId); } /// /// Account login /// /// Account login details /// [HttpPost] [Route("login")] [AllowAnonymous] public LoginResult Login(AccountLoginModel loginInfo) { return _securityIntegrator.Login(loginInfo.Username, loginInfo.Password); } /// /// Generates account verification link /// /// username for the account to generate the link for /// [HttpPost] [Route("resendverifylink")] [AllowAnonymous] public BaseResult ResendVerifyLink(string username) { var url = ConfigurationManager.AppSettings["VerifyUrl"]; return _securityIntegrator.GenerateToken(username, true, url, NotificationTempate.ProfileRegistered, "Verify your Account - Buddy Finance"); } /// /// Generates password reset token /// /// User account login username /// [HttpPost] [Route("sendpasswordreset")] public BaseResult GeneratePasswordToken(string username) { var url = ConfigurationManager.AppSettings["ResetPasswordUrl"]; return _securityIntegrator.GenerateToken(username, true, url); } /// /// activates an account by user name /// /// Account username /// [HttpPost] [Route("activate")] public BaseResult Activate(string username) { return _securityIntegrator.Activate(username); } /// /// Deactivates an account by user name /// /// Account username /// [HttpPost] [Route("deactivate")] public BaseResult Deactivate(string username) { return _securityIntegrator.Deactivate(username); } /// /// Reset account password /// /// Password Reset Details /// [HttpPost] [Route("resetpassword")] [AllowAnonymous] public BaseResult ResetPassword(ResetPasswordModel model) { return _securityIntegrator.ResetPassword(model.Username, model.NewPassword, model.OldPassword, model.Token); } /// /// Change apssword /// /// Change password details /// [HttpPost] [Route("changepassword")] public BaseResult ChangePassword(ResetPasswordModel model) { var token = System.Web.HttpContext.Current.Request.Headers["X-Auth-Token"]; return _securityIntegrator.ChangePassword(model.Username, model.OldPassword, model.NewPassword, token); } /// /// confirm an account /// /// Acount confirmation details /// Login Result [HttpPost] [Route("confirm-email")] [AllowAnonymous] public LoginResult ConfirmEmail(ResetPasswordModel model) { var changePasswordResult = _securityIntegrator.ChangePassword(model.Username, model.OldPassword, model.NewPassword, model.Token); if (changePasswordResult.ErrorCode == 0) return _securityIntegrator.Login(model.Username, model.NewPassword); return new LoginResult(changePasswordResult.ErrorCode, changePasswordResult.ErrorMessage); } /// /// Determines if email is used by any account /// /// Email to be checked /// [HttpPost] [Route("exists")] [AllowAnonymous] public BaseResult Exists(string email) { return _securityIntegrator.Exists(email); } /// /// Save (Create) account details /// /// /// [HttpPost] [Route("save")] public BaseResult Save(UserAccountModel userAccount) { return _securityIntegrator.Save(userAccount); } /// /// Save (Update) account details /// /// /// [HttpPost] [Route("update")] public BaseResult Update(UserAccountModel userAccount) { return _securityIntegrator.Update(userAccount); } } }