public class BaseController : Controller
{
public UserSession _userSession { set; get; }
AuthenticationManager _authenticationManager = new AuthenticationManager();
public BaseController()
{
if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
{
(new UserManager()).CreateUserSession();
}
else
{
//2.
if user not authenticated then redirect to login controller.
RedirectToControllers(ControllerHelper.Controller.ACCOUNT, ControllerHelper.Controller.Action.ACCOUNT_LOGIN);
}
}
/// <summary>
/// Override onAuthentication filter is use to check
authentication.
/// </summary>
/// <param
name="filterContext"></param>
protected override void OnAuthentication(AuthenticationContext filterContext)
{
//1.
authentication manager will check that user authenticated and user session
created sucessfully.
if (_authenticationManager.IsUserAuthenticated())
{
//1.1.
get user session and set into to _usersession member to consume into inherited
controller.
_userSession = UserManager.GetUserSession();
}
else
{
//2.
if user not authenticated then redirect to login controller.
RedirectToControllers(ControllerHelper.Controller.ACCOUNT, ControllerHelper.Controller.Action.ACCOUNT_LOGIN);
}
}
/// <summary>
/// Override onAuthentication filter is use to check
authentication.
/// </summary>
/// <param name="filterContext"></param>
protected override void OnException(ExceptionContext filterContext)
{
AppException appException = new AppException();
appException.Type =
filterContext.GetType().ToString();
appException.StackTrace =
filterContext.Exception.StackTrace;
appException.Source =
filterContext.Exception.Source;
appException.InnerException = Convert.ToString(filterContext.Exception.InnerException);
(new ExceptionManager()).ExceptionLog(appException);
// if
the request is AJAX return JSON else view.
if (IsAjax(filterContext))
{
//Because
its a exception raised after ajax invocation
//Lets
return Json
filterContext.Result = new JsonResult()
{
Data =
filterContext.Exception.Message,
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
filterContext.ExceptionHandled
= true;
filterContext.HttpContext.Response.Clear();
}
else
{
if (AppConfigurationManager.GetCustomApplicationError())
{
filterContext.ExceptionHandled = true;
//RedirectToControllers(ControllerHelper.Controller.ACCOUNT,
ControllerHelper.Controller.Action.APPLICATIONERROR, true);
}
}
}
private bool IsAjax(ExceptionContext filterContext)
{
return filterContext.HttpContext.Request.Headers["X-Requested-With"]
== "XMLHttpRequest";
}
/// <summary>
/// Override onAuthorization filter is use for authorization
use request.
/// </summary>
/// <param
name="filterContext"></param>
protected override void OnAuthorization(AuthorizationContext filterContext)
{
AuthorizationManager authorizationManager = new AuthorizationManager();
if(!authorizationManager.IsAuthorized(_userSession))
{
RedirectToControllers(ControllerHelper.Controller.ACCOUNT, ControllerHelper.Controller.Action.ACCOUNT_LOGIN);
}
}
/// <summary>
/// Redirect to particular controller and their action.
/// </summary>
/// <param
name="control">Name of contoller to
redirect</param>
/// <param
name="action">Name of action to
redirect</param>
private void RedirectToControllers(string control, string action, bool redirectCheck = false)
{
var routeData = new RouteData();
routeData.Values["controller"] =
control;
routeData.Values["action"] =
action;
IController controller = null;
if (control == Constants.Alerts)
{
controller = new AlertsController();
}
else if (control == Constants.Account)
{
controller = new AccountController();
}
if (controller != null)
{
if (redirectCheck)
{
((IController)controller).Execute(new RequestContext(new HttpContextWrapper(System.Web.HttpContext.Current),
routeData));
}
else
{
string returnUrl =
System.Web.HttpContext.Current.Request.Url.AbsolutePath;
System.Web.HttpContext.Current.Response.Redirect(string.Format("/{0}/{1}?" +
returnUrl, ControllerHelper.Controller.ACCOUNT, ControllerHelper.Controller.Action.ACCOUNT_LOGIN));
}
}
}
}
public class AuthenticationManager:BaseManager
{
[LogAspect]
/// <summary>
/// Return boolean value if user authenticated then return
true else return false.
/// </summary>
/// <returns>Return boolean</returns>
public bool IsUserAuthenticated()
{
if (HttpContext.Current.User.Identity.IsAuthenticated && UserManager.GetUserSession() !=
null)
{
return true;
}
return false;
}
}