Ejemplo n.º 1
0
        public async Task <bool> CreateOAuthAsync(OAuthUserItem item)
        {
            if (await _context.OAuthUserEntityCollection.CountAsync(x => x.Email == item.Email) > 0)
            {
                var filter = Builders <OAuthUserEntity> .Filter.Where(x => x.Email == item.Email);

                var update = Builders <OAuthUserEntity> .Update
                             .AddToSet(x => x.Providers, item.Providers[0]);

                //TODO: Här skall läggas till claims och roler


                var ret = await _context.OAuthUserEntityCollection.UpdateOneAsync(filter, update);
            }
            else
            {
                await _context.OAuthUserEntityCollection.InsertOneAsync(new OAuthUserEntity()
                {
                    Email     = item.Email,
                    Providers = item.Providers,
                    Roles     = item.Roles,
                    Claims    = item.Claims
                });
            }

            return(true);
        }
Ejemplo n.º 2
0
        public async Task <string> CreateLoginAsync(OAuthUserItem item)
        {
            if (item == null)
            {
                return(null);
            }

            if (await _context.OAuthUserEntityCollection.CountAsync(x => x.Email == item.Email) == 0)
            {
                ObjectId id = ObjectId.GenerateNewId();

                item.Claims.Add(new Claim("sub", id.ToString()));

                OAuthUserEntity user = new OAuthUserEntity()
                {
                    Id            = id,
                    Email         = item.Email,
                    EmailVerified = item.EmailVerified,
                    Password      = item.Password,
                    Salt          = item.Salt,
                    Providers     = item.Providers,
                    IsActive      = item.IsActive,
                    Roles         = item.Roles,
                    Claims        = item.Claims
                };

                await _context.OAuthUserEntityCollection.InsertOneAsync(user);

                return(user.Id.ToString());
            }

            return(null);
        }
        public Task <string> CreateLoginAsync(OAuthUserCreate item)
        {
            if (item == null)
            {
                return(null);
            }

            OAuthUserItem entity = new OAuthUserItem()
            {
                Email         = item.Email,
                EmailVerified = item.EmailVerified,
                Password      = item.Password,
                Providers     = item.Providers,
                Claims        = item.Claims,
                Roles         = item.Roles,
                IsActive      = true
            };

            if (!string.IsNullOrEmpty(item.Password))
            {
                entity.Salt     = _passwordService.GenerateSalt();
                entity.Password = _passwordService.CreateHash(item.Password, entity.Salt);
            }

            return(_userMongoDBRepository.CreateLoginAsync(entity));
        }
Ejemplo n.º 4
0
        public async Task <OAuthUserItem> FindByExternalProviderAsync(string provider, string subjectId)
        {
            var filter = Builders <OAuthUserEntity> .Filter.ElemMatch(x => x.Providers, x => x.ProviderName == provider && x.ProviderSubjectId == subjectId);

            OAuthUserItem res = await _context.OAuthUserEntityCollection.Find(filter)
                                .Project(x => new OAuthUserItem()
            {
                Id = x.Id.ToString(), Email = x.Email, Claims = x.Claims, Roles = x.Roles
            })
                                .FirstOrDefaultAsync();

            return(res);
        }