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); }
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)); }
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); }