diff --git a/GUIs.Test.GraphQLTest/Config.vb b/GUIs.Test.GraphQLTest/Config.vb index 790b811a..4df9bd9e 100644 --- a/GUIs.Test.GraphQLTest/Config.vb +++ b/GUIs.Test.GraphQLTest/Config.vb @@ -10,6 +10,8 @@ Public Property ProxyPort As Integer = 0 Public Property ProxyUsername As String = "" Public Property ProxyPassword As String = "" + Public Property CurrentQuery As String = "Custom" + Public Property CustomQueryString As String = "" Public Function HasProxySet() As Boolean Return ProxyHost <> "" And ProxyPort > 0 diff --git a/GUIs.Test.GraphQLTest/frmMain.Designer.vb b/GUIs.Test.GraphQLTest/frmMain.Designer.vb index a226e067..0982fcbd 100644 --- a/GUIs.Test.GraphQLTest/frmMain.Designer.vb +++ b/GUIs.Test.GraphQLTest/frmMain.Designer.vb @@ -1,9 +1,9 @@ - _ + Partial Class frmMain Inherits System.Windows.Forms.Form 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. - _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then @@ -20,7 +20,7 @@ Partial Class frmMain 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. - _ + Private Sub InitializeComponent() Me.Button1 = New System.Windows.Forms.Button() Me.txtBaseUrl = New System.Windows.Forms.TextBox() @@ -33,13 +33,13 @@ Partial Class frmMain Me.Label3 = New System.Windows.Forms.Label() Me.Label4 = New System.Windows.Forms.Label() Me.Label5 = New System.Windows.Forms.Label() - Me.txtResults = New System.Windows.Forms.TextBox() + Me.txtResult = New System.Windows.Forms.TextBox() Me.txtConnectionString = New System.Windows.Forms.TextBox() Me.Label6 = New System.Windows.Forms.Label() - Me.ComboBox1 = New System.Windows.Forms.ComboBox() + Me.cmbQuery = New System.Windows.Forms.ComboBox() Me.Label7 = New System.Windows.Forms.Label() Me.TabControl1 = New System.Windows.Forms.TabControl() - Me.TabPage1 = New System.Windows.Forms.TabPage() + Me.pageRaw = New System.Windows.Forms.TabPage() Me.btnLogin = New System.Windows.Forms.Button() Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() Me.txtProxyHost = New System.Windows.Forms.TextBox() @@ -50,8 +50,12 @@ Partial Class frmMain Me.Label10 = New System.Windows.Forms.Label() Me.txtProxyPort = New System.Windows.Forms.TextBox() Me.Label11 = New System.Windows.Forms.Label() + Me.pageQuery = New System.Windows.Forms.TabPage() + Me.txtQuery = New System.Windows.Forms.TextBox() + Me.txtOperation = New System.Windows.Forms.TextBox() Me.TabControl1.SuspendLayout() - Me.TabPage1.SuspendLayout() + Me.pageRaw.SuspendLayout() + Me.pageQuery.SuspendLayout() Me.SuspendLayout() ' 'Button1 @@ -148,16 +152,16 @@ Partial Class frmMain Me.Label5.TabIndex = 2 Me.Label5.Text = "Cert Pass" ' - 'txtResults + 'txtResult ' - Me.txtResults.Dock = System.Windows.Forms.DockStyle.Fill - Me.txtResults.Font = New System.Drawing.Font("Consolas", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtResults.Location = New System.Drawing.Point(3, 3) - Me.txtResults.Multiline = True - Me.txtResults.Name = "txtResults" - Me.txtResults.ScrollBars = System.Windows.Forms.ScrollBars.Vertical - Me.txtResults.Size = New System.Drawing.Size(458, 342) - Me.txtResults.TabIndex = 3 + Me.txtResult.Dock = System.Windows.Forms.DockStyle.Fill + Me.txtResult.Font = New System.Drawing.Font("Consolas", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtResult.Location = New System.Drawing.Point(3, 3) + Me.txtResult.Multiline = True + Me.txtResult.Name = "txtResult" + Me.txtResult.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtResult.Size = New System.Drawing.Size(458, 342) + Me.txtResult.TabIndex = 3 ' 'txtConnectionString ' @@ -176,14 +180,14 @@ Partial Class frmMain Me.Label6.TabIndex = 2 Me.Label6.Text = "ConnectionString" ' - 'ComboBox1 + 'cmbQuery ' - Me.ComboBox1.FormattingEnabled = True - Me.ComboBox1.Items.AddRange(New Object() {"SAPDaten"}) - Me.ComboBox1.Location = New System.Drawing.Point(106, 352) - Me.ComboBox1.Name = "ComboBox1" - Me.ComboBox1.Size = New System.Drawing.Size(338, 21) - Me.ComboBox1.TabIndex = 4 + Me.cmbQuery.FormattingEnabled = True + Me.cmbQuery.Items.AddRange(New Object() {"SAPDaten", "Custom"}) + Me.cmbQuery.Location = New System.Drawing.Point(106, 352) + Me.cmbQuery.Name = "cmbQuery" + Me.cmbQuery.Size = New System.Drawing.Size(338, 21) + Me.cmbQuery.TabIndex = 4 ' 'Label7 ' @@ -196,23 +200,24 @@ Partial Class frmMain ' 'TabControl1 ' - Me.TabControl1.Controls.Add(Me.TabPage1) + Me.TabControl1.Controls.Add(Me.pageRaw) + Me.TabControl1.Controls.Add(Me.pageQuery) Me.TabControl1.Location = New System.Drawing.Point(450, 6) Me.TabControl1.Name = "TabControl1" Me.TabControl1.SelectedIndex = 0 Me.TabControl1.Size = New System.Drawing.Size(472, 374) Me.TabControl1.TabIndex = 5 ' - 'TabPage1 + 'pageRaw ' - Me.TabPage1.Controls.Add(Me.txtResults) - Me.TabPage1.Location = New System.Drawing.Point(4, 22) - Me.TabPage1.Name = "TabPage1" - Me.TabPage1.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage1.Size = New System.Drawing.Size(464, 348) - Me.TabPage1.TabIndex = 0 - Me.TabPage1.Text = "Raw GraphQL Result" - Me.TabPage1.UseVisualStyleBackColor = True + Me.pageRaw.Controls.Add(Me.txtResult) + Me.pageRaw.Location = New System.Drawing.Point(4, 22) + Me.pageRaw.Name = "pageRaw" + Me.pageRaw.Padding = New System.Windows.Forms.Padding(3) + Me.pageRaw.Size = New System.Drawing.Size(464, 348) + Me.pageRaw.TabIndex = 0 + Me.pageRaw.Text = "Raw GraphQL Result" + Me.pageRaw.UseVisualStyleBackColor = True ' 'btnLogin ' @@ -294,6 +299,36 @@ Partial Class frmMain Me.Label11.TabIndex = 2 Me.Label11.Text = "Proxy Port" ' + 'pageQuery + ' + Me.pageQuery.Controls.Add(Me.txtQuery) + Me.pageQuery.Controls.Add(Me.txtOperation) + Me.pageQuery.Location = New System.Drawing.Point(4, 22) + Me.pageQuery.Name = "pageQuery" + Me.pageQuery.Padding = New System.Windows.Forms.Padding(3) + Me.pageQuery.Size = New System.Drawing.Size(464, 348) + Me.pageQuery.TabIndex = 1 + Me.pageQuery.Text = "Custom Query" + Me.pageQuery.UseVisualStyleBackColor = True + ' + 'txtQuery + ' + Me.txtQuery.Dock = System.Windows.Forms.DockStyle.Fill + Me.txtQuery.Font = New System.Drawing.Font("Consolas", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtQuery.Location = New System.Drawing.Point(3, 23) + Me.txtQuery.Multiline = True + Me.txtQuery.Name = "txtQuery" + Me.txtQuery.Size = New System.Drawing.Size(458, 322) + Me.txtQuery.TabIndex = 0 + ' + 'txtOperation + ' + Me.txtOperation.Dock = System.Windows.Forms.DockStyle.Top + Me.txtOperation.Location = New System.Drawing.Point(3, 3) + Me.txtOperation.Name = "txtOperation" + Me.txtOperation.Size = New System.Drawing.Size(458, 20) + Me.txtOperation.TabIndex = 1 + ' 'frmMain ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -301,7 +336,7 @@ Partial Class frmMain Me.ClientSize = New System.Drawing.Size(934, 429) Me.Controls.Add(Me.ProgressBar1) Me.Controls.Add(Me.TabControl1) - Me.Controls.Add(Me.ComboBox1) + Me.Controls.Add(Me.cmbQuery) Me.Controls.Add(Me.Label7) Me.Controls.Add(Me.Label6) Me.Controls.Add(Me.Label5) @@ -328,8 +363,10 @@ Partial Class frmMain Me.Name = "frmMain" Me.Text = "GraphQL Interface" Me.TabControl1.ResumeLayout(False) - Me.TabPage1.ResumeLayout(False) - Me.TabPage1.PerformLayout() + Me.pageRaw.ResumeLayout(False) + Me.pageRaw.PerformLayout() + Me.pageQuery.ResumeLayout(False) + Me.pageQuery.PerformLayout() Me.ResumeLayout(False) Me.PerformLayout() @@ -346,13 +383,13 @@ Partial Class frmMain Friend WithEvents Label3 As Label Friend WithEvents Label4 As Label Friend WithEvents Label5 As Label - Friend WithEvents txtResults As TextBox + Friend WithEvents txtResult As TextBox Friend WithEvents txtConnectionString As TextBox Friend WithEvents Label6 As Label - Friend WithEvents ComboBox1 As ComboBox + Friend WithEvents cmbQuery As ComboBox Friend WithEvents Label7 As Label Friend WithEvents TabControl1 As TabControl - Friend WithEvents TabPage1 As TabPage + Friend WithEvents pageRaw As TabPage Friend WithEvents btnLogin As Button Friend WithEvents ProgressBar1 As ProgressBar Friend WithEvents txtProxyHost As TextBox @@ -363,4 +400,7 @@ Partial Class frmMain Friend WithEvents Label10 As Label Friend WithEvents txtProxyPort As TextBox Friend WithEvents Label11 As Label + Friend WithEvents pageQuery As TabPage + Friend WithEvents txtQuery As TextBox + Friend WithEvents txtOperation As TextBox End Class diff --git a/GUIs.Test.GraphQLTest/frmMain.vb b/GUIs.Test.GraphQLTest/frmMain.vb index 717aebda..88d597a7 100644 --- a/GUIs.Test.GraphQLTest/frmMain.vb +++ b/GUIs.Test.GraphQLTest/frmMain.vb @@ -63,8 +63,10 @@ Public Class frmMain txtProxyPort.Text = _Config.Config.ProxyPort txtProxyUser.Text = _Config.Config.ProxyUsername txtProxyPass.Text = _Config.Config.ProxyPassword + txtQuery.Text = _Config.Config.CustomQueryString - ComboBox1.SelectedIndex = 0 + Dim oIndex = cmbQuery.FindStringExact(_Config.Config.CurrentQuery) + cmbQuery.SelectedIndex = oIndex _MSSQL = New MSSQLServer(_LogConfig, _Config.Config.ConnectionString) Catch ex As Exception @@ -75,7 +77,6 @@ Public Class frmMain Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click Try - _Interface = New GraphQLInterface(_LogConfig, txtBaseUrl.Text, txtUsername.Text, @@ -86,16 +87,20 @@ Public Class frmMain If _Config.Config.HasProxySet() And _Config.Config.HasProxyCredentialsSet() Then Dim oURI As New Uri($"http://{_Config.Config.ProxyHost}:{_Config.Config.ProxyPort}") Dim oCredentials As New NetworkCredential(_Config.Config.ProxyUsername, _Config.Config.ProxyPassword) - Dim oProxy As New WebProxy() With { + Dim oProxy As New WebProxy(oURI, True) With { .Address = oURI, .UseDefaultCredentials = False, .Credentials = oCredentials } _Interface.Proxy = oProxy + _Interface.Credentials = oCredentials _Logger.Debug("Using Proxy: {0}", oURI.ToString) _Logger.Debug("Proxy Credentials: [{0}] [{1}]", _Config.Config.ProxyUsername, _Config.Config.ProxyPassword) Else + _Interface.Proxy = Nothing + _Interface.Credentials = Nothing + _Logger.Debug("Proxy not set.") End If @@ -121,15 +126,15 @@ Public Class frmMain Exit Sub End If - If ComboBox1.SelectedIndex = -1 Then + If cmbQuery.SelectedIndex = -1 Then MsgBox("Please select a query!", MsgBoxStyle.Exclamation, Text) Exit Sub End If - If ComboBox1.Text = "SAPDaten" Then + If cmbQuery.Text = "SAPDaten" Then _MSSQL.ExecuteNonQuery("DELETE FROM TBCUST_SYNC_API_SAPDATEN") - txtResults.Text = String.Empty + txtResult.Text = String.Empty For Each oDatapool In _Datapools Dim oQuery As String = GRAPHQL_QUERY_SAP_DATA.Trim.Replace("__DATA_POOL__", oDatapool) @@ -164,12 +169,33 @@ Public Class frmMain ProgressBar1.Value = oCounter Next - txtResults.Text &= "--------------------------------------------" & vbNewLine - txtResults.Text &= $"--- Datapool: {oDatapool}" & vbNewLine - txtResults.Text &= JsonConvert.SerializeObject(oObj, Formatting.Indented) & vbNewLine + txtResult.Text &= "--------------------------------------------" & vbNewLine + txtResult.Text &= $"--- Datapool: {oDatapool}" & vbNewLine + txtResult.Text &= JsonConvert.SerializeObject(oObj, Formatting.Indented) & vbNewLine Application.DoEvents() Next + ElseIf cmbQuery.Text = "Custom" Then + If txtOperation.Text = String.Empty Then + MsgBox("Please select an operation!", MsgBoxStyle.Exclamation, Text) + Exit Sub + End If + + Dim oDataResponse = _Interface.GetData(txtQuery.Text, txtOperation.Text) + + Dim oResult As String + + Using oStream = oDataResponse.GetResponseStream() + Using oReader As New StreamReader(oStream) + oResult = oReader.ReadToEnd() + End Using + End Using + + Dim oObj As JObject = JsonConvert.DeserializeObject(oResult) + Dim oIndentedJson As String = JsonConvert.SerializeObject(oObj, Formatting.Indented) + txtResult.Text = oIndentedJson + + TabControl1.SelectedTab = pageRaw Else MsgBox("Unknown query!", MsgBoxStyle.Exclamation, Text) Exit Sub @@ -192,6 +218,7 @@ Public Class frmMain _Config.Config.ProxyPassword = txtProxyPass.Text _Config.Config.ProxyPort = txtProxyPort.Text _Config.Config.ProxyUsername = txtProxyUser.Text + _Config.Config.CustomQueryString = txtQuery.Text _Config.Save(ForceAll:=True) Dim oLogoutResponse = _Interface.Logout() @@ -210,4 +237,9 @@ Public Class frmMain Return oSAPData End Function + + Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbQuery.SelectedIndexChanged + _Config.Config.CurrentQuery = cmbQuery.Text + _Config.Save() + End Sub End Class diff --git a/Modules.Interfaces/GraphQLInterface.vb b/Modules.Interfaces/GraphQLInterface.vb index aab25113..81d6faa1 100644 --- a/Modules.Interfaces/GraphQLInterface.vb +++ b/Modules.Interfaces/GraphQLInterface.vb @@ -16,6 +16,7 @@ Public Class GraphQLInterface Private _Encoding As New UTF8Encoding Public Property Proxy As WebProxy + Public Property Credentials As NetworkCredential Public Sub New(LogConfig As LogConfig, BaseUrl As String, Email As String, Password As String, CertificateFile As String, CertificatePassword As String) Try @@ -25,7 +26,18 @@ Public Class GraphQLInterface _userEmail = Email _userPassword = Password - _certificate = New X509Certificate(CertificateFile, CertificatePassword) + _certificate = New X509Certificate2(CertificateFile, CertificatePassword, X509KeyStorageFlags.UserKeySet) + + Dim oStore As New X509Store(StoreName.My, StoreLocation.CurrentUser) + oStore.Open(OpenFlags.ReadOnly) + + _logger.Debug("Available Certificates ({0}):", oStore.Certificates.Count) + + For Each oCert In oStore.Certificates + _logger.Debug("FriendlyName: {0}", oCert.FriendlyName) + _logger.Debug("IssuerName: {0}", oCert.IssuerName.Name) + _logger.Debug("SubjectName: {0}", oCert.SubjectName.Name) + Next Catch ex As Exception _logger.Error(ex) End Try @@ -93,18 +105,19 @@ Public Class GraphQLInterface Private Function GetRequest(Url As String, PostData As Byte()) As HttpWebRequest Try - ServicePointManager.Expect100Continue = True - ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12 - Dim oRequest As HttpWebRequest = WebRequest.Create($"{_baseUrl}{Url}") oRequest.Method = "POST" oRequest.ContentType = "application/json" oRequest.ContentLength = PostData.Length oRequest.ClientCertificates.Add(_certificate) oRequest.CookieContainer = GetCookies() + oRequest.Proxy = Nothing - If Proxy IsNot Nothing Then + If Proxy Is Nothing Then + oRequest.Proxy = Nothing + Else oRequest.Proxy = Proxy + oRequest.Credentials = Credentials End If Return oRequest