コード例 #1
0
        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;
            }
        }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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();
        }