diff options
43 files changed, 1528 insertions, 381 deletions
@@ -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 @@ -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 - @@ -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 @@ -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>&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>&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>&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><Password change status></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>&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><Select provider></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): |