Add firewall application along with other small improvements.#3353
Add firewall application along with other small improvements.#3353labre-rdc wants to merge 97 commits intoBornToBeRoot:mainfrom
Conversation
…ratedRegex. Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
…o 500. Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
…Remove duplicates. Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
…f Int16.MaxValue by creating temporary scripts when necessary. Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
…ace. Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
…ences and for typed binding proxies. Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
…ties passed as parameter for null, empty strings or empty enumerables. Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
…anges. Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
… simplify merge conflicts. Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
|
@labre-rdc thanks, i will review it when i have some time 😄 |
|
Sorry for the reference error. I’ll handle it tomorrow. |
|
No worries. I don't think I'll be able to review it until next week. |
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
|
The default strings (English) must be added to “Strings.resx” (and “Strings.Designer.cs”). Transifex regularly checks for changes in this file in the repository. When changes are made, Transifex is updated and the new strings can be translated. I only commit these two files and discard the rest (Visual Studio automatically updates them with an empty string...). But I restored it and pushed it to this branch, so you don't need to make any changes to the language 😄 I'll try to review the rest over the weekend. I think i will make some minor changes to the UI to align it with the other tools (like moving the buttons to the bottom so it will also resize correct) |
I see. Well I considered it unreliable for testing, because the empty strings did apparently not fall back to the default culture for me in WPF (maybe I missed something), which means I was presented with empty buttons and headers when a non-English display language was used. For that reason I added the English translation and translated to German while being at it. This was also reasonable, because the UI elements would scale/wrap differently with other string lengths etc. As a side note, I think, you use Visual Studio in German language, because Strings.Designer.cs contains auto-generated german comments. This causes merge conflicts, when other contributors use IDEs in different languages.
Okay, fine for me, if you want to handle that. I might process a few of the Copilot review notes today or in the next few days. |
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
…by refactoring. Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
…ion mapping in ProfileChildWindow. Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
|
Here is the Demo profile I used for the screenshots. Should you wish to do other style changes (maybe even after the merge), you can update the screenshots accordingly. |
…istory settings correctly, e.g., call OnPropertyChanged(). Signed-off-by: Manuel Ullmann <manuel.ullmann@rediecon.com>
|
Fixed the null dereference, which could occur because the settings were not initialized and written properly. All references do null checks now. Also fixed the overall bogus behavior of the history erase. It could erase port entries, because the PropertyChanged chain would ultimately erase port configuration entries and a optimization in FirewallRuleGrid would prevent the entries to be refilled. Anyway, it should work now. The history size is now always checked, so the buttons reenable, when the history regains entries. |
|
Disregard the original reply to your comment. I’d like to rephrase and sum it up a bit. So, all in all I understood the following points.
So let me comment these one by one. 1. Null DereferenceWhile I could not reproduce it, I know why it happened for you. Thanks for pointing this out. I’ve fixed it as well as other issues related to the Erase history function. That was the last feature I developed and since it was related to well tested functionality I did not properly test it. Sorry for that, but it should work now and did go through proper testing. 2. Profile firewall rules are overwrittenI thought a lot about an intuitive interface design and came to the conclusion, that the selected profile should match the configuration shown in the main view (=rule list). That way there is never confusion about the currently loaded profile or whether the settings are stored. Thus the rules are immediately overwritten when a firewall rule is validly changed. Invalid changes never reach the model, so they are not stored. In other words, the behavior is intended. 3. Invalid rules are appliedThat one is simple and I verified it in tests. I have rechecked the code and found the following line: return HasError && !toLoadOrSave ? null : _rule;This is the 4. The rules applied in the Windows Firewall are not shownWell, sorry about that, but this was not part of the project goals. I consider this a nice enhancement, but it is also non-trivial to find a non-confusing UI for that. For instance, how would we separate the Windows rules from the configuration rules? Do we show the Windows rules, no matter what configuration is loaded? Do we only show, whether the configured rules currently are applied? Do we need a separate view just for the Windows rules or do we combine both in one list? Again, this is non-trivial, however, creating a column with ToggleSwitches to allow applying individual rules and checking, whether they are already active would be feasible. However I would recommend against an implementation before the general merge. After all you already want to translate the whole module yourself, and the other translators also have some work to do. I still offer to do the German translation, but you denied my request in Transifex. 5. The UX does not match the one of other applicationsI am aware of that. However, I have not seen collection based configurations in the other applications, so having another UX concept for this interface element class is fine in my personal opinion. Enhancements can be considered, like having a visual feedback for configuration changes and adding a save button to save them. Also a dialog asking for saving could be considered in that case. On the other hand, an undo function could make that obsolete. My goal was to keep it simple (KISS) which is actually a pattern to favor in terms UI design principles. I’ve actually learned that, although I never finished studying. Other possibilities for collection based configurations (configurable DataGrids) are:
As a final note, I want to point out, that I can not work any longer on that at work. Besides to having invested roughly 220 hours into it as opposed to 80 hours planned, which no company would normally invest without revenue, I also loose employment as of April. So don’t be surprised when the account gets deleted. I can provide bug fixes for anything you find, but I really would recommend to not rework this at this point. This is well tested and to my knowledge working code. If you find anything (with steps to reproduce), say something. I’m willing to maintain my code, but if you rewrite most of it, I’m less motivated. The documentation does currently not point out, that invalid rules are always skipped. That is the only missing part I can think of. |

Changes proposed in this pull request
Related issue(s)
Copilot generated summary
Provide a Copilot generated summary of the changes in this pull request.
Copilot summary
{generated summary}
To-Do
Contributing
By submitting this pull request, I confirm the following: