using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using EPiServer;
using EPiServer.Core;
using EPiServer.DataAbstraction;
using EPiServer.Web.WebControls;
using ExtremeSwank.OpenId;
using System.Web.Security;
using ExtremeSwank.OpenId.PlugIns.Extensions;
namespace EPiServer.OpenID
{ public partial class OpenIdLogin : EPiServer.UserControlBase
{ protected void Page_Load(object sender, EventArgs e)
{ if (!EPiServer.Security.PrincipalInfo.CurrentPrincipal.Identity.IsAuthenticated)
{ if (!IsPostBack)
{ OpenIdClient openid = new OpenIdClient();
switch (openid.RequestedMode)
{ case RequestedMode.IdResolution:
if (openid.ValidateResponse())
{ OpenIdUser thisuser = openid.RetrieveUser();
Session["OpenID_UserObject"] = thisuser;
// Authentication successful - Perform login here
//If user doesn't exist, create him, otherwise - login
if (Membership.FindUsersByName(thisuser.Identity).Count == 0)
{ //If unable to create, throw error
RegisterPanel.Visible = true;
LoginPanel.Visible = false;
}
else
{ EPiServer.Security.PrincipalInfo.CurrentPrincipal = EPiServer.Security.PrincipalInfo.CreatePrincipal(thisuser.Identity);
FormsAuthentication.SetAuthCookie(thisuser.Identity, true); //Persist login through cookie
Visible = false;
}
}
else
{ // Authentication failure handled here
FormsAuthentication.RedirectToLoginPage();
}
break;
case RequestedMode.CanceledByUser:
// User has cancelled authentication - handle here
FormsAuthentication.RedirectToLoginPage();
break;
}
}
LoginBtn.Click += new EventHandler(LoginBtn_Click);
Create.Click += new EventHandler(Create_Click);
}
else
{ Visible = false;
}
}
void Create_Click(object sender, EventArgs e)
{ OpenIdUser thisuser = (OpenIdUser)Session["OpenID_UserObject"];
//Create the new user
MembershipUser u = Membership.CreateUser(thisuser.Identity, Membership.GeneratePassword(12, 3),Email.Text);
//Assign to various roles - consider setting email / show wizard
EPiServer.Security.PrincipalInfo.CurrentPrincipal = EPiServer.Security.PrincipalInfo.CreatePrincipal(thisuser.Identity);
FormsAuthentication.SetAuthCookie(thisuser.Identity, true); //Persist login through cookie
}
void LoginBtn_Click(object sender, EventArgs e)
{ OpenIdClient openid = new OpenIdClient();
openid.Identity = Identity.Text;
openid.CreateRequest();
}
}
}