From 7359ce95826ffa23f0dc6ffe96e981a31aaa219e Mon Sep 17 00:00:00 2001 From: mjbohn Date: Mon, 22 Jul 2024 11:48:45 +0200 Subject: [PATCH] Add icon && refactor GUI --- TokenGeneratorJWT/Form1.Designer.cs | 30 +++++++++++---------- TokenGeneratorJWT/Form1.cs | 23 +++++++++++++--- TokenGeneratorJWT/Form1.resx | 20 ++++++++++++++ TokenGeneratorJWT/TokenGeneratorJWT.csproj | 15 ++++++++++- TokenGeneratorJWT/icons8-jwt-128.ico | Bin 0 -> 51262 bytes icons/icons8-jwt-128.ico | Bin 0 -> 51262 bytes icons/icons8-jwt-16tr.ico | Bin 0 -> 894 bytes 7 files changed, 69 insertions(+), 19 deletions(-) create mode 100644 TokenGeneratorJWT/icons8-jwt-128.ico create mode 100644 icons/icons8-jwt-128.ico create mode 100644 icons/icons8-jwt-16tr.ico diff --git a/TokenGeneratorJWT/Form1.Designer.cs b/TokenGeneratorJWT/Form1.Designer.cs index 59bf5bb..08e2c08 100644 --- a/TokenGeneratorJWT/Form1.Designer.cs +++ b/TokenGeneratorJWT/Form1.Designer.cs @@ -29,6 +29,7 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); labelSecKey = new Label(); textBoxSecurityKey = new TextBox(); buttonBuildToken = new Button(); @@ -65,8 +66,8 @@ private void InitializeComponent() MenuHamacSha512 = new ToolStripMenuItem(); statusStrip1 = new StatusStrip(); StatusLabelSecurityAlgorithm = new ToolStripStatusLabel(); - StatusLabelVersion = new ToolStripStatusLabel(); toolStripStatusLabel1 = new ToolStripStatusLabel(); + StatusLabelVersion = new ToolStripStatusLabel(); contextMenuStrip1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)errorProvider1).BeginInit(); groupBox1.SuspendLayout(); @@ -99,9 +100,9 @@ private void InitializeComponent() // buttonBuildToken.Enabled = false; buttonBuildToken.Font = new Font("Segoe UI", 7F, FontStyle.Bold); - buttonBuildToken.Location = new Point(12, 293); + buttonBuildToken.Location = new Point(7, 186); buttonBuildToken.Name = "buttonBuildToken"; - buttonBuildToken.Size = new Size(192, 23); + buttonBuildToken.Size = new Size(192, 20); buttonBuildToken.TabIndex = 6; buttonBuildToken.Text = "build token (F5)"; buttonBuildToken.UseVisualStyleBackColor = true; @@ -168,12 +169,12 @@ private void InitializeComponent() // textBoxJwtToken.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; textBoxJwtToken.ContextMenuStrip = contextMenuStrip1; - textBoxJwtToken.Location = new Point(12, 322); + textBoxJwtToken.Location = new Point(12, 293); textBoxJwtToken.Multiline = true; textBoxJwtToken.Name = "textBoxJwtToken"; textBoxJwtToken.ReadOnly = true; textBoxJwtToken.ScrollBars = ScrollBars.Both; - textBoxJwtToken.Size = new Size(580, 219); + textBoxJwtToken.Size = new Size(580, 248); textBoxJwtToken.TabIndex = 0; textBoxJwtToken.TabStop = false; // @@ -272,6 +273,7 @@ private void InitializeComponent() groupBox1.Controls.Add(labelExp); groupBox1.Controls.Add(labelIss); groupBox1.Controls.Add(textBoxAudience); + groupBox1.Controls.Add(buttonBuildToken); groupBox1.Controls.Add(labelAud); groupBox1.Font = new Font("Segoe UI", 9F, FontStyle.Bold); groupBox1.Location = new Point(12, 66); @@ -284,9 +286,9 @@ private void InitializeComponent() // buttonAddClaim // buttonAddClaim.Font = new Font("Segoe UI", 7F, FontStyle.Bold); - buttonAddClaim.Location = new Point(14, 151); + buttonAddClaim.Location = new Point(7, 151); buttonAddClaim.Name = "buttonAddClaim"; - buttonAddClaim.Size = new Size(185, 20); + buttonAddClaim.Size = new Size(192, 20); buttonAddClaim.TabIndex = 16; buttonAddClaim.Text = "add claim (F2)"; buttonAddClaim.UseVisualStyleBackColor = true; @@ -391,6 +393,12 @@ private void InitializeComponent() StatusLabelSecurityAlgorithm.Name = "StatusLabelSecurityAlgorithm"; StatusLabelSecurityAlgorithm.Size = new Size(0, 17); // + // toolStripStatusLabel1 + // + toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + toolStripStatusLabel1.Size = new Size(544, 17); + toolStripStatusLabel1.Spring = true; + // // StatusLabelVersion // StatusLabelVersion.DisplayStyle = ToolStripItemDisplayStyle.Text; @@ -398,12 +406,6 @@ private void InitializeComponent() StatusLabelVersion.Size = new Size(45, 17); StatusLabelVersion.Text = "version"; // - // toolStripStatusLabel1 - // - toolStripStatusLabel1.Name = "toolStripStatusLabel1"; - toolStripStatusLabel1.Size = new Size(513, 17); - toolStripStatusLabel1.Spring = true; - // // Form1 // AutoScaleDimensions = new SizeF(7F, 15F); @@ -419,7 +421,7 @@ private void InitializeComponent() Controls.Add(labelSecKey); Controls.Add(textBoxJwtToken); Controls.Add(labelKeyInfo); - Controls.Add(buttonBuildToken); + Icon = (Icon)resources.GetObject("$this.Icon"); MainMenuStrip = menuStripMainMenu; MaximizeBox = false; Name = "Form1"; diff --git a/TokenGeneratorJWT/Form1.cs b/TokenGeneratorJWT/Form1.cs index d70c438..d0dfcbf 100644 --- a/TokenGeneratorJWT/Form1.cs +++ b/TokenGeneratorJWT/Form1.cs @@ -23,8 +23,8 @@ public partial class Form1 : Form public Form1() { InitializeComponent(); - SetParamsForKeyAlgorithm(SecurityAlgorithm,MinKeyLength); - StatusLabelVersion.Text = Assembly.GetEntryAssembly().GetName().Version.ToString(); + SetParamsForKeyAlgorithm(SecurityAlgorithm, MinKeyLength); + StatusLabelVersion.Text = GetVersion(); } private void buttonBuildToken_Click(object sender, EventArgs e) @@ -75,7 +75,15 @@ private void buttonBuildToken_Click(object sender, EventArgs e) signingCredentials: credentials); - TokenString = new JwtSecurityTokenHandler().WriteToken(token); + try + { + TokenString = new JwtSecurityTokenHandler().WriteToken(token); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } PayloadJSON = JsonNode.Parse(token.Payload.SerializeToJson()).ToString(); @@ -201,7 +209,7 @@ private void exitToolStripMenuItem_Click(object sender, EventArgs e) } #endregion // MenuEvents - #region helper + #region Helper private void ShowKeylength(TextBox tb) { textBoxKeyLength.Text = (tb.Text.Length * 8).ToString() + " bit"; @@ -240,6 +248,13 @@ private void SetEncryptionAlgorithm(object sender, EventArgs e) break; } } + + private string GetVersion() + { + return $"v{Assembly.GetEntryAssembly().GetName().Version.Major}" + + $".{Assembly.GetEntryAssembly().GetName().Version.Minor}" + + $".{Assembly.GetEntryAssembly().GetName().Version.Build}"; + } #endregion //helper } } diff --git a/TokenGeneratorJWT/Form1.resx b/TokenGeneratorJWT/Form1.resx index 43408a1..bf1f241 100644 --- a/TokenGeneratorJWT/Form1.resx +++ b/TokenGeneratorJWT/Form1.resx @@ -129,4 +129,24 @@ 417, 17 + + + + AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAEgAAABIAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAdGhQpJRwBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAEYYAEMAAABV + TTt6blQEBAMKCQBEPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABZTAOpQAOAIABhVTTt6blQEBAOYiAD+ + 5ABPRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAGNXAPVAALNWTTx6blRWTQP/5QDMtwAGBgAAAAAAAAAA + AAAAAAAAAAC1AJuMAHg6ADI9AKdXAPVVOWhqX0fu1QHy2QAlIQAvIwhwUxMAAAAAAAAAAAAYABXnAMb5 + ANX5ANXeAMc3AHYKARgLCgecjADAmhPTnCP2tin2tikqHwcAAAAAAAAAAAAFAARDADqXBH7CDZoqACQA + AAAAAAAjGgbsrifmqiaachpKNwwHBQEAAAAAAAAHBQFLNwyZcRnkqSbtsCgjGgYAAAAAAAAoACPBDJmb + BIFEADoFAAQAAAAAAAAAAAAqHwf2tin2tinXnyTBmhSciwALCQcKARk3AHfeAMb5ANX5ANXnAMUYABQA + AAAAAAAAAABxUxMzJggmIQDz2gDs1AFpXkhWOWpXAPU8AKc1AC6IAHS0AJoAAAAAAAAAAAAAAAAAAAAG + BQDMtwD/5QBXTwN6blRVTDw/ALJXAPUjAGMAAAAAAAAAAAAAAAAAAAAAAAAAAABNRQD+5ACXiAAFBAN6 + blRVTDoIABhPAOBTAOoHABUAAAAAAAAAAAAAAAAAAAAAAAAAAABDPAAKCQAFBAN6blRVTDoAAAAYAEQa + AEkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEpJRwdGhQAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA/j8AAPIP + AADgBwAA8AcAAMADAACAAQAAwYEAAIGDAACAAQAAwAMAAOAPAADgBwAA8E8AAPx/AAD//wAA + + \ No newline at end of file diff --git a/TokenGeneratorJWT/TokenGeneratorJWT.csproj b/TokenGeneratorJWT/TokenGeneratorJWT.csproj index f5e002f..1fcdcee 100644 --- a/TokenGeneratorJWT/TokenGeneratorJWT.csproj +++ b/TokenGeneratorJWT/TokenGeneratorJWT.csproj @@ -6,9 +6,22 @@ enable true enable - 1.3.1 + 1.4.0 + icons8-jwt-128.png + icons8-jwt-128.ico + + + + + + + True + \ + + + diff --git a/TokenGeneratorJWT/icons8-jwt-128.ico b/TokenGeneratorJWT/icons8-jwt-128.ico new file mode 100644 index 0000000000000000000000000000000000000000..ae6b313e9ee38c20459df43b909b4681779cd333 GIT binary patch literal 51262 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 literal 0 HcmV?d00001 diff --git a/icons/icons8-jwt-128.ico b/icons/icons8-jwt-128.ico new file mode 100644 index 0000000000000000000000000000000000000000..ae6b313e9ee38c20459df43b909b4681779cd333 GIT binary patch literal 51262 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 literal 0 HcmV?d00001 diff --git a/icons/icons8-jwt-16tr.ico b/icons/icons8-jwt-16tr.ico new file mode 100644 index 0000000000000000000000000000000000000000..85b0684436a157130fc26b89f6b5c7c4e024bcfc GIT binary patch literal 894 zcmb`GKWGzi6vsbDF1a*~SV&qfLD6z;Ogku4Bs5K_kXY-V5FsYrba1I1#7a?dP=iaL z-P>LRjztF%ZFOw~b#c=oI+P66g0w{{3W7Agu(`-j zN1iX|sQED!KU-#Jjoff^iN&Q+z8~jlF`JV7#jL0Pi8s&j`F8V5%ujPON#7s~A}REb zjbA*uwW4i*pu3YJmj7x#q%%98OitJThC%7Ka%+`QWnP%Azy{%Y3p7qG?Jzyw_ z7d=gKM!)@HkKId`8@HmqjYo$*KaAPeqNfuuH*AMrIP}V<~&l&!r9aiPedX`-bK2P*%MA{X3BVVmrqLL za@3@W2JKBH=@c>miWkNt6XjG>SOsOwWY}cnRODZrdL4F#V0$mrq=8?>mgOJ1E6u5v Tpmfjmomj2G