public async Task <ApiResponse> SaveUser(ApiUserDefinitionRequest request) { try { var user = dbContext.users.SingleOrDefault(r => r.objectSid == request.objectSid); if (user == null) { user = new user { about = request.about, birtOfDate = request.birtOfDate, createdBy = authService.UserClaims.objectSID, createdDate = DateTime.Now, deleted = request.deleted, department = request.department, company = request.company.name, displayName = request.displayName, accountName = request.accountName, email = request.userPrincipalName, editedBy = authService.UserClaims.objectSID, firstName = request.firstName, genus = request.genus, ipPhone = request.ipPhone, lastName = request.lastName, lastUpdate = DateTime.Now, mobile = request.mobile, objectSid = Guid.NewGuid().ToString(), password = request.password, telephoneNumber = request.telephoneNumber, userPhoto = _appSettings.Image, userPrincipalName = request.userPrincipalName, authorityLevel = request.authorityLevel }; dbContext.Entry(user).State = EntityState.Added; } else { user.about = request.about; user.birtOfDate = request.birtOfDate; user.deleted = request.deleted; user.department = request.department; user.company = request.company.name; user.displayName = request.displayName; user.email = request.userPrincipalName; user.editedBy = authService.UserClaims.objectSID; user.genus = request.genus; user.lastUpdate = DateTime.Now; user.firstName = request.firstName; user.lastName = request.lastName; user.ipPhone = request.ipPhone; user.mobile = request.mobile; user.password = request.password; user.telephoneNumber = request.telephoneNumber; user.userPhoto = request.userPhoto; user.userPrincipalName = request.userPrincipalName; user.authorityLevel = request.authorityLevel; dbContext.Entry(user).State = EntityState.Modified; } var companyUser = await dbContext.companyUsers .SingleOrDefaultAsync(r => !r.deleted && r.userId == user.objectSid); if (companyUser == null) { companyUser = new companyUser { companyId = (Guid)request.company.id, userId = user.objectSid, deleted = request.deleted, createdBy = authService.UserClaims.objectSID, editedBy = authService.UserClaims.objectSID, createdDate = DateTime.Now, lastUpdate = DateTime.Now }; dbContext.Entry(companyUser).State = EntityState.Added; } else { companyUser.companyId = (Guid)request.company.id; companyUser.editedBy = authService.UserClaims.objectSID; companyUser.lastUpdate = DateTime.Now; companyUser.deleted = request.deleted; dbContext.Entry(companyUser).State = EntityState.Modified; } await dbContext.SaveChangesAsync(); return(ApiResponseErrorType.OK.CreateResponse()); } catch (Exception e) { return((e.InnerException ?? e).Message.CreateResponse()); } }
public void SaveAllUser(object state) { try { var ldapConnection = new LdapConnection(); ldapConnection.SearchConstraints.ReferralFollowing = true; ldapConnection.Connect(appSettings.LDAPParams.adHost, LdapConnection.DEFAULT_PORT); using (var db = new StockTrackingDbContext(new DbContextOptionsBuilder().UseSqlServer(config.GetConnectionString("StockTracking")).Options)) { var maxUpdated = db.users.Any() ? db.users.Max(r => r.lastUpdate) : DateTime.Now.AddYears(-10); ldapConnection.Bind(LdapConnection.Ldap_V3, $@"{appSettings.LDAPParams.adDomain}\{appSettings.LDAPParams.adAdmin.Split("@").First()}", appSettings.LDAPParams.adPassword); string filter = $"(&(objectClass=user)(objectClass=person)(!(whenChanged<={maxUpdated.ToString("yyyyMMddHHmmss.f'Z'", CultureInfo.InvariantCulture)})))"; var pageSize = 1000; var pageNo = 1; var resultCount = 0; do { try { var searchConstraints = new LdapSearchConstraints(); searchConstraints.setControls(new LdapControl[] { new LdapSortControl(new LdapSortKey("cn"), true), new LdapVirtualListControl((pageNo - 1) * pageSize + 1, 0, pageSize - 1, 0) }); var searchResult = ldapConnection.Search(appSettings.LDAPParams.@base, LdapConnection.SCOPE_SUB, filter, null, false, searchConstraints); resultCount = 0; while (searchResult.HasMore()) { resultCount++; LdapEntry r; user user; try { r = searchResult.Next(); user = new user { objectSid = r.getAttribute("objectSid") != null ? new SecurityIdentifier((byte[])(Array)r.getAttribute("objectSid").ByteValue, 0).ToString() : null, accountName = r.getAttribute("sAMAccountName").StringValue, firstName = r.getAttribute("givenName") != null?r.getAttribute("givenName").StringValue.ToCamelCase() : null, lastName = r.getAttribute("sn") != null?r.getAttribute("sn").StringValue.ToUpper(CultureInfo.GetCultureInfo("tr-TR")) : null, displayName = r.getAttribute("displayName") != null?r.getAttribute("displayName").StringValue : null, memberOf = r.getAttribute("memberOf") != null?r.getAttribute("memberOf").StringValueArray.ToList() : null, userPrincipalName = r.getAttribute("userPrincipalName") != null?r.getAttribute("userPrincipalName").StringValue.ToLowerInvariant() : null, mobile = r.getAttribute("mobile") != null?r.getAttribute("mobile").StringValue : null, ipPhone = r.getAttribute("ipPhone") != null?r.getAttribute("ipPhone").StringValue : null, telephoneNumber = r.getAttribute("telephoneNumber") != null?r.getAttribute("telephoneNumber").StringValue : null, city = r.getAttribute("l") != null?r.getAttribute("l").StringValue.ToCamelCase() : null, semt = r.getAttribute("st") != null?r.getAttribute("st").StringValue.ToCamelCase() : null, email = r.getAttribute("mail") != null?r.getAttribute("mail").StringValue.ToLowerInvariant().ToLowerInvariant() : null, company = r.getAttribute("company") != null?r.getAttribute("company").StringValue.ToCamelCase() : null, department = r.getAttribute("department") != null?r.getAttribute("department").StringValue.ToCamelCase() : null, title = r.getAttribute("title") != null?r.getAttribute("title").StringValue.ToCamelCase() : null, streetAddress = r.getAttribute("streetAddress") != null?r.getAttribute("streetAddress").StringValue.ToCamelCase() : null, wWWHomePage = r.getAttribute("wWWHomePage") != null?r.getAttribute("wWWHomePage").StringValue.ToLowerInvariant() : null, postalCode = r.getAttribute("postalCode") != null?r.getAttribute("postalCode").StringValue : null, thumbnailPhoto = r.getAttribute("thumbnailPhoto") != null?Convert.ToBase64String((byte[])(Array)r.getAttribute("thumbnailPhoto").ByteValue) : null, editedBy = r.getAttribute("objectSid") != null ? new SecurityIdentifier((byte[])(Array)r.getAttribute("objectSid").ByteValue, 0).ToString() : string.Empty, deleted = false, lastUpdate = DateTime.ParseExact(r.getAttribute("whenChanged").StringValue, "yyyyMMddHHmmss.f'Z'", CultureInfo.InvariantCulture), tckn = r.getAttribute("tc") != null?r.getAttribute("tc").StringValue : null }; var userEntry = db.Entry(user); db.Attach(user); var originalRow = db.users.AsNoTracking().SingleOrDefault(r => r.objectSid == user.objectSid); userEntry.State = originalRow == null ? EntityState.Added : EntityState.Modified; db.SaveChanges(); var isCompany = db.companies.SingleOrDefault(r => r.name == user.company); if (isCompany != null) { var companyUser = db.companyUsers.SingleOrDefault(r => r.userId == user.objectSid && r.companyId == isCompany.id); if (companyUser == null) { companyUser = new companyUser { companyId = (Guid)isCompany.id, createdBy = user.createdBy, createdDate = DateTime.Now, deleted = false, editedBy = user.editedBy, lastUpdate = DateTime.Now, userId = user.objectSid }; db.Entry(companyUser).State = EntityState.Added; } else { companyUser.userId = user.objectSid; companyUser.lastUpdate = DateTime.Now; companyUser.editedBy = user.editedBy; companyUser.deleted = false; companyUser.createdDate = user.createdDate; companyUser.createdBy = user.createdBy; companyUser.companyId = (Guid)isCompany.id; db.Entry(user).State = EntityState.Modified; } db.SaveChanges(); } } catch (LdapReferralException e) { var uris = e.getReferrals(); } catch (Exception e) { } } pageNo++; } catch (Exception e) { } } while (resultCount >= pageSize); } } catch (Exception e) { throw e; } timer.Change(5000, Timeout.Infinite); }