summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth.WebPages/WebPagesOAuthDataProvider.cs
blob: b8895c0ff17d524bc6b99692f899550558661470 (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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Security;
using DotNetOpenAuth.Web;
using WebMatrix.WebData;

namespace DotNetOpenAuth.WebPages
{
    internal class WebPagesOAuthDataProvider : IOAuthDataProvider
    {
        public WebPagesOAuthDataProvider()
        {
        }

        private static ExtendedMembershipProvider VerifyProvider()
        {
            var provider = Membership.Provider as ExtendedMembershipProvider;
            if (provider == null)
            {
                throw new InvalidOperationException();
            }
            return provider;
        }

        public string GetUserNameFromOAuth(string oAuthProvider, string oAuthId)
        {
            ExtendedMembershipProvider provider = VerifyProvider();

            int userId = provider.GetUserIdFromOAuth(oAuthProvider, oAuthId);
            if (userId == -1) {
                return null;
            }

            return provider.GetUserNameFromId(userId);
        }

        public void CreateOrUpdateOAuthAccount(string oAuthProvider, string oAuthId, string username)
        {
            ExtendedMembershipProvider provider = VerifyProvider();
            provider.CreateOrUpdateOAuthAccount(oAuthProvider, oAuthId, username);
        }

        public bool DeleteOAuthAccount(string oAuthProvider, string oAuthId)
        {
            ExtendedMembershipProvider provider = VerifyProvider();

            string username = GetUserNameFromOAuth(oAuthProvider, oAuthId);
            if (String.IsNullOrEmpty(username))
            {
                // account doesn't exist
                return false;
            }

            provider.DeleteOAuthAccount(oAuthProvider, oAuthId);
            return true;
        }

        public ICollection<OAuthAccount> GetOAuthAccountsFromUserName(string userName)
        {
            ExtendedMembershipProvider provider = VerifyProvider();
            return provider.GetAccountsForUser(userName).Select(p => new OAuthAccount(p.Provider, p.ProviderUserId)).ToList();
        }
    }
}