public void Init(HttpApplication app)
{
app.AddOnPostAcquireRequestStateAsync((s, e, cb, state) =>
{
HttpContext context = app.Context;
var tar = new TypedAsyncResult<Identity>(cb, state);
if (context.Session == null || !context.Request.Url.AbsolutePath.Contains("/Connect"))
{
tar.Complete(true);
return tar;
}
var util = new OAuthContext(AppId, AppSecret)
{
Culture = CultureInfo.CurrentCulture,
ExProcessor = ex => Debug.Write(ex),
};
util.SessionStorage = new AspNetSessionStore(context, util);
util.BeginAuthenticateRequest(context, tar.AsSafe(ar =>
{
util.EndAuthenticateRequest(ar);
tar.Complete(new Identity(util), false);
}), null);
return tar;
},
ar =>
{
var ident = TypedAsyncResult<Identity>.End(ar, null);
if (ident == null)
return;
HttpContext context = app.Context;
if (!ident.IsAuthenticated)
{
//var @params = new Dictionary<string, string> { { "scope", "user_birthday" } };
context.Response.Redirect(ident.AuthContext.GetLoginUrl(context.Request.Url, new LoginParams { ReqPerms = "user_birthday" }), false);
context.ApplicationInstance.CompleteRequest();
return;
}
context.User = new GenericPrincipal(ident, null);
});
}