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);
}
}
}