public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { try { context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); PulseUserManager userManager = context.OwinContext.GetUserManager <PulseUserManager>(); PulseIdentityUser user = await userManager.FindAsync(context.UserName, context.Password); var userProfileService = ResolverFactory.GetService <IUserProfileService>(); if (user == null) { context.Rejected(); context.SetError("Invalid username or password."); return; } var userProfile = await userProfileService.FindByUserIdAsync(user.Id); var authClaimIdentity = await userManager.CreateIdentityAsync(user, OAuthDefaults.AuthenticationType); await SaveClaimsAsync(authClaimIdentity, user, userManager); var client = context.OwinContext.Get <Client>("oauth:client"); var roles = await userManager.GetRolesAsync(user.Id); var properties = new UserProperties { UserName = authClaimIdentity.Name, ClientId = user.ClientId, FullName = userProfile == null ? string.Empty : (string.IsNullOrEmpty(userProfile.FullName.Trim()) ? userProfile.Email : userProfile.FullName), ClientName = client.Name, Role = roles.FirstOrDefault(), AvatarPath = userProfile == null ? string.Empty : (userProfile.AvatarPath == null ? string.Empty : userProfile.AvatarPath), EmailConfirm = user.EmailConfirmed }; var ticket = new AuthenticationTicket(authClaimIdentity, CreateProperties(properties) ); context.Validated(ticket); } catch (Exception ex) { context.SetError("GrantResourceOwnerCredentials " + ex.Message); return; } }
private async Task SaveClaimsAsync(ClaimsIdentity identity, PulseIdentityUser user, PulseUserManager userManager) { foreach (var claim in identity.Claims) { if (identity.HasClaim(claim.Type, claim.Value)) { await userManager.RemoveClaimAsync(user.Id, claim); } await userManager.AddClaimAsync(user.Id, claim); } }
public async Task <UserProfileDto> CreateAsync(string username, string password, string role = "User") { string passwordHash = password.GeneratePasswordHash(); var pulseIdentityUser = new PulseIdentityUser { UserName = username, Email = (username.IsEmail() ? username : null), PasswordHash = passwordHash, SecurityStamp = passwordHash, ClientId = ClientId }; IdentityResult result = await _userManager.CreateAsync(pulseIdentityUser); if (!result.Succeeded) { throw new Exception(result.Errors.FirstOrDefault()); } await _userManager.AddToRoleAsync(pulseIdentityUser.Id, role); var userProfileDto = new UserProfileDto { UserId = pulseIdentityUser.Id, Email = pulseIdentityUser.Email, FullName = "Unknown", Password = password, }; if (role != PulseIdentityRole.Kiosk) { var body = _processEmailTemplate.GenerateEmailTemplate(new LoginModel { UserName = username, PassWord = password, }); await _userManager.SendEmailAsync(pulseIdentityUser.Id, SUBJECT, body); return(await CreateAsync(userProfileDto)); } return(userProfileDto); }
protected override void Seed(Connection.Entity.PulseContext context) { base.Seed(context); PasswordHasher passwordHasher = new PasswordHasher(); //Fake data var roleAdmin = context.Roles.Where(r => r.Name.Equals(PulseIdentityRole.Administrator)).FirstOrDefault(); if (roleAdmin == null) { context.Roles.Add(new PulseIdentityRole { Name = PulseIdentityRole.Administrator }); context.SaveChanges(); } var clientAdmin = context.Roles.Where(r => r.Name.Equals(PulseIdentityRole.ClientAdmin)).FirstOrDefault(); if (clientAdmin == null) { context.Roles.Add(new PulseIdentityRole { Name = PulseIdentityRole.ClientAdmin }); } var roleKiosk = context.Roles.Where(r => r.Name.Equals(PulseIdentityRole.Kiosk)).FirstOrDefault(); if (roleKiosk == null) { context.Roles.Add(new PulseIdentityRole { Name = PulseIdentityRole.Kiosk }); } var roleUser = context.Roles.Where(r => r.Name.Equals(PulseIdentityRole.User)).FirstOrDefault(); if (roleUser == null) { context.Roles.Add(new PulseIdentityRole { Name = PulseIdentityRole.User }); } var user = context.Users.Where(u => u.UserName.Equals("admin")).FirstOrDefault(); var clientId = UnitHelper.GenerateNewGuid(); string secretKey = UnitHelper.GenerateNewGuid(); if (user == null) { user = new PulseIdentityUser { UserName = "******", Email = "*****@*****.**", PasswordHash = passwordHasher.HashPassword("tekcent"), SecurityStamp = passwordHasher.HashPassword("tekcent"), ClientId = clientId, SecretKey = secretKey }; context.Users.Add(user); context.SaveChanges(); roleAdmin = context.Roles.Where(r => r.Name.Equals(PulseIdentityRole.Administrator)).FirstOrDefault(); context.Users.Where(u => u.UserName.Equals("admin")).FirstOrDefault() .Roles.Add(new Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole { UserId = user.Id, RoleId = roleAdmin.Id }); context.SaveChanges(); var userProfile = new UserProfile { FirstName = "Tekcent", LastName = "Vietnam", Gender = Gender.Male, Email = user.Email, UserId = user.Id, Password = "******", CreatedAt = DateTime.Now, CreatedBy = "Admin", UpdatedAt = DateTime.Now, UpdatedBy = "Admin" }; context.UserProfiles.Add(userProfile); } var client = context.Clients.Where(u => u.Name.Equals("Tekcent")).FirstOrDefault(); if (client == null) { context.Clients.Add(new Client { Name = "TekCent", Secret = passwordHasher.HashPassword(secretKey), SecretKey = secretKey, AllowedGrant = OAuthGrant.SystemAdmin, Active = true, RefreshTokenLifeTime = 7, TokenLifeTime = 20, ClientId = clientId, SignalrUrl = "http://localhost:9090", MongoName = "PulseTekcent", MongoConnectionString = "mongodb://localhost:27017/PulseTekcent" }); } var groups = context.Groups.Where(g => g.Name.Equals("Unknow")).FirstOrDefault(); if (groups == null) { context.Groups.Add(new Group { Name = "Unknow", }); } context.SaveChanges(); }