void OnEnter(HttpContext context)
{
if (context.Session == null || !context.Request.Url.AbsolutePath.Contains("/Canvas"))
return;
// the following browsers has 'Accept cookie from site I visit settings'. we need to make them store cookie.
HttpBrowserCapabilities br = context.Request.Browser;
bool forceLogin = br.IsBrowser("opera") || (br.IsBrowser("safari") && !br.IsBrowser("googlechrome"));
forceLogin = forceLogin && context.Session["after_login"] == null;
var util = new CanvasAuthContext(this)
{
Culture = CultureInfo.CurrentCulture,
ExProcessor = ex => Debug.Write(ex),
};
util.SessionStorage = new CookieSessionStore(context, util);
if (util.Authenticate(context) && !forceLogin)
{
context.User = new GenericPrincipal(new Identity(util), null);
var step = context.Session["after_login"] as int?;
if (!step.HasValue || step.Value != 0) return;
context.Session["after_login"] = 1;
CanvasAuthContext.RedirectFromIFrame(context, util.ResolveCanvasPageUrl(context.Request.AppRelativeCurrentExecutionFilePath));
}
else if (!(context.Handler is IClientAuth))
{
context.Session["after_login"] = 0;
var @params = new Dictionary<string, string> { { "req_perms", "user_birthday" } };
CanvasAuthContext.RedirectFromIFrame(context, util.GetLoginUrl(context.Request.Url, @params));
return;
}
}