summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore8
-rw-r--r--CHANGELOG37
-rw-r--r--MANIFEST.in4
-rw-r--r--Makefile2
-rw-r--r--changes/bug-3425_replace-wizard-images1
-rw-r--r--changes/bug-update-requirements1
-rw-r--r--changes/bug3426_set_standalone1
-rw-r--r--changes/bug_3406_quit_hangs2
-rw-r--r--changes/bug_3413-soledad-init-retries1
-rw-r--r--changes/bug_3450-fix-up-script1
-rw-r--r--changes/bug_better_hideshow_handling3
-rw-r--r--changes/bug_disablemail_completely2
-rw-r--r--changes/bug_handle_reconnecting1
-rw-r--r--changes/bug_improve_openvpn_detection3
-rw-r--r--changes/bug_load_kext2
-rw-r--r--changes/bug_properly_logout1
-rw-r--r--changes/bug_retr_hangs3
-rw-r--r--changes/bug_username_to_lower2
-rw-r--r--changes/feature-3407_add-log-filtering1
-rw-r--r--changes/feature_2959_create_bitmask_namespace1
-rw-r--r--changes/feature_3409-make-imap-poll-configurable2
-rw-r--r--changes/feature_3487-split-soledad-into-common-client-and-server2
-rw-r--r--changes/feature_3525-login-triggers-fetch1
-rw-r--r--changes/feature_add_mail_ui1
-rw-r--r--debian/README.source9
-rw-r--r--debian/bitmask.install (renamed from debian/leap-client.install)2
-rw-r--r--debian/bitmask.xpm872
-rw-r--r--debian/changelog14
-rw-r--r--debian/control11
-rw-r--r--debian/leap-client.xpm281
-rw-r--r--debian/menu8
-rw-r--r--debian/pydist-overrides3
-rwxr-xr-xdebian/rules9
-rw-r--r--docs/man/bitmask.1.rst41
-rw-r--r--pkg/requirements.pip1
-rwxr-xr-xsetup.py22
-rw-r--r--src/leap/bitmask/crypto/srpauth.py82
-rw-r--r--src/leap/bitmask/gui/mainwindow.py19
-rw-r--r--src/leap/bitmask/gui/preferenceswindow.py196
-rw-r--r--src/leap/bitmask/gui/ui/mainwindow.ui11
-rw-r--r--src/leap/bitmask/gui/ui/preferences.ui170
-rw-r--r--src/leap/bitmask/services/eip/vpnlaunchers.py2
-rw-r--r--versioneer.py73
43 files changed, 1528 insertions, 381 deletions
diff --git a/.gitignore b/.gitignore
index b0f9a137..103b16d5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,7 +11,6 @@ ui_*.py
bin/
build/
core
-debian/python-leap-client/
dist/
docs/_build
docs/covhtml
@@ -32,3 +31,10 @@ MANIFEST
_trial_temp*
config/*
CHANGELOG~
+debian/bitmask.postinst.debhelper
+debian/bitmask.postrm.debhelper
+debian/bitmask.prerm.debhelper
+debian/bitmask.substvars
+debian/bitmask/
+debian/files
+docs/man/bitmask.1
diff --git a/CHANGELOG b/CHANGELOG
index 8713b220..f8def7cb 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,40 @@
+0.3.1 Aug 23:
+ o Replace wizard images with the rainbow mask. Closes #3425.
+ o Update leap.common minimum version needed.
+ o Set the standalone flag before it's being used. Fixes #3426.
+ o Stop the twisted reactor adding the stop call to the call chain
+ instead of stopping it directly. Fixes #3406.
+ o Allow soledad initialization to retry if it times out. Closes:
+ #3413
+ o Activate window when setting it visible. Also display Hide/Show
+ message in the tray icon taking into account the window
+ activation. Fixes #3433.
+ o Do not start IMAP daemon if mail was not selected among the
+ services. Fixes #3435.
+ o Reword RECONNECTING state of openvpn. Fixes #3429.
+ o Improve OpenVPN detection by searching for a specific leap-only
+ string in the command line. This makes it possible to run other
+ VPN instances while also using EIP. Fixes #3268 and #3364.
+ o OSX: Check for the tun.kext existence in /Library/Extensions
+ instead of /System/Library/Extensions. Fixes #3271.
+ o Use DELETE /1/logout to properly logout. Fixes #3510.
+ o Make the poll interval bigger to improve openvpn's internal
+ behavior. If it gets queried too many times per second, it's
+ behavior won't be good. Fixes #3430.
+ o Transforms usernames to lower case before they are used in the
+ registration and authentication. Closes #3541.
+ o Add filter option to the logger window. Closes #3407.
+ o Add a preference panel that lets you change your password. Closes
+ #3500 #2798 #3533.
+ o Move all client code into its own namespace
+ (leap.bitmask). Closes: #2959
+ o Make mail fetch interval in imap service configurable via
+ environment variable. Closes: #3409
+ o Update to new soledad package scheme (common, client and
+ server). Closes #3487.
+ o Fetch incoming mail when mail client logs in. Closes: #3525
+ o Add first draft of the UI for Encrypted Mail. Closes #3499.
+
0.3.0 Aug 9:
o Add missing scripts does not stop if a command fails, also warns
the user if there was an error. Closes #3294.
diff --git a/MANIFEST.in b/MANIFEST.in
index 90ba716a..926e1793 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -4,6 +4,8 @@ recursive-include docs api/* config/* dev/* man/* pkg/* testers/* user/*
prune docs/_build
prune docs/covhtml
include versioneer.py
+include LICENSE
+include README.rst
+include CHANGELOG
include src/leap/bitmask/util/reqs.txt
include src/leap/bitmask/crypto/tests/wrongcert.pem
-
diff --git a/Makefile b/Makefile
index f58abbd9..69cf29ed 100644
--- a/Makefile
+++ b/Makefile
@@ -19,7 +19,7 @@ TRANSLAT_DIR = data/translations
PROJFILE = data/bitmask.pro
#UI files to compile
-UI_FILES = loggerwindow.ui mainwindow.ui wizard.ui login.ui statuspanel.ui
+UI_FILES = loggerwindow.ui mainwindow.ui wizard.ui login.ui statuspanel.ui preferences.ui
#Qt resource files to compile
RESOURCES = locale.qrc loggerwindow.qrc mainwindow.qrc icons.qrc
diff --git a/changes/bug-3425_replace-wizard-images b/changes/bug-3425_replace-wizard-images
deleted file mode 100644
index cf5cbd9d..00000000
--- a/changes/bug-3425_replace-wizard-images
+++ /dev/null
@@ -1 +0,0 @@
- o Replace wizard images with the rainbow mask. Closes #3425.
diff --git a/changes/bug-update-requirements b/changes/bug-update-requirements
deleted file mode 100644
index e86e6e84..00000000
--- a/changes/bug-update-requirements
+++ /dev/null
@@ -1 +0,0 @@
- o Update leap.common minimum version needed.
diff --git a/changes/bug3426_set_standalone b/changes/bug3426_set_standalone
deleted file mode 100644
index 408b893f..00000000
--- a/changes/bug3426_set_standalone
+++ /dev/null
@@ -1 +0,0 @@
- o Set the standalone flag before it's being used. Fixes #3426. \ No newline at end of file
diff --git a/changes/bug_3406_quit_hangs b/changes/bug_3406_quit_hangs
deleted file mode 100644
index 77452780..00000000
--- a/changes/bug_3406_quit_hangs
+++ /dev/null
@@ -1,2 +0,0 @@
- o Stop the twisted reactor adding the stop call to the call chain
- instead of stopping it directly. Fixes #3406. \ No newline at end of file
diff --git a/changes/bug_3413-soledad-init-retries b/changes/bug_3413-soledad-init-retries
deleted file mode 100644
index 160121dd..00000000
--- a/changes/bug_3413-soledad-init-retries
+++ /dev/null
@@ -1 +0,0 @@
- o Allow soledad initialization to retry if it times out. Closes: #3413
diff --git a/changes/bug_3450-fix-up-script b/changes/bug_3450-fix-up-script
new file mode 100644
index 00000000..39b3638e
--- /dev/null
+++ b/changes/bug_3450-fix-up-script
@@ -0,0 +1 @@
+ o Fix up script in non-bundle linuces. Closes: #3450
diff --git a/changes/bug_better_hideshow_handling b/changes/bug_better_hideshow_handling
deleted file mode 100644
index 3538087b..00000000
--- a/changes/bug_better_hideshow_handling
+++ /dev/null
@@ -1,3 +0,0 @@
- o Activate window when setting it visible. Also display Hide/Show
- message in the tray icon taking into account the window
- activation. Fixes #3433. \ No newline at end of file
diff --git a/changes/bug_disablemail_completely b/changes/bug_disablemail_completely
deleted file mode 100644
index 126da2a7..00000000
--- a/changes/bug_disablemail_completely
+++ /dev/null
@@ -1,2 +0,0 @@
- o Do not start IMAP daemon if mail was not selected among the
- services. Fixes #3435. \ No newline at end of file
diff --git a/changes/bug_handle_reconnecting b/changes/bug_handle_reconnecting
deleted file mode 100644
index c6465949..00000000
--- a/changes/bug_handle_reconnecting
+++ /dev/null
@@ -1 +0,0 @@
- o Reword RECONNECTING state of openvpn. Fixes #3429. \ No newline at end of file
diff --git a/changes/bug_improve_openvpn_detection b/changes/bug_improve_openvpn_detection
deleted file mode 100644
index 99f43a07..00000000
--- a/changes/bug_improve_openvpn_detection
+++ /dev/null
@@ -1,3 +0,0 @@
- o Improve OpenVPN detection by searching for a specific leap-only
- string in the command line. This makes it possible to run other
- VPN instances while also using EIP. Fixes #3268 and #3364. \ No newline at end of file
diff --git a/changes/bug_load_kext b/changes/bug_load_kext
deleted file mode 100644
index ba4a44cf..00000000
--- a/changes/bug_load_kext
+++ /dev/null
@@ -1,2 +0,0 @@
- o OSX: Check for the tun.kext existence in /Library/Extensions
- instead of /System/Library/Extensions. Fixes #3271. \ No newline at end of file
diff --git a/changes/bug_properly_logout b/changes/bug_properly_logout
deleted file mode 100644
index a5d0d972..00000000
--- a/changes/bug_properly_logout
+++ /dev/null
@@ -1 +0,0 @@
- o Use DELETE /1/logout to properly logout. Fixes #3510. \ No newline at end of file
diff --git a/changes/bug_retr_hangs b/changes/bug_retr_hangs
deleted file mode 100644
index 8bdf7bac..00000000
--- a/changes/bug_retr_hangs
+++ /dev/null
@@ -1,3 +0,0 @@
- o Make the poll interval bigger to improve openvpn's internal
- behavior. If it gets queried too many times per second, it's
- behavior won't be good. Fixes #3430. \ No newline at end of file
diff --git a/changes/bug_username_to_lower b/changes/bug_username_to_lower
deleted file mode 100644
index 284567e4..00000000
--- a/changes/bug_username_to_lower
+++ /dev/null
@@ -1,2 +0,0 @@
- o Transforms usernames to lower case before they are used in the
- registration and authentication. Closes #3541. \ No newline at end of file
diff --git a/changes/feature-3407_add-log-filtering b/changes/feature-3407_add-log-filtering
deleted file mode 100644
index f4433af4..00000000
--- a/changes/feature-3407_add-log-filtering
+++ /dev/null
@@ -1 +0,0 @@
- o Add filter option to the logger window. Closes #3407.
diff --git a/changes/feature_2959_create_bitmask_namespace b/changes/feature_2959_create_bitmask_namespace
deleted file mode 100644
index 9f7e9cd4..00000000
--- a/changes/feature_2959_create_bitmask_namespace
+++ /dev/null
@@ -1 +0,0 @@
- o Move all client code into its own namespace (leap.bitmask). Closes: #2959
diff --git a/changes/feature_3409-make-imap-poll-configurable b/changes/feature_3409-make-imap-poll-configurable
deleted file mode 100644
index 8730b5ab..00000000
--- a/changes/feature_3409-make-imap-poll-configurable
+++ /dev/null
@@ -1,2 +0,0 @@
- o Make mail fetch interval in imap service configurable via environment
- variable. Closes: #3409
diff --git a/changes/feature_3487-split-soledad-into-common-client-and-server b/changes/feature_3487-split-soledad-into-common-client-and-server
deleted file mode 100644
index 46983232..00000000
--- a/changes/feature_3487-split-soledad-into-common-client-and-server
+++ /dev/null
@@ -1,2 +0,0 @@
- o Update to new soledad package scheme (common, client and server). Closes
- #3487.
diff --git a/changes/feature_3525-login-triggers-fetch b/changes/feature_3525-login-triggers-fetch
deleted file mode 100644
index 02fd0978..00000000
--- a/changes/feature_3525-login-triggers-fetch
+++ /dev/null
@@ -1 +0,0 @@
- o Fetch incoming mail when mail client logs in. Closes: #3525
diff --git a/changes/feature_add_mail_ui b/changes/feature_add_mail_ui
deleted file mode 100644
index c7c0f2ce..00000000
--- a/changes/feature_add_mail_ui
+++ /dev/null
@@ -1 +0,0 @@
- o Add first draft of the UI for Encrypted Mail. Closes #3499. \ No newline at end of file
diff --git a/debian/README.source b/debian/README.source
deleted file mode 100644
index da12f753..00000000
--- a/debian/README.source
+++ /dev/null
@@ -1,9 +0,0 @@
-leap-client for Debian
------------------------------
-
-<this file describes information about the source package, see Debian policy
-manual section 4.14. You WILL either need to modify or delete this file>
-
-
-
-
diff --git a/debian/leap-client.install b/debian/bitmask.install
index 2a470423..7c20422f 100644
--- a/debian/leap-client.install
+++ b/debian/bitmask.install
@@ -1,3 +1,3 @@
pkg/linux/polkit/net.openvpn.gui.leap.policy usr/share/polkit-1/actions/
pkg/linux/resolv-update etc/leap/
-debian/leap-client.xpm usr/share/pixmaps
+debian/bitmask.xpm usr/share/pixmaps
diff --git a/debian/bitmask.xpm b/debian/bitmask.xpm
new file mode 100644
index 00000000..aa160d49
--- /dev/null
+++ b/debian/bitmask.xpm
@@ -0,0 +1,872 @@
+/* XPM */
+static char * mask_icon_xpm[] = {
+"32 32 837 2",
+" c None",
+". c #B72F2F",
+"+ c #B83434",
+"@ c #BA3838",
+"# c #E89499",
+"$ c #FFC0C9",
+"% c #FFC1CA",
+"& c #FFC2CB",
+"* c #FFC3CC",
+"= c #FFC4CD",
+"- c #EA9EB5",
+"; c #E28EA9",
+"> c #E38FAA",
+", c #E390AB",
+"' c #E392AC",
+") c #D44CA2",
+"! c #DE7BC6",
+"~ c #E391DF",
+"{ c #E290DF",
+"] c #E28FDF",
+"^ c #E38FE0",
+"/ c #AA41AA",
+"( c #A130A1",
+"_ c #9F2D9F",
+": c #9E2A9E",
+"< c #9C269C",
+"[ c #9C269D",
+"} c #9F7ADA",
+"| c #9E7FDF",
+"1 c #9B7BDE",
+"2 c #BB3C3C",
+"3 c #BD4040",
+"4 c #C04848",
+"5 c #F5B1B9",
+"6 c #FFC5CE",
+"7 c #FFC6CF",
+"8 c #FFC7CF",
+"9 c #FBC4CF",
+"0 c #E494AF",
+"a c #E496AF",
+"b c #E597B0",
+"c c #E597B1",
+"d c #DA61AB",
+"e c #D757A7",
+"f c #E18CD2",
+"g c #E497E1",
+"h c #E496E1",
+"i c #DC90DA",
+"j c #A73EA7",
+"k c #A63BA6",
+"l c #A438A4",
+"m c #A335A3",
+"n c #A132A1",
+"o c #A779D5",
+"p c #A486E1",
+"q c #A284E0",
+"r c #A081DF",
+"s c #BE4545",
+"t c #C04949",
+"u c #C14D4D",
+"v c #C85D5D",
+"w c #FDC3CB",
+"x c #FFC8D0",
+"y c #FFC9D1",
+"z c #FFCAD2",
+"A c #FFCBD2",
+"B c #E8A2B8",
+"C c #E69CB4",
+"D c #E69DB5",
+"E c #E79EB6",
+"F c #DF7CB4",
+"G c #D962AD",
+"H c #E59ADE",
+"I c #E69EE3",
+"J c #E69DE3",
+"K c #E59CE3",
+"L c #C26EC2",
+"M c #AC49AC",
+"N c #AB46AB",
+"O c #A943A9",
+"P c #A83FA8",
+"Q c #AF6CC6",
+"R c #AA8FE3",
+"S c #A88CE2",
+"T c #A689E1",
+"U c #BF4848",
+"V c #C14C4C",
+"W c #C35252",
+"X c #C45656",
+"Y c #C65A5A",
+"Z c #D27B7C",
+"` c #FFCBD3",
+" . c #FFCCD4",
+".. c #FFCDD5",
+"+. c #FFCED5",
+"@. c #F8C6D2",
+"#. c #E8A2B9",
+"$. c #E8A4BA",
+"%. c #E593BD",
+"&. c #DC6CB2",
+"*. c #DC6EB3",
+"=. c #E8A5E4",
+"-. c #E7A4E5",
+";. c #E7A5E5",
+">. c #B357B3",
+",. c #B154B1",
+"'. c #B051B0",
+"). c #AE4DAE",
+"!. c #B465BC",
+"~. c #B097E5",
+"{. c #AE94E4",
+"]. c #AC92E3",
+"^. c #AA8EE3",
+"/. c #A88BE2",
+"(. c #C45151",
+"_. c #C45454",
+":. c #C55959",
+"<. c #C75E5E",
+"[. c #C86262",
+"}. c #CA6666",
+"|. c #E8A6AB",
+"1. c #FFCFD6",
+"2. c #FFD0D7",
+"3. c #FFD1D8",
+"4. c #FED3DA",
+"5. c #EAABBF",
+"6. c #EAAABF",
+"7. c #E9A6C6",
+"8. c #DE77B8",
+"9. c #E181BD",
+"0. c #E9ABE7",
+"a. c #E9AAE7",
+"b. c #D999D8",
+"c. c #B862B8",
+"d. c #B65FB6",
+"e. c #B55CB5",
+"f. c #B863B9",
+"g. c #B69CE4",
+"h. c #B49CE6",
+"i. c #B299E5",
+"j. c #AC91E3",
+"k. c #FA8C79",
+"l. c #CE6563",
+"m. c #C86161",
+"n. c #CB6B6B",
+"o. c #CD6F6F",
+"p. c #CE7575",
+"q. c #F4C0C5",
+"r. c #FFD3DA",
+"s. c #FFD4DB",
+"t. c #FFD5DC",
+"u. c #F5C6D3",
+"v. c #EBB0C4",
+"w. c #EBB1C4",
+"x. c #EDB5CC",
+"y. c #E182BE",
+"z. c #E494C8",
+"A. c #EBB2E9",
+"B. c #EBB1E9",
+"C. c #ECB1E8",
+"D. c #C278C2",
+"E. c #BD6DBD",
+"F. c #BB6ABB",
+"G. c #BA68BA",
+"H. c #C0A1E1",
+"I. c #BAA4E8",
+"J. c #B9A2E8",
+"K. c #B69FE7",
+"L. c #B399E6",
+"M. c #9F8ECD",
+"N. c #FF8D79",
+"O. c #FE9280",
+"P. c #DF817A",
+"Q. c #CC6D6D",
+"R. c #CE7373",
+"S. c #D07777",
+"T. c #D17C7C",
+"U. c #D68687",
+"V. c #FCD1D6",
+"W. c #FFD7DD",
+"X. c #FFD8DE",
+"Y. c #FEDAE1",
+"Z. c #EDB7C8",
+"`. c #EDB8C9",
+" + c #EFBCCF",
+".+ c #E48CC3",
+"++ c #E48DC4",
+"@+ c #E9A4D3",
+"#+ c #EDB8EB",
+"$+ c #E8B7E7",
+"%+ c #C37BC3",
+"&+ c #C074C0",
+"*+ c #C89FDB",
+"=+ c #C1ADEA",
+"-+ c #BFAAEA",
+";+ c #BDA7E9",
+">+ c #BAA5E7",
+",+ c #948AC0",
+"'+ c #7E76AD",
+")+ c #FF927F",
+"!+ c #FF9683",
+"~+ c #FF9A88",
+"{+ c #F09C91",
+"]+ c #D27B7B",
+"^+ c #D38080",
+"/+ c #D48484",
+"(+ c #D68888",
+"_+ c #DF9F9F",
+":+ c #FFDAE0",
+"<+ c #FFDCE1",
+"[+ c #FFDCE2",
+"}+ c #F2C8D5",
+"|+ c #EFBECE",
+"1+ c #EEC1D1",
+"2+ c #E697C9",
+"3+ c #EDB4DD",
+"4+ c #EEBFED",
+"5+ c #EEBEEC",
+"6+ c #D6A0D6",
+"7+ c #C886C8",
+"8+ c #C783C7",
+"9+ c #CE9BD4",
+"0+ c #C7B4EC",
+"a+ c #C5B2EC",
+"b+ c #C2AFEB",
+"c+ c #C0ACEA",
+"d+ c #BEAEE6",
+"e+ c #9189BA",
+"f+ c #8881B3",
+"g+ c #837BB0",
+"h+ c #FF9684",
+"i+ c #FF9B89",
+"j+ c #FF9E8D",
+"k+ c #FFA392",
+"l+ c #FCAC9E",
+"m+ c #DA8E8D",
+"n+ c #D78C8C",
+"o+ c #D99191",
+"p+ c #DA9595",
+"q+ c #ECBCBE",
+"r+ c #FFDFE4",
+"s+ c #FFE0E4",
+"t+ c #FCE0E5",
+"u+ c #F0C5D3",
+"v+ c #F1C6D4",
+"w+ c #EAA7D0",
+"x+ c #E9A2CF",
+"y+ c #F1C1E6",
+"z+ c #F0C5EE",
+"A+ c #F0C8EF",
+"B+ c #CE94CE",
+"C+ c #CD91CD",
+"D+ c #D09AD2",
+"E+ c #CEBDEE",
+"F+ c #CBBAEE",
+"G+ c #C9B7ED",
+"H+ c #C7B4ED",
+"I+ c #BCB2DE",
+"J+ c #9891BD",
+"K+ c #928BBA",
+"L+ c #8E87B7",
+"M+ c #8981B4",
+"N+ c #FF9F8E",
+"O+ c #FFA393",
+"P+ c #FFA898",
+"Q+ c #E1978A",
+"R+ c #90655D",
+"S+ c #6D4D4C",
+"T+ c #946868",
+"U+ c #D89999",
+"V+ c #DFA2A2",
+"W+ c #F5D3D6",
+"X+ c #FFE3E7",
+"Y+ c #FEE4E8",
+"Z+ c #F3CED9",
+"`+ c #F2CCD8",
+" @ c #EEBBD9",
+".@ c #EBADD4",
+"+@ c #F1CBEC",
+"@@ c #F2CCF0",
+"#@ c #E8C3E7",
+"$@ c #D39FD3",
+"%@ c #D39ED3",
+"&@ c #D6C2ED",
+"*@ c #D1C2F0",
+"=@ c #9D91B5",
+"-@ c #706881",
+";@ c #625E73",
+">@ c #77728F",
+",@ c #9C96C0",
+"'@ c #938CBA",
+")@ c #FCA495",
+"!@ c #9A685F",
+"~@ c #11100F",
+"{@ c #222222",
+"]@ c #2A2A2A",
+"^@ c #181515",
+"/@ c #735757",
+"(@ c #D7A8A8",
+"_@ c #FCE1E4",
+":@ c #FFE7EA",
+"<@ c #FBE4E9",
+"[@ c #F4D3DE",
+"}@ c #F3CDE1",
+"|@ c #EEB7DA",
+"1@ c #F4D3F1",
+"2@ c #F4D4F3",
+"3@ c #DCB0DC",
+"4@ c #D8AAD8",
+"5@ c #DBC3E7",
+"6@ c #877F99",
+"7@ c #232228",
+"8@ c #1D1D1D",
+"9@ c #2B2B2B",
+"0@ c #252525",
+"a@ c #141414",
+"b@ c #3B3948",
+"c@ c #9791BD",
+"d@ c #9791C0",
+"e@ c #C69781",
+"f@ c #D6A491",
+"g@ c #CF9A8E",
+"h@ c #0E0D0C",
+"i@ c #343434",
+"j@ c #3D3D3D",
+"k@ c #454545",
+"l@ c #4D4D4D",
+"m@ c #535353",
+"n@ c #373737",
+"o@ c #1B1818",
+"p@ c #776364",
+"q@ c #F1DDDF",
+"r@ c #FEECEF",
+"s@ c #F5D9E2",
+"t@ c #F5DAE6",
+"u@ c #F1C4E1",
+"v@ c #F5D9F4",
+"w@ c #F3DBF2",
+"x@ c #DCB6DC",
+"y@ c #8E7E91",
+"z@ c #28272B",
+"A@ c #2E2E2E",
+"B@ c #525252",
+"C@ c #505050",
+"D@ c #484848",
+"E@ c #404040",
+"F@ c #383838",
+"G@ c #676582",
+"H@ c #8887DE",
+"I@ c #6C6CE2",
+"J@ c #C89B85",
+"K@ c #CBA08C",
+"L@ c #5E4B42",
+"M@ c #202020",
+"N@ c #3A3A3A",
+"O@ c #424242",
+"P@ c #4A4A4A",
+"Q@ c #5A5A5A",
+"R@ c #626262",
+"S@ c #6A6A6A",
+"T@ c #4E4E4E",
+"U@ c #302F2F",
+"V@ c #777070",
+"W@ c #D0C1C5",
+"X@ c #F2DEE8",
+"Y@ c #F4D3E8",
+"Z@ c #DCC7DB",
+"`@ c #827482",
+" # c #373337",
+".# c #6A696A",
+"+# c #646464",
+"@# c #5D5D5D",
+"## c #545454",
+"$# c #2F2F2F",
+"%# c #1A1A2E",
+"&# c #7979E5",
+"*# c #7171E3",
+"=# c #C99D88",
+"-# c #CCA38F",
+";# c #2C241F",
+"># c #333232",
+",# c #3F3F3F",
+"'# c #474747",
+")# c #4F4F4F",
+"!# c #575757",
+"~# c #5F5F5F",
+"{# c #676767",
+"]# c #717171",
+"^# c #797979",
+"/# c #656565",
+"(# c #414141",
+"_# c #606060",
+":# c #7B7B7B",
+"<# c #757575",
+"[# c #6D6D6D",
+"}# c #696969",
+"|# c #616161",
+"1# c #595959",
+"2# c #0D0D0F",
+"3# c #7B7BE1",
+"4# c #7575E4",
+"5# c #CA9F8B",
+"6# c #CDA591",
+"7# c #191514",
+"8# c #3B3B3B",
+"9# c #444444",
+"0# c #313131",
+"a# c #5E5E5E",
+"b# c #6E6E6E",
+"c# c #7C7C7C",
+"d# c #818181",
+"e# c #858585",
+"f# c #868686",
+"g# c #838383",
+"h# c #7F7F7F",
+"i# c #787878",
+"j# c #464646",
+"k# c #3E3E3E",
+"l# c #131313",
+"m# c #7171CC",
+"n# c #7878E5",
+"o# c #FCCF83",
+"p# c #F8D191",
+"q# c #1B1813",
+"r# c #3C3C3C",
+"s# c #12100F",
+"t# c #786963",
+"u# c #A7948C",
+"v# c #80746E",
+"w# c #3D3836",
+"x# c #1E1E1E",
+"y# c #747474",
+"z# c #7A7A7A",
+"A# c #777777",
+"B# c #727272",
+"C# c #25252D",
+"D# c #5F5F79",
+"E# c #7C7CA4",
+"F# c #72729B",
+"G# c #181820",
+"H# c #434343",
+"I# c #151515",
+"J# c #8585B6",
+"K# c #8D8DC2",
+"L# c #FFCE75",
+"M# c #FFD17E",
+"N# c #3A301F",
+"O# c #414140",
+"P# c #4C4C4C",
+"Q# c #151412",
+"R# c #DCC292",
+"S# c #FFE6B6",
+"T# c #FEE9C4",
+"U# c #FCEBCF",
+"V# c #C6BBAC",
+"W# c #363431",
+"X# c #686868",
+"Y# c #6F6F6F",
+"Z# c #1D1D1F",
+"`# c #9191A0",
+" $ c #D4D4EC",
+".$ c #CCCCE5",
+"+$ c #C1C1DA",
+"@$ c #B2B2CC",
+"#$ c #1C1C21",
+"$$ c #101011",
+"%$ c #8E8EB8",
+"&$ c #8888B5",
+"*$ c #FFCF76",
+"=$ c #705E3B",
+"-$ c #333333",
+";$ c #342F24",
+">$ c #E9D0A3",
+",$ c #FFE7BB",
+"'$ c #FFEAC4",
+")$ c #FFEDCC",
+"!$ c #E4D9C4",
+"~$ c #1D1D1B",
+"{$ c #0C0C0C",
+"]$ c #A9AAB3",
+"^$ c #D9D9E8",
+"/$ c #CECEE1",
+"($ c #C7C7DC",
+"_$ c #BBBBD2",
+":$ c #43434D",
+"<$ c #353535",
+"[$ c #1E1E26",
+"}$ c #9090BA",
+"|$ c #C5A468",
+"1$ c #1C1C1C",
+"2$ c #565656",
+"3$ c #1A1A18",
+"4$ c #6C6B62",
+"5$ c #969588",
+"6$ c #6D6C64",
+"7$ c #181818",
+"8$ c #7E7E7E",
+"9$ c #5C5C5D",
+"0$ c #1A1B1B",
+"a$ c #55585F",
+"b$ c #818893",
+"c$ c #696F79",
+"d$ c #212225",
+"e$ c #303030",
+"f$ c #4F4F63",
+"g$ c #8787B4",
+"h$ c #F9EDBA",
+"i$ c #F8F1C4",
+"j$ c #F9F3C9",
+"k$ c #302F28",
+"l$ c #50504F",
+"m$ c #636363",
+"n$ c #686767",
+"o$ c #494949",
+"p$ c #737373",
+"q$ c #515151",
+"r$ c #666666",
+"s$ c #141416",
+"t$ c #A9BFE5",
+"u$ c #B1C8F3",
+"v$ c #ACBFEA",
+"w$ c #F7F1BF",
+"x$ c #F7F2C3",
+"y$ c #F8F3C6",
+"z$ c #BBB798",
+"A$ c #1A1A1A",
+"B$ c #383939",
+"C$ c #434545",
+"D$ c #323232",
+"E$ c #606B80",
+"F$ c #B5CDF6",
+"G$ c #B0C9F6",
+"H$ c #ABC6F5",
+"I$ c #F6F1BD",
+"J$ c #F7F1C1",
+"K$ c #F7F2C4",
+"L$ c #F8F3C8",
+"M$ c #73715E",
+"N$ c #2C2C2C",
+"O$ c #414743",
+"P$ c #AEBCB6",
+"Q$ c #DFF5F0",
+"R$ c #D8EBEB",
+"S$ c #D3DCDD",
+"T$ c #63686B",
+"U$ c #5F6060",
+"V$ c #2D3239",
+"W$ c #B5CCF4",
+"X$ c #B2CBF6",
+"Y$ c #AEC7F6",
+"Z$ c #A9C4F5",
+"`$ c #F6F0BB",
+" % c #F4F1C1",
+".% c #E1EEB5",
+"+% c #D0E8A5",
+"@% c #545D42",
+"#% c #282828",
+"$% c #666665",
+"%% c #191A19",
+"&% c #7C8E84",
+"*% c #CEEDDB",
+"=% c #E0FEF4",
+"-% c #D8F1ED",
+";% c #C4E2E2",
+">% c #EBF7F8",
+",% c #E8F5FB",
+"'% c #ACBBC1",
+")% c #1E1F20",
+"!% c #4B4B4B",
+"~% c #242F39",
+"{% c #8FC0EF",
+"]% c #A3CEFD",
+"^% c #B3CFF8",
+"/% c #A6C2F5",
+"(% c #E9EDB1",
+"_% c #D1E89B",
+":% c #C8E48F",
+"<% c #CAE594",
+"[% c #CDE69A",
+"}% c #D0E89F",
+"|% c #818F65",
+"1% c #1C1E19",
+"2% c #242B24",
+"3% c #A2BCAA",
+"4% c #C1E7D2",
+"5% c #D4F3E5",
+"6% c #D9FFF2",
+"7% c #CAE8E6",
+"8% c #B4DADA",
+"9% c #E8F6F7",
+"0% c #E7F6F8",
+"a% c #DAF0F9",
+"b% c #C8DCE7",
+"c% c #40464B",
+"d% c #1B1B1B",
+"e% c #161719",
+"f% c #4C637A",
+"g% c #94C7F7",
+"h% c #92C9FF",
+"i% c #8CC6FF",
+"j% c #86C3FF",
+"k% c #88C3FD",
+"l% c #A0C7F8",
+"m% c #BFE07D",
+"n% c #C2E183",
+"o% c #C5E289",
+"p% c #C8E48E",
+"q% c #CDE699",
+"r% c #C3E0A6",
+"s% c #9ECC9E",
+"t% c #8BB18B",
+"u% c #8AAE8A",
+"v% c #B8DDBE",
+"w% c #B6E2CA",
+"x% c #B9E4CC",
+"y% c #D6FDF0",
+"z% c #D3FFF0",
+"A% c #BADFDE",
+"B% c #A9D4D4",
+"C% c #E3F3F5",
+"D% c #E3F4F6",
+"E% c #DBF1F9",
+"F% c #D3EDF8",
+"G% c #D1E9F5",
+"H% c #A7BDCE",
+"I% c #92A7B8",
+"J% c #A9C2D7",
+"K% c #AECEE9",
+"L% c #98CCFF",
+"M% c #80C0FF",
+"N% c #7ABDFF",
+"O% c #74BAFF",
+"P% c #BCDE78",
+"Q% c #BFDF7E",
+"R% c #C4E288",
+"S% c #C7E38F",
+"T% c #ABD39B",
+"U% c #90C590",
+"V% c #94C794",
+"W% c #98C998",
+"X% c #A4D1A8",
+"Y% c #ADDFC4",
+"Z% c #AEDFC4",
+"`% c #BCE9D2",
+" & c #CCFFEE",
+".& c #CDFFEE",
+"+& c #A9D5D5",
+"@& c #9DCECE",
+"#& c #DBF0F1",
+"$& c #E0F3F5",
+"%& c #DEF3F7",
+"&& c #CEEBF7",
+"*& c #CCEAF7",
+"=& c #C6E0EE",
+"-& c #AAC6DD",
+";& c #A6C3DB",
+">& c #A3C1DA",
+",& c #A0C1DD",
+"'& c #93C8FC",
+")& c #7FC0FF",
+"!& c #6DB7FF",
+"~& c #BADD72",
+"{& c #BFDF7D",
+"]& c #BDDE84",
+"^& c #91C58A",
+"/& c #82BD82",
+"(& c #87C087",
+"_& c #8CC28C",
+":& c #92C693",
+"<& c #A7DBBD",
+"[& c #A3DBBC",
+"}& c #A6DCBE",
+"|& c #C8F8E5",
+"1& c #C7FFEC",
+"2& c #94CBCB",
+"3& c #91C8C8",
+"4& c #CEE9EA",
+"5& c #DCF1F4",
+"6& c #DCF1F3",
+"7& c #CDEBF7",
+"8& c #C7E8F6",
+"9& c #C5E7F5",
+"0& c #B6D1E5",
+"a& c #A0BFD8",
+"b& c #9CBCD7",
+"c& c #98B9D5",
+"d& c #94B7D5",
+"e& c #8EC1F2",
+"f& c #73BAFF",
+"g& c #67B4FF",
+"h& c #B7DB6D",
+"i& c #B9DC72",
+"j& c #ADD57D",
+"k& c #78B877",
+"l& c #76B776",
+"m& c #7AB97A",
+"n& c #7FBC7F",
+"o& c #83BE83",
+"p& c #9FD7B3",
+"q& c #98D7B4",
+"r& c #9BD8B6",
+"s& c #A1DCBB",
+"t& c #C1FFE9",
+"u& c #C1FFEA",
+"v& c #C0FBE8",
+"w& c #85C2C2",
+"x& c #B7DDDE",
+"y& c #D9F0F3",
+"z& c #D8F0F3",
+"A& c #D3EDF5",
+"B& c #C2E6F5",
+"C& c #C0E5F5",
+"D& c #BEE5F4",
+"E& c #A4C2DA",
+"F& c #95B7D4",
+"G& c #91B5D3",
+"H& c #8EB3D1",
+"I& c #89B0CF",
+"J& c #86B6E3",
+"K& c #69B6FF",
+"L& c #60B1FF",
+"M& c #B4DA66",
+"N& c #92C770",
+"O& c #66AF66",
+"P& c #69B069",
+"Q& c #6EB36E",
+"R& c #73B573",
+"S& c #77B877",
+"T& c #90CB9C",
+"U& c #8DD3AC",
+"V& c #90D4AE",
+"W& c #92D5B0",
+"X& c #B2EDD3",
+"Y& c #BAFFE8",
+"Z& c #BBFFE8",
+"`& c #B3F1E1",
+" * c #7ABDBD",
+".* c #9BCFCF",
+"+* c #D5EFF2",
+"@* c #D5EEF2",
+"#* c #D4EEF2",
+"$* c #BDE4F4",
+"%* c #BBE3F4",
+"&* c #B9E3F3",
+"** c #B6DEF0",
+"=* c #91B5D2",
+"-* c #8BB1D0",
+";* c #87AECE",
+">* c #83ABCD",
+",* c #7FA9CB",
+"'* c #7BAAD3",
+")* c #63B0FC",
+"!* c #73B661",
+"~* c #58A758",
+"{* c #5DAA5D",
+"]* c #61AC61",
+"^* c #66AE66",
+"/* c #6AB16A",
+"(* c #77BB7E",
+"_* c #83CEA5",
+":* c #85D0A6",
+"<* c #88D1A8",
+"[* c #8AD1AA",
+"}* c #B8FEE6",
+"|* c #B5FFE6",
+"1* c #A2E4D7",
+"2* c #6EB7B7",
+"3* c #7CBEBE",
+"4* c #D2EDF1",
+"5* c #D1EDF0",
+"6* c #C5E7F3",
+"7* c #B6E1F3",
+"8* c #B5E1F3",
+"9* c #B3E0F2",
+"0* c #ABD3E8",
+"a* c #84ACCD",
+"b* c #80A9CC",
+"c* c #7CA7CA",
+"d* c #79A4C9",
+"e* c #74A1C7",
+"f* c #71A0C8",
+"g* c #4CA14C",
+"h* c #50A350",
+"i* c #55A655",
+"j* c #59A859",
+"k* c #5EAA5E",
+"l* c #65AE66",
+"m* c #7DCC9F",
+"n* c #7ACB9E",
+"o* c #7DCCA0",
+"p* c #7FCDA2",
+"q* c #93DBB8",
+"r* c #AEFFE4",
+"s* c #AFFFE4",
+"t* c #B0FFE4",
+"u* c #8FD6CB",
+"v* c #62B1B1",
+"w* c #CEEBEF",
+"x* c #CEECEF",
+"y* c #CDEBEF",
+"z* c #CAEAF0",
+"A* c #B1DFF2",
+"B* c #AFDFF2",
+"C* c #AEDEF1",
+"D* c #ACDDF1",
+"E* c #97C1DC",
+"F* c #75A2C7",
+"G* c #729FC6",
+"H* c #6E9DC4",
+"I* c #6A9AC2",
+"J* c #419B41",
+"K* c #489F48",
+"L* c #51A451",
+"M* c #73C693",
+"N* c #6FC796",
+"O* c #72C899",
+"P* c #75C99A",
+"Q* c #77CA9C",
+"R* c #A6F5D7",
+"S* c #A8FFE2",
+"T* c #A9FFE2",
+"U* c #AAFFE2",
+"V* c #78C5BF",
+"W* c #57ABAB",
+"X* c #56ABAB",
+"Y* c #C9E9EC",
+"Z* c #CAEAEE",
+"`* c #C9EAEE",
+" = c #B2DFF1",
+".= c #AADCF1",
+"+= c #A9DCF1",
+"@= c #A7DBF0",
+"#= c #A5DBF0",
+"$= c #81ADCF",
+"%= c #6B9BC3",
+"&= c #6799C2",
+"*= c #6194BF",
+". + @ # $ % & * = - ; > , ' ) ) ) ) ! ~ { ] ^ / ( _ : < [ } | 1 ",
+"@ 2 3 4 5 = 6 7 8 9 0 a b c d e e e f g g h i j k l m n o p q r ",
+"3 s t u v w x y z A B C D E F G G G H I J K L M N O P Q R S T p ",
+"U V W X Y Z ` ...+.@.#.$.$.%.&.&.*.=.-.-.;.>.,.'.).!.~.{.].^./.",
+"(._.:.<.[.}.|.1.2.3.4.5.6.5.7.8.8.9.0.0.a.b.c.d.e.f.g.h.i.~.{.j.",
+"k.l.m.}.n.o.p.q.r.s.t.u.v.w.x.y.y.z.A.B.C.D.E.F.G.H.I.J.K.h.L.M.",
+"N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+++@+#+#+$+%+D.&+*+=+-+;+I.>+,+'+",
+")+!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+g+",
+"h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+",
+"i+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+`+ @.@+@@@#@$@%@&@*@=@-@;@>@,@J+'@L+",
+")@k+P+!@~@{@]@{@^@/@(@_@:@<@[@}@|@1@2@3@4@5@6@7@8@9@0@a@b@,@c@d@",
+"e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@A@B@C@D@E@F@a@G@H@I@",
+"J@K@L@M@N@O@P@B@Q@R@S@T@U@V@W@X@Y@Z@`@ #D@.#+#@###l@k@j@$#%#&#*#",
+"=#-#;#>#,#'#)#!#~#{#S@]#^#/#P@,#(#'#_#:#<#[#}#|#1#B@P@(#N@2#3#4#",
+"5#6#7#8#9#D@0#9@j@a#}#b#<#c#d#e#f#g#h#i#]#S@+#9#$#9@k@j#k#l#m#n#",
+"o#p#q#E@r#s#t#u#v#w#x###b#y#i#:#c#z#A#B#R@]@C#D#E#F#G#0#H#I#J#K#",
+"L#M#N#O#P#Q#R#S#T#U#V#W#9@X#Y#y#<#]#b#r#Z#`# $.$+$@$#$k@D@$$%$&$",
+"*$M#=$-$B@'#;$>$,$'$)$!$~$,#b#y#<#]###{$]$^$/$($_$:$<$##'#[$}$&$",
+"L#M#|$1$2$~#P#3$4$5$6$7$T@S@y#c#8$i#b#9$0$a$b$c$d$r#|#1#e$f$}$g$",
+"h$i$j$k$l$m$}#n$P#,#o$X#}#b#:#g#e#8$p$}#}#q$E@'#+#}#r$@#s$t$u$v$",
+"w$x$y$z$A${#}#}#}#}#}#}#}#a#,#B$C$j@!#}#}#}#}#}#}#}#}#D$E$F$G$H$",
+"I$J$K$L$M$$#}#}#}#}#}#{#N$O$P$Q$R$S$T$x#U$}#}#}#}#}#D@V$W$X$Y$Z$",
+"`$w$ %.%+%@%#%$%}#}#Q@%%&%*%=%-%;%>%,%'%)%!%}#}#X#r#~%{%]%^%H$/%",
+"(%_%:%<%[%}%|%1%0@{@2%3%4%5%6%7%8%9%0%a%b%c%d%#%e%f%g%h%i%j%k%l%",
+"m%n%o%p%<%q%r%s%t%u%v%w%x%y%z%A%B%C%D%E%F%G%H%I%J%K%L%i%j%M%N%O%",
+"P%Q%n%R%S%T%U%V%W%X%Y%Z%`% &.&+&@&#&$&%&&&*&=&-&;&>&,&'&)&N%O%!&",
+"~&P%{&]&^&/&(&_&:&<&[&}&|&1&1&2&3&4&5&6&7&8&9&0&a&b&c&d&e&f&!&g&",
+"h&i&j&k&l&m&n&o&p&q&r&s&t&u&v&w&w&x&y&z&A&B&C&D&E&F&G&H&I&J&K&L&",
+"M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&`& * *.*+*@*#*$*%*&***=*-*;*>*,*'*)*",
+"!*~*{*]*^*/*(*_*:*<*[*}*|*|*1*2*2*3*4*5*5*6*7*8*9*0*a*b*c*d*e*f*",
+"g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*v*v*w*x*y*z*A*B*C*D*E*d*F*G*H*I*",
+"J*K*g*L*i*M*N*O*P*Q*R*S*T*U*V*W*W*X*Y*Z*`*`* =.=+=@=#=$=H*%=&=*="};
diff --git a/debian/changelog b/debian/changelog
index 69f0140d..a52d6c96 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,10 +1,18 @@
-bitmask (0.3.1pre) unstable; urgency=low
+bitmask (0.3.1) unstable; urgency=low
- * Merge in develop changes
+ [ Ben Carrillo ]
+ * Merge master for new release
+ * Cherrypick fix for updown script.
+ * Add data files to install /etc/leap/resolv-update
+ * Add leap.mail and leap.soledad.client dependencies explicitly.
+ * Install CHANGELOG.
+ * Update path to icon and menu entry to new package name.
+
+ [ Micah Anderson ]
* Update debian/copyright for new license
* Reformat extended description to fit properly
- -- Micah Anderson <micah@debian.org> Thu, 22 Aug 2013 15:24:53 -0400
+ -- Ben Carrillo <ben@futeisha.org> Mon, 26 Aug 2013 14:21:06 +0200
bitmask (0.3.0) unstable; urgency=low
diff --git a/debian/control b/debian/control
index 441e3055..b965a664 100644
--- a/debian/control
+++ b/debian/control
@@ -17,7 +17,8 @@ X-Python-Version: >= 2.6
Package: bitmask
Architecture: all
-Depends: ${misc:Depends}, ${python:Depends},
+Depends:
+ ${misc:Depends}, ${python:Depends},
python-openssl,
python-crypto,
python-keyring (>= 0.9.2),
@@ -30,14 +31,16 @@ Depends: ${misc:Depends}, ${python:Depends},
python-xdg,
python-jsonschema (>= 0.7.0),
python-setuptools,
- python-nose,
- python-mock,
pep8,
openvpn,
+#polkit-gnome should not be a hard dep, but a recommends
policykit-1-gnome,
python-pyside,
python-pyside.qtcore,
- python-pyside.qtgui
+ python-pyside.qtgui,
+ python-leap-common,
+ leap-mail,
+ soledad-client
Suggests: resolvconf
Conflicts: autoresolv
Enhances: openvpn
diff --git a/debian/leap-client.xpm b/debian/leap-client.xpm
deleted file mode 100644
index 4aca802e..00000000
--- a/debian/leap-client.xpm
+++ /dev/null
@@ -1,281 +0,0 @@
-/* XPM */
-static char * leap_client_xpm[] = {
-"32 26 252 2",
-" c None",
-". c #370F14",
-"+ c #942F2F",
-"@ c #E1415B",
-"# c #C616A8",
-"$ c #540A45",
-"% c #DC831E",
-"& c #FF4E54",
-"* c #FF554B",
-"= c #EB1BC5",
-"- c #F81ECD",
-"; c #30082A",
-"> c #202E3A",
-", c #C19C00",
-"' c #F5961F",
-") c #FF5051",
-"! c #F02AA7",
-"~ c #EB1DC2",
-"{ c #646BC6",
-"] c #3A1445",
-"^ c #2D7CE5",
-"/ c #458AD0",
-"( c #002745",
-"_ c #2C9BCB",
-": c #03353B",
-"< c #B28F00",
-"[ c #EEC100",
-"} c #F69122",
-"| c #F6348B",
-"1 c #B051D4",
-"2 c #207AFF",
-"3 c #5A1B1E",
-"4 c #9D436B",
-"5 c #7E68AC",
-"6 c #3F3161",
-"7 c #03111D",
-"8 c #3589F9",
-"9 c #88D6E2",
-"0 c #6CD6CF",
-"a c #10D363",
-"b c #0F960F",
-"c c #1C5810",
-"d c #426C38",
-"e c #747295",
-"f c #888572",
-"g c #F1C100",
-"h c #EFC500",
-"i c #F18943",
-"j c #1977CB",
-"k c #2F1613",
-"l c #A76A00",
-"m c #FFB400",
-"n c #C84D06",
-"o c #3A4051",
-"p c #384200",
-"q c #AEE200",
-"r c #CCFF00",
-"s c #BEEB16",
-"t c #3081A5",
-"u c #0F5EAB",
-"v c #427898",
-"w c #FFFF1C",
-"x c #B6E300",
-"y c #5C6D5D",
-"z c #B71C00",
-"A c #B53C00",
-"B c #812D00",
-"C c #000306",
-"D c #829F43",
-"E c #337FBD",
-"F c #0094CD",
-"G c #0048BA",
-"H c #0137C8",
-"I c #718270",
-"J c #461087",
-"K c #3E0634",
-"L c #050100",
-"M c #59B3CB",
-"N c #2F9CC7",
-"O c #2670B4",
-"P c #512180",
-"Q c #592078",
-"R c #582379",
-"S c #2A0453",
-"T c #000000",
-"U c #3EBFD6",
-"V c #0083AA",
-"W c #334E95",
-"X c #62317C",
-"Y c #572E80",
-"Z c #171EA2",
-"` c #000007",
-" . c #003017",
-".. c #004792",
-"+. c #0078AA",
-"@. c #0030A6",
-"#. c #0013A3",
-"$. c #0014A3",
-"%. c #00149C",
-"&. c #006117",
-"*. c #00576C",
-"=. c #002987",
-"-. c #250F6E",
-";. c #25087D",
-">. c #0214A0",
-",. c #000C61",
-"'. c #008700",
-"). c #189E0D",
-"!. c #5B6857",
-"~. c #012780",
-"{. c #0C207B",
-"]. c #400066",
-"^. c #10001B",
-"/. c #0B2105",
-"(. c #9EBF2C",
-"_. c #B3CB34",
-":. c #EBE20D",
-"<. c #FEEA00",
-"[. c #FDD702",
-"}. c #CBA614",
-"|. c #68BA5F",
-"1. c #67B359",
-"2. c #65AF56",
-"3. c #4E9D6B",
-"4. c #33B9BF",
-"5. c #9ECBFF",
-"6. c #4A93D2",
-"7. c #0E420C",
-"8. c #7CC41F",
-"9. c #E2A40E",
-"0. c #FE9B09",
-"a. c #FF9907",
-"b. c #D9B026",
-"c. c #9BC54F",
-"d. c #75CC66",
-"e. c #76CC65",
-"f. c #4EBEA7",
-"g. c #27C5C3",
-"h. c #2ECDE3",
-"i. c #62C9F1",
-"j. c #A3D575",
-"k. c #011328",
-"l. c #EFD300",
-"m. c #BA7303",
-"n. c #FF9A08",
-"o. c #C6BA34",
-"p. c #BEC03B",
-"q. c #83C95D",
-"r. c #66C77F",
-"s. c #48BDB2",
-"t. c #2CB190",
-"u. c #00C6C2",
-"v. c #34CEE4",
-"w. c #00C3BE",
-"x. c #AF5505",
-"y. c #FAB123",
-"z. c #8A6515",
-"A. c #0E2125",
-"B. c #303626",
-"C. c #FACD0A",
-"D. c #D2A100",
-"E. c #976500",
-"F. c #A1780C",
-"G. c #B8BE3C",
-"H. c #4DC3A7",
-"I. c #47B5AD",
-"J. c #30A88B",
-"K. c #009C48",
-"L. c #12732D",
-"M. c #245221",
-"N. c #1D8E92",
-"O. c #66632D",
-"P. c #A2451B",
-"Q. c #E87F0E",
-"R. c #B98043",
-"S. c #000008",
-"T. c #269FB6",
-"U. c #012025",
-"V. c #2D3121",
-"W. c #8C9B68",
-"X. c #C9B32C",
-"Y. c #A58300",
-"Z. c #2F6601",
-"`. c #0C4603",
-" + c #1E313B",
-".+ c #0E161A",
-"++ c #011B0F",
-"@+ c #011509",
-"#+ c #3D1D0F",
-"$+ c #893B18",
-"%+ c #D85A00",
-"&+ c #C2764E",
-"*+ c #5C3098",
-"=+ c #1359D5",
-"-+ c #4A7490",
-";+ c #191831",
-">+ c #393B7A",
-",+ c #A2BA71",
-"'+ c #AEE983",
-")+ c #286106",
-"!+ c #335200",
-"~+ c #121A00",
-"{+ c #1A0B04",
-"]+ c #5F2B60",
-"^+ c #3F469C",
-"/+ c #0070CE",
-"(+ c #0765A6",
-"_+ c #3FB2FF",
-":+ c #3C97F4",
-"<+ c #BB696F",
-"[+ c #683623",
-"}+ c #338500",
-"|+ c #36C10F",
-"1+ c #009A24",
-"2+ c #265D07",
-"3+ c #1E3000",
-"4+ c #3A1F42",
-"5+ c #003060",
-"6+ c #292742",
-"7+ c #665472",
-"8+ c #9A1B00",
-"9+ c #D32E09",
-"0+ c #8A290F",
-"a+ c #00370F",
-"b+ c #0FA11F",
-"c+ c #00C736",
-"d+ c #00B51C",
-"e+ c #2A5900",
-"f+ c #401700",
-"g+ c #811900",
-"h+ c #BC0D00",
-"i+ c #C0520C",
-"j+ c #00E43E",
-"k+ c #00DB3D",
-"l+ c #00B015",
-"m+ c #009E00",
-"n+ c #142600",
-"o+ c #220C00",
-"p+ c #782000",
-"q+ c #A60600",
-"r+ c #4E9928",
-"s+ c #00A50D",
-"t+ c #008200",
-"u+ c #005A00",
-"v+ c #521800",
-"w+ c #EA1D00",
-"x+ c #016200",
-"y+ c #006200",
-"z+ c #812200",
-"A+ c #AA2700",
-"B+ c #002200",
-"C+ c #170000",
-" ",
-" . + @ # $ ",
-" % & * = - ; > ",
-" , ' ) ! ~ { ] ^ / ",
-" ( _ : < [ } | 1 2 3 4 5 6 ",
-" 7 8 9 0 a b c d e f g h i j k l m n o ",
-" p q r s t u v w x y z A B C ",
-" D E F G H I J K L ",
-" M N O P Q R S ",
-" T U V W X Y Z ` ",
-" ...+.@.#.$.%. ",
-" &.*.=.-.;.>.,. ",
-" '.).!.~.{.].^. ",
-" /.(._.:.<.[.}.|.1.2.3.4.5.6. ",
-" 7.8.9.0.a.b.c.d.e.f.g.h.i.j.k. ",
-" l.m.n.o.p.q.r.s.t.u.v.w.x.y.z. A. ",
-" B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S. T.U.",
-" V.W.X.Y.Z.`. +.+++@+ #+$+%+&+*+=+-+ ",
-" ;+>+ ,+'+)+!+~+ {+]+^+/+ ",
-" (+_+:+<+[+ }+|+1+2+3+ 4+5+ ",
-" 6+7+8+9+0+ a+b+c+d+e+ ",
-" f+g+h+i+j+k+l+m+n+ ",
-" o+p+q+r+s+t+u+ ",
-" v+w+x+y+ ",
-" z+A+B+ ",
-" C+ "};
diff --git a/debian/menu b/debian/menu
index 1ea0047a..b80028ed 100644
--- a/debian/menu
+++ b/debian/menu
@@ -1,7 +1,7 @@
-?package(leap-client):needs="X11"\
+?package(bitmask):needs="X11"\
hints="LEAP,Routing,Network Routing,Anonymous,openvpn"\
section="Applications/System/Security"\
- title="LEAP-Client Internet Encryption Toolkit"\
- command="/usr/bin/leap-client"\
- icon="/usr/share/pixmaps/leap-client.xpm"
+ title="Bitmask, the Internet Encryption Toolkit"\
+ command="/usr/bin/bitmask"\
+ icon="/usr/share/pixmaps/bitmask.xpm"
diff --git a/debian/pydist-overrides b/debian/pydist-overrides
new file mode 100644
index 00000000..806f9e4d
--- /dev/null
+++ b/debian/pydist-overrides
@@ -0,0 +1,3 @@
+leap.soledad.client soledad-client ; PEP386
+leap.common python-leap-common ; PEP386
+leap.mail leap-mail ; PEP386
diff --git a/debian/rules b/debian/rules
index d364f764..cc4871bb 100755
--- a/debian/rules
+++ b/debian/rules
@@ -9,6 +9,7 @@
# Uncomment this to turn on verbose mode.
#DH_VERBOSE=1
DEB_BUILD_OPTIONS=nocheck
+package=bitmask
PYTHON2=$(shell pyversions -vr)
@@ -19,6 +20,7 @@ PYTHON2=$(shell pyversions -vr)
override_dh_prep:
rst2man docs/man/bitmask.1.rst docs/man/bitmask.1
dh_prep
+ # this will re-generate the resource files and locales.
make -f ./Makefile
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
@@ -49,11 +51,16 @@ install-python%:
# build and install sphinx docs
#
override_dh_installdocs:
- python setup.py build_sphinx
+# python setup.py build_sphinx
+ dh_installdocs
+
#COMMENTING OUT TO WORKAROUND THIS ERROR:
#dh_sphinxdoc: error: unknown JavaScript code: debian/bitmask/usr/share/doc/bitmask/html/_static/jquery.js
#dh_installdocs build/sphinx/html
+override_dh_installchangelogs:
+ dh_installchangelogs CHANGELOG
+
override_dh_auto_clean:
dh_auto_clean
rm -rf build
diff --git a/docs/man/bitmask.1.rst b/docs/man/bitmask.1.rst
index 12c87a5d..7a1d2ae1 100644
--- a/docs/man/bitmask.1.rst
+++ b/docs/man/bitmask.1.rst
@@ -7,9 +7,9 @@ graphical client to control LEAP, the encrypted internet access toolkit.
------------------------------------------------------------------------
:Author: LEAP Encryption Access Project https://leap.se
-:Date: 2013-01-30
+:Date: 2013-08-23
:Copyright: GPLv3+
-:Version: 0.2
+:Version: 0.3.1
:Manual section: 1
:Manual group: General Commands Manual
@@ -34,20 +34,49 @@ general options
**-h, --help** Print a help message and exit.
-**-d, --debug** Launches client in debug mode, writing debug info to stdout.
+**-l, --logfile=<file>** Writes log to file.
+
+**-s, --standalone** Makes Bitmask use standalone directories for configuration and binary searching.
-**---logfile=<file>** Writes log to file.
openvpn options
---------------
-**--openvpn-verbosity** [0-5] Verbosity level for openvpn logs.
+**--openvpn-verbosity** [0-5] Verbosity level for openvpn logs.
+
+debug options
+-------------
+**-d, --debug** Launches client in debug mode, writing debug info to stdout.
+
+**--danger** Bypasses the certificate check for bootstrap. This open the possibility of MITM attacks, so use only to debug providers in controlled environments, and never in production.
+
+ENCRYPTED MAIL
+==============
+
+Bitmask now (since version 0.3.0) supports the encrypted mail service with providers that offer it.
+
+Mail client configuration
+-------------------------
+
+To be able to use the mail services, you should configure your mail client to
+talk to the following ports:
+
+**STMP**: localhost:2013
+
+**IMAP**: localhost:1984
+
+For the time being, we have successfully tested this functionality in thunderbird.
+
+Mail poll period
+----------------
+If you want to change the default polling time for fetching mail, you can use
+a environment variable: BITMASK_MAILCHECK_PERIOD
WARNING
=======
-This software is still in early alfa testing. So don't trust your life to it!
+This software is still in its early phases of testing. So don't trust your life to it!
At the current time, Bitmask is not compatible with ``openresolv``, but it works with ``resolvconf``.
diff --git a/pkg/requirements.pip b/pkg/requirements.pip
index fe599f50..e04127b7 100644
--- a/pkg/requirements.pip
+++ b/pkg/requirements.pip
@@ -20,6 +20,7 @@ python-gnupg
leap.common>=0.3.0
leap.soledad.client>=0.3.0
leap.keymanager>=0.2.0
+leap.mail>=0.3.0
# Remove this when u1db fixes its dependency on oauth
oauth
diff --git a/setup.py b/setup.py
index 2c80eb5c..7f2a5011 100755
--- a/setup.py
+++ b/setup.py
@@ -108,6 +108,21 @@ class cmd_sdist(versioneer_sdist):
cmdclass["build"] = cmd_build
cmdclass["sdist"] = cmd_sdist
+import platform
+_system = platform.system()
+IS_LINUX = True if _system == "Linux" else False
+
+if IS_LINUX:
+ data_files = [
+ # ("share/man/man1",
+ # ["docs/man/bitmask.1"]),
+ ("share/polkit-1/actions",
+ ["pkg/linux/polkit/net.openvpn.gui.leap.policy"]),
+ ("/etc/leap/",
+ ["pkg/linux/resolv-update"]),
+ ]
+else:
+ data_files = []
setup(
name="leap.bitmask",
@@ -146,12 +161,7 @@ setup(
include_package_data=True,
# not being used? -- setuptools does not like it.
# looks like debhelper is honoring it...
- data_files=[
- # ("share/man/man1",
- # ["docs/man/bitmask.1"]),
- ("share/polkit-1/actions",
- ["pkg/linux/polkit/net.openvpn.gui.leap.policy"]),
- ],
+ data_files=data_files,
zip_safe=False,
platforms="all",
entry_points={
diff --git a/src/leap/bitmask/crypto/srpauth.py b/src/leap/bitmask/crypto/srpauth.py
index 7b91205f..41ce130a 100644
--- a/src/leap/bitmask/crypto/srpauth.py
+++ b/src/leap/bitmask/crypto/srpauth.py
@@ -134,6 +134,8 @@ class SRPAuth(QtCore.QObject):
A_KEY = "A"
CLIENT_AUTH_KEY = "client_auth"
SESSION_ID_KEY = "_session_id"
+ USER_VERIFIER_KEY = 'user[password_verifier]'
+ USER_SALT_KEY = 'user[password_salt]'
def __init__(self, provider_config):
"""
@@ -169,6 +171,10 @@ class SRPAuth(QtCore.QObject):
self._srp_user = None
self._srp_a = None
+ # User credentials stored for password changing checks
+ self._username = None
+ self._password = None
+
def _safe_unhexlify(self, val):
"""
Rounds the val to a multiple of 2 and returns the
@@ -438,6 +444,51 @@ class SRPAuth(QtCore.QObject):
def _threader(self, cb, res, *args, **kwargs):
return threads.deferToThread(cb, res, *args, **kwargs)
+ def change_password(self, current_password, new_password):
+ """
+ Changes the password for the currently logged user if the current
+ password match.
+ It requires to be authenticated.
+
+ Might raise:
+ SRPAuthBadPassword
+ requests.exceptions.HTTPError
+
+ :param current_password: the current password for the logged user.
+ :type current_password: str
+ :param new_password: the new password for the user
+ :type new_password: str
+ """
+ leap_assert(self.get_uid() is not None)
+
+ if current_password != self._password:
+ raise SRPAuthBadPassword
+
+ url = "%s/%s/users/%s.json" % (
+ self._provider_config.get_api_uri(),
+ self._provider_config.get_api_version(),
+ self.get_uid())
+
+ salt, verifier = self._srp.create_salted_verification_key(
+ self._username, new_password, self._hashfun, self._ng)
+
+ cookies = {self.SESSION_ID_KEY: self.get_session_id()}
+ user_data = {
+ self.USER_VERIFIER_KEY: binascii.hexlify(verifier),
+ self.USER_SALT_KEY: binascii.hexlify(salt)
+ }
+
+ change_password = self._session.put(
+ url, data=user_data,
+ verify=self._provider_config.get_ca_cert_path(),
+ cookies=cookies,
+ timeout=REQUEST_TIMEOUT)
+
+ # In case of non 2xx it raises HTTPError
+ change_password.raise_for_status()
+
+ self._password = new_password
+
def authenticate(self, username, password):
"""
Executes the whole authentication process for a user
@@ -454,6 +505,10 @@ class SRPAuth(QtCore.QObject):
"""
leap_assert(self.get_session_id() is None, "Already logged in")
+ # User credentials stored for password changing checks
+ self._username = username.lower()
+ self._password = password
+
d = threads.deferToThread(self._authentication_preprocessing,
username=username,
password=password)
@@ -565,6 +620,33 @@ class SRPAuth(QtCore.QObject):
d.addErrback(self._errback)
return d
+ def change_password(self, current_password, new_password):
+ """
+ Changes the user's password.
+
+ :param current_password: the current password of the user.
+ :type current_password: str
+ :param new_password: the new password for the user.
+ :type new_password: str
+
+ :returns: a defer to interact with.
+ :rtype: twisted.internet.defer.Deferred
+ """
+ d = threads.deferToThread(
+ self.__instance.change_password, current_password, new_password)
+ return d
+
+ def get_username(self):
+ """
+ Returns the username of the currently authenticated user or None if
+ no user is logged.
+
+ :rtype: str or None
+ """
+ if self.get_uid() is None:
+ return None
+ return self.__instance._username
+
def _gui_notify(self, _):
"""
Callback that notifies the UI with the proper signal.
diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py
index 17275983..c832887a 100644
--- a/src/leap/bitmask/gui/mainwindow.py
+++ b/src/leap/bitmask/gui/mainwindow.py
@@ -33,6 +33,7 @@ from leap.bitmask.config.leapsettings import LeapSettings
from leap.bitmask.config.providerconfig import ProviderConfig
from leap.bitmask.crypto.srpauth import SRPAuth
from leap.bitmask.gui.loggerwindow import LoggerWindow
+from leap.bitmask.gui.preferenceswindow import PreferencesWindow
from leap.bitmask.gui.wizard import Wizard
from leap.bitmask.gui.login import LoginWidget
from leap.bitmask.gui.statuspanel import StatusPanelWidget
@@ -162,6 +163,7 @@ class MainWindow(QtGui.QMainWindow):
self._launch_wizard)
self.ui.btnShowLog.clicked.connect(self._show_logger_window)
+ self.ui.btnPreferences.clicked.connect(self._show_preferences)
self._status_panel = StatusPanelWidget(
self.ui.stackedWidget.widget(self.EIP_STATUS_INDEX))
@@ -286,12 +288,17 @@ class MainWindow(QtGui.QMainWindow):
################################# end Qt Signals connection ########
+ # Enable the password change when soledad is ready
+ self.soledad_ready.connect(
+ partial(self.ui.btnPreferences.setEnabled, True))
+
init_platform()
self._wizard = None
self._wizard_firstrun = False
self._logger_window = None
+ self._preferences_window = None
self._bypass_checks = bypass_checks
@@ -403,6 +410,17 @@ class MainWindow(QtGui.QMainWindow):
self._logger_window.finished.connect(self._uncheck_logger_button)
+ def _show_preferences(self):
+ """
+ SLOT
+ TRIGGERS:
+ self.ui.action_show_preferences.triggered
+ self.ui.btnPreferences.clicked
+
+ Displays the preferences window.
+ """
+ PreferencesWindow(self, self._srp_auth, self._soledad).show()
+
def _uncheck_logger_button(self):
"""
SLOT
@@ -1399,6 +1417,7 @@ class MainWindow(QtGui.QMainWindow):
self._login_widget.set_password("")
self._login_widget.set_enabled(True)
self._login_widget.set_status("")
+ self.ui.btnPreferences.setEnabled(False)
def _intermediate_stage(self, data):
"""
diff --git a/src/leap/bitmask/gui/preferenceswindow.py b/src/leap/bitmask/gui/preferenceswindow.py
new file mode 100644
index 00000000..67448768
--- /dev/null
+++ b/src/leap/bitmask/gui/preferenceswindow.py
@@ -0,0 +1,196 @@
+# -*- coding: utf-8 -*-
+# preferenceswindow.py
+# Copyright (C) 2013 LEAP
+#
+# 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/>.
+
+"""
+Preferences window
+"""
+import logging
+
+from functools import partial
+from PySide import QtGui
+
+from leap.bitmask.gui.ui_preferences import Ui_Preferences
+from leap.soledad.client import NoStorageSecret
+from leap.bitmask.crypto.srpauth import SRPAuthBadPassword
+
+logger = logging.getLogger(__name__)
+
+
+class PreferencesWindow(QtGui.QDialog):
+ """
+ Window that displays the preferences.
+ """
+
+ WEAK_PASSWORDS = ("123456", "qweasd", "qwerty", "password")
+
+ def __init__(self, parent, srp_auth, soledad):
+ """
+ :param parent: parent object of the PreferencesWindow.
+ :parent type: QWidget
+ :param srp_auth: SRPAuth object configured in the main app.
+ :type srp_auth: SRPAuth
+ :param soledad: Soledad object configured in the main app.
+ :type soledad: Soledad
+ """
+ QtGui.QDialog.__init__(self, parent)
+
+ self._srp_auth = srp_auth
+ self._soledad = soledad
+
+ # Load UI
+ self.ui = Ui_Preferences()
+ self.ui.setupUi(self)
+ self.ui.lblPasswordChangeStatus.setVisible(False)
+
+ # Connections
+ self.ui.pbChangePassword.clicked.connect(self._change_password)
+
+ def _basic_password_checks(self, username, password, password2):
+ """
+ Performs basic password checks to avoid really easy passwords.
+
+ :param username: username provided at the registrarion form
+ :type username: str
+ :param password: password from the registration form
+ :type password: str
+ :param password2: second password from the registration form
+ :type password: str
+
+ :returns: True and empty message if all the checks pass,
+ False and an error message otherwise
+ :rtype: tuple(bool, str)
+ """
+ message = None
+
+ if message is None and password != password2:
+ message = self.tr("Passwords don't match")
+
+ if message is None and len(password) < 6:
+ message = self.tr("Password too short")
+
+ if message is None and password in self.WEAK_PASSWORDS:
+ message = self.tr("Password too easy")
+
+ if message is None and username == password:
+ message = self.tr("Password equal to username")
+
+ return message is None, message
+
+ def _set_password_change_status(self, status, error=False, success=False):
+ """
+ Sets the status label for the password change.
+
+ :param status: status message to display, can be HTML
+ :type status: str
+ """
+ if error:
+ status = "<font color='red'><b>%s</b></font>" % (status,)
+ elif success:
+ status = "<font color='green'><b>%s</b></font>" % (status,)
+
+ self.ui.lblPasswordChangeStatus.setVisible(True)
+ self.ui.lblPasswordChangeStatus.setText(status)
+
+ def _set_changing_password(self, disable):
+ """
+ Enables or disables the widgets in the password change group box.
+
+ :param disable: True if the widgets should be disabled and
+ it displays the status label that shows that is
+ changing the password.
+ False if they should be enabled.
+ :type disable: bool
+ """
+ if disable:
+ self._set_password_change_disable(self.tr("Changing password..."))
+
+ self.ui.leCurrentPassword.setEnabled(not disable)
+ self.ui.leNewPassword.setEnabled(not disable)
+ self.ui.leNewPassword2.setEnabled(not disable)
+ self.ui.pbChangePassword.setEnabled(not disable)
+
+ def _change_password(self):
+ """
+ Changes the user's password if the inputboxes are correctly filled.
+ """
+ username = self._srp_auth.get_username()
+ current_password = self.ui.leCurrentPassword.text()
+ new_password = self.ui.leNewPassword.text()
+ new_password2 = self.ui.leNewPassword2.text()
+
+ ok, msg = self._basic_password_checks(
+ username, new_password, new_password2)
+
+ if not ok:
+ self._set_changing_password(False)
+ self._set_password_change_status(msg, error=True)
+ self.ui.leNewPassword.setFocus()
+ return
+
+ self._set_changing_password(True)
+ d = self._srp_auth.change_password(current_password, new_password)
+ d.addCallback(partial(self._change_password_success, new_password))
+ d.addErrback(self._change_password_problem)
+
+ def _change_password_success(self, new_password, _):
+ """
+ Callback used to display a successfully performed action.
+
+ :param new_password: the new password for the user.
+ :type new_password: str.
+ :param _: the returned data from self._srp_auth.change_password
+ Ignored
+ """
+ logger.debug("SRP password changed successfully.")
+ try:
+ self._soledad.change_passphrase(str(new_password))
+ logger.debug("Soledad password changed successfully.")
+ except NoStorageSecret:
+ logger.debug(
+ "No storage secret for password change in Soledad.")
+
+ self._set_password_change_status(
+ self.tr("Password changed successfully."), success=True)
+ self._clear_inputs()
+ self._set_changing_password(False)
+
+ def _change_password_problem(self, failure):
+ """
+ Errback called if there was a problem with the deferred.
+ Also is used to display an error message.
+
+ :param failure: the cause of the method failed.
+ :type failure: twisted.python.Failure
+ """
+ logger.error("Error changing password: %s", (failure, ))
+ problem = self.tr("There was a problem changing the password.")
+
+ if failure.check(SRPAuthBadPassword):
+ problem = self.tr("You did not enter a correct current password.")
+
+ self._set_password_change_status(problem, error=True)
+
+ self._set_changing_password(False)
+ failure.trap(Exception)
+
+ def _clear_inputs(self):
+ """
+ Clear the contents of the inputs.
+ """
+ self.ui.leCurrentPassword.setText("")
+ self.ui.leNewPassword.setText("")
+ self.ui.leNewPassword2.setText("")
diff --git a/src/leap/bitmask/gui/ui/mainwindow.ui b/src/leap/bitmask/gui/ui/mainwindow.ui
index 9c4e6ff0..834a562e 100644
--- a/src/leap/bitmask/gui/ui/mainwindow.ui
+++ b/src/leap/bitmask/gui/ui/mainwindow.ui
@@ -215,6 +215,16 @@
<item row="18" column="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
+ <widget class="QPushButton" name="btnPreferences">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Preferences</string>
+ </property>
+ </widget>
+ </item>
+ <item>
<spacer name="horizontalSpacer_10">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@@ -310,7 +320,6 @@
<resources>
<include location="../../../../../data/resources/mainwindow.qrc"/>
<include location="../../../../../data/resources/locale.qrc"/>
- <include location="../../../../data/resources/mainwindow.qrc"/>
</resources>
<connections/>
</ui>
diff --git a/src/leap/bitmask/gui/ui/preferences.ui b/src/leap/bitmask/gui/ui/preferences.ui
new file mode 100644
index 00000000..8c63ccad
--- /dev/null
+++ b/src/leap/bitmask/gui/ui/preferences.ui
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Preferences</class>
+ <widget class="QDialog" name="Preferences">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>451</width>
+ <height>267</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Preferences</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="../../../../../data/resources/mainwindow.qrc">
+ <normaloff>:/images/mask-icon.png</normaloff>:/images/mask-icon.png</iconset>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QGroupBox" name="gbPasswordChange">
+ <property name="title">
+ <string>Password Change</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="lblCurrentPassword">
+ <property name="text">
+ <string>&amp;Current password:</string>
+ </property>
+ <property name="buddy">
+ <cstring>leCurrentPassword</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="leCurrentPassword">
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="lblNewPassword">
+ <property name="text">
+ <string>&amp;New password:</string>
+ </property>
+ <property name="buddy">
+ <cstring>leNewPassword</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="leNewPassword">
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="lblNewPassword2">
+ <property name="text">
+ <string>&amp;Re-enter new password:</string>
+ </property>
+ <property name="buddy">
+ <cstring>leNewPassword2</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="leNewPassword2">
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QPushButton" name="pbChangePassword">
+ <property name="text">
+ <string>Change</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" colspan="2">
+ <widget class="QLabel" name="lblPasswordChangeStatus">
+ <property name="text">
+ <string>&lt;Password change status&gt;</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="gbGatewaySelector">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="title">
+ <string>Select gateway for provider</string>
+ </property>
+ <property name="checkable">
+ <bool>false</bool>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="lblSelectProvider">
+ <property name="text">
+ <string>&amp;Select provider:</string>
+ </property>
+ <property name="buddy">
+ <cstring>cbProviders</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="cbProviders">
+ <item>
+ <property name="text">
+ <string>&lt;Select provider&gt;</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Select gateway:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="comboBox">
+ <item>
+ <property name="text">
+ <string>Automatic</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="../../../../../data/resources/mainwindow.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/leap/bitmask/services/eip/vpnlaunchers.py b/src/leap/bitmask/services/eip/vpnlaunchers.py
index fb9ac46f..f8c51ad8 100644
--- a/src/leap/bitmask/services/eip/vpnlaunchers.py
+++ b/src/leap/bitmask/services/eip/vpnlaunchers.py
@@ -343,7 +343,7 @@ class LinuxVPNLauncher(VPNLauncher):
abs_path_in_bundle = os.path.join(cwd, rel_path_in_bundle)
if os.path.isfile(abs_path_in_bundle):
return abs_path_in_bundle
- abs_path_in_system = kls.OPENVPN_DOWN_ROOT_FILE
+ abs_path_in_system = kls.OPENVPN_DOWN_ROOT_PATH
if os.path.isfile(abs_path_in_system):
return abs_path_in_system
diff --git a/versioneer.py b/versioneer.py
index 57d99419..34e48073 100644
--- a/versioneer.py
+++ b/versioneer.py
@@ -74,8 +74,8 @@ To use it:
version=versioneer.get_version(),
cmdclass=versioneer.get_cmdclass(),
4: run 'setup.py update_files', which will create _version.py, and will
- append the following to your __init__.py:
- from _version import __version__
+ modify your __init__.py to define __version__ (by calling a function
+ from _version.py)
5: modify your MANIFEST.in to include versioneer.py
6: add both versioneer.py and the generated _version.py to your VCS
"""
@@ -144,7 +144,8 @@ def get_expanded_variables(versionfile_source):
# used from _version.py.
variables = {}
try:
- for line in open(versionfile_source,"r").readlines():
+ f = open(versionfile_source,"r")
+ for line in f.readlines():
if line.strip().startswith("git_refnames ="):
mo = re.search(r'=\s*"(.*)"', line)
if mo:
@@ -153,6 +154,7 @@ def get_expanded_variables(versionfile_source):
mo = re.search(r'=\s*"(.*)"', line)
if mo:
variables["full"] = mo.group(1)
+ f.close()
except EnvironmentError:
pass
return variables
@@ -164,20 +166,24 @@ def versions_from_expanded_variables(variables, tag_prefix, verbose=False):
print("variables are unexpanded, not using")
return {} # unexpanded, so not in an unpacked git-archive tarball
refs = set([r.strip() for r in refnames.strip("()").split(",")])
- for ref in list(refs):
- if not re.search(r'\d', ref):
- if verbose:
- print("discarding '%%s', no digits" %% ref)
- refs.discard(ref)
- # Assume all version tags have a digit. git's %%d expansion
- # behaves like git log --decorate=short and strips out the
- # refs/heads/ and refs/tags/ prefixes that would let us
- # distinguish between branches and tags. By ignoring refnames
- # without digits, we filter out many common branch names like
- # "release" and "stabilization", as well as "HEAD" and "master".
+ # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
+ # just "foo-1.0". If we see a "tag: " prefix, prefer those.
+ TAG = "tag: "
+ tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)])
+ if not tags:
+ # Either we're using git < 1.8.3, or there really are no tags. We use
+ # a heuristic: assume all version tags have a digit. The old git %%d
+ # expansion behaves like git log --decorate=short and strips out the
+ # refs/heads/ and refs/tags/ prefixes that would let us distinguish
+ # between branches and tags. By ignoring refnames without digits, we
+ # filter out many common branch names like "release" and
+ # "stabilization", as well as "HEAD" and "master".
+ tags = set([r for r in refs if re.search(r'\d', r)])
+ if verbose:
+ print("discarding '%%s', no digits" %% ",".join(refs-tags))
if verbose:
- print("remaining refs: %%s" %% ",".join(sorted(refs)))
- for ref in sorted(refs):
+ print("likely tags: %%s" %% ",".join(sorted(tags)))
+ for ref in sorted(tags):
# sorting will prefer e.g. "2.0" over "2.0rc1"
if ref.startswith(tag_prefix):
r = ref[len(tag_prefix):]
@@ -328,7 +334,8 @@ def get_expanded_variables(versionfile_source):
# used from _version.py.
variables = {}
try:
- for line in open(versionfile_source,"r").readlines():
+ f = open(versionfile_source,"r")
+ for line in f.readlines():
if line.strip().startswith("git_refnames ="):
mo = re.search(r'=\s*"(.*)"', line)
if mo:
@@ -337,6 +344,7 @@ def get_expanded_variables(versionfile_source):
mo = re.search(r'=\s*"(.*)"', line)
if mo:
variables["full"] = mo.group(1)
+ f.close()
except EnvironmentError:
pass
return variables
@@ -348,20 +356,24 @@ def versions_from_expanded_variables(variables, tag_prefix, verbose=False):
print("variables are unexpanded, not using")
return {} # unexpanded, so not in an unpacked git-archive tarball
refs = set([r.strip() for r in refnames.strip("()").split(",")])
- for ref in list(refs):
- if not re.search(r'\d', ref):
- if verbose:
- print("discarding '%s', no digits" % ref)
- refs.discard(ref)
- # Assume all version tags have a digit. git's %d expansion
- # behaves like git log --decorate=short and strips out the
- # refs/heads/ and refs/tags/ prefixes that would let us
- # distinguish between branches and tags. By ignoring refnames
- # without digits, we filter out many common branch names like
- # "release" and "stabilization", as well as "HEAD" and "master".
+ # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
+ # just "foo-1.0". If we see a "tag: " prefix, prefer those.
+ TAG = "tag: "
+ tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)])
+ if not tags:
+ # Either we're using git < 1.8.3, or there really are no tags. We use
+ # a heuristic: assume all version tags have a digit. The old git %d
+ # expansion behaves like git log --decorate=short and strips out the
+ # refs/heads/ and refs/tags/ prefixes that would let us distinguish
+ # between branches and tags. By ignoring refnames without digits, we
+ # filter out many common branch names like "release" and
+ # "stabilization", as well as "HEAD" and "master".
+ tags = set([r for r in refs if re.search(r'\d', r)])
+ if verbose:
+ print("discarding '%s', no digits" % ",".join(refs-tags))
if verbose:
- print("remaining refs: %s" % ",".join(sorted(refs)))
- for ref in sorted(refs):
+ print("likely tags: %s" % ",".join(sorted(tags)))
+ for ref in sorted(tags):
# sorting will prefer e.g. "2.0" over "2.0rc1"
if ref.startswith(tag_prefix):
r = ref[len(tag_prefix):]
@@ -513,6 +525,7 @@ def versions_from_file(filename):
mo = re.match("version_full = '([^']+)'", line)
if mo:
versions["full"] = mo.group(1)
+ f.close()
return versions
def write_to_version_file(filename, versions):