diff --git a/CHANGELOG.md b/CHANGELOG.md index 6af5ab5..6809ff3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ MumbleDJ Changelog ================== +### July 10, 2016 -- `v3.1.0` +* File path for user `p12` certificate can now be provided for authenticating as a registered user via the `--p12` commandline flag or the `connection.user_p12` configuration value. + ### July 1, 2016 -- `v3.0.11` * Potential fix for an issue with IP SANs on PEM certs. diff --git a/README.md b/README.md index 50b59d2..c124758 100644 --- a/README.md +++ b/README.md @@ -116,23 +116,24 @@ USAGE: mumbledj [global options] command [command options] [arguments...] VERSION: - 3.0.0-alpha + v3.1.0 COMMANDS: GLOBAL OPTIONS: - --config value, -c value location of MumbleDJ configuration file (default: "$HOME/.config/mumbledj/mumbledj.yaml") - --server value, -s value address of Mumble server to connect to (default: "127.0.0.1") - --port value, -o value port of Mumble server to connect to (default: "64738") - --username value, -u value username for the bot (default: "MumbleDJ") - --password value, -p value password for the Mumble server - --channel value, -n value channel the bot enters after connecting to the Mumble server - --cert value, -e value path to PEM certificate - --key value, -k value path to PEM key - --accesstokens value, -a value list of access tokens separated by spaces - --insecure, -i if present, the bot will not check Mumble certs for consistency - --debug, -d if present, all debug messages will be shown - --help, -h show help - --version, -v print the version + --config value, -c value location of MumbleDJ configuration file (default: "/home/matthieu/.config/mumbledj/config.yaml") + --server value, -s value address of Mumble server to connect to (default: "127.0.0.1") + --port value, -o value port of Mumble server to connect to (default: "64738") + --username value, -u value username for the bot (default: "MumbleDJ") + --password value, -p value password for the Mumble server + --channel value, -n value channel the bot enters after connecting to the Mumble server + --p12 value path to user p12 file for authenticating as a registered user + --cert value, -e value path to PEM certificate + --key value, -k value path to PEM key + --accesstokens value, -a value list of access tokens separated by spaces + --insecure, -i if present, the bot will not check Mumble certs for consistency + --debug, -d if present, all debug messages will be shown + --help, -h show help + --version, -v print the version ``` diff --git a/bindata.go b/bindata.go index b9fe00e..833b010 100644 --- a/bindata.go +++ b/bindata.go @@ -68,7 +68,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _configYaml = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xc4\x5a\xfb\x6f\x1b\x37\xf2\xff\xdd\x7f\x05\xab\x5c\x70\x09\xe0\x2a\x71\xae\x2f\x18\xb9\x14\xae\x93\xbb\xfa\x10\x37\x45\xe2\x16\xe8\x4f\x0b\x4a\xcb\x95\x58\xef\x92\x7b\xcb\x5d\xc9\xea\x5f\x7f\xf3\x20\xb9\x4f\x5b\x92\x13\xe0\xfc\xfd\xa2\x17\x71\x87\x33\xe4\x3c\x3f\x33\xbb\x4f\xc4\x75\x53\x2c\x72\xf5\xf6\x3f\x27\x4f\xc4\x4f\x3b\x71\x2d\xeb\x7a\xad\x55\x23\xfe\x5d\x69\xb5\x52\x15\xac\x5e\xda\x72\x57\xe9\xd5\xba\x16\xcf\x96\xcf\xc5\xab\x97\x67\xdf\x8d\xa8\xc4\xb3\xeb\xab\x1b\xf1\x5e\x2f\x95\x71\xea\x39\xec\x59\x5a\x93\xe9\xd5\x7c\x27\x8b\xfc\xe4\x44\x96\x3a\xb9\x55\x3b\x77\x7e\x72\x22\xe0\xef\x89\xf8\xc3\x36\x37\xcd\x42\x89\x8b\x5f\xaf\x04\x3c\x98\xd3\xf2\xce\x36\x35\x2c\x9e\x8b\xd9\x2c\xd0\x7d\xb2\x8d\x49\x2f\x73\xdb\xa4\x7d\xd2\x27\xe2\x97\x0f\x37\xef\xce\xc5\xcd\x3a\xf2\x10\xda\x21\x87\x4a\x2c\x73\xad\x4c\x2d\xae\xde\x32\xa9\x43\x16\x4b\x64\xc1\x8c\x4f\x52\x95\xc9\x26\xaf\xdb\xc3\xbc\xe5\x05\x38\x72\x51\xe0\xce\xda\x0a\x38\x9a\x2c\x4b\x60\x94\xd2\x2f\x5b\xf7\xc5\x5e\x65\x28\x4a\xa4\x56\x18\x5b\x8b\xad\x84\x4d\x32\x6e\x5f\xec\x84\x17\x71\x2a\x9c\x22\x76\xaa\x28\xeb\x9d\x70\x75\xa5\xcd\x4a\x3c\x9b\xcd\x9e\x33\x3b\xbf\x03\xce\xf5\xb3\xca\x73\xfb\x95\xb8\x12\xb2\x00\x4e\x28\x4f\xdc\xec\x4a\x25\xbe\x5a\xab\xbc\x14\x99\xad\x60\x35\xd7\xae\x16\x36\xa3\x5d\xd2\xa4\x6e\x3e\x1b\x5d\x60\x2d\x8d\x51\x39\xd1\xd7\xa0\x19\xe0\x43\xd2\x4d\x0d\x06\x6a\x4a\x6b\xd0\x2a\x46\x2d\x6b\x6d\xcd\xe4\x85\xb6\xda\xad\x87\xbb\xfd\x16\xfc\x27\xae\x56\xd6\x46\x41\x7b\xef\xc7\x64\x5d\x83\x5e\xf2\xe1\x71\x53\xe3\x14\xfe\x4f\x99\xcb\x9d\x90\x4d\xaa\xad\xc8\x74\xae\xdc\x9c\x8c\x5a\x6f\xad\x70\x4d\x59\xda\xaa\x06\x1b\x2c\xd7\x16\x3c\xcb\x09\x59\x29\x31\xcb\xb2\xa2\x54\xab\x99\x40\x36\x33\xb9\x81\xf3\x6d\x66\x2c\x0f\x59\xa9\x2a\xf1\x0a\x3a\x8f\xa4\x60\xf4\xff\x36\xaa\x51\xd1\xe2\x1f\x25\xa8\x00\xae\x23\x6b\x51\x34\xa0\x55\x30\x77\x01\x37\x81\x8b\xab\xbb\xa5\x52\x29\x9b\x1d\xae\xb3\x42\xd7\x96\xf0\x2f\xb9\xbc\x15\xee\x56\x97\x2c\x88\x7e\x27\xf8\x3b\xa9\x90\xd5\xb9\x78\x39\xff\xf6\xb1\xcc\xf1\xd4\x64\xdb\x96\x7f\x58\xba\x4f\xc4\xb5\xbc\xd3\x45\x53\xf8\x73\xa5\x0d\x51\x18\xa1\x0d\x18\x04\xf4\x01\xbe\x21\x3e\xb1\x65\x5e\x92\x39\x1b\x53\x29\xb4\xce\x12\x95\x19\xc8\x59\x54\x21\xef\x12\xbe\x4e\x58\x07\x49\x93\x72\x9c\x28\xe1\xbc\xe1\x68\x0f\x49\x08\x34\x6e\x20\xc2\x25\xc0\x21\x09\x4f\xcf\xc5\xb7\x51\xd0\x95\x13\x6e\xdd\x64\x59\x8e\x0e\xa4\x8c\x84\x7c\x94\x8a\xed\x5a\x99\xe8\x89\xae\x96\x55\xed\x7e\x24\x7a\xd9\xd4\xb6\x80\xb3\x2e\x13\xde\xa4\x12\x3c\x75\x26\x73\xa7\x02\xc3\x0b\x63\x20\xee\x97\xca\xab\x48\x1b\x38\x64\xc1\x5a\x02\xbb\x10\x53\xb5\xd2\xc6\xa0\x3c\x88\x29\xf6\x3f\x3c\xd9\x02\xc8\xbd\x14\xcf\x22\x31\x6a\xeb\xcf\x7f\x0e\xec\x1a\x90\x71\xd2\xc6\x51\xf4\xa9\x8b\x34\x05\x15\x38\x3e\xec\xda\x36\x79\x0a\x92\x6a\x8c\x8c\x7e\x14\xb1\x4e\x24\x53\x83\x8f\x9e\xbd\xfa\x7e\xfe\x12\xfe\xef\x2c\xc6\xc8\xaf\xe0\xf4\x07\xb2\xc1\xf8\x00\x1e\xdf\x7d\xf3\xfd\x3f\x7e\x68\xf7\x4b\xe7\xb6\xb6\x4a\xc9\x30\xe1\xa4\x70\x4f\xd8\xef\x54\xb5\x51\xd5\x28\xf6\x0d\xdc\xdd\x6f\xda\x17\xd3\x81\xae\x1b\xd4\xbf\x01\x5b\x23\x0b\x45\x02\x43\x35\x61\xf2\xc6\x3f\x02\xf2\xf0\xa0\x4d\xee\x7c\xbd\x60\xe1\x70\x4d\x89\x8e\x0c\x7e\xdc\x40\xb0\xb7\x7a\xfe\x31\x1a\x76\xea\x29\xa4\x62\x48\x0f\x98\x8c\xe1\x7a\x3a\xdb\x11\xd3\xa5\xaa\x6a\x9d\xe9\xa5\xac\x15\xda\x18\x97\xf8\xfe\x78\x4e\xcf\x0e\x58\x38\xf0\x45\x65\x96\xbb\xb9\xb8\xaa\xb1\x88\x2c\xc0\x91\x51\x01\xb9\x92\x1b\xf0\x9f\x35\x2c\x59\x73\x2a\x16\x4d\x2d\x52\xed\xd0\x35\x85\x06\x42\xce\x98\x98\x91\xd6\x72\x03\x3a\xf2\x0c\xb5\x73\x0d\x1c\xa5\xaf\x76\x19\x04\x63\x22\x87\x1d\x55\xc3\x9e\x57\x40\xd6\xd6\x25\x32\x34\xe0\xdf\x06\x53\x1c\x1c\xb4\xaf\xc1\x70\xdb\x81\x83\xff\x0b\x72\x65\x29\xeb\x35\x79\x45\xe7\xa2\x98\x43\xa7\xec\x3b\xa4\xc1\x9b\x1a\xca\x46\x7b\xb3\xb8\x22\x1f\x9b\xed\x93\x8c\x35\xf8\x3e\xe9\xbe\x3e\x1f\x26\x10\x88\xbb\xf2\x2e\x96\x4b\x8c\xab\xda\xde\x02\xb6\xc0\x6d\xda\xe8\x5a\xcb\x5c\xff\xa5\xa2\xef\x6c\x75\xbd\x46\xb6\xa5\x84\x1c\x06\xa9\x03\x6a\x30\x55\x01\x37\x75\x18\xd9\x63\x88\xf6\x38\xec\x5c\xbc\x2f\xe1\x7d\x3d\x94\x32\x70\xe4\x90\x9e\x64\x9e\xef\xba\xd1\x5b\xa9\xba\xda\x75\xbd\xb6\xeb\x1a\x32\xc3\x2a\x0d\x1e\xd6\xba\x0e\xfb\x3c\xed\x4a\x7c\x52\x0c\x19\x88\x05\xff\x6c\xb7\x90\x5d\x0d\xb8\xbb\x2e\x94\x0b\xf9\x62\x18\x50\x24\x79\x50\xc6\x59\x68\x57\x80\xa7\x86\x8b\x9d\xbd\x1c\xf1\xf7\x65\x65\x28\x61\x2b\x31\x12\xcc\xd7\x0b\x55\x6f\x95\xea\xc2\x0b\x7f\xd7\xc0\xb4\x2b\x48\x23\x1c\xd9\x48\x80\x05\xdf\x62\x26\x95\xcb\x75\x5b\x98\x2f\xf1\x17\x40\x36\xb3\x02\xc3\x38\x94\xb3\x23\x03\xa5\x76\x6b\x72\x2b\xc1\x48\xcc\x29\x6a\xa3\x17\x13\xb1\x5c\xd9\x5a\xe6\xec\xe5\x0e\xbd\x04\x41\x13\x31\x4e\x35\x28\xa2\xb6\x70\x30\x28\x95\xd7\xfa\xa7\x58\x9f\x70\x5b\x82\xb4\x70\xa8\xb3\x57\x31\x91\x42\x2e\xb1\x29\xe5\x0e\xd0\x2f\x97\x74\xaf\x01\x95\xcb\xd2\x61\x11\x81\x54\xa2\xd0\x88\x70\x64\xf4\xf0\x25\x64\x8d\x0a\x1c\x30\xab\x6c\xc1\x49\x08\x05\x9f\xa2\x3c\xd8\x58\x79\x7f\x54\x77\x25\x9c\x24\x41\xae\xe7\xe2\xd5\x37\xf7\xc8\x0b\x5a\x55\xc0\x02\x20\x90\x82\x3a\xe6\xd3\x18\xdf\x26\x23\x48\x81\x9c\x52\xc8\x48\xaa\x70\x24\xa6\xd0\xa6\xa9\x95\x0b\x08\x0c\x76\xf5\x35\xee\x21\x63\xd4\x04\x56\x85\x1a\x2f\x41\x4c\x3d\xa7\xb9\x78\x67\x36\xba\xb2\x86\x10\xed\x46\x56\x1a\xf5\xcd\xc1\x42\x19\x90\x31\x32\x64\xf7\x54\xac\x55\xe5\x63\x3e\xaa\x17\x82\xe3\x6f\x3f\x7f\xb8\x7e\xf7\x62\x4e\x4c\x5f\x14\x94\xd1\xd2\x3f\x11\x89\x6d\x6c\xde\x14\x6a\x04\xbe\x79\xd9\xf3\xe1\x35\x84\x3c\xd1\x16\xef\xed\x16\xf3\x32\x93\x09\x88\x2c\xf8\x9d\x32\x79\x4e\x8f\x90\xfa\xe5\x59\xf4\x5c\x68\x57\xee\xa3\x5f\xf3\x33\xdc\xf0\x03\x1c\x48\xa6\xa0\xb2\xb6\x1b\x78\x47\xae\x25\x78\xf5\xc7\x61\xfa\xa0\x72\x00\xff\xef\x33\x05\xb9\xdf\xa9\xc0\x10\xf1\xa8\x13\xd4\x68\x50\x35\xea\x0e\xb2\xb6\x4f\x45\xf8\x18\x0b\xe1\xbc\xef\xbb\xdd\x48\x7e\xef\xc1\x3d\x89\x15\x58\x31\x87\xa9\x8b\x6a\x13\xc6\x31\xf6\x0c\x04\x22\xd7\x1e\xc9\x10\x35\x9a\x9e\x0e\x47\x50\x92\x8a\x0c\x00\x1c\xa8\x6c\xe8\x1d\x96\x70\x94\xe7\xe7\xf3\x8d\xf3\x18\x55\x17\xa5\x45\x32\x87\x27\xc7\x0a\xea\x4f\xee\x8f\x12\xbb\x0d\xda\x4d\xa2\xce\xe9\x9f\xf8\xf7\xb5\x98\x7d\x6a\x00\xd3\x21\x00\x98\x11\x2c\x62\xe2\x36\x9e\xd7\x90\x90\x97\xd4\x7e\x38\xc6\xbd\xa9\x72\x7a\x65\xb0\x5e\x04\x62\x8e\x15\x83\xf8\x2c\x17\xb5\xba\x03\xd8\x0c\x69\x56\xae\x86\x1a\xf8\x60\x20\x9b\x5a\xa3\xb0\xad\xf0\x4c\x9f\xe1\xf5\x33\x5d\xb9\xfa\x39\x6a\x07\x65\x78\x94\x52\xa9\x4c\xdf\x81\x1b\x7e\xe5\x93\x34\x0a\xb3\x26\x09\x9c\xdb\x2b\x18\x1b\xb0\xa9\xaa\x2a\x5b\xc1\x96\x1b\x74\x68\x2e\x0b\x36\x20\x5f\xcd\x40\x94\xba\x08\xe8\xbb\xc2\x66\xf4\x6e\xc8\xd3\x89\xc7\x05\x69\xe4\x71\xc9\x0f\x28\x23\x34\x55\x05\x41\x04\x67\x0f\x54\x6d\xe3\xf6\x93\x02\xb7\x44\xa2\xb6\xbb\xa3\xf0\x0e\x9a\x69\x3b\x20\xf0\xa2\x08\x0b\xc4\x3b\x4a\x08\xde\xdf\xd6\xd2\x79\x6e\xf5\xba\x52\xca\x37\xde\x80\xe5\xd1\x8b\x6d\x89\xc9\xd8\x5f\xf7\x09\x84\x81\x96\x0e\x6e\x2f\x2e\xa2\x3c\x76\x1e\xf2\x04\xef\xb9\xc1\x52\xc1\x0f\x3a\x27\x9a\x47\x90\x93\x90\x77\xb0\x0f\x8b\x7f\x82\x59\xb0\xd2\x51\xc8\x10\x9b\x89\xbd\xa7\x1c\x2c\x40\x0c\xe1\x40\x66\x9c\xa6\x0b\x32\xc0\x51\x96\x95\x2e\xb9\x23\x79\xdb\xfe\xc0\x0c\xbc\x35\xb1\x4b\x0d\x6a\x88\xcd\x02\x75\xcc\x61\x15\x54\x1b\x02\x31\xf0\x8d\x2e\x20\x7e\x87\xb4\x66\x1b\x17\x57\x7c\xcf\x06\xed\xe8\x02\x0b\x24\x36\xf5\x68\x99\xae\x4b\x76\xf2\xba\x3f\x2d\x82\xdf\xac\xf1\x3d\x77\x25\x8d\xcb\x65\xdd\xa2\xc1\xf6\x8f\xd1\x04\xe1\x17\x0b\xfb\x2b\x91\x4b\xb3\x6a\xc8\xcb\xc5\x5b\x8b\x2e\x0e\x01\x5b\x58\x40\x9c\x91\x12\x4f\x43\x5d\x0a\xc1\x1b\x31\x7b\x3a\x13\xcf\x5c\x03\xa6\x87\x63\xcd\x9e\xba\xd9\x29\xfc\x37\x85\xff\xaa\x7a\x39\x7f\x3e\x12\x18\xca\xa7\x6b\x16\xae\xd6\x35\xe5\x22\xe2\x03\xe0\x93\xca\x4b\x2a\x6b\x39\x17\x1f\x51\x28\xc1\x54\xc8\x89\xad\xf0\xad\xce\x73\xb0\x10\xf5\xe8\xed\x2c\xa0\xd0\x6e\xa1\x00\xee\xaa\xd8\xc4\xb4\x81\x14\x7c\xeb\xa4\x73\x06\x4c\x10\x40\x34\x1b\xad\xb5\x2b\xad\x2b\x71\x29\x0f\xeb\x3d\xf3\xcf\xa0\xb9\x72\xb1\x0f\xb7\x6d\x17\xca\xf6\x90\x60\x9e\x54\x43\x11\xd6\xb5\x0a\x00\x67\x18\xaa\xe3\xc8\xf7\xd1\xdf\x54\x79\x0c\xdb\x0b\xf1\xdb\xc7\xf7\xb1\x6b\xc7\xe8\xa3\x11\x10\xa9\x0d\x99\xc2\x5d\xa2\xe1\x67\x43\x46\x50\x60\x75\x3a\x4c\x26\xbf\x58\x41\xeb\x21\x91\x6c\x31\xb7\x64\x38\x92\x6a\xb9\x96\x15\x58\x00\x33\x3a\x08\x7f\xe6\x9e\x0f\x38\x7b\x86\xb5\xb5\x49\x0e\x20\x23\x72\xfe\x03\x67\x5d\xf4\x10\xf6\x30\x5f\xa5\xc9\xb3\x80\x54\x20\x29\x75\x1b\x10\x63\xb8\x41\xd8\x25\x25\x22\x0c\x14\xc4\x45\x20\x13\xc1\xac\x37\x7c\x31\x17\xbf\xd8\x96\x19\x5a\x18\x14\x00\x01\x05\x17\x56\xc3\xab\x42\xec\xfa\x89\x01\x3d\x85\xa3\xbc\x5e\xbc\x79\xea\x5e\xbf\x58\xbc\x61\x7a\x01\xbf\xcf\xe8\x27\xdb\xab\x6b\x91\xf3\xd7\x8b\xea\xcd\x6b\x4d\xf4\xfa\x0d\x9b\x0f\x5c\xb9\x27\x00\x11\x67\xd0\xe3\x03\x22\x9e\xa6\xad\x0c\x77\x9f\xd9\xc9\x36\x80\xed\x06\x5a\x24\x8e\x70\x90\x21\x97\x25\x81\x3b\xac\x82\x0b\xe5\x25\xa5\x0d\xf9\x94\xd7\x62\x05\x0f\x62\x58\x30\x36\x0d\xea\x0e\x69\x1d\xb6\x19\x48\x19\x07\x45\x06\x12\x8e\xa3\xc3\x4c\x85\x07\xa1\x85\xcf\x8e\x0e\xce\x0a\x02\xe5\x12\xd2\xbb\xaf\xb2\x3d\x09\xd7\xc0\x72\xc0\x7b\x62\x9a\x04\x78\xa6\x8d\xe2\xf1\x02\x50\xcd\x7d\x85\x45\xa4\x47\x10\x7a\xef\xc5\x23\xe9\xe8\xea\x4b\x77\xe4\xd5\x3f\x34\x75\xd9\xd4\x7c\xc0\x1e\xe0\x6f\x61\x32\x43\x7d\x6c\xd8\x97\x6d\x55\xf6\x20\x6c\x6f\x82\xf0\xd5\xdb\xf7\x06\x88\x0d\xc2\xd2\x94\x24\x47\x7e\x39\x7f\xb5\x41\x89\xe8\x57\xc1\x27\xfc\x1e\xb2\xd0\x01\xfa\xe9\x50\x8f\x55\xc4\x0f\xb1\xe1\xb8\xef\xd9\xb1\xd9\x35\x28\xb1\x37\x25\x5b\xd8\x86\xe1\x65\xb8\x6f\x98\xa4\xb5\xfe\x82\x3a\xc5\x4a\xae\xee\x68\xd8\x77\xa8\x2e\x59\x0b\x7d\x65\x7a\xe6\xa0\xc0\x90\x1b\x4e\x7d\xfc\x01\xf2\x89\xc1\x1f\xd4\x09\xc7\x84\xec\x75\xab\xcb\xfd\xba\x8c\xa4\x23\x65\x65\xc7\xfa\xda\x55\x41\x81\x54\x2b\xc0\x3a\xc8\xd1\x8d\xd5\xb3\x57\x07\xed\xe4\xb8\xa4\xbc\x36\xd6\x01\xe0\x39\xce\xbd\x78\x72\xbd\xf0\xb2\xca\x7d\x9a\x88\x53\xd5\xc3\x35\x12\xb6\x4c\x68\xa6\xfc\xa2\xaa\x89\x33\xe3\x03\xca\x71\x1c\x7d\x77\xe0\xf8\xd8\x4b\x30\x43\x97\xb2\xe2\x96\x69\x8a\x3f\xfe\xf5\xa6\xe8\x63\x75\xc7\x2c\x79\x9c\xc6\x11\x5f\xee\x57\x32\x52\x8d\xf4\xba\x7e\x6c\x60\xb6\x8d\x5d\xff\xfd\xcf\xc3\xda\x0c\x84\xc9\x5a\xc9\x54\x55\x6d\xcd\xbb\x0c\x6d\x1a\xde\x0b\xd7\xfa\x27\xa5\x83\x25\xf7\xee\xbe\xa0\xbe\x70\x82\x07\x31\xf9\xd3\x6a\x53\x1c\x50\x03\x98\x6e\xa4\x22\x5c\x3e\xd2\xf7\xae\x01\x34\xbb\xd8\x1d\x41\x82\x82\x6a\xcd\x2f\x02\xbd\xa1\xc3\x6b\x31\x9d\xb1\xdf\x80\xdd\xb1\x0a\xf0\xcc\x1f\xc7\x1f\xb6\x50\x94\xc6\xc0\x10\x7b\x95\x4a\xe0\x1d\x8e\x55\xa9\x24\xa7\xc1\xb1\xee\x60\x32\xec\x83\xa9\x59\x94\x86\x41\x7e\x10\x8d\x38\x21\x92\x13\x92\x1e\x82\x14\xd0\x38\x1e\x3a\x69\xdf\x99\xd1\xcb\x40\x83\xfd\xa1\xf1\xf7\xe1\x47\xa1\xa5\xbd\x05\x88\xbe\x5f\xcf\x48\x35\xd2\xf2\xed\x91\x2a\xfe\x54\x5b\x1f\xd2\x34\x57\xc4\x29\x47\xae\xa0\xd7\x01\x08\xe1\x86\xa3\xb5\x10\x27\x78\x5d\xff\xd6\x64\xef\x21\x5b\xda\xd1\x51\xe9\x3d\x12\xce\x03\x27\x9f\x8c\x17\x1f\x1b\x62\xfd\x0e\x3c\xc0\xc1\xd8\xbb\xdf\x03\x93\xa6\x7d\x44\x1b\xee\x05\x70\xee\xb6\x52\x55\xdb\x5e\x98\xf0\x48\xf8\x47\x62\x2b\x5d\xec\x33\xa6\x80\x3f\x39\x99\xf6\x80\xd5\x83\xd5\xf3\x3d\x45\xb2\x13\x8d\xd8\x50\xee\x57\x3f\x52\x8d\x34\x59\x3c\x2a\x0c\x83\x8f\x50\x14\xe2\x0f\x8e\xcb\x18\x08\xb1\xd7\xd9\x00\x22\x95\xd5\xaa\xc1\x01\xe3\x21\x75\xc1\x33\x48\x02\x83\x4e\xcf\x06\xe7\x00\x15\x31\x6c\x09\x72\x46\x3d\x1c\xc6\x9c\xdd\xc4\x6e\x76\xa0\xeb\xc0\x1d\x5f\x23\x01\x42\x21\x40\xd3\xab\x40\xf1\xdc\x41\x40\x7c\xe1\x44\xb4\x03\x76\x28\x29\x81\x56\x1d\x5b\xac\xac\xc9\xb9\x5b\xe3\xb6\xaa\x5d\x05\xaf\x42\xba\xb4\xdb\x60\x77\xaa\x8d\x60\x0b\x22\x06\x3f\x10\x36\x46\xd2\x91\x2d\xf1\xc9\x24\x60\xec\xf7\x1f\x5f\x02\x2d\x52\xcf\xf0\x65\xa1\x62\x82\xd3\xa5\x87\xf1\x00\xca\xa1\x19\xd4\x58\xf2\xb0\x19\x84\xf3\xf5\x10\x68\xf7\xc0\x07\xc2\x4f\x68\x28\x79\x58\x7e\x80\x4d\x02\xe9\x58\xf5\xcb\xcf\x68\x75\x80\xed\x02\x5f\x27\x66\x31\x53\xf1\xf0\x1e\xdf\x84\x6a\x77\xfb\xc8\x66\x07\x1b\x65\x7f\xb1\xee\x18\xb4\xcd\x82\x6d\xbf\x4c\x6f\x09\xf8\xc5\x41\x1a\xd4\x4d\x5b\x3b\x3a\x3a\x34\xfb\x47\xd2\xb1\x8e\x9a\x62\x3a\xf7\x3f\xbe\xc7\x99\xd6\xde\xe3\xf2\x7c\x9c\x84\x44\x75\xf5\xe6\xbd\x83\x31\xc8\x03\x4e\x59\xe6\x4d\x25\xf3\xf8\x91\xc1\x1e\xdd\x4f\xcf\xa4\x89\x61\x89\xa3\x89\xfd\x1a\x27\xb2\x63\x35\xf8\xab\xa4\x51\x40\xff\x53\x89\x43\x52\x37\xed\x88\xf1\xfb\xce\x0f\xa9\x70\x9c\x46\xac\x70\xfc\x9d\x57\x00\x32\x77\x7c\xfc\xf4\x54\xf0\x6c\xf7\xd0\x29\x7c\xbc\x78\x7f\x50\x84\xb0\x9e\x97\xc7\x67\xa6\xbd\x95\xc2\x57\x8a\xfb\xb5\xc5\x74\x23\x1f\xac\x8e\x8c\xdf\x8f\xc4\xc6\x77\x46\x61\x48\x4f\xd9\x93\xde\x9a\xef\x53\x24\x9f\xa2\xed\x62\x46\x1c\xda\x3e\xa6\x57\x63\xc2\xbe\xf6\xd6\x4e\x1d\xd0\x25\x12\xd9\xf8\xce\x93\x5e\xf3\xe0\xa5\x81\x8d\xeb\xd4\x81\xc5\x8e\xe7\xdc\x84\xc0\xf3\x3c\x54\x07\x7a\xe9\xb8\x4f\x05\x44\x9b\xf0\x05\x86\x96\xa6\xd5\x71\x40\xc0\x72\x73\x48\x3b\xc2\x74\xc7\x86\xc4\x47\xda\x75\x74\x4c\x1c\x11\x10\xdc\xab\x3c\x26\x22\xf8\x46\xe3\x90\xf0\xeb\xf7\xc4\x04\x28\x31\x7c\x95\xb8\x57\x67\x2d\xed\x78\x10\x75\xcf\xba\x3b\xb6\xe8\x7d\x0a\xde\x13\xbe\xae\x84\xf2\x46\x9f\xf9\xa5\xbe\x70\xdb\xd8\xf9\xfd\xdd\xc5\xaf\x8d\x68\xe6\x47\xcb\x07\x35\xc9\x88\x34\xf8\xe5\x4b\x1b\x5d\x2c\xad\xfb\x2d\xe4\x7d\xe1\x45\xfb\x86\x78\xd2\x73\x45\xb4\xb8\x7a\x04\x57\xbf\x2f\x4c\xb5\x33\x8b\xef\xaf\xa9\x0d\xc0\x61\x39\x5b\x8a\x3f\x7d\x3b\xc0\x4c\x4c\x38\xb6\x05\xac\x4f\x2c\x1e\x1b\xe0\xd0\x0d\xda\x42\xff\xe5\xb1\xff\xe7\x15\x54\xc0\xd3\x89\x32\xb6\x59\xad\x1f\x7a\x29\x0b\x98\x9b\x68\xa6\x82\xa0\xfb\xe2\x52\x06\x1d\x0d\x8c\xe3\x57\x83\x55\x38\x10\x78\x77\x6b\x0d\x4f\x13\xe3\xe2\xa0\x61\xe3\xe4\x9c\x71\x72\xcc\xf8\x60\xa1\xcd\x25\x7d\xec\x2a\x36\x96\xdf\x67\x21\xdb\x47\xcc\x1a\x7d\x12\x49\x90\x4d\xda\x7d\x6f\xc4\x9d\x48\xc8\x31\xf4\xb8\x23\x06\xe1\xf4\x80\x3f\xfe\x11\xd9\x28\x9b\x0c\x37\x8f\xcf\x18\xd5\x77\xf8\x84\xf2\xc1\xe1\xe4\xf4\x6c\xf2\xf3\xf4\xf9\x7f\x1a\x50\x3e\xde\x40\xf7\x30\x3c\xd6\x46\x1d\x36\xc4\xa7\xb6\xab\x55\xae\x0e\xce\x2c\x3d\xf2\x91\xa1\xda\xa7\x53\x8f\xa6\xd7\x8f\x4e\x3f\x37\x2c\xa4\xfd\xe6\x2e\x7c\xab\x1d\xbf\x26\xb6\xe6\x85\xcd\xb2\xfd\x83\x79\x62\x94\x26\x40\x8b\x43\x85\xc8\xae\x65\x14\x73\x83\x27\x15\x7d\xb6\x3d\x26\xe6\x60\x1e\x06\x75\x4f\x4c\x36\xaa\x72\xf4\x41\xf1\x3e\xb5\x7b\xc2\x91\xf6\x36\x9f\xd3\x13\x05\x97\xf0\xcc\x7b\xdf\xa1\xee\xd3\x5d\x38\x79\xfb\x8d\x6f\xbb\x14\x5d\xd1\xbb\x58\xf8\xfc\x6b\xef\x25\x89\x6e\x7c\x47\x7b\xf4\x84\xef\x92\x6a\x29\xdf\xd2\x7f\x0e\x06\xed\xb1\x34\x71\xfc\x84\xf1\x1a\xe6\x3b\x80\xb4\xa6\x94\xc2\xdb\x68\xa6\xbb\xd5\x07\x4c\x89\x21\xf4\x5d\x77\x30\x8c\x39\xa2\x52\x50\x63\x1c\x86\xa2\x67\xd7\x7b\xd9\x8c\x3b\xc6\xaf\xda\x9b\x1a\x1c\x32\xa9\xf0\x02\x91\xd7\xef\xb4\xdb\xc5\x11\x57\xf8\x4c\x90\xee\x27\x73\xfc\xfa\x98\xdf\x42\x66\xfc\xbe\xdc\xa4\xdd\xdf\x43\xa0\xe2\x07\x2d\xde\x2c\xfd\x6c\x16\xb4\xe5\x1e\x60\xc0\x34\x1d\xa0\xd3\xcf\x3d\x11\xc8\xb4\xca\xf7\x63\xae\xc8\xee\x7f\x01\x00\x00\xff\xff\x68\xa7\xcd\x9c\x81\x34\x00\x00") +var _configYaml = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xc4\x5a\x7b\x6f\x1b\xb7\xb2\xff\xdf\x9f\x82\x55\x6e\x70\x13\xc0\x55\xe2\xdc\xbe\x60\xe4\xa6\x48\x9d\x9c\x53\x1f\xc4\x4d\x91\xb8\x05\xfa\xd7\x82\xd2\x72\x25\xd6\xbb\xe4\x9e\xe5\xae\x64\xf5\xd3\x9f\x79\x90\xdc\xa7\x2c\xc9\x29\x70\x7c\x2f\x7a\x22\xee\x70\x66\x38\x2f\xfe\x66\x76\x9f\x88\x9b\xa6\x58\xe4\xea\xdd\xbf\xce\x9e\x88\x9f\x76\xe2\x46\xd6\xf5\x5a\xab\x46\xfc\xb3\xd2\x6a\xa5\x2a\x58\xbd\xb2\xe5\xae\xd2\xab\x75\x2d\x9e\x2d\x9f\x8b\x57\x2f\x2f\xbe\x1b\x51\x89\x67\x37\xd7\xb7\xe2\x83\x5e\x2a\xe3\xd4\x73\xd8\xb3\xb4\x26\xd3\xab\xf9\x4e\x16\xf9\xd9\x99\x2c\x75\x72\xa7\x76\xee\xf2\xec\x4c\xc0\xdf\x13\xf1\x87\x6d\x6e\x9b\x85\x12\x6f\x7f\xbd\x16\xf0\x60\x4e\xcb\x3b\xdb\xd4\xb0\x78\x29\x66\xb3\x40\xf7\xd9\x36\x26\xbd\xca\x6d\x93\xf6\x49\x9f\x88\x5f\x3e\xde\xbe\xbf\x14\xb7\xeb\xc8\x43\x68\x87\x1c\x2a\xb1\xcc\xb5\x32\xb5\xb8\x7e\xc7\xa4\x0e\x59\x2c\x91\x05\x33\x3e\x4b\x55\x26\x9b\xbc\x6e\x95\x79\xc7\x0b\xa0\x72\x51\xe0\xce\xda\x0a\x50\x4d\x96\x25\x30\x4a\xe9\x97\xad\xfb\x62\xaf\x33\x14\x25\x52\x2b\x8c\xad\xc5\x56\xc2\x26\x19\xb7\x2f\x76\xc2\x8b\x38\x17\x4e\x11\x3b\x55\x94\xf5\x4e\xb8\xba\xd2\x66\x25\x9e\xcd\x66\xcf\x99\x9d\xdf\x01\x7a\xfd\xac\xf2\xdc\x7e\x25\xae\x85\x2c\x80\x13\xca\x13\xb7\xbb\x52\x89\xaf\xd6\x2a\x2f\x45\x66\x2b\x58\xcd\xb5\xab\x85\xcd\x68\x97\x34\xa9\x9b\xcf\x46\x07\x58\x4b\x63\x54\x4e\xf4\x35\x58\x06\xf8\x90\x74\x53\x83\x83\x9a\xd2\x1a\xf4\x8a\x51\xcb\x5a\x5b\x33\x79\xa0\xad\x76\xeb\xe1\x6e\xbf\x05\xff\x89\xab\x95\xb5\x51\xd0\xc1\xf3\x31\x59\xd7\xa1\x57\xac\x3c\x6e\x6a\x9c\xc2\xff\x29\x73\xb9\x13\xb2\x49\xb5\x15\x99\xce\x95\x9b\x93\x53\xeb\xad\x15\xae\x29\x4b\x5b\xd5\xe0\x83\xe5\xda\x42\x64\x39\x21\x2b\x25\x66\x59\x56\x94\x6a\x35\x13\xc8\x66\x26\x37\xa0\xdf\x66\xc6\xf2\x90\x95\xaa\x12\x6f\xa0\xcb\x48\x0a\x4e\xff\x77\xa3\x1a\x15\x3d\xfe\x49\x82\x09\xe0\x38\xb2\x16\x45\x03\x56\x05\x77\x17\x70\x12\x38\xb8\xba\x5f\x2a\x95\xb2\xdb\xe1\x38\x2b\x0c\x6d\x09\xff\x92\xcb\x3b\xe1\xee\x74\xc9\x82\xe8\x77\x82\xbf\x93\x0a\x59\x5d\x8a\x97\xf3\x6f\x1f\xcb\x1c\xb5\x26\xdf\xb6\xfc\xc3\xd2\x3e\x11\x37\xf2\x5e\x17\x4d\xe1\xf5\x4a\x1b\xa2\x30\x42\x1b\x70\x08\xd8\x03\x62\x43\x7c\x66\xcf\xbc\x24\x77\x36\xa6\x52\xe8\x9d\x25\x1a\x33\x90\xb3\xa8\x42\xde\x27\x7c\x9c\xb0\x0e\x92\x26\xe5\x38\x51\x82\xbe\x41\xb5\x87\x24\x04\x1a\x37\x10\xe1\x12\xe0\x90\x84\xa7\x97\xe2\xdb\x28\xe8\xda\x09\xb7\x6e\xb2\x2c\xc7\x00\x52\x46\x42\x3d\x4a\xc5\x76\xad\x4c\x8c\x44\x57\xcb\xaa\x76\x3f\x12\xbd\x6c\x6a\x5b\x80\xae\xcb\x84\x37\xa9\x04\xb5\xce\x64\xee\x54\x60\xf8\xd6\x18\xc8\xfb\xa5\xf2\x26\xd2\x06\x94\x2c\xd8\x4a\xe0\x17\x62\xaa\x56\xda\x18\x94\x07\x39\xc5\xf1\x87\x9a\x2d\x80\xdc\x4b\xf1\x2c\x12\xa3\xb6\x5e\xff\x4b\x60\xd7\x80\x8c\xb3\x36\x8f\x62\x4c\xbd\x4d\x53\x30\x81\x63\x65\xd7\xb6\xc9\x53\x90\x54\x63\x66\xf4\xb3\x88\x6d\x22\x99\x1a\x62\xf4\xe2\xd5\xf7\xf3\x97\xf0\x7f\x17\x31\x47\x7e\x85\xa0\x3f\x92\x0d\xe6\x07\xf0\xf8\xee\x9b\xef\xff\xef\x87\x76\xbf\x74\x6e\x6b\xab\x94\x1c\x13\x34\x85\x73\xc2\x7e\xa7\xaa\x8d\xaa\x46\xb9\x6f\xe0\xec\x7e\xd3\xa1\x9c\x0e\x74\xdd\xa4\xfe\x0d\xd8\x1a\x59\x28\x12\x18\x6e\x13\x26\x6f\xfc\x23\x20\x0f\x0f\xe2\xb6\x7f\x40\xba\x97\xb2\x5e\xfb\x62\x00\xb1\x75\xf1\x8a\x6a\x00\x17\xbc\x06\xbc\x64\xc0\xc9\x92\x94\x97\x90\xfd\xa2\x02\x9f\x39\x28\x66\x10\x1c\xb8\x61\xf2\x1c\x81\x07\x5c\x07\x86\xb2\xed\xd0\x89\x90\x53\x02\xdb\x7a\xf7\x0e\x5b\x3e\x04\x5f\xf0\x80\xc4\x1c\x83\x14\x6b\xa0\x0e\xb5\x21\xf0\x63\x8c\xb9\xa9\xa7\x70\x4b\x40\xe5\xc2\x7b\x02\x2c\xaf\xb3\x1d\x31\x5d\xaa\xaa\xd6\x19\x9e\x4d\x61\xf8\xe1\x12\xbb\x06\x8f\xee\xd9\x01\x0b\x87\xa7\x35\xcb\xdd\x5c\x5c\xd7\x78\xa0\x05\xe4\x18\x9e\x24\x57\x72\x03\xa1\xbd\x86\x25\x6b\xce\xc5\xa2\xa9\x45\xaa\x1d\x66\x8d\xd0\x40\xc8\xc5\x1c\x8b\xe5\x5a\x6e\xe0\xb0\x9e\xa1\x76\xae\x01\x55\xfa\x11\x21\x83\x60\x34\x39\xec\xa8\x1a\x4e\x8a\x02\x2e\x14\x5d\x22\x43\x03\xa9\x67\xb0\xfa\x82\xa2\x7d\xe7\x86\xd3\x0e\x72\xaf\xeb\xd7\xee\x41\xd1\x2d\x53\x2e\x1b\xd2\x1c\xef\x3a\xdc\xd9\x75\xdb\x3e\xc9\x08\x0f\xf6\x49\xf7\xd0\xe1\x38\x81\x40\xdc\x95\xf7\x76\xb9\xc4\x94\xaf\xed\x1d\xc0\x1e\xdc\xa6\x8d\xae\xb5\xcc\xf5\x5f\x2a\xc6\xce\x56\xd7\x6b\x64\x5b\x4a\x28\xaf\x10\xb8\x00\x0f\xe8\x82\x72\x53\xca\xc8\x1e\x43\xf4\xc7\x71\x7a\xf1\xbe\x84\xf7\x3d\x14\xc8\xa1\x72\xca\x3c\xdf\x75\x0b\x4b\xa5\xea\x6a\xd7\x8d\xda\x6e\x68\xc8\x0c\x01\x04\x44\x58\x1b\x3a\x1c\xf3\xb4\x2b\xf1\xf5\x3a\x14\x47\x16\xfc\xb3\xdd\x42\xe1\x37\x10\xee\xba\x50\x2e\x94\xb2\x61\x42\x91\xe4\x01\xc2\x60\xa1\x5d\x01\x9e\x1a\x0e\x76\xf1\x72\xc4\xdf\xdf\x78\x43\x09\x5b\x89\x99\x60\xbe\x5e\xa8\x7a\xab\x54\x17\xf9\xf8\xb3\x06\xa6\x5d\x41\x1a\x91\xd2\x46\x02\x62\xf9\x16\x8b\xbc\x5c\xae\x5b\xcc\x70\x85\xbf\x00\x4d\x9a\x95\xc3\x62\x04\x72\x76\xe4\xa0\xd4\x6e\x4d\x6e\x25\x38\x89\x39\x45\x6b\xf4\x72\x22\xde\xa4\xb6\x96\x39\x47\xb9\xc3\x28\x41\x3c\x47\x8c\x53\x0d\x86\xa8\x2d\x28\x06\xb7\xf8\x8d\xfe\x29\x5e\x9d\xb8\x2d\x41\x5a\x50\xea\xe2\x55\xac\xf1\x50\x4b\x6c\x4a\xb5\x03\xec\xcb\x68\xc3\x5b\x40\xe5\xb2\x74\x78\xbf\x41\x29\x51\xe8\x44\x50\x19\x23\x7c\x09\x55\x03\x2b\x67\x56\xd9\x82\x8b\x10\x0a\x3e\x47\x79\xb0\xb1\xf2\xf1\xa8\xee\x4b\xd0\x24\x41\xae\x97\xe2\xd5\x37\x7b\xe4\x05\xab\x2a\x60\x01\xe8\x4c\xc1\x15\xeb\xcb\x18\x9f\x26\x23\xb4\x83\x9c\x52\xa8\x48\xaa\x70\x24\xa6\xd0\xa6\xa9\x95\x0b\xe0\x10\x76\xf5\x2d\xee\xd1\x6c\xb4\x04\x5e\x58\x35\x1e\x82\x98\x7a\x4e\x73\xf1\xde\x6c\x74\x65\x0d\x81\xed\x8d\xac\x34\xda\x9b\x93\x85\x2a\x20\xc3\x77\xa8\xea\xa9\x58\xc3\x55\xc1\xd2\xa2\x79\x21\x39\xfe\xe7\xe7\x8f\x37\xef\x5f\xcc\x89\xe9\x8b\x82\x2a\x5a\xfa\x27\x82\xc4\x8d\xcd\x9b\x42\x8d\xfa\x02\x5e\xf6\x7c\x78\x0d\xd1\x58\xf4\xc5\x07\xbb\xc5\xba\xcc\x64\x02\x32\x0b\x7e\xa7\x4c\x9e\xd3\x23\xa4\x7e\x79\x11\x23\x17\x3a\xa9\x7d\xf4\x6b\x7e\x86\x1b\x7e\x00\x85\x64\x0a\x26\x6b\x1b\x95\xf7\x14\x5a\x82\x57\x7f\x1c\x96\x0f\xba\x0e\xe0\xff\x7d\xa5\xa0\xf0\x3b\x17\x98\x22\x1e\x10\x83\x19\x0d\x9a\x46\xdd\x43\xd5\xf6\xa5\x08\x1f\xb7\x57\xe9\x64\x26\x7f\xf0\x7d\x07\x89\x15\x78\x99\x0f\x4b\x17\xdd\x4d\x98\xc7\xd8\xce\x10\xbe\x5d\x7b\x90\x45\xd4\xe8\x7a\x52\x8e\x50\x2e\x5d\x32\xed\x3d\x6e\x09\xe2\x79\x7e\xbe\xde\x38\x0f\x9f\x75\x51\x5a\x24\x73\xa8\x39\xde\xa0\x5e\x73\xaf\x4a\x6c\x84\x68\x37\x89\xba\xa4\x7f\xe2\xdf\xd7\x62\xf6\xb9\x01\xb8\x89\xd8\x64\x46\x88\x8d\x89\xdb\x7c\x5e\x43\x41\x5e\x52\x67\xe4\x18\x92\xa7\xca\xe9\x95\xc1\xfb\x22\x10\x73\xae\x18\x84\x8e\xb9\xa8\xd5\x3d\x20\x7a\x28\xb3\x72\x35\xb4\xc0\x47\x03\xd5\xd4\x1a\x85\x1d\x8f\x67\xfa\x0c\x8f\x9f\xe9\xca\xd5\xcf\xd1\x3a\x28\xc3\x03\xa8\x4a\x65\xfa\x1e\xc2\xf0\x2b\x5f\xa4\x51\x98\x35\x49\xe0\xdc\x1e\xc1\xd8\x00\x9b\x55\x55\xd9\x0a\xb6\xdc\x62\x40\xf3\xb5\x60\x03\x28\xd7\x8c\x91\xa9\xc1\x81\x96\x30\x6c\xc6\xe8\x86\x3a\x9d\x78\x5c\x90\x46\x1e\x57\xfc\x80\x2a\x42\x53\x55\x90\x44\xa0\x7b\xa0\x6a\x7b\xca\x9f\x14\x84\x25\x12\xb5\x8d\x27\xa5\x77\xb0\x4c\xdb\x9c\x41\x14\x45\x58\x20\xde\x53\x41\xf0\xf1\xb6\x96\xce\x73\xab\xd7\x95\x52\x7e\x26\x00\x6d\x06\x46\xb1\x2d\xb1\x18\xfb\xe3\x3e\x81\x34\xd0\xd2\xc1\xe9\xc5\xdb\x28\x8f\x83\x87\x22\xc1\x47\x6e\xf0\x54\x88\x83\x8e\x46\xf3\x08\x72\x12\x8a\x0e\x8e\x61\xf1\xff\xe0\x16\xbc\xe9\x28\x65\x88\xcd\xc4\xde\x73\x4e\x16\x20\x86\x74\x20\x37\x4e\xd3\x05\x19\x10\x28\xcb\x4a\x97\xdc\x2c\xbd\x6b\x7f\x60\x05\xde\x9a\xd8\x40\x07\x33\xc4\x3e\x86\x9a\xf9\xb0\x0a\xa6\x0d\x89\x18\xf8\xc6\x10\x10\xbf\x43\x59\xb3\x8d\x8b\x2b\xbe\x9d\x84\x4e\x79\x81\x17\x24\xce\x1b\xd0\x33\xdd\x90\xec\xd4\x75\xaf\x2d\xe2\xf2\xac\xf1\xe3\x80\x4a\x1a\x97\x13\x94\xf6\xc2\xda\x3f\x46\x13\x84\x5f\x2c\xec\xaf\x44\x2e\xcd\xaa\xa1\x28\x17\xef\x2c\x86\x38\x24\x6c\x61\x01\x71\x46\x4a\xd4\x86\x1a\x28\x82\x37\x62\xf6\x74\x26\x9e\xb9\x06\x5c\x0f\x6a\xcd\x9e\xba\xd9\x39\xfc\x37\x85\xff\xaa\x7a\x39\x7f\x3e\x12\x18\xae\x4f\xd7\x2c\x5c\xad\x6b\xaa\x45\xc4\x07\xc0\x27\x5d\x2f\xa9\xac\xe5\x5c\x7c\x42\xa1\x04\x53\xa1\x26\xb6\xc2\xb7\x3a\xcf\xc1\x43\x34\x3e\x68\xc7\x14\x85\x76\x0b\x05\x70\x57\xc5\xfe\xaa\x4d\xa4\x10\x5b\x67\x1d\x1d\xb0\x40\x00\xd1\x6c\xb4\xd6\xae\xb4\xa1\xc4\x57\x79\x58\xef\xb9\x7f\x06\x7d\x9f\x8b\x23\x02\xdb\x36\xc8\xec\x0f\x09\xee\x49\x35\x5c\xc2\xba\x56\x01\xe0\x0c\x53\x75\x9c\xf9\x3e\xfb\x9b\x2a\x8f\x69\xfb\x56\xfc\xf6\xe9\x43\x1c\x28\x60\xf6\xd1\x74\x8a\xcc\x86\x4c\xe1\x2c\xd1\xf1\xb3\x21\x23\xb8\x60\x75\x3a\x2c\x26\xbf\x58\x41\xeb\xa1\x90\x6c\xb1\xb6\x64\x38\x2d\x6b\xb9\x96\x15\x78\x00\x2b\x3a\x08\x7f\xe6\x9e\x0f\x38\x7b\x86\xb5\xb5\x49\x0e\x20\x23\x72\xfe\x03\xc7\x70\xf4\x10\xf6\x30\x5f\xa5\x29\xb2\x80\x54\x20\x29\x75\x1b\x90\x63\xb8\x41\xd8\x25\x15\x22\x4c\x14\xc4\x45\x20\x13\xc1\xac\x77\x7c\x31\x17\xbf\xd8\x96\x19\x7a\x18\x0c\x00\x09\x05\x07\x56\xc3\xa3\x42\xee\xfa\x61\x06\x3d\x05\x55\x5e\x2f\xde\x3c\x75\xaf\x5f\x2c\xde\x30\xbd\x80\xdf\x17\xf4\x93\xfd\xd5\xf5\xc8\xe5\xeb\x45\xf5\xe6\xb5\x26\x7a\xfd\x86\xdd\x07\xa1\xdc\x13\x80\x88\x33\xd8\xf1\x01\x11\x4f\xd3\x56\x86\xdb\xe7\x76\xf2\x0d\x60\xbb\x81\x15\x89\x23\x28\x32\xe4\xb2\x24\x70\x87\xb7\xe0\x42\x79\x49\x69\x43\x31\xe5\xad\x58\xc1\x83\x98\x16\x8c\x4d\x83\xb9\x43\x59\x87\x6d\x06\x4a\xc6\x51\x99\x81\x84\xe3\xec\x30\x53\xe9\x41\x68\xe1\x8b\xb3\x83\xab\x82\x40\xb9\x84\xf4\xf6\xdd\x6c\x4f\xc2\x31\xf0\x3a\xe0\x3d\xb1\x4c\x02\x3c\xd3\x46\xf1\xe4\x03\xa8\xe6\xfe\x86\x45\xa4\x47\x10\xfa\xe0\xc1\x23\xe9\xe8\xe8\x4b\x77\xe2\xd1\x3f\x36\x75\xd9\xd4\xac\x60\x0f\xf0\xb7\x30\x99\xa1\x3e\x36\xec\xcb\xf6\x56\xf6\x20\xec\x60\x81\xf0\xb7\xb7\xef\x0d\x10\x1b\x84\xa5\x29\x49\x8e\xe2\x72\xfe\x6a\x83\x12\x31\xae\x42\x4c\xf8\x3d\xe4\xa1\x23\xec\xd3\xa1\x1e\x9b\x88\x1f\x62\xc3\xb1\xef\xd9\xa9\xd5\x35\x18\xb1\x37\xc0\x5b\xd8\x86\xe1\x65\x38\x6f\x18\xf2\xb5\xf1\x82\x36\xc5\x9b\x5c\xdd\xd3\x1c\xf2\x58\x5b\xb2\x15\xfa\xc6\xf4\xcc\xc1\x80\xa1\x36\x9c\xfb\xfc\x03\xe4\x13\x93\x3f\x98\x13\xd4\x84\xea\x75\xa7\xcb\xc3\xb6\x8c\xa4\x23\x63\x65\xa7\xc6\xda\x75\x41\x89\x54\x2b\xc0\x3a\xc8\xd1\x8d\xcd\x73\xd0\x06\xed\x50\xbb\xa4\xba\x36\xb6\x01\xe0\x39\xae\xbd\xa8\xb9\x5e\x78\x59\xe5\x21\x4b\xc4\x81\xef\xf1\x16\x09\x5b\x26\x2c\x53\xfe\xad\xa6\x89\xe3\xec\x23\xae\xe3\x38\x95\xef\xc0\xf1\x71\x94\x60\x85\x2e\x65\xc5\x2d\xd3\x14\x7f\xfc\xeb\x0d\xf8\xc7\xe6\x8e\x55\xf2\x34\x8b\x23\xbe\x3c\x6c\x64\xa4\x1a\xd9\x75\xfd\xd8\xc4\x6c\x1b\xbb\xfe\xab\xa9\x87\xad\x19\x08\x93\xb5\x92\xa9\xaa\xda\x3b\xef\x2a\xb4\x69\x78\x2e\x5c\xeb\x6b\x4a\x8a\x25\x7b\x77\xbf\xa5\xbe\x70\x82\x07\x31\xf9\xd3\x6a\x53\x1c\x71\x07\x30\xdd\xc8\x44\xb8\x7c\x62\xec\xdd\x00\x68\x76\xb1\x3b\x82\x02\x05\xb7\x35\xbf\xa3\xf4\x8e\x0e\x6f\xec\x74\xc6\x71\x03\x7e\xa7\x61\x37\xbd\x8e\xc0\xf1\x87\x2d\x14\x95\x31\x70\xc4\x41\xa3\x12\x78\x07\xb5\x2a\x95\xe4\x34\x38\xd6\x1d\x4c\x86\x7d\x30\x35\x8b\xd2\x30\xc8\x0f\xa2\x11\x27\x44\x72\x42\xd2\x43\x90\x02\x16\x47\xa5\x93\xf6\x75\x1e\xbd\xa7\x34\xd8\x1f\x1a\x7f\x1e\x7e\x14\x5a\xda\x3b\x80\xe8\x87\xed\x8c\x54\x23\x2b\xdf\x9d\x68\xe2\xcf\xb5\xf5\x29\x4d\x73\x45\x9c\x72\xe4\x0a\x7a\x1d\x80\x10\x6e\x38\x5a\x0b\x79\x82\xc7\xf5\x2f\x74\x0e\x2a\xd9\xd2\x8e\x54\xa5\x57\x5c\x38\x0f\x9c\x7c\x32\x5e\x7c\x6c\x8a\xf5\x3b\xf0\x00\x07\x63\xef\xbe\x07\x26\x4d\xc7\x88\x36\xdc\x0b\xe0\xdc\x6d\xa5\xaa\xb6\xbd\x30\xe1\x91\xf0\x8f\xc4\x56\xba\xd8\x67\x4c\x01\x7f\x0a\x32\xed\x01\xab\x07\xab\x97\x07\x2e\xc9\x4e\x36\x62\x43\x79\xd8\xfc\x48\x35\xb2\x64\xf1\xa8\x34\x0c\x31\x42\x59\x88\x3f\x38\x2f\x63\x22\xc4\x5e\x67\x03\x88\x54\x56\xab\x06\x07\x8c\xc7\xdc\x0b\x9e\x41\x12\x18\x74\x7a\x36\xd0\x03\x4c\xc4\xb0\x25\xc8\x19\xf5\x70\x98\x73\x76\x13\xbb\xd9\x81\xad\x03\x77\x7c\x8d\x04\x08\x85\x00\x4d\xef\x06\x8a\x7a\x07\x01\xf1\x85\x13\xd1\x0e\xd8\xa1\xa4\x04\x5a\x75\x6c\xb1\xb2\x26\xe7\x6e\x8d\xdb\xaa\x76\x15\xa2\x0a\xe9\xd2\x6e\x83\xdd\xb9\x6d\x04\x7b\x10\x31\xf8\x91\xb0\x31\x92\x8e\x7c\x89\x4f\x26\x01\x63\xbf\xff\xf8\x3b\xd0\x22\xf5\x0c\x7f\x2f\x54\x4c\x70\xba\xf4\x30\x1e\x40\x39\x34\x83\x1a\x4b\x1e\x36\x83\xa0\x5f\x0f\x81\x76\x15\x3e\x12\x7e\x42\x43\xc9\xc3\xf2\x23\x7c\x12\x48\xc7\xa6\x5f\x7e\x41\xab\x03\x6c\x17\xf8\x3a\x31\x8b\x95\x8a\x87\xf7\xf8\x26\x54\xbb\xbb\x47\x36\x3b\xd8\x28\xfb\x83\x75\xc7\xa0\x6d\x15\x6c\xfb\x65\x7a\x4b\xc0\x2f\x0e\xd2\x60\x6e\xda\xda\xb1\xd1\xb1\xd5\x3f\x92\x8e\x6d\xd4\x14\xd3\xb5\xff\xf1\x3d\xce\xb4\xf5\x1e\x57\xe7\xe3\x24\x24\x9a\xab\x37\xef\x1d\x8c\x41\x1e\x08\xca\x32\x6f\x2a\x99\xc7\xef\x1f\x0e\xd8\x7e\x7a\x26\x4d\x0c\x4b\x1c\x4d\x1c\xb6\x38\x91\x9d\x6a\xc1\x5f\x25\x8d\x02\xfa\x5f\x71\x1c\x53\xba\x69\x47\xcc\xdf\xf7\x7e\x48\x85\xe3\x34\x62\x85\xe3\xef\xbc\x02\x90\xb9\x63\xf5\xd3\x73\xc1\xb3\xdd\x63\xa7\xf0\xf1\xe0\xfd\x41\x11\xc2\x7a\x5e\x1e\xeb\x4c\x7b\x2b\x85\xaf\x14\x0f\x5b\x8b\xe9\x46\x31\x58\x9d\x98\xbf\x9f\x88\x8d\xef\x8c\xc2\x90\x9e\xaa\x27\xbd\x35\x3f\x64\x48\xd6\xa2\xed\x62\x46\x1c\xda\x3e\xa6\x77\xc7\x84\x7d\xed\xa9\x9d\x3a\xa2\x4b\x24\xb2\xf1\x99\x27\xa3\xe6\xc1\x43\x03\x1b\xd7\xb9\x07\x16\x3b\x9e\x73\x13\x02\xcf\xf3\x70\x3b\xd0\x4b\xc7\x43\x26\x20\xda\x84\x0f\x30\xf4\x34\xad\x8e\x13\x02\x96\x9b\x63\xda\x11\xa6\x3b\x35\x25\x3e\xd1\xae\x93\x73\xe2\x84\x84\xe0\x5e\xe5\x31\x19\xc1\x27\x1a\xa7\x84\x5f\xdf\x93\x13\x60\xc4\xf0\xc1\xe4\x41\x9b\xb5\xb4\xe3\x41\xd4\x9e\x75\x77\xea\xa5\xf7\x39\x44\x4f\xf8\xf0\x13\xae\x37\xfa\x02\x31\xf5\x17\xb7\x8d\x9d\xdf\xff\xba\xf8\x21\x14\xcd\xfc\x68\xf9\xa8\x26\x19\x91\x06\xbf\x7c\x69\xb3\x8b\xa5\x75\x3f\xd3\xdc\x97\x5e\xb4\x6f\x88\x27\x3d\x57\x44\x8b\xab\x47\x70\xf5\xfb\xc2\x54\x3b\xb3\xf8\xfe\x9a\xda\x00\x1c\x96\xb3\xa7\xf8\xab\xbc\x23\xdc\xc4\x84\x63\x5f\xc0\xfa\xc4\xe2\xa9\x09\x0e\xdd\xa0\x2d\xf4\x5f\x1e\xfb\x7f\xd9\x85\x0a\x78\x3a\x51\xc6\x36\xab\xf5\x43\x2f\x65\x01\x73\x13\xcd\x54\x12\x74\x5f\x5c\xca\x60\xa3\x81\x73\xfc\x6a\xf0\x0a\x27\x02\xef\x6e\xbd\xe1\x69\x62\x5e\x1c\x35\x6c\x9c\x9c\x33\x4e\x8e\x19\x1f\xbc\x68\x73\x49\xdf\xe1\x8a\x8d\xe5\xf7\x59\xc8\xf6\x11\xb3\x46\x5f\x44\x12\x64\x93\x76\xdf\x1b\x71\x27\x12\x6a\x0c\x3d\xee\x88\x41\x38\x3d\xe0\x8f\x7f\x44\x36\xaa\x26\xc3\xcd\x63\x1d\xa3\xf9\x8e\x9f\x50\x3e\x38\x9c\x9c\x9e\x4d\x7e\x99\x3d\xff\x4b\x03\xca\xc7\x3b\x68\x0f\xc3\x53\x7d\xd4\x61\x43\x7c\x6a\xbb\x5a\xe5\xea\xe8\xca\xd2\x23\x1f\x39\xaa\x7d\x3a\xf5\x68\x7a\xfd\xe4\xf2\x73\xcb\x42\xda\x6f\xee\xc2\x67\xe4\xf1\x43\x67\x6b\x5e\xd8\x2c\x3b\x3c\x98\x27\x46\x69\x02\xb4\x38\x54\x88\xec\x5a\x46\xb1\x36\x78\x52\xd1\x67\xdb\x63\x62\x8e\xe6\x61\xd0\xf6\xc4\x64\xa3\x2a\x47\xdf\x3a\x1f\x32\xbb\x27\x1c\x59\x6f\xf3\x25\x3d\x51\x08\x09\xcf\xbc\xf7\x1d\xea\x21\xdb\x05\xcd\xdb\xcf\x8f\xdb\xa5\x18\x8a\x3e\xc4\xc2\xe7\x5f\x07\x0f\x49\x74\xe3\x33\xda\x93\x27\x7c\x57\x74\x97\xf2\x29\xfd\xe7\x60\xd0\x1e\x4b\x13\xc7\x4f\x98\xaf\x61\xbe\x03\x48\x6b\xca\x28\xbc\x8d\x66\xba\x5b\x7d\xc4\x94\x18\x52\xdf\x75\x07\xc3\x58\x23\x2a\x05\x77\x8c\xc3\x54\xf4\xec\x7a\x2f\x9b\x71\xc7\xf8\x55\x7b\x53\x43\x40\x26\x15\x1e\x20\xf2\xfa\x9d\x76\xbb\x38\xe2\x0a\x9f\x09\xd2\xf9\x64\x8e\x5f\x1f\xf3\x5b\xc8\x8c\xdf\x97\x9b\xb4\xfb\x7b\x08\x54\xfc\xa0\xc5\xbb\xa5\x5f\xcd\x82\xb5\xdc\x03\x0c\x98\xa6\x03\x74\xfa\xb5\x27\x02\x99\xd6\xf8\x7e\xcc\x15\xd9\xfd\x27\x00\x00\xff\xff\x6b\x4e\xc6\x2b\x1c\x35\x00\x00") func configYamlBytes() ([]byte, error) { return bindataRead( @@ -83,7 +83,7 @@ func configYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "config.yaml", size: 13441, mode: os.FileMode(420), modTime: time.Unix(1466549845, 0)} + info := bindataFileInfo{name: "config.yaml", size: 13596, mode: os.FileMode(420), modTime: time.Unix(1468207090, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/bot/config.go b/bot/config.go index b523ef4..53d0934 100644 --- a/bot/config.go +++ b/bot/config.go @@ -40,6 +40,7 @@ func SetDefaultConfig() { viper.SetDefault("connection.port", 64738) viper.SetDefault("connection.password", "") viper.SetDefault("connection.username", "MumbleDJ") + viper.SetDefault("connection.user_p12", "") viper.SetDefault("connection.insecure", false) viper.SetDefault("connection.cert", "") viper.SetDefault("connection.key", "") diff --git a/bot/mumbledj.go b/bot/mumbledj.go index 0ff0c52..bd46fde 100644 --- a/bot/mumbledj.go +++ b/bot/mumbledj.go @@ -11,7 +11,10 @@ import ( "crypto/tls" "errors" "fmt" + "io/ioutil" "net" + "os" + "os/exec" "strings" "time" @@ -193,15 +196,48 @@ func (dj *MumbleDJ) Connect() error { // Initialize key pair if needed. if viper.GetBool("connection.insecure") { dj.TLSConfig.InsecureSkipVerify = true - } - dj.TLSConfig.ServerName = viper.GetString("connection.address") + } else { + dj.TLSConfig.ServerName = viper.GetString("connection.address") - if viper.GetString("connection.cert") != "" { - if viper.GetString("connection.key") == "" { - viper.Set("connection.key", viper.GetString("connection.cert")) + if viper.GetString("connection.cert") != "" { + if viper.GetString("connection.key") == "" { + viper.Set("connection.key", viper.GetString("connection.cert")) + } + + if certificate, err := tls.LoadX509KeyPair(viper.GetString("connection.cert"), viper.GetString("connection.key")); err == nil { + dj.TLSConfig.Certificates = append(dj.TLSConfig.Certificates, certificate) + } else { + return err + } + } + } + + // Add user p12 cert if needed. + if viper.GetString("connection.user_p12") != "" { + if _, err := os.Stat(viper.GetString("connection.user_p12")); os.IsNotExist(err) { + return err } - if certificate, err := tls.LoadX509KeyPair(viper.GetString("connection.cert"), viper.GetString("connection.key")); err == nil { + // Create temporary directory for converted p12 file. + dir, err := ioutil.TempDir("", "mumbledj") + if err != nil { + return err + } + defer os.RemoveAll(dir) + + // Create temporary mumbledj.crt.pem from p12 file. + command := exec.Command("openssl", "pkcs12", "-password", "pass:", "-in", viper.GetString("connection.user_p12"), "-out", dir+"/mumbledj.crt.pem", "-clcerts", "-nokeys") + if err := command.Run(); err != nil { + return err + } + + // Create temporary mumbledj.key.pem from p12 file. + command = exec.Command("openssl", "pkcs12", "-password", "pass:", "-in", viper.GetString("connection.user_p12"), "-out", dir+"/mumbledj.key.pem", "-nocerts", "-nodes") + if err := command.Run(); err != nil { + return err + } + + if certificate, err := tls.LoadX509KeyPair(dir+"/mumbledj.crt.pem", dir+"/mumbledj.key.pem"); err == nil { dj.TLSConfig.Certificates = append(dj.TLSConfig.Certificates, certificate) } else { return err diff --git a/bot/startup.go b/bot/startup.go index d9e664d..931ee13 100644 --- a/bot/startup.go +++ b/bot/startup.go @@ -58,6 +58,10 @@ func PerformStartupChecks() { if err := checkAria2Installation(); err != nil { logrus.Warnln("aria2 is not installed or is not discoverable in $PATH. The bot will still partially work, but some services will not work properly.") } + + if err := checkOpenSSLInstallation(); err != nil { + logrus.Warnln("openssl is not installed or is not discoverable in $PATH. p12 certificate files will not work.") + } } func checkYouTubeDLInstallation() error { @@ -95,3 +99,12 @@ func checkAria2Installation() error { } return nil } + +func checkOpenSSLInstallation() error { + logrus.Infoln("Checking openssl installation...") + command := exec.Command("openssl", "version") + if err := command.Run(); err != nil { + return errors.New("openssl is not properly installed") + } + return nil +} diff --git a/config.yaml b/config.yaml index 49b39bc..ea62a71 100644 --- a/config.yaml +++ b/config.yaml @@ -63,6 +63,10 @@ connection: # Username for MumbleDJ. username: "MumbleDJ" + # Filepath to user p12 file for authenticating as a registered user. + # NOTE: If no p12 file is needed, set to empty string (""). + user_p12: "" + # Should the bot attempt an insecure connection? # An insecure connection does not verify the certificate of the server for # consistency. It is best to leave this on, but disable it if you are having diff --git a/main.go b/main.go index 0c45fd5..ff55540 100644 --- a/main.go +++ b/main.go @@ -32,7 +32,7 @@ func init() { services.DJ = DJ bot.DJ = DJ - DJ.Version = "v3.0.11" + DJ.Version = "v3.1.0" logrus.SetLevel(logrus.WarnLevel) } @@ -73,6 +73,11 @@ func main() { Value: "", Usage: "channel the bot enters after connecting to the Mumble server", }, + cli.StringFlag{ + Name: "p12", + Value: "", + Usage: "path to user p12 file for authenticating as a registered user", + }, cli.StringFlag{ Name: "cert, e", Value: "", @@ -156,6 +161,9 @@ func main() { if c.GlobalIsSet("channel") { viper.Set("defaults.channel", c.String("channel")) } + if c.GlobalIsSet("p12") { + viper.Set("connection.user_p12", c.String("p12")) + } if c.GlobalIsSet("cert") { viper.Set("connection.cert", c.String("cert")) }