Skip to content

Commit 0badfd4

Browse files
committed
merge for pr39
2 parents 1c066be + 7a7b523 commit 0badfd4

20 files changed

+502
-217
lines changed

src/FlexProviders.EF/App.config

+16
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,20 @@
1414
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
1515
</providers>
1616
</entityFramework>
17+
<runtime>
18+
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
19+
<dependentAssembly>
20+
<assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
21+
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
22+
</dependentAssembly>
23+
<dependentAssembly>
24+
<assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
25+
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
26+
</dependentAssembly>
27+
<dependentAssembly>
28+
<assemblyIdentity name="WebMatrix.Data" publicKeyToken="31bf3856ad364e35" culture="neutral" />
29+
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
30+
</dependentAssembly>
31+
</assemblyBinding>
32+
</runtime>
1733
</configuration>

src/FlexProviders.EF/FlexMembershipUserStore.cs

+56-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
using System;
12
using System.Collections.Generic;
23
using System.Data;
34
using System.Data.Entity;
45
using System.Data.Entity.Core.Objects.DataClasses;
56
using System.Linq;
7+
using System.Text.RegularExpressions;
68
using FlexProviders.Membership;
79
using Microsoft.Web.WebPages.OAuth;
810

@@ -19,11 +21,35 @@ public FlexMembershipUserStore (DbContext context)
1921
_context = context;
2022
}
2123

22-
public TUser GetUserByUsername(string username)
24+
public TUser GetUserByUsername(string username, string license = null)
2325
{
24-
return _context.Set<TUser>().SingleOrDefault(u => u.Username == username);
26+
27+
//workaround since it refused to work otherwise.
28+
if (license == null)
29+
{
30+
return _context.Set<TUser>().SingleOrDefault(u => u.Username == username && u.License == null);
31+
}
32+
33+
return _context.Set<TUser>().SingleOrDefault(u => u.Username == username && u.License == license);
2534
}
2635

36+
public TUser GetUserBySsoToken(string token)
37+
{
38+
var utcNow = DateTime.UtcNow;
39+
return _context.Set<TUser>().SingleOrDefault(u => u.SsoToken != null && u.SsoToken == token && u.SsoTokenExpiration.HasValue && u.SsoTokenExpiration.Value > utcNow);
40+
}
41+
42+
public IEnumerable<TUser> GetAllUsers(string license = null)
43+
{
44+
//workaround since it refused to work otherwise.
45+
if (license == null)
46+
{
47+
return _context.Set<TUser>().Where(u => u.License == null).ToList();
48+
}
49+
50+
return _context.Set<TUser>().Where(u => u.License == license).ToList();
51+
}
52+
2753
public TUser Add(TUser user)
2854
{
2955
_context.Set<TUser>().Add((TUser)user);
@@ -40,7 +66,7 @@ public TUser Save(TUser user)
4066

4167
public TUser CreateOAuthAccount(string provider, string providerUserId, TUser user)
4268
{
43-
user = _context.Set<TUser>().Single(u => u.Username == user.Username);
69+
user = _context.Set<TUser>().Single(u => u.Username == user.Username && u.License == user.License);
4470
if(user.OAuthAccounts == null)
4571
{
4672
user.OAuthAccounts = new EntityCollection<FlexOAuthAccount>();
@@ -74,10 +100,35 @@ public TUser GetUserByPasswordResetToken(string passwordResetToken)
74100
return user;
75101
}
76102

77-
public IEnumerable<OAuthAccount> GetOAuthAccountsForUser(string username)
103+
public IEnumerable<OAuthAccount> GetOAuthAccountsForUser(string username, string license = null)
78104
{
79-
var user = _context.Set<TUser>().Single(u => u.Username == username);
105+
var user = _context.Set<TUser>().Single(u => u.Username == username && u.License == license);
80106
return user.OAuthAccounts.Select(account => new OAuthAccount(account.Provider, account.ProviderUserId));
81107
}
108+
109+
/// <summary>
110+
/// Renames a license by taking all users of the old license and moving them to the new license.
111+
/// Will return false if users exist with the new name
112+
/// </summary>
113+
/// <param name="oldName">The current name you want to change away from.</param>
114+
/// <param name="newName">The new license name that all users will be linked to.</param>
115+
public bool RenameLicense(string oldName, string newName)
116+
{
117+
//There are already users with the new license name so we do nothing
118+
if (_context.Set<TUser>().Count(u => u.License == newName) > 0)
119+
{
120+
return false;
121+
}
122+
123+
var users = _context.Set<TUser>().Where(u => u.License == oldName);
124+
125+
foreach (var user in users)
126+
{
127+
user.License = newName;
128+
}
129+
_context.SaveChanges();
130+
131+
return true;
132+
}
82133
}
83134
}

src/FlexProviders.EF/FlexProviders.EF.csproj

+12-11
Original file line numberDiff line numberDiff line change
@@ -34,27 +34,27 @@
3434
<ItemGroup>
3535
<Reference Include="DotNetOpenAuth.AspNet, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL">
3636
<SpecificVersion>False</SpecificVersion>
37-
<HintPath>..\packages\DotNetOpenAuth.AspNet.4.1.2.12274\lib\net45-full\DotNetOpenAuth.AspNet.dll</HintPath>
37+
<HintPath>..\packages\DotNetOpenAuth.AspNet.4.1.4.12333\lib\net45-full\DotNetOpenAuth.AspNet.dll</HintPath>
3838
</Reference>
3939
<Reference Include="DotNetOpenAuth.Core, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL">
4040
<SpecificVersion>False</SpecificVersion>
41-
<HintPath>..\packages\DotNetOpenAuth.Core.4.1.2.12274\lib\net45-full\DotNetOpenAuth.Core.dll</HintPath>
41+
<HintPath>..\packages\DotNetOpenAuth.Core.4.1.4.12333\lib\net45-full\DotNetOpenAuth.Core.dll</HintPath>
4242
</Reference>
4343
<Reference Include="DotNetOpenAuth.OAuth, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL">
4444
<SpecificVersion>False</SpecificVersion>
45-
<HintPath>..\packages\DotNetOpenAuth.OAuth.Core.4.1.2.12274\lib\net45-full\DotNetOpenAuth.OAuth.dll</HintPath>
45+
<HintPath>..\packages\DotNetOpenAuth.OAuth.Core.4.1.4.12333\lib\net45-full\DotNetOpenAuth.OAuth.dll</HintPath>
4646
</Reference>
4747
<Reference Include="DotNetOpenAuth.OAuth.Consumer, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL">
4848
<SpecificVersion>False</SpecificVersion>
49-
<HintPath>..\packages\DotNetOpenAuth.OAuth.Consumer.4.1.2.12274\lib\net45-full\DotNetOpenAuth.OAuth.Consumer.dll</HintPath>
49+
<HintPath>..\packages\DotNetOpenAuth.OAuth.Consumer.4.1.4.12333\lib\net45-full\DotNetOpenAuth.OAuth.Consumer.dll</HintPath>
5050
</Reference>
5151
<Reference Include="DotNetOpenAuth.OpenId, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL">
5252
<SpecificVersion>False</SpecificVersion>
53-
<HintPath>..\packages\DotNetOpenAuth.OpenId.Core.4.1.2.12274\lib\net45-full\DotNetOpenAuth.OpenId.dll</HintPath>
53+
<HintPath>..\packages\DotNetOpenAuth.OpenId.Core.4.1.4.12333\lib\net45-full\DotNetOpenAuth.OpenId.dll</HintPath>
5454
</Reference>
5555
<Reference Include="DotNetOpenAuth.OpenId.RelyingParty, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL">
5656
<SpecificVersion>False</SpecificVersion>
57-
<HintPath>..\packages\DotNetOpenAuth.OpenId.RelyingParty.4.1.2.12274\lib\net45-full\DotNetOpenAuth.OpenId.RelyingParty.dll</HintPath>
57+
<HintPath>..\packages\DotNetOpenAuth.OpenId.RelyingParty.4.1.4.12333\lib\net45-full\DotNetOpenAuth.OpenId.RelyingParty.dll</HintPath>
5858
</Reference>
5959
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
6060
<SpecificVersion>False</SpecificVersion>
@@ -63,8 +63,9 @@
6363
<Reference Include="EntityFramework.SqlServer">
6464
<HintPath>..\packages\EntityFramework.6.1.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
6565
</Reference>
66-
<Reference Include="Microsoft.Web.WebPages.OAuth, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
67-
<HintPath>..\..\packages\Microsoft.AspNet.WebPages.OAuth.2.0.20710.0\lib\net40\Microsoft.Web.WebPages.OAuth.dll</HintPath>
66+
<Reference Include="Microsoft.Web.WebPages.OAuth, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
67+
<SpecificVersion>False</SpecificVersion>
68+
<HintPath>..\packages\Microsoft.AspNet.WebPages.OAuth.3.2.3\lib\net45\Microsoft.Web.WebPages.OAuth.dll</HintPath>
6869
</Reference>
6970
<Reference Include="System" />
7071
<Reference Include="System.ComponentModel.DataAnnotations" />
@@ -79,9 +80,9 @@
7980
<Private>True</Private>
8081
<HintPath>..\..\packages\Microsoft.AspNet.WebPages.Data.2.0.20710.0\lib\net40\WebMatrix.Data.dll</HintPath>
8182
</Reference>
82-
<Reference Include="WebMatrix.WebData, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
83-
<Private>True</Private>
84-
<HintPath>..\..\packages\Microsoft.AspNet.WebPages.WebData.2.0.20710.0\lib\net40\WebMatrix.WebData.dll</HintPath>
83+
<Reference Include="WebMatrix.WebData, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
84+
<SpecificVersion>False</SpecificVersion>
85+
<HintPath>..\packages\Microsoft.AspNet.WebPages.WebData.3.2.3\lib\net45\WebMatrix.WebData.dll</HintPath>
8586
</Reference>
8687
</ItemGroup>
8788
<ItemGroup>

src/FlexProviders.EF/FlexRoleStore.cs

+60-14
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
using System.Collections.Generic;
12
using System.Collections.ObjectModel;
23
using System.Data.Entity;
34
using System.Linq;
5+
using System.Security.Policy;
46
using FlexProviders.Membership;
57
using FlexProviders.Roles;
68

@@ -24,37 +26,72 @@ public void CreateRole(string roleName)
2426
_context.SaveChanges();
2527
}
2628

27-
public string[] GetRolesForUser(string username)
29+
public string[] GetRolesForUser(string username, string license = null)
2830
{
29-
return _context.Set<TRole>().Where(role => role.Users.Any(u => u.Username.Equals(username)))
31+
if(license == null)
32+
{
33+
return _context.Set<TRole>().Where(role => role.Users.Any(u => u.Username.Equals(username) && u.License == null))
34+
.Select(role => role.Name).ToArray();
35+
}
36+
37+
return _context.Set<TRole>().Where(role => role.Users.Any(u => u.Username.Equals(username) && u.License == license))
3038
.Select(role => role.Name).ToArray();
3139
}
3240

33-
public string[] GetUsersInRole(string roleName)
41+
public string[] GetUsersInRole(string roleName, string license = null)
3442
{
35-
return _context.Set<TRole>().Where(role => role.Name.Equals(roleName))
36-
.SelectMany(role => role.Users).Select(user => user.Username)
43+
if (license == null)
44+
{
45+
return _context.Set<TRole>().Where(role => role.Name.Equals(roleName))
46+
.SelectMany(role => role.Users.Where(u => u.License == null)).Select(user => user.Username)
47+
.ToArray();
48+
}
49+
50+
return _context.Set<TRole>().Where(role => role.Name.Equals(roleName))
51+
.SelectMany(role => role.Users.Where(u => u.License == license)).Select(user => user.Username)
3752
.ToArray();
3853

3954
}
55+
public string[] GetAllUsersInRole(string roleName)
56+
{
57+
return _context.Set<TRole>().Where(role => role.Name.Equals(roleName))
58+
.SelectMany(role => role.Users).Select(user => user.Username)
59+
.ToArray();
60+
}
4061

4162
public string[] GetAllRoles()
4263
{
4364
return _context.Set<TRole>().Select(role => role.Name).ToArray();
4465
}
4566

46-
public string[] FindUsersInRole(string roleName, string usernameToMatch)
67+
public string[] FindUsersInRole(string roleName, string usernameToMatch, string license = null)
4768
{
48-
return _context.Set<TRole>().Where(role => role.Name.Equals(roleName))
49-
.SelectMany(role => role.Users).Where(user => user.Username.StartsWith(usernameToMatch)).Select(user => user.Username)
69+
if (license == null)
70+
{
71+
return _context.Set<TRole>().Where(role => role.Name.Equals(roleName))
72+
.SelectMany(role => role.Users.Where(user => user.License == null)).Where(user => user.Username.StartsWith(usernameToMatch)).Select(user => user.Username)
73+
.ToArray();
74+
}
75+
76+
return _context.Set<TRole>().Where(role => role.Name.Equals(roleName))
77+
.SelectMany(role => role.Users.Where(user => user.License == license)).Where(user => user.Username.StartsWith(usernameToMatch)).Select(user => user.Username)
5078
.ToArray();
5179
}
5280

53-
public void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
81+
public void RemoveUsersFromRoles(string[] usernames, string[] roleNames, string license = null)
5482
{
55-
var users = _context.Set<TUser>().Where(u => usernames.Contains(u.Username)).ToList();
83+
List<TUser> users = null;
5684

57-
foreach (var roleName in roleNames)
85+
if (license == null)
86+
{
87+
users = _context.Set<TUser>().Where(u => usernames.Contains(u.Username) && u.License == null).ToList();
88+
}
89+
else
90+
{
91+
users = _context.Set<TUser>().Where(u => usernames.Contains(u.Username) && u.License == license).ToList();
92+
}
93+
94+
foreach (var roleName in roleNames)
5895
{
5996
var role = _context.Set<TRole>().Include(r=>r.Users).SingleOrDefault(r => r.Name == roleName);
6097
if (role != null)
@@ -68,11 +105,20 @@ public void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
68105
_context.SaveChanges();
69106
}
70107

71-
public void AddUsersToRoles(string[] usernames, string[] roleNames)
108+
public void AddUsersToRoles(string[] usernames, string[] roleNames, string license = null)
72109
{
73-
var users = _context.Set<TUser>().Where(u => usernames.Contains(u.Username)).ToList();
110+
List<TUser> users = null;
111+
112+
if (license == null)
113+
{
114+
users = _context.Set<TUser>().Where(u => usernames.Contains(u.Username) && u.License == null).ToList();
115+
}
116+
else
117+
{
118+
users = _context.Set<TUser>().Where(u => usernames.Contains(u.Username) && u.License == license).ToList();
119+
}
74120

75-
foreach (var roleName in roleNames)
121+
foreach (var roleName in roleNames)
76122
{
77123
var role = _context.Set<TRole>().SingleOrDefault(r => r.Name == roleName);
78124
if (role != null)

src/FlexProviders.EF/packages.config

+8-10
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3-
<package id="CodeContracts.Unofficial" version="1.0.0.2" targetFramework="net45" />
4-
<package id="DotNetOpenAuth.AspNet" version="4.1.2.12274" targetFramework="net45" />
5-
<package id="DotNetOpenAuth.Core" version="4.1.2.12274" targetFramework="net45" />
6-
<package id="DotNetOpenAuth.OAuth.Consumer" version="4.1.2.12274" targetFramework="net45" />
7-
<package id="DotNetOpenAuth.OAuth.Core" version="4.1.2.12274" targetFramework="net45" />
8-
<package id="DotNetOpenAuth.OpenId.Core" version="4.1.2.12274" targetFramework="net45" />
9-
<package id="DotNetOpenAuth.OpenId.RelyingParty" version="4.1.2.12274" targetFramework="net45" />
3+
<package id="DotNetOpenAuth.AspNet" version="4.1.4.12333" targetFramework="net45" />
4+
<package id="DotNetOpenAuth.Core" version="4.1.4.12333" targetFramework="net45" />
5+
<package id="DotNetOpenAuth.OAuth.Consumer" version="4.1.4.12333" targetFramework="net45" />
6+
<package id="DotNetOpenAuth.OAuth.Core" version="4.1.4.12333" targetFramework="net45" />
7+
<package id="DotNetOpenAuth.OpenId.Core" version="4.1.4.12333" targetFramework="net45" />
8+
<package id="DotNetOpenAuth.OpenId.RelyingParty" version="4.1.4.12333" targetFramework="net45" />
109
<package id="EntityFramework" version="6.1.0" targetFramework="net45" />
1110
<package id="Microsoft.AspNet.WebPages.Data" version="2.0.20710.0" targetFramework="net45" />
12-
<package id="Microsoft.AspNet.WebPages.OAuth" version="2.0.20710.0" targetFramework="net45" />
13-
<package id="Microsoft.AspNet.WebPages.WebData" version="2.0.20710.0" targetFramework="net45" />
11+
<package id="Microsoft.AspNet.WebPages.OAuth" version="3.2.3" targetFramework="net45" />
12+
<package id="Microsoft.AspNet.WebPages.WebData" version="3.2.3" targetFramework="net45" />
1413
<package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net45" />
15-
<package id="System.Net.Http" version="2.0.20710.0" targetFramework="net45" />
1614
</packages>

src/FlexProviders.Tests.EF/User.cs

+5
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,19 @@ public User()
1212
}
1313

1414
public int Id { get; set; }
15+
public string Group { get; set; }
1516
public string Username { get; set; }
1617
public string Password { get; set; }
18+
public string Email { get; set; }
1719
public string Salt { get; set; }
1820
public string PasswordResetToken { get; set; }
1921
public DateTime PasswordResetTokenExpiration { get; set; }
2022
public bool IsLocal { get; set; }
2123
public int FavoriteNumber { get; set; }
2224
public virtual ICollection<FlexOAuthAccount> OAuthAccounts { get; set; }
2325
public ICollection<Role> Roles { get; set; }
26+
public string License { get; set; }
27+
public string SsoToken { get; set; }
28+
public DateTime? SsoTokenExpiration { get; set; }
2429
}
2530
}

0 commit comments

Comments
 (0)