Zooflow: Add Active Directory User Import
This commit is contained in:
231
GUIs.ZooFlow/Administration/Users/frmAdmin_ImportUser.vb
Normal file
231
GUIs.ZooFlow/Administration/Users/frmAdmin_ImportUser.vb
Normal file
@@ -0,0 +1,231 @@
|
||||
Imports DevExpress.XtraSplashScreen
|
||||
Imports DigitalData.Modules.Interfaces
|
||||
Imports DigitalData.Modules.Logging
|
||||
Imports DigitalData.GUIs.Common
|
||||
Imports DevExpress.XtraGrid.Views.Grid
|
||||
|
||||
Public Class frmAdmin_ImportUser
|
||||
Private ReadOnly Logger As Logger = My.LogConfig.GetLogger
|
||||
Private ActiveDirectory As ActiveDirectoryInterface
|
||||
|
||||
Private Sub frmAdmin_ImportUser_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
||||
ActiveDirectory = New ActiveDirectoryInterface(My.LogConfig, Nothing)
|
||||
|
||||
Dim oGridManager = New GridBuilder(GridView1, GridView2)
|
||||
oGridManager.
|
||||
WithDefaults().
|
||||
WithReadOnlyOptions().
|
||||
WithClipboardHandler()
|
||||
End Sub
|
||||
|
||||
Private Async Sub BarButtonItem3_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem3.ItemClick
|
||||
SplashScreenManager1.ShowWaitForm()
|
||||
SplashScreenManager1.SetWaitFormCaption("Loading Groups")
|
||||
|
||||
Try
|
||||
Dim oGroups As List(Of ADGroup) = Await ActiveDirectory.ListGroupsAsync()
|
||||
Dim oGroupList As New List(Of GroupListing)
|
||||
|
||||
For Each oGroup As ADGroup In oGroups
|
||||
Try
|
||||
SplashScreenManager1.SetWaitFormDescription(oGroup.SAMAccountName)
|
||||
|
||||
Dim oUsers As List(Of ADUser) = Await ActiveDirectory.ListUsersAsync(oGroup.Name)
|
||||
Dim oListing As New GroupListing(oGroup) With {
|
||||
.Count = oUsers.Count,
|
||||
.Users = oUsers
|
||||
}
|
||||
|
||||
If oUsers.Count > 0 Then
|
||||
oGroupList.Add(oListing)
|
||||
End If
|
||||
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
End Try
|
||||
Next
|
||||
|
||||
gridGroupList.ForceInitialize()
|
||||
gridGroupList.DataSource = oGroupList
|
||||
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
Finally
|
||||
SplashScreenManager1.CloseWaitForm()
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub btnImportUsers_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnImportUsers.ItemClick
|
||||
Dim oForm As New frmAdmin_ImportUser()
|
||||
oForm.ShowDialog()
|
||||
End Sub
|
||||
|
||||
Private Sub GridView1_FocusedRowChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs) Handles GridView1.FocusedRowChanged
|
||||
Dim oGroup As GroupListing = GridView1.GetRow(e.FocusedRowHandle)
|
||||
|
||||
If Not IsNothing(oGroup) Then
|
||||
Try
|
||||
gridUserList.DataSource = oGroup.Users
|
||||
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
End Try
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick
|
||||
Dim oSelected = GridView2.GetSelectedRows()
|
||||
Dim oDialogResult = MsgBox($"Wollen Sie die ausgewählten [{oSelected.Count}] Benutzer importieren?",
|
||||
MsgBoxStyle.Question Or MsgBoxStyle.YesNo,
|
||||
"Import von Benutzern")
|
||||
|
||||
If DialogResult.No = oDialogResult Then
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Dim oImported = 0
|
||||
Dim oSkipped = 0
|
||||
|
||||
Try
|
||||
For Each oHandle In oSelected
|
||||
Dim oRow As ADUser = GridView2.GetRow(oHandle)
|
||||
|
||||
If Not UserExists(oRow.samAccountName) Then
|
||||
If InsertUser(oRow.samAccountName, oRow.Surname, oRow.GivenName, oRow.Email) Then
|
||||
oImported += 1
|
||||
Else
|
||||
Logger.Warn("User [{0}] could not be imported!", oRow.samAccountName)
|
||||
End If
|
||||
Else
|
||||
oSkipped += 1
|
||||
End If
|
||||
Next
|
||||
|
||||
If oImported = 0 Then
|
||||
Logger.Warn("No new users imported. All selected users are already in database.")
|
||||
MsgBox($"Es wurden keine neuen Benutzer importiert, da alle ausgewählten Benutzer bereits in der Benutzerverwaltung vorhanden sind.", MsgBoxStyle.Exclamation, "UserManager")
|
||||
Else
|
||||
Logger.Info($"Import successful!{vbNewLine}{vbNewLine}{oImported} users imported{vbNewLine}{oSkipped} users skipped")
|
||||
MsgBox($"{oImported} Benutzer wurden erfolgreich importiert!", MsgBoxStyle.Information, Text)
|
||||
End If
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex, "Error while importing users")
|
||||
MsgBox($"Error while importing users: {ex.Message}", MsgBoxStyle.Critical)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem2.ItemClick
|
||||
Dim oSelected = GridView1.GetSelectedRows()
|
||||
Dim oMessage = $"Wollen Sie die ausgewählten [{oSelected.Count}] Gruppen importieren? Achtung: Es werden NUR die GRUPPEN importiert, nicht die enthaltenen Benutzer!"
|
||||
Dim oDialogResult = MsgBox(oMessage,
|
||||
MsgBoxStyle.Question Or MsgBoxStyle.YesNo,
|
||||
"Import von Gruppen")
|
||||
|
||||
If DialogResult.No = oDialogResult Then
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Dim oImported = 0
|
||||
Dim oSkipped = 0
|
||||
|
||||
Try
|
||||
For Each oHandle In oSelected
|
||||
Dim oRow As ADGroup = GridView2.GetRow(oHandle)
|
||||
|
||||
If Not GroupExists(oRow.SAMAccountName) Then
|
||||
If InsertGroup(oRow.SAMAccountName) Then
|
||||
oImported += 1
|
||||
Else
|
||||
Logger.Warn("Group [{0}] could not be imported!", oRow.SAMAccountName)
|
||||
End If
|
||||
Else
|
||||
oSkipped += 1
|
||||
End If
|
||||
Next
|
||||
|
||||
If oImported = 0 Then
|
||||
Logger.Warn("No new groups imported. All selected groups are already in database.")
|
||||
MsgBox($"Es wurden keine neuen Gruppen importiert, da alle ausgewählten Gruppen bereits in der Gruppenverwaltung vorhanden sind.", MsgBoxStyle.Exclamation, "UserManager")
|
||||
Else
|
||||
Logger.Info($"Import successful!{vbNewLine}{vbNewLine}{oImported} groups imported{vbNewLine}{oSkipped} groups skipped")
|
||||
MsgBox($"{oImported} Gruppen wurden erfolgreich importiert!", MsgBoxStyle.Information, Text)
|
||||
End If
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex, "Error while importing users")
|
||||
MsgBox($"Error while importing users: {ex.Message}", MsgBoxStyle.Critical)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Public Function GroupExists(groupName As String) As Boolean
|
||||
Try
|
||||
Dim oSql As String = $"SELECT COUNT(GUID) FROM TBDD_GROUPS WHERE NAME = '{groupName}'"
|
||||
Dim oResult = My.DatabaseECM.GetScalarValue(oSql)
|
||||
|
||||
Return Convert.ToBoolean(oResult)
|
||||
Catch ex As Exception
|
||||
Logger.Error($"Error in GroupExists: {ex.Message}")
|
||||
Return Nothing
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Public Function UserExists(userName As String) As Boolean
|
||||
Try
|
||||
Dim oSql As String = $"SELECT COUNT(GUID) FROM TBDD_USER WHERE USERNAME = '{userName}'"
|
||||
Dim oResult = My.DatabaseECM.GetScalarValue(oSql)
|
||||
|
||||
Return Convert.ToBoolean(oResult)
|
||||
Catch ex As Exception
|
||||
Logger.Error($"Error in UserExists: {ex.Message}")
|
||||
Return Nothing
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Public Function InsertUser(username As String, prename As String, name As String, email As String)
|
||||
Try
|
||||
Dim oAddedWho As String = Environment.UserName
|
||||
Dim oSql As String = $"INSERT INTO TBDD_USER (PRENAME, NAME, USERNAME, EMAIL, ADDED_WHO)
|
||||
VALUES ('{prename}','{name}','{username}','{email}','{oAddedWho}')"
|
||||
Dim oResult = My.DatabaseECM.ExecuteNonQuery(oSql)
|
||||
|
||||
Return True
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Public Function InsertGroup(name As String, Optional ECM_FK_ID As Integer = 1, Optional adSync As Boolean = True, Optional internal As Boolean = False, Optional active As Boolean = True)
|
||||
Try
|
||||
Dim addedWho As String = Environment.UserName
|
||||
Dim sql As String = $"INSERT INTO TBDD_GROUPS (NAME, ADDED_WHO, ECM_FK_ID, AD_SYNC, INTERNAL, ACTIVE)
|
||||
VALUES ('{name}', '{addedWho}', {ECM_FK_ID},
|
||||
{Convert.ToInt32(adSync)},
|
||||
{Convert.ToInt32(internal)},
|
||||
{Convert.ToInt32(active)})"
|
||||
Dim oResult = My.DatabaseECM.ExecuteNonQuery(sql)
|
||||
|
||||
Return True
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Private Class GroupListing
|
||||
Public Group As ADGroup
|
||||
Public Users As List(Of ADUser)
|
||||
Public Property Count As Integer
|
||||
Public ReadOnly Property Name As String
|
||||
Get
|
||||
Return Group?.Name
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Sub New(pGroup As ADGroup)
|
||||
Group = pGroup
|
||||
Count = 0
|
||||
End Sub
|
||||
End Class
|
||||
|
||||
|
||||
End Class
|
||||
Reference in New Issue
Block a user