1
1
using Microsoft . AspNetCore . Identity ;
2
- using Microsoft . EntityFrameworkCore ;
3
2
using System ;
4
3
using System . Collections . Generic ;
5
4
using System . Linq ;
6
- using System . Security . Claims ;
7
5
using System . Threading . Tasks ;
8
6
7
+ using tomware . OpenIddict . UI . Identity . Core ;
8
+ using tomware . OpenIddict . UI . Suite . Core ;
9
+
9
10
namespace tomware . OpenIddict . UI . Identity . Api
10
11
{
11
12
public interface IAccountApiService
@@ -21,50 +22,36 @@ public interface IAccountApiService
21
22
public class AccountApiService < TIdentityUser > : IAccountApiService
22
23
where TIdentityUser : IdentityUser , new ( )
23
24
{
24
- // TODO: move UserManager down to Infrastructure
25
- // using Microsoft.EntityFrameworkCore is wrong in the Api layer!
26
- // remove package dependency <PackageReference Include="OpenIddict.EntityFrameworkCore" Version="3.0.5" />
27
- private readonly UserManager < TIdentityUser > _manager ;
28
- private readonly IUserCreationStrategy < TIdentityUser > _userCreationStrategy ;
25
+ private readonly IAccountService _accountService ;
29
26
30
27
public AccountApiService (
31
- UserManager < TIdentityUser > manager ,
32
- IUserCreationStrategy < TIdentityUser > userCreationStrategy
28
+ IAccountService accountService
33
29
)
34
30
{
35
- _manager = manager
36
- ?? throw new ArgumentNullException ( nameof ( manager ) ) ;
37
- _userCreationStrategy = userCreationStrategy
38
- ?? throw new ArgumentNullException ( nameof ( userCreationStrategy ) ) ;
31
+ _accountService = accountService
32
+ ?? throw new ArgumentNullException ( nameof ( accountService ) ) ;
39
33
}
40
34
41
35
public async Task < IdentityResult > RegisterAsync (
42
36
RegisterUserViewModel model
43
37
)
44
38
{
45
- var identiyUser = _userCreationStrategy . CreateUser ( model ) ;
39
+ var param = SimpleMapper . From < RegisterUserViewModel , RegisterUserParam > ( model ) ;
46
40
47
- return await _manager . CreateAsync ( identiyUser , model . Password ) ;
41
+ return await _accountService . RegisterAsync ( param ) ;
48
42
}
49
43
50
44
public async Task < IdentityResult > ChangePasswordAsync ( ChangePasswordViewModel model )
51
45
{
52
- var user = await _manager . FindByNameAsync ( model . UserName ) ;
46
+ var param = SimpleMapper . From < ChangePasswordViewModel , ChangePasswordParam > ( model ) ;
53
47
54
- return await _manager . ChangePasswordAsync (
55
- user ,
56
- model . CurrentPassword ,
57
- model . NewPassword
58
- ) ;
48
+ return await _accountService . ChangePasswordAsync ( param ) ;
59
49
}
60
50
61
51
public async Task < IEnumerable < UserViewModel > > GetUsersAsync ( )
62
52
{
63
53
// TODO: Paging ???
64
- var items = await _manager . Users
65
- . OrderBy ( u => u . UserName )
66
- . AsNoTracking ( )
67
- . ToListAsync ( ) ;
54
+ var items = await _accountService . GetUsersAsync ( ) ;
68
55
69
56
return items . Select ( u => new UserViewModel
70
57
{
@@ -77,25 +64,21 @@ public async Task<IEnumerable<UserViewModel>> GetUsersAsync()
77
64
78
65
public async Task < UserViewModel > GetUserAsync ( string id )
79
66
{
80
- var user = await _manager . FindByIdAsync ( id ) ;
81
- var roles = await _manager . GetRolesAsync ( user ) ;
82
- var claims = await _manager . GetClaimsAsync ( user ) ;
83
-
84
- var isLockedOut = await _manager . IsLockedOutAsync ( user ) ;
67
+ var user = await _accountService . GetUserAsync ( id ) ;
85
68
86
69
return new UserViewModel
87
70
{
88
71
Id = user . Id ,
89
72
UserName = user . UserName ,
90
73
Email = user . Email ,
91
74
LockoutEnabled = user . LockoutEnabled ,
92
- IsLockedOut = isLockedOut ,
93
- Claims = new List < ClaimViewModel > ( claims . ToList ( ) . Select ( x => new ClaimViewModel
75
+ IsLockedOut = user . IsLockedOut ,
76
+ Claims = new List < ClaimViewModel > ( user . Claims . Select ( x => new ClaimViewModel
94
77
{
95
78
Type = x . Type ,
96
79
Value = x . Value
97
80
} ) ) ,
98
- Roles = roles . ToList ( )
81
+ Roles = user . Roles
99
82
} ;
100
83
}
101
84
@@ -105,74 +88,21 @@ public async Task<IdentityResult> UpdateAsync(UserViewModel model)
105
88
if ( string . IsNullOrWhiteSpace ( model . Id ) )
106
89
throw new InvalidOperationException ( nameof ( model . Id ) ) ;
107
90
108
- var user = await _manager . FindByIdAsync ( model . Id ) ;
109
- user . UserName = model . UserName ;
110
- user . Email = model . Email ;
111
- user . LockoutEnabled = model . LockoutEnabled ;
112
-
113
- var result = await _manager . UpdateAsync ( user ) ;
114
- if ( ! result . Succeeded )
115
- {
116
- return result ;
117
- }
118
-
119
- result = await AssignClaimsAsync (
120
- user ,
121
- model . Claims . Select ( x => new Claim ( x . Type , x . Value ) ) . ToList ( )
122
- ) ;
123
- if ( ! result . Succeeded )
124
- {
125
- return result ;
126
- }
127
-
128
- result = await AssignRolesAsync ( user , model . Roles ) ;
129
- if ( ! result . Succeeded )
91
+ var param = SimpleMapper . From < UserViewModel , UserParam > ( model ) ;
92
+ param . Claims = new List < ClaimInfo > ( model . Claims . Select ( c => new ClaimInfo
130
93
{
131
- return result ;
132
- }
94
+ Type = c . Type ,
95
+ Value = c . Value
96
+ } ) ) ;
133
97
134
- return result ;
98
+ return await _accountService . UpdateAsync ( param ) ;
135
99
}
136
100
137
101
public async Task < IdentityResult > DeleteAsync ( string id )
138
102
{
139
103
if ( string . IsNullOrWhiteSpace ( id ) ) throw new InvalidOperationException ( nameof ( id ) ) ;
140
104
141
- var user = await _manager . FindByIdAsync ( id ) ;
142
-
143
- return await _manager . DeleteAsync ( user ) ;
144
- }
145
-
146
- private async Task < IdentityResult > AssignClaimsAsync (
147
- TIdentityUser user ,
148
- IEnumerable < Claim > claims
149
- )
150
- {
151
- // removing all claims
152
- var existingClaims = await _manager . GetClaimsAsync ( user ) ;
153
- await _manager . RemoveClaimsAsync ( user , existingClaims ) ;
154
-
155
- // assigning claims
156
- return await _manager . AddClaimsAsync (
157
- user ,
158
- claims
159
- ) ;
160
- }
161
-
162
- private async Task < IdentityResult > AssignRolesAsync (
163
- TIdentityUser user ,
164
- IEnumerable < string > roles
165
- )
166
- {
167
- // removing all roles
168
- var existingRoles = await _manager . GetRolesAsync ( user ) ;
169
- await _manager . RemoveFromRolesAsync ( user , existingRoles ) ;
170
-
171
- // assigning roles
172
- return await _manager . AddToRolesAsync (
173
- user ,
174
- roles
175
- ) ;
105
+ return await _accountService . DeleteAsync ( id ) ;
176
106
}
177
107
}
178
108
}
0 commit comments