1 | using IdentityServer4.Models;
|
---|
2 | using IdentityServer4.Services;
|
---|
3 | using Microsoft.AspNetCore.Identity;
|
---|
4 | using Microsoft.Extensions.Logging;
|
---|
5 | using FinkiChattery.Common.User;
|
---|
6 | using FinkiChattery.Identity.Models;
|
---|
7 | using System.Collections.Generic;
|
---|
8 | using System.Security.Claims;
|
---|
9 | using System.Threading.Tasks;
|
---|
10 |
|
---|
11 | namespace FinkiChattery.Identity.Services
|
---|
12 | {
|
---|
13 | public class FinkiChatteryProfileService : DefaultProfileService
|
---|
14 | {
|
---|
15 | public FinkiChatteryProfileService(UserManager<ApplicationUser> userManager, ILogger<DefaultProfileService> logger) : base(logger)
|
---|
16 | {
|
---|
17 | UserManager = userManager;
|
---|
18 | }
|
---|
19 |
|
---|
20 | public UserManager<ApplicationUser> UserManager { get; }
|
---|
21 |
|
---|
22 | public override async Task GetProfileDataAsync(ProfileDataRequestContext context)
|
---|
23 | {
|
---|
24 | var user = await UserManager.GetUserAsync(context.Subject);
|
---|
25 |
|
---|
26 | var claims = new List<Claim>
|
---|
27 | {
|
---|
28 | new Claim(UserClaim.Id, user.Id.ToString()),
|
---|
29 | new Claim(UserClaim.UserType, user.Role.ToString()),
|
---|
30 | new Claim(UserClaim.EmailAddress, user.Email),
|
---|
31 | new Claim(UserClaim.Username, user.UserName),
|
---|
32 | new Claim(UserClaim.IsVerified, user.EmailConfirmed.ToString())
|
---|
33 | };
|
---|
34 |
|
---|
35 | context.IssuedClaims.AddRange(claims);
|
---|
36 | }
|
---|
37 |
|
---|
38 | public override async Task IsActiveAsync(IsActiveContext context)
|
---|
39 | {
|
---|
40 | var user = await UserManager.GetUserAsync(context.Subject);
|
---|
41 |
|
---|
42 | context.IsActive = (user != null) && user.EmailConfirmed;
|
---|
43 | }
|
---|
44 | }
|
---|
45 | }
|
---|