Esempio n. 1
0
        public async Task GetProfileDataAsync(ProfileDataRequestContext context)
        {
            // TODO: how to know if user is external??
            using (var ctx = contextFactory.NewUserDbContext()) {
                var user = await GetUser(ctx, context.Subject);

                if (user != null)
                {
                    var claims = BuildClaims(user, context.RequestedClaimTypes);
                    context.IssuedClaims = claims;
                }
                else
                {
                    var claims = new List <Claim>();
                    Action <string, string> addClaim = (type, value) => {
                        claims.Add(new Claim(type, value));
                    };

                    addClaim("sub", "SUBJECT_ID");
                    addClaim("name", "IDENTITY_NAME");
                    context.IssuedClaims = claims;
                }
            }
        }
Esempio n. 2
0
        public async Task <User> AuthenticateAsync(LoginInfo info)
        {
            using (var ctx = dbFactory.NewUserDbContext()) {
                var user = await ctx.Users.FirstOrDefaultAsync(x => x.Username == info.Username);

                var pwSalt = (info?.Password ?? string.Empty) + (user?.Salt ?? string.Empty);
                var pwHash = hashProvider.ComputeHash(pwSalt);

                if (user?.Password != pwHash)
                {
                    user = null;
                }

                return(user);
            }
        }
Esempio n. 3
0
        public async Task Handle(UserRegisteredEvent @event)
        {
            logger.LogInformation($"Received event: {@event.FirstName} {@event.LastName} ({@event.Email}) has registered.");

            var newUser = new User {
                EffectiveDate            = DateTime.UtcNow,
                UserStatus               = "Active",
                Username                 = @event.Email,
                Password                 = @event.Password,
                Salt                     = @event.Salt,
                TermsOfUseAcceptanceDate = @event.AgreeToTerms,
                CreateDate               = DateTime.UtcNow,
                LastModifiedDate         = DateTime.UtcNow
            };

            using (var ctx = contextFactory.NewUserDbContext()) {
                //Probably not a great way of doing this, need a user for audit fields.
                var theFirstUser = ctx.Users.OrderBy(x => x.UserId).First();
                var role         = ctx.Roles.FirstOrDefault(r => r.Name == @event.Role);

                if (role == null)
                {
                    role = new Role {
                        Name               = @event.Role,
                        Description        = @event.Role,
                        CreateDate         = DateTime.UtcNow,
                        LastModifiedDate   = DateTime.UtcNow,
                        CreateUserId       = theFirstUser.UserId,
                        LastModifiedUserId = theFirstUser.UserId
                    };
                    ctx.AddRole(role);
                }

                newUser.CreateUserId       = theFirstUser.UserId;
                newUser.LastModifiedUserId = theFirstUser.UserId;
                newUser.UserRoles          = new List <UserRole> {
                    new UserRole {
                        User = newUser,
                        Role = role
                    }
                };

                ctx.AddUser(newUser);

                await ctx.SaveChangesAsync();
            }
        }
Esempio n. 4
0
 /// <summary>
 /// Finds the user by subject identifier.
 /// </summary>
 /// <param name="subjectId">The subject identifier.</param>
 /// <returns></returns>
 public User FindBySubjectId(Guid subjectId)
 {
     using (var ctx = contextFactory.NewUserDbContext()) {
         return(ctx.Users.FirstOrDefault(x => x.UserId == subjectId));
     }
 }