diff options
| -rw-r--r-- | changes/feature_install-helpers-util | 3 | ||||
| -rw-r--r-- | data/ts/en_US.ts | 686 | ||||
| -rw-r--r-- | pkg/linux/README.rst | 7 | ||||
| -rwxr-xr-x | pkg/linux/bitmask-root | 2 | ||||
| -rwxr-xr-x | pkg/linux/leap-install-helper.sh | 173 | ||||
| -rw-r--r-- | src/leap/bitmask/platform_init/initializers.py | 125 | ||||
| -rw-r--r--[-rwxr-xr-x] | src/leap/bitmask/util/pastebin.py | 0 | 
7 files changed, 669 insertions, 327 deletions
diff --git a/changes/feature_install-helpers-util b/changes/feature_install-helpers-util new file mode 100644 index 00000000..4facc1d3 --- /dev/null +++ b/changes/feature_install-helpers-util @@ -0,0 +1,3 @@ +- Remove deprecated policy files. Closes: #5651 +- Install helper files only if standalone=True. Related: #5625 +- Use installer helper from within bundle path. Related: #5634 diff --git a/data/ts/en_US.ts b/data/ts/en_US.ts index 562df1a3..cf74d7b6 100644 --- a/data/ts/en_US.ts +++ b/data/ts/en_US.ts @@ -68,96 +68,114 @@          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="60"/> -        <source><span style='color:#0000FF;'>NOTE</span>: To use this, you need to enable/start {0}.</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="99"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="119"/>          <source>Open keys file</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="191"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="237"/>          <source>Input/Output error</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="112"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="158"/>          <source>There was an error accessing the file.  Import canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="122"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="169"/>          <source>Data mismatch</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="125"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="172"/>          <source>The public and private key should have the same address and fingerprint.  Import canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="130"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="183"/>          <source>Missing key</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="133"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="186"/>          <source>You need to provide the public AND private key in the same file.  Import canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="139"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="197"/>          <source>Address mismatch</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="142"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="200"/>          <source>The identity for the key needs to be the same as your user address.  Import canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="147"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="125"/>          <source>Are you sure that you want to replace the current key pair whith the imported?</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="164"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="144"/>          <source>Import Successful</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="165"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="145"/>          <source>The key pair was imported successfully.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="174"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="207"/>          <source>Save keys file</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="185"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="224"/>          <source>Export Successful</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="187"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="226"/>          <source>The key pair was exported successfully.  Please, store your private key in a safe place.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="193"/> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="239"/>          <source>There was an error accessing the file.  Export canceled.</source>          <translation type="unfinished"></translation>      </message> +    <message> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="59"/> +        <source>The provider that you are using does not support {0}.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="65"/> +        <source>To use this, you need to enable/start {0}.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="110"/> +        <source><span style='color:#0000FF;'>NOTE</span>: </source> +        <translation type="unfinished"></translation> +    </message> +</context> +<context> +    <name>ComplainDialog</name> +    <message> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="419"/> +        <source>Ok, thanks</source> +        <translation type="unfinished"></translation> +    </message>  </context>  <context>      <name>EIPPreferences</name> @@ -210,22 +228,22 @@ Export canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="125"/> +        <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="153"/>          <source>Gateway settings for provider '{0}' saved.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="179"/> +        <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="230"/>          <source>There was a problem with configuration files.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="101"/> +        <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="122"/>          <source> (uninitialized)</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="151"/> +        <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="245"/>          <source>This is an uninitialized provider, please log in first.</source>          <translation type="unfinished"></translation>      </message> @@ -253,88 +271,158 @@ Export canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/eip_status.ui" line="212"/> +        <location filename="../src/leap/bitmask/gui/ui/eip_status.ui" line="213"/>          <source>0.0 KB/s</source>          <translation type="unfinished"></translation>      </message> -</context> -<context> -    <name>EIPStatusWidget</name>      <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="327"/> -        <source>Turn OFF</source> +        <location filename="../src/leap/bitmask/gui/ui/eip_status.ui" line="245"/> +        <source>Turn Off</source>          <translation type="unfinished"></translation>      </message> +</context> +<context> +    <name>EIPStatusWidget</name>      <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="341"/> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="411"/>          <source>Turn ON</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="348"/> -        <source>Traffic is being routed in the clear</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="405"/> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="521"/>          <source>Authenticating...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="407"/> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="529"/>          <source>Retrieving configuration...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="409"/> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="531"/>          <source>Waiting to start...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="411"/> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="533"/>          <source>Assigning IP</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="413"/> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="535"/>          <source>Reconnecting...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="420"/> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="543"/>          <source>Unable to start VPN, it's already running.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="463"/> -        <source>Route traffic through: {0}</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="260"/> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="304"/>          <source>disabled</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="442"/> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="565"/>          <source>{0}: OFF</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="257"/> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="301"/>          <source>You must login to use {0}</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="447"/> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="570"/>          <source>{0}: Starting...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/eip_status.py" line="450"/> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="573"/>          <source>{0}: ON</source>          <translation type="unfinished"></translation>      </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="525"/> +        <source>Encrypted Internet is starting</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="397"/> +        <source>Retry</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="433"/> +        <source>Traffic is being routed in the clear.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="434"/> +        <source>Network is unreachable.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="436"/> +        <source>Error connecting</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="451"/> +        <source>Error connecting.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="454"/> +        <source>Bitmask is blocking unencrypted traffic.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="587"/> +        <source>Routing traffic through: <b>{0}</b></source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="634"/> +        <source>Could not load {0} configuration.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="643"/> +        <source>Another openvpn instance is already running, and could not be stopped.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="653"/> +        <source>Another openvpn instance is already running, and could not be stopped because it was not launched by Bitmask. Please stop it and try again.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="661"/> +        <source>We could not find openvpn binary.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="682"/> +        <source>We could not find any authentication agent in your system.<br/>Make sure you have<b>polkit-gnome-authentication-agent-1</b> running andtry again.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="690"/> +        <source>We could not find <b>pkexec</b> in your system.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="700"/> +        <source>{0} cannot be started because the tuntap extension is not installed properly in your system.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/eip_status.py" line="720"/> +        <source>Network is unreachable</source> +        <translation type="unfinished"></translation> +    </message>  </context>  <context>      <name>LoggerWindow</name> @@ -399,25 +487,30 @@ Export canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="224"/> +        <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="225"/>          <source>Your pastebin link <a href='{0}'>{0}</a></source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="227"/> +        <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="230"/>          <source>Pastebin OK</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="240"/> +        <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="245"/>          <source>Sending logs to Pastebin failed!</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="241"/> +        <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="251"/>          <source>Pastebin Error</source>          <translation type="unfinished"></translation>      </message> +    <message> +        <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="250"/> +        <source>Maximum posts per day reached</source> +        <translation type="unfinished"></translation> +    </message>  </context>  <context>      <name>LoginWidget</name> @@ -447,17 +540,17 @@ Export canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/login.py" line="247"/> +        <location filename="../src/leap/bitmask/gui/login.py" line="246"/>          <source>Log In</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/login.py" line="125"/> +        <location filename="../src/leap/bitmask/gui/login.py" line="124"/>          <source>Other...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/login.py" line="242"/> +        <location filename="../src/leap/bitmask/gui/login.py" line="241"/>          <source>Cancel</source>          <translation type="unfinished"></translation>      </message> @@ -467,32 +560,32 @@ Export canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/login.py" line="368"/> +        <location filename="../src/leap/bitmask/gui/login.py" line="371"/>          <source>Logout</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/login.py" line="296"/> +        <location filename="../src/leap/bitmask/gui/login.py" line="299"/>          <source>Please select a valid provider</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/login.py" line="301"/> +        <location filename="../src/leap/bitmask/gui/login.py" line="304"/>          <source>Please provide a valid username</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/login.py" line="306"/> +        <location filename="../src/leap/bitmask/gui/login.py" line="309"/>          <source>Please provide a valid password</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/login.py" line="309"/> +        <location filename="../src/leap/bitmask/gui/login.py" line="312"/>          <source>Logging in...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/login.py" line="361"/> +        <location filename="../src/leap/bitmask/gui/login.py" line="364"/>          <source>Logging out...</source>          <translation type="unfinished"></translation>      </message> @@ -515,206 +608,196 @@ Export canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="192"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="196"/>          <source>There was an unexpected problem with Soledad.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="413"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="432"/>          <source>OFF</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="209"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="224"/>          <source>Mail is OFF</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="217"/> -        <source>Starting..</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="218"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="233"/>          <source>Mail is starting</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="436"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="455"/>          <source>ON</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="222"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="237"/>          <source>Mail is ON</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="225"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="240"/>          <source>Mail is disabled</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="422"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="441"/>          <source>Starting...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="254"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="270"/>          <source>Soledad has started...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="256"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="272"/>          <source>Soledad is starting, please wait...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="291"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="308"/>          <source>Looking for key for this user</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="295"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="312"/>          <source>Found key! Starting mail...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="300"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="317"/>          <source>Finished generating key!</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="302"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="319"/>          <source>Starting mail...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="334"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="352"/>          <source>SMTP failed to start, check the logs.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="390"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="409"/>          <source>About to start, please wait...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="397"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="416"/>          <source>Disabled</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="162"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="166"/>          <source>{0}: OFF</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="444"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="463"/>          <source>You must be logged in to use {0}.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="298"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="315"/>          <source>Generating new key, this may take a few minutes.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="373"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="392"/>          <source>{0} Unread Emails in your Inbox</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="377"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="396"/>          <source>1 Unread Email in your Inbox</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mail_status.py" line="429"/> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="448"/>          <source>Disconnecting...</source>          <translation type="unfinished"></translation>      </message> +    <message> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="474"/> +        <source>Invalid auth token, try logging in again.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/mail_status.py" line="232"/> +        <source>Starting…</source> +        <translation type="unfinished"></translation> +    </message>  </context>  <context>      <name>MainWindow</name>      <message> -        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="238"/> +        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="228"/>          <source>There are new updates available, please restart.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="280"/> +        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="270"/>          <source>More...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="758"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="870"/>          <source>Help</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="352"/> +        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="342"/>          <source>&Quit</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="362"/> +        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="352"/>          <source>&Help</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="367"/> +        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="357"/>          <source>&Wizard</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="806"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="930"/>          <source>Hide Main Window</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="638"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="728"/>          <source> The following components will be updated:  %s</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="641"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="731"/>          <source>Updates available</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="805"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="929"/>          <source>Show Main Window</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1524"/> -        <source>We could not find any authentication agent in your system.<br/>Make sure you have <b>polkit-gnome-authentication-agent-1</b> running and try again.</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1536"/> -        <source>We could not find <b>pkexec</b> in your system.</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1541"/> -        <source>We could not find openvpn binary.</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1705"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1548"/>          <source>Starting...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1719"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1563"/>          <source>Not supported</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1723"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1567"/>          <source>Disabled</source>          <translation type="unfinished"></translation>      </message> @@ -724,173 +807,203 @@ Export canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="357"/> +        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="347"/>          <source>About &Bitmask</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="289"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="211"/>          <source>Mail is OFF</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="629"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="719"/>          <source>The Bitmask app is ready to update, please restart the application.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="870"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="996"/>          <source>About Bitmask - %s</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1011"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1138"/>          <source>Unable to login: Problem with provider</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1089"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1219"/>          <source>Log in cancelled by the user.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1547"/> -        <source>Another openvpn instance is already running, and could not be stopped.</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1554"/> -        <source>Another openvpn instance is already running, and could not be stopped because it was not launched by Bitmask. Please stop it and try again.</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1740"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1584"/>          <source>There was a problem with the provider</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1845"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1639"/>          <source>Something went wrong with the logout.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1864"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1606"/>          <source>Unable to connect: Problem with provider</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1836"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1651"/>          <source>Login</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="315"/> +        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="305"/>          <source>&Bitmask</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="372"/> +        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="362"/>          <source>Show &Log</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="377"/> +        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="367"/>          <source>Create a new account...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="278"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="201"/>          <source>File</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1606"/> -        <source>Network is unreachable</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="123"/> +        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="121"/>          <source>Please Log In</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="342"/> +        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="332"/>          <source>Account Preferences...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="347"/> +        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="337"/>          <source>Internet Preferences...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="385"/> +        <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="375"/>          <source>Advanced Key Management</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="742"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="854"/>          <source> (offline mode)</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="765"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="878"/>          <source>OFF</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="884"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1010"/>          <source>Version: <b>%s</b> (%s)<br><br>%sBitmask is the Desktop client application for the LEAP platform, supporting encrypted internet proxy, secure email, and secure chat (coming soon).<br><br>LEAP is a non-profit dedicated to giving all internet users access to secure communication. Our focus is on adapting encryption technology to make it easy to use and widely available. <br><br><a href='https://leap.se'>More about LEAP</a></source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="911"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1038"/>          <source><strong>Instructions to use mail:</strong><br>If you use Thunderbird you can use the Bitmask extension helper. Search for 'Bitmask' in the add-on manager or download it from: {0}.<br><br>You can configure Bitmask manually with these options:<br><em>   Incoming -> IMAP, port: {1}<br>   Outgoing -> SMTP, port: {2}<br>   Username -> your bitmask username.<br>   Password -> does not matter, use any text.  Just don't leave it empty and don't use your account's password.</em></source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="912"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1039"/>          <source>Bitmask Help</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="924"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1051"/>          <source>The current client version is not supported by this provider.<br>Please update to latest version.<br><br>You can get the latest version from <a href='{0}'>{1}</a></source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="925"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1052"/>          <source>Update Needed</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="935"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1062"/>          <source>This provider is not compatible with the client.<br><br>Error: API version incompatible.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="935"/> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1062"/>          <source>Incompatible Provider</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1757"/> -        <source>Could not load {0} configuration.</source> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="302"/> +        <source>Application error</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1531"/> -        <source>{0} cannot be started because the tuntap extension is not installed properly in your system.</source> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="304"/> +        <source>You are trying to do an operation that requires logging in first.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1670"/> -        <source>{0} could not be launched because you did not authenticate properly.</source> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="362"/> +        <source>Unknown error.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1677"/> -        <source>{0} finished in an unexpected manner!</source> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="366"/> +        <source>There was a server problem with authentication.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="370"/> +        <source>Could not establish a connection.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="374"/> +        <source>Invalid username or password.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="897"/> +        <source>Hello!</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="898"/> +        <source>Bitmask has started in the tray.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1252"/> +        <source>Succeeded</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1501"/> +        <source>The server at {0} can't be found, because the DNS lookup failed. DNS is the network service that translates a website's name to its Internet address. Either your computer is having trouble connecting to the network, or you are missing some helper files that are needed to securely use DNS while {1} is active. To install these helper files, quit this application and start it again.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1504"/> +        <source>Connection Error</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1748"/> +        <source>Quitting...</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1749"/> +        <source>Bitmask is quitting, please wait.</source>          <translation type="unfinished"></translation>      </message>  </context> @@ -965,47 +1078,47 @@ Export canceled.</source>  <context>      <name>PreferencesWindow</name>      <message> -        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="63"/> +        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="59"/>          <source>Automatic</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="159"/> +        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="168"/>          <source>Changing password...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="210"/> +        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="249"/>          <source>Password changed successfully.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="225"/> +        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="433"/>          <source>There was a problem changing the password.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="228"/> +        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="437"/>          <source>You did not enter a correct current password.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="371"/> +        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="417"/>          <source>Services settings for provider '{0}' saved.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="97"/> +        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="114"/>          <source>You need to enable {0} in order to change the password.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="103"/> +        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="122"/>          <source>You need to wait until {0} is ready in order to change the password.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="113"/> +        <location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="101"/>          <source>In order to change your password you need to be logged in.</source>          <translation type="unfinished"></translation>      </message> @@ -1013,25 +1126,17 @@ Export canceled.</source>  <context>      <name>ProviderBootstrapper</name>      <message> -        <location filename="../src/leap/bitmask/provider/providerbootstrapper.py" line="146"/> +        <location filename="../src/leap/bitmask/provider/providerbootstrapper.py" line="154"/>          <source>Provider certificate could not be verified</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/provider/providerbootstrapper.py" line="153"/> +        <location filename="../src/leap/bitmask/provider/providerbootstrapper.py" line="161"/>          <source>Provider does not support HTTPS</source>          <translation type="unfinished"></translation>      </message>  </context>  <context> -    <name>SRPAuth</name> -    <message> -        <location filename="../src/leap/bitmask/crypto/srpauth.py" line="714"/> -        <source>Succeeded</source> -        <translation type="unfinished"></translation> -    </message> -</context> -<context>      <name>Wizard</name>      <message>          <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="43"/> @@ -1059,7 +1164,7 @@ Export canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="298"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="340"/>          <source>Check</source>          <translation type="unfinished"></translation>      </message> @@ -1084,196 +1189,181 @@ Export canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="336"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="353"/>          <source>Provider Information</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="339"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="356"/>          <source>Description of services offered by this provider</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="348"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="365"/>          <source>Name</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="380"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="397"/>          <source>Desc</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="390"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="407"/>          <source><b>Services offered:</b></source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="400"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="417"/>          <source>services</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="420"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="437"/>          <source><b>Enrollment policy:</b></source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="430"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="447"/>          <source>policy</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="450"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="467"/>          <source><b>URL:</b></source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="460"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="477"/>          <source>URL</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="467"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="484"/>          <source><b>Description:</b></source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="478"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="495"/>          <source>Provider setup</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="481"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="498"/>          <source>Gathering configuration options for this provider</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="503"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="520"/>          <source>We are downloading some bits that we need to establish a secure connection with the provider for the first time.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="526"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="543"/>          <source>Setting up provider</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="576"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="593"/>          <source>Getting info from the Certificate Authority</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="583"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="600"/>          <source>Do we trust this Certificate Authority?</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="590"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="607"/>          <source>Establishing a trust relationship with this provider</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="649"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="666"/>          <source>Register new user</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="652"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="669"/>          <source>Register a new user with provider</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="667"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="684"/>          <source><b>Password:</b></source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="694"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="711"/>          <source><b>Re-enter password:</b></source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="704"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="721"/>          <source>Register</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="750"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="767"/>          <source>Remember my username and password</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="774"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="791"/>          <source>Service selection</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="777"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="794"/>          <source>Please select the services you would like to have</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/wizard.py" line="132"/> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="131"/>          <source>&Next ></source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/wizard.py" line="134"/> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="133"/>          <source>Connect</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/wizard.py" line="265"/> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="289"/>          <source>Starting registration...</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/wizard.py" line="296"/> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="333"/>          <source>User %s successfully registered.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/wizard.py" line="448"/> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="503"/>          <source><font color='red'><b>Non-existent provider</b></font></source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/wizard.py" line="466"/> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="522"/>          <source><font color='red'><b>%s</b></font></source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/wizard.py" line="492"/> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="551"/>          <source>Unable to load provider configuration</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/wizard.py" line="498"/> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="557"/>          <source><font color='red'><b>Not a valid provider</b></font></source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/wizard.py" line="565"/> -        <source>Services by %s</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <location filename="../src/leap/bitmask/gui/wizard.py" line="585"/> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="662"/>          <source>Something went wrong while trying to load service %s</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/wizard.py" line="616"/> -        <source>Description of services offered by %s</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <location filename="../src/leap/bitmask/gui/wizard.py" line="637"/> -        <source>Register a new user with %s</source> -        <translation type="unfinished"></translation> -    </message> -    <message>          <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="26"/>          <source>Bitmask first run</source>          <translation type="unfinished"></translation> @@ -1289,7 +1379,7 @@ Export canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="737"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="754"/>          <source><b>Username:</b></source>          <translation type="unfinished"></translation>      </message> @@ -1299,7 +1389,7 @@ Export canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="288"/> +        <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="275"/>          <source>Configure new provider:</source>          <translation type="unfinished"></translation>      </message> @@ -1314,114 +1404,130 @@ Export canceled.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/wizard.py" line="317"/> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="360"/>          <source>Something has gone wrong. Please try again.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/gui/wizard.py" line="607"/> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="688"/>          <source>Gathering configuration options for {0}</source>          <translation type="unfinished"></translation>      </message> -</context> -<context> -    <name>__impl</name>      <message> -        <location filename="../src/leap/bitmask/crypto/srpauth.py" line="298"/> -        <source>The server did not send the salt parameter</source> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="374"/> +        <source>The requested username is taken, choose another.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="643"/> +        <source>Services by {0}</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="696"/> +        <source>Description of services offered by {0}</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/crypto/srpauth.py" line="302"/> -        <source>The server did not send the B parameter</source> +        <location filename="../src/leap/bitmask/gui/wizard.py" line="711"/> +        <source>Register a new user with {0}</source>          <translation type="unfinished"></translation>      </message> +</context> +<context> +    <name>msg</name>      <message> -        <location filename="../src/leap/bitmask/crypto/srpauth.py" line="334"/> -        <source>The data sent from the server had errors</source> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="200"/> +        <source>TAP Driver</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/crypto/srpauth.py" line="356"/> -        <source>Could not connect to the server</source> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="207"/> +        <source>Encrypted Internet uses VPN, which needs a TAP device installed and none has been found. This will ask for administrative privileges.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/crypto/srpauth.py" line="382"/> -        <source>Unknown error (%s)</source> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="325"/> +        <source>TUN Driver</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/crypto/srpauth.py" line="413"/> -        <source>Problem getting data from server</source> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="333"/> +        <source>Encrypted Internet uses VPN, which needs a kernel extension for a TUN device installed, and none has been found. This will ask for administrative privileges.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/crypto/srpauth.py" line="439"/> -        <source>Bad data from server</source> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="142"/> +        <source>Problem installing files</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/crypto/srpauth.py" line="446"/> -        <source>Auth verification failed</source> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="143"/> +        <source>Some of the files could not be copied.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/crypto/srpauth.py" line="454"/> -        <source>Session cookie verification failed</source> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="328"/> +        <source>Bitmask needs to install the necessary drivers for Encrypted Internet to work. Would you like to proceed?</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/crypto/srpauth.py" line="289"/> -        <source>There was a problem with authentication</source> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="92"/> +        <source>Missing helper files</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/crypto/srpauth.py" line="178"/> -        <source>Invalid username or password.</source> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="380"/> +        <source>Missing resolvconf framework</source>          <translation type="unfinished"></translation>      </message> -</context> -<context> -    <name>msg</name>      <message> -        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="93"/> -        <source>Missing up/down scripts</source> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="432"/> +        <source>Missing Bitmask helpers</source>          <translation type="unfinished"></translation>      </message> +</context> +<context> +    <name>msgstr</name>      <message> -        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="184"/> -        <source>TAP Driver</source> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="375"/> +        <source>Could not find <b>resolvconf</b> installed in your system. +Do you want to quit Bitmask now?</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="191"/> -        <source>Encrypted Internet uses VPN, which needs a TAP device installed and none has been found. This will ask for administrative privileges.</source> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="379"/> +        <source>Encrypted Internet needs resolvconf installed to work properly. +Please use your package manager to install it. +</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="310"/> -        <source>TUN Driver</source> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="401"/> +        <source>Some essential helper files are missing in your system.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="318"/> -        <source>Encrypted Internet uses VPN, which needs a kernel extension for a TUN device installed, and none has been found. This will ask for administrative privileges.</source> +        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="404"/> +        <source>Reinstall your debian packages, or make sure you place them by hand.</source>          <translation type="unfinished"></translation>      </message> +</context> +<context> +    <name>self._eip_status</name>      <message> -        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="132"/> -        <source>Problem installing files</source> +        <location filename="../src/leap/bitmask/services/eip/conductor.py" line="184"/> +        <source>{0} is restarting</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="133"/> -        <source>Some of the files could not be copied.</source> +        <location filename="../src/leap/bitmask/services/eip/conductor.py" line="295"/> +        <source>{0} could not be launched because you did not authenticate properly.</source>          <translation type="unfinished"></translation>      </message>      <message> -        <location filename="../src/leap/bitmask/platform_init/initializers.py" line="313"/> -        <source>Bitmask needs to install the necessary drivers for Encrypted Internet to work. Would you like to proceed?</source> +        <location filename="../src/leap/bitmask/services/eip/conductor.py" line="307"/> +        <source>{0} finished in an unexpected manner!</source>          <translation type="unfinished"></translation>      </message>  </context> diff --git a/pkg/linux/README.rst b/pkg/linux/README.rst index 249c721f..f89842d3 100644 --- a/pkg/linux/README.rst +++ b/pkg/linux/README.rst @@ -15,10 +15,15 @@ path will be used if the flag ``--standalone`` is set::   bitmask-root -> /usr/local/sbin/bitmask-root   polkit/se.leap.bitmask.bundle.policy -> /usr/share/polkit-1/actions/se.leap.bitmask.bundle.policy -You will also have to place an openvpn binary in the following path:: +When running with ``--standalone`` flag, the openvpn binary is  expected in the following path::   leap-openvpn -> /usr/local/sbin/leap-openvpn +The bundle will use the script ``leap-install-helper.sh`` to copy the needed +files. If you ever want to use it manually to update the helpers or bins, it +needs a ``--from-path`` parameter to be passed to it. This points to a folder +from where all the needed binaries and scripts can be found. +  Binary hashing  ============== diff --git a/pkg/linux/bitmask-root b/pkg/linux/bitmask-root index 1929b51b..5367a31c 100755 --- a/pkg/linux/bitmask-root +++ b/pkg/linux/bitmask-root @@ -67,7 +67,7 @@ OPENVPN_USER = "nobody"  OPENVPN_GROUP = "nogroup"  LEAPOPENVPN = "LEAPOPENVPN"  OPENVPN_SYSTEM_BIN = "/usr/sbin/openvpn"  # Debian location -OPENVPN_LEAP_BIN = "/usr/sbin/leap-openvpn"  # installed by bundle +OPENVPN_LEAP_BIN = "/usr/local/sbin/leap-openvpn"  # installed by bundle  """ diff --git a/pkg/linux/leap-install-helper.sh b/pkg/linux/leap-install-helper.sh new file mode 100755 index 00000000..566dd3d9 --- /dev/null +++ b/pkg/linux/leap-install-helper.sh @@ -0,0 +1,173 @@ +#!/bin/bash + +# File: leap-install-helper.sh +# Copy the needed binaries and helper files to their destination. +# Copyright (C) 2014 LEAP Encryption Access Project. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. + +LOCAL_SBIN_FOLDER=/usr/local/sbin + +POLKIT_FOLDER="/usr/share/polkit-1/actions" +POLKIT_FILE="se.leap.bitmask.bundle.policy" +POLKIT_PATH="${POLKIT_FOLDER}/${POLKIT_FILE}" + +BITMASK_ROOT_FILE="bitmask-root" +BITMASK_ROOT_PATH="${LOCAL_SBIN_FOLDER}/${BITMASK_ROOT_FILE}" + +OPENVPN_FILE="leap-openvpn" +OPENVPN_PATH="${LOCAL_SBIN_FOLDER}/${OPENVPN_FILE}" + +# The following array stores global files that have been deprecated and we want +# to remove from the system path, after having dropped them there in the past. + +DEPRECATED_FILES=( +  '/usr/share/polkit-1/actions/net.openvpn.gui.leap.policy' +) + + +# Variables for parsing and storing the script options. + +FROM_PATH=NONE +REMOVE_OLD_FILES=NO +INSTALL_BITMASK_ROOT=NO +INSTALL_POLKIT_FILE=NO +INSTALL_OPENVPN=NO + + +# Process the options + +while [[ $# > 1 ]] +do +key="$1" +shift + +case $key in +    -f|--from-path) +    FROM_PATH="$1" +    shift +    ;; +    -r|--remove-old-files) +    REMOVE_OLD_FILES="$1" +    shift +    ;; +    --install-bitmask-root) +    INSTALL_BITMASK_ROOT="$1" +    shift +    ;; +    --install-polkit-file) +    INSTALL_POLKIT_FILE="$1" +    shift +    ;; +    --install-openvpn) +    INSTALL_OPENVPN="$1" +    shift +    ;; +    *) +    # unknown option +    ;; +esac +done +echo "LEAP_INSTALL_HELPER" +echo "-------------------" +echo FROM_PATH	          = "${FROM_PATH}" +echo REMOVE_OLD_FILES     = "${REMOVE_OLD_FILES}" +echo INSTALL_BITMASK_ROOT = "${INSTALL_BITMASK_ROOT}" +echo INSTALL_POLKIT_FILE  = "${INSTALL_POLKIT_FILE}" +echo INSTALL_OPENVPN      = "${INSTALL_OPENVPN}" +echo + + +# +# helper functions +# + +function check_current_uid() { +  current_uid=`id | sed 's/^uid=//;s/(.*$//'` +  if [ $current_uid != 0 ] +  then +    echo "[ERROR] NEED TO BE RUN AS ROOT" +    exit 1 +  fi +} + +function check_from_path() { +  if [ $FROM_PATH == NONE ] +  then +    echo "[ERROR] YOU NEED TO GIVE --from-path VALUE..." +    exit 1 +  fi +} + +function remove_old_files() { +  for file in "${DEPRECATED_FILES[@]}" +  do +    rm $file +  done +} + +function copy_bitmask_root() { +  mkdir -p "${LOCAL_SBIN_FOLDER}" +  cp "${FROM_PATH}/${BITMASK_ROOT_FILE}" "${BITMASK_ROOT_PATH}" +  chmod 744 "${BITMASK_ROOT_PATH}" + +} + +function copy_polkit_file() { +  cp "${FROM_PATH}/${POLKIT_FILE}" "${POLKIT_PATH}" +  chmod 644 "${POLKIT_PATH}" +} + +function copy_openvpn_file() { +  mkdir -p "${LOCAL_SBIN_FOLDER}" +  cp "${FROM_PATH}/${OPENVPN_FILE}" "${OPENVPN_PATH}" +  chmod 744 "${OPENVPN_PATH}" + +} + + +# +# Process options and run functions. +# + +check_current_uid + +if [ $INSTALL_BITMASK_ROOT == YES ] || [ $INSTALL_POLKIT_FILE == YES ] || [ $INSTALL_OPENVPN == YES ] +then +  check_from_path +fi + +if [ $REMOVE_OLD_FILES == YES ] +then +  echo "REMOVING OLD FILES..." +  remove_old_files +fi + +if [ $INSTALL_BITMASK_ROOT == YES ] +then +  echo "INSTALLING bitmask-root..." +  copy_bitmask_root +fi + +if [ $INSTALL_POLKIT_FILE == YES ] +then +  echo "INSTALLING policykit file..." +  copy_polkit_file +fi + +if [ $INSTALL_OPENVPN == YES ] +then +  echo "INSTALLING openvpn..." +  copy_openvpn_file +fi diff --git a/src/leap/bitmask/platform_init/initializers.py b/src/leap/bitmask/platform_init/initializers.py index 79fdd554..8dae21bf 100644 --- a/src/leap/bitmask/platform_init/initializers.py +++ b/src/leap/bitmask/platform_init/initializers.py @@ -25,8 +25,9 @@ import sys  import subprocess  import tempfile -from PySide import QtGui +from PySide import QtGui, QtCore +from leap.bitmask.config import flags  from leap.bitmask.config.leapsettings import LeapSettings  from leap.bitmask.services.eip import get_vpn_launcher  from leap.bitmask.services.eip.linuxvpnlauncher import LinuxVPNLauncher @@ -76,9 +77,9 @@ HELPERS_BADEXEC_MSG = BADEXEC_MSG % (      "helper files", "they", "be copied") -def get_missing_updown_dialog(): +def get_missing_helpers_dialog():      """ -    Create a dialog for notifying of missing updown scripts. +    Create a dialog for notifying of missing helpers.      Returns that dialog.      :rtype: QtGui.QMessageBox instance @@ -104,14 +105,25 @@ def check_missing():      raises a dialog to ask user for permission to do it.      """      config = LeapSettings() +    complain_missing = False      alert_missing = config.get_alert_missing_scripts() +    if alert_missing and not flags.STANDALONE: +        # We refuse to install missing stuff if not running with standalone +        # flag. Right now we rely on the flag alone, but we can disable this +        # by overwriting some constant from within the debian package. +        alert_missing = False +        complain_missing = True +      launcher = get_vpn_launcher()      missing_scripts = launcher.missing_updown_scripts      missing_other = launcher.missing_other_files -    if alert_missing and (missing_scripts() or missing_other()): -        msg = get_missing_updown_dialog() +    logger.debug("MISSING OTHER: %s" % (str(missing_other()))) + +    missing_some = missing_scripts() or missing_other() +    if alert_missing and missing_some: +        msg = get_missing_helpers_dialog()          ret = msg.exec_()          if ret == QtGui.QMessageBox.Yes: @@ -123,8 +135,6 @@ def check_missing():                      "Installer not found for platform %s." % (_system,))                  return -            print "INSTALL FUN", install_missing_fun -              # XXX maybe move constants to fun              ok = install_missing_fun(HELPERS_BADEXEC_MSG, HELPERS_NOTFOUND_MSG)              if not ok: @@ -143,6 +153,12 @@ def check_missing():                  "Setting alert_missing_scripts to False, we will not "                  "ask again")              config.set_alert_missing_scripts(False) + +    if complain_missing and missing_some: +        missing = missing_scripts() + missing_other() +        msg = _get_missing_complain_dialog(missing) +        ret = msg.exec_() +  #  # windows initializers  # @@ -248,13 +264,12 @@ def _darwin_install_missing_scripts(badexec, notfound):      # We expect to execute this from some way of bundle, since      # the up/down scripts should be put in place by the installer.      success = False -    installer_path = os.path.join( -        os.getcwd(), -        "..", -        "Resources", -        "openvpn") +    installer_path = os.path.abspath( +        os.path.join( +            os.getcwd(), "..", "Resources", "openvpn"))      launcher = DarwinVPNLauncher +    # XXX FIXME !!! call the bash script!      if os.path.isdir(installer_path):          fd, tempscript = tempfile.mkstemp(prefix="leap_installer-")          try: @@ -352,24 +367,72 @@ def _get_missing_resolvconf_dialog():      :rtype: QtGui.QMessageBox instance      """ -    NO_RESOLVCONF = ( +    msgstr = QtCore.QObject() +    msgstr.NO_RESOLVCONF = msgstr.tr(          "Could not find <b>resolvconf</b> installed in your system.\n"          "Do you want to quit Bitmask now?") -    EXPLAIN = ( +    msgstr.EXPLAIN = msgstr.tr(          "Encrypted Internet needs resolvconf installed to work properly.\n"          "Please use your package manager to install it.\n")      msg = QtGui.QMessageBox()      msg.setWindowTitle(msg.tr("Missing resolvconf framework")) -    msg.setText(msg.tr(NO_RESOLVCONF)) +    msg.setText(msgstr.NO_RESOLVCONF)      # but maybe the user really deserve to know more -    msg.setInformativeText(msg.tr(EXPLAIN)) +    msg.setInformativeText(msgstr.EXPLAIN)      msg.setStandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)      msg.setDefaultButton(QtGui.QMessageBox.Yes)      return msg +def _get_missing_complain_dialog(stuff): +    """ +    Create a dialog for notifying about missing helpers (but doing nothing). +    Used from non-standalone runs. + +    :param stuff: list of missing items to display +    :type stuff: list +    :rtype: QtGui.QMessageBox instance +    """ +    msgstr = QtCore.QObject() +    msgstr.NO_HELPERS = msgstr.tr( +        "Some essential helper files are missing in your system.") +    msgstr.EXPLAIN = msgstr.tr( +        "Reinstall your debian packages, or make sure you place them by hand.") + +    class ComplainDialog(QtGui.QDialog): + +        def __init__(self, parent=None): +                super(ComplainDialog, self).__init__(parent) + +                label = QtGui.QLabel(msgstr.NO_HELPERS) +                label.setAlignment(QtCore.Qt.AlignLeft) + +                label2 = QtGui.QLabel(msgstr.EXPLAIN) +                label2.setAlignment(QtCore.Qt.AlignLeft) + +                textedit = QtGui.QTextEdit() +                textedit.setText("\n".join(stuff)) + +                ok = QtGui.QPushButton() +                ok.setText(self.tr("Ok, thanks")) +                self.ok = ok +                self.ok.clicked.connect(self.close) + +                mainLayout = QtGui.QGridLayout() +                mainLayout.addWidget(label, 0, 0) +                mainLayout.addWidget(label2, 1, 0) +                mainLayout.addWidget(textedit, 2, 0) +                mainLayout.addWidget(ok, 3, 0) + +                self.setLayout(mainLayout) + +    msg = ComplainDialog() +    msg.setWindowTitle(msg.tr("Missing Bitmask helpers")) +    return msg + +  def _linux_check_resolvconf():      """      Raise a dialog warning about the lack of the resolvconf framework. @@ -397,40 +460,32 @@ def _linux_install_missing_scripts(badexec, notfound):      :rtype: bool      """      success = False -    installer_path = os.path.join(os.getcwd(), "apps", "eip", "files") +    installer_path = os.path.abspath( +        os.path.join(os.getcwd(), "apps", "eip", "files"))      launcher = LinuxVPNLauncher -    # XXX refactor with darwin, same block. +    install_helper = "leap-install-helper.sh" +    install_helper_path = os.path.join(installer_path, install_helper) + +    install_opts = ("--from-path %s --install-bitmask-root YES " +                    "--install-polkit-file YES --install-openvpn YES " +                    "--remove-old-files YES" % (installer_path,))      if os.path.isdir(installer_path): -        fd, tempscript = tempfile.mkstemp(prefix="leap_installer-") -        polfd, pol_tempfile = tempfile.mkstemp(prefix="leap_installer-")          try:              pkexec = first(launcher.maybe_pkexec()) - -            scriptlines = launcher.cmd_for_missing_scripts(installer_path) -            with os.fdopen(fd, 'w') as f: -                f.write(scriptlines) - -            st = os.stat(tempscript) -            os.chmod(tempscript, st.st_mode | stat.S_IEXEC | stat.S_IXUSR | -                     stat.S_IXGRP | stat.S_IXOTH) -            cmdline = ["%s %s" % (pkexec, tempscript)] +            cmdline = ["%s %s %s" % ( +                pkexec, install_helper_path, install_opts)]              ret = subprocess.call(                  cmdline, stdout=subprocess.PIPE,                  shell=True)              success = ret == 0              if not success: -                logger.error("Install missing scripts failed.") +                logger.error("Install of helpers failed.")          except Exception as exc:              logger.error(badexec)              logger.error("Error was: %r" % (exc,)) -        finally: -            try: -                os.remove(tempscript) -            except OSError as exc: -                logger.error("%r" % (exc,))      else:          logger.error(notfound)          logger.debug('path searched: %s' % (installer_path,)) diff --git a/src/leap/bitmask/util/pastebin.py b/src/leap/bitmask/util/pastebin.py index a3bdba02..a3bdba02 100755..100644 --- a/src/leap/bitmask/util/pastebin.py +++ b/src/leap/bitmask/util/pastebin.py  | 
