[Bro-Dev] Configuration framework syntax proposal
Azoff, Justin S
jazoff at illinois.edu
Thu Sep 21 07:30:10 PDT 2017
> On Sep 21, 2017, at 9:18 AM, Seth Hall <seth at corelight.com> wrote:
> There is just something about the idea of exposing variable names to
> users (even if it's wrapped in a gui) that is intensely unpalatable to
> me. It's pretty much unheard of among other types of software. It
> would be like exposing internal variable names to command line programs
> instead of abstracting it into easy flags (i.e. -a or --help)
I guess I was just thinking from my perspective, every script I would write would just have
## Set the threshold in bytes.
const threshold = 1234 &config="foo.threshold";
And I would just be repeating the namespace + variable name for each option with no added value. It would just become unnecessary repetition and a source of errors:
const one = 1234 &config="foo.one;
const two = 1234 &config="foo.tow"; #oops
const three = 1234 &config="foo.tow"; #oops!
I say this as someone that will absolutely screw this up :-)
Maybe the design should support renaming variables for the configuration, but programmers should be strongly discouraged from renaming things unless they have a good reason from deviating from the automatic namespace + variable
> or, if in
> a gui a text entry box had a label next to it like
> "GUI::My_Program::user_name" instead of showing "Username".
I'm not sure how exposing something like "input.pcap.filter" is any different from exposing something like "Pcap::filter" from that standpoint. Maybe there's a larger discussion here around what the user experience should look like? I feel like two different things are being talked about now.
Directly using variable names in UI elements is not unheard of though, a lot of UI frameworks will do things like present a variable like user_name as "User Name" in the UI. This is usually a simple text transform like
>>> s.replace("::", " - ").replace("_", " ").title()
'My Program - User Name'
This way you don't end up with code that looks something like
user_name .. display as "User Name"
age .. display as "Age"
favorite_color .. display as "Favorite Color"
favorite_food .. display as "Favorite Food"
pin .. display as "PIN"
Instead you only need to override the display when you have a good reason to deviate from the standard underscore to space and Title Case transform:
pin .. display as "PIN"
Having a bro configuration tool display something like the current SSH::password_guesses_limit as
SSH Password Guesses Limit
The number of failed SSH connections before a host is designated as guessing passwords.
Current Value: 30
Or Site::darknet_mode as
Site Darknet Mode
I just realized I didn't document the variable name itself :-)
Type: DarknetMode enum
Current Value: DARKNET
DARKNET: Only hosts defined in darknet_address_space are dark
NOT_ALLOCATED: Only hosts NOT listed in used_address_space are dark
DARKNET_OR_NOT_ALLOCATED: Only hosts defined in darknet_address_space OR NOT listed in used_address_space are dar...
DARKNET_AND_NOT_ALLOCATED: Only hosts both defined in darknet_address_space AND NOT listed in used_address...
wouldn't be crazy, and such a tool seems like it would be pretty user friendly to me.
More information about the bro-dev