blob: 21b15d243ff974a9c66110cce4637c1ccd665fc7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
//-----------------------------------------------------------------------
// <copyright file="AccountInfo.aspx.cs" company="Andrew Arnott">
// Copyright (c) Andrew Arnott. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------
namespace WebFormsRelyingParty.Members {
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DotNetOpenAuth.InfoCard;
using DotNetOpenAuth.OpenId.RelyingParty;
using RelyingPartyLogic;
public partial class AccountInfo : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
Database.LoggedInUser.AuthenticationTokens.Load();
this.Repeater1.DataSource = Database.LoggedInUser.AuthenticationTokens;
if (!Database.LoggedInUser.IssuedToken.IsLoaded) {
Database.LoggedInUser.IssuedToken.Load();
}
this.tokenListRepeater.DataSource = Database.LoggedInUser.IssuedToken;
foreach (var token in Database.LoggedInUser.IssuedToken) {
if (!token.ConsumerReference.IsLoaded) {
token.ConsumerReference.Load();
}
}
this.authorizedClientsPanel.Visible = Database.LoggedInUser.IssuedToken.Count > 0;
if (!IsPostBack) {
this.Repeater1.DataBind();
this.tokenListRepeater.DataBind();
this.emailBox.Text = Database.LoggedInUser.EmailAddress;
this.emailVerifiedLabel.Visible = Database.LoggedInUser.EmailAddressVerified;
this.firstNameBox.Text = Database.LoggedInUser.FirstName;
this.lastNameBox.Text = Database.LoggedInUser.LastName;
}
this.firstNameBox.Focus();
}
protected void openIdBox_LoggedIn(object sender, OpenIdEventArgs e) {
this.AddIdentifier(e.ClaimedIdentifier, e.Response.FriendlyIdentifierForDisplay);
}
protected void deleteOpenId_Command(object sender, CommandEventArgs e) {
string claimedId = (string)e.CommandArgument;
var token = Database.DataContext.AuthenticationToken.First(t => t.ClaimedIdentifier == claimedId && t.User.Id == Database.LoggedInUser.Id);
Database.DataContext.DeleteObject(token);
Database.DataContext.SaveChanges();
this.Repeater1.DataBind();
}
protected void saveChanges_Click(object sender, EventArgs e) {
if (!IsValid) {
return;
}
Database.LoggedInUser.EmailAddress = this.emailBox.Text;
Database.LoggedInUser.FirstName = this.firstNameBox.Text;
Database.LoggedInUser.LastName = this.lastNameBox.Text;
this.emailVerifiedLabel.Visible = Database.LoggedInUser.EmailAddressVerified;
}
protected void InfoCardSelector1_ReceivedToken(object sender, ReceivedTokenEventArgs e) {
this.AddIdentifier(AuthenticationToken.SynthesizeClaimedIdentifierFromInfoCard(e.Token.UniqueId), e.Token.SiteSpecificId);
}
protected void revokeToken_Command(object sender, CommandEventArgs e) {
string token = (string)e.CommandArgument;
var tokenToRevoke = Database.DataContext.IssuedToken.FirstOrDefault(t => t.Token == token && t.User.Id == Database.LoggedInUser.Id);
if (tokenToRevoke != null) {
Database.DataContext.DeleteObject(tokenToRevoke);
}
this.tokenListRepeater.DataBind();
this.noAuthorizedClientsPanel.Visible = Database.LoggedInUser.IssuedToken.Count == 0;
}
private void AddIdentifier(string claimedId, string friendlyId) {
// Check that this identifier isn't already tied to a user account.
// We do this again here in case the LoggingIn event couldn't verify
// and in case somehow the OP changed it anyway.
var existingToken = Database.DataContext.AuthenticationToken.FirstOrDefault(token => token.ClaimedIdentifier == claimedId);
if (existingToken == null) {
var token = new AuthenticationToken();
token.ClaimedIdentifier = claimedId;
token.FriendlyIdentifier = friendlyId;
Database.LoggedInUser.AuthenticationTokens.Add(token);
Database.DataContext.SaveChanges();
this.Repeater1.DataBind();
// Clear the box for the next entry
this.openIdSelector.Identifier = null;
} else {
if (existingToken.User == Database.LoggedInUser) {
this.alreadyLinkedLabel.Visible = true;
} else {
this.differentAccountLabel.Visible = true;
}
}
}
}
}
|