From 6996d36ea21162697611713c3ddb0a54a1862121 Mon Sep 17 00:00:00 2001 From: Tobias Hagemann Date: Tue, 5 Apr 2016 12:28:36 +0200 Subject: [PATCH 1/6] added issue template, contribution guide, code of conduct [ci skip] --- CODE_OF_CONDUCT.md | 75 +++++++++++++++++++++++++++++++++++++++++++++ CONTRIBUTING.md | 33 ++++++++++++++++++++ ISSUE_TEMPLATE.md | 19 ++++++++++++ README.md | 64 +++++++++++++++++++++++++------------- cryptomator.png | Bin 0 -> 26873 bytes 5 files changed, 170 insertions(+), 21 deletions(-) create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 ISSUE_TEMPLATE.md create mode 100644 cryptomator.png diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..2730e41e9 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,75 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at [support@cryptomator.org][support]. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ +[support]: support@cryptomator.org diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..d24a6948c --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,33 @@ +# Contributing to Cryptomator + +## Did you find a bug? + +- Ensure you're running the latest version of Cryptomator. +- Ensure the bug is related to the desktop version of Cryptomator. Bugs concerning the Cryptomator iOS app can be reported on the [Cryptomator for iOS issues list](https://github.com/cryptomator/cryptomator-ios/issues). +- Ensure the bug was not [already reported](https://github.com/cryptomator/cryptomator/issues). You can also check out our [FAQ](https://cryptomator.org/faq/) and our [Wiki](https://github.com/cryptomator/cryptomator/wiki). +- If you're unable to find an open issue addressing the problem, [submit a new one](https://github.com/cryptomator/cryptomator/issues/new). + +## Do you have questions? + +- Ask questions by [submitting a new issue](https://github.com/cryptomator/cryptomator/issues/new). +- [Contact us](https://cryptomator.org/contact/) directly by writing an email. Wir sprechen auch Deutsch! +- Have a chat with us on [Gitter](https://gitter.im/cryptomator/cryptomator). + +## Did you write a patch that fixes a bug? + +- Open a new pull request with the patch. +- Ensure the PR description clearly describes the problem and solution. Include the relevant issue number if applicable. + +## Do you intend to add a new feature or change an existing one? + +- Suggest your change by [submitting a new issue](https://github.com/cryptomator/cryptomator/issues/new) and start writing code. + +## Code of Conduct + +Help us keep Cryptomator open and inclusive. Please read and follow our [Code of Conduct](https://github.com/cryptomator/cryptomator/blob/master/CODE_OF_CONDUCT.md). + +## Above all, thank you for your contributions + +Thank you for taking the time to contribute to the project! :+1: + +Cryptomator Team diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..dc02f790c --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,19 @@ +### Basic Info + +- I'm running Cryptomator on: [Windows, OS X, and/or Debian (or other Linux Distribution), don't forget the version] +- I'm using Cryptomator in version: [you can check the version in the settings of Cryptomator] + +### Description + +[description of the bug, question or feature - what did you do? what problem occurred? etc.] + +### Log File (optional) + +``` +[insert relevant parts of the log file here if applicable, +don't forget to redact sensitive information + +on Windows: %appdata%/Cryptomator/cryptomator.log +on OS X: ~/Library/Logs/Cryptomator/cryptomator.log +on Debian: ~/.Cryptomator/cryptomator.log] +``` diff --git a/README.md b/README.md index 274414805..4665faf03 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,66 @@ -Cryptomator -==================== +![cryptomator](cryptomator.png) [![Build Status](https://travis-ci.org/cryptomator/cryptomator.svg?branch=master)](https://travis-ci.org/cryptomator/cryptomator) +[![Coverity Scan Build Status](https://scan.coverity.com/projects/cryptomator-cryptomator/badge.svg?flat=1)](https://scan.coverity.com/projects/cryptomator-cryptomator) +[![Coverage Status](https://coveralls.io/repos/github/cryptomator/cryptomator/badge.svg?branch=master)](https://coveralls.io/github/cryptomator/cryptomator?branch=master) [![Join the chat at https://gitter.im/cryptomator/cryptomator](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/cryptomator/cryptomator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Twitter](https://img.shields.io/badge/twitter-@Cryptomator-blue.svg?style=flat)](http://twitter.com/Cryptomator) -Multiplatform transparent client-side encryption of your files in the cloud. +Multi-platform transparent client-side encryption of your files in the cloud. -If you want to take a look at the current beta version, go ahead and get your copy of cryptomator on [Cryptomator.org](https://cryptomator.org) or clone and build Cryptomator using Maven (instructions below). +Download native binaries of Cryptomator on [cryptomator.org](https://cryptomator.org/) or clone and build Cryptomator using Maven (instructions below). ## Features -- Totally transparent: Just work on the encrypted volume, as if it was an USB flash drive -- Works with Dropbox, OneDrive (Skydrive), Google Drive and any other cloud storage, that syncs with a local directory. -- In fact it works with any directory. You can use it to encrypt as many folders as you like + +- Works with Dropbox, Google Drive, OneDrive, and any other cloud storage service that synchronizes with a local directory +- Open Source means: No backdoors, control is better than trust +- Client-side: No accounts, no data shared with any online service +- Totally transparent: Just work on the virtual drive as if it were a USB flash drive - AES encryption with 256-bit key length -- Client-side. No accounts, no data shared with any online service -- Filenames get encrypted too -- No need to provide credentials for any 3rd party service -- Open Source means: No backdoors. Control is better than trust -- Use as many encrypted folders in your Dropbox as you want. Each having individual passwords -- No commercial interest, no government agency, no wasted taxpayers' money ;-) +- Filenames get encrypted, too +- Use as many vaults in your Dropbox as you want, each having individual passwords ### Privacy -- 256 bit keys (unlimited strength policy bundled with native binaries - 128-bit elsewhere) + +- 256-bit keys (unlimited strength policy bundled with native binaries) - Scrypt key derivation -- Cryptographically secure random numbers for salts, IVs and the master key of course -- Sensitive data is swiped from the heap asap +- Cryptographically secure random numbers for salts, IVs and the masterkey of course +- Sensitive data is wiped from the heap asap - Lightweight: [Complexity kills security](https://www.schneier.com/essays/archives/1999/11/a_plea_for_simplicit.html) ### Consistency + - HMAC over file contents to recognize changed ciphertext before decryption -- I/O operations are transactional and atomic, if the file systems support it -- Each file contains all information needed for decryption (except for the key of course). No common metadata means no [SPOF](http://en.wikipedia.org/wiki/Single_point_of_failure) +- I/O operations are transactional and atomic, if the filesystems support it +- Each file contains all information needed for decryption (except for the key of course), no common metadata means no [SPOF](http://en.wikipedia.org/wiki/Single_point_of_failure) + +### Security Architecture + +For more information on the security details visit [cryptomator.org](https://cryptomator.org/architecture/). ## Building -#### Dependencies +### Dependencies + * Java 8 + JCE unlimited strength policy files (needed for 256-bit keys) * Maven 3 -* Optional: OS-dependent build tools for native packaging (See [Windows](https://github.com/cryptomator/cryptomator-win), [OS X](https://github.com/cryptomator/cryptomator-osx), [Debian](https://github.com/cryptomator/cryptomator-deb)) +* Optional: OS-dependent build tools for native packaging (see [Windows](https://github.com/cryptomator/cryptomator-win), [OS X](https://github.com/cryptomator/cryptomator-osx), [Debian](https://github.com/cryptomator/cryptomator-deb)) + +### Run Maven + +``` +cd main +mvn clean install +``` + +## Contributing to Cryptomator + +Please read our [contribution guide](https://github.com/cryptomator/cryptomator/blob/master/CONTRIBUTING.md), if you would like to report a bug, ask a question or help us with coding. + +## Code of Conduct + +Help us keep Cryptomator open and inclusive. Please read and follow our [Code of Conduct](https://github.com/cryptomator/cryptomator/blob/master/CODE_OF_CONDUCT.md). ## License -Distributed under the MIT X Consortium license. See the LICENSE file for more info. +Distributed under the MIT X Consortium license. See the `LICENSES/MIT-X-Consortium-License.txt` file for more info. diff --git a/cryptomator.png b/cryptomator.png new file mode 100644 index 0000000000000000000000000000000000000000..77b5b8b352c8fcdc2212eda637bf81897d6f3c04 GIT binary patch literal 26873 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 Date: Wed, 6 Apr 2016 00:04:36 +0200 Subject: [PATCH 2/6] fixed support mail link in code of conduct [ci skip] --- CODE_OF_CONDUCT.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 2730e41e9..ad3196738 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -55,7 +55,7 @@ further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at [support@cryptomator.org][support]. All +reported by contacting the project team at support@cryptomator.org. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. @@ -72,4 +72,3 @@ available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org [version]: http://contributor-covenant.org/version/1/4/ -[support]: support@cryptomator.org From a1d0b6b1d34f5735035997070c45c4edd3e99ea6 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Sun, 10 Apr 2016 00:22:56 +0200 Subject: [PATCH 3/6] trying to build with openjdk8 on trusty --- .travis.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index aa680a30a..7684f6954 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,15 +1,17 @@ +sudo: required + +dist: trusty + language: java jdk: -- oraclejdk8 +- openjdk8 env: global: - secure: "Lgj042RD0X3rB8VZVZLWP1GetLhjd3PqI5JbJMlzgHJpDI6RkFIBLN9SWAGmkLPCehIp2zA5tu9+UVy0NNMxm9xz6SyjMCaxS28/fnYEXaNmwwDSF6O6gLUbdxyzoYIFPYOPmFxpzhebqnNIsxaM29oZpgRgUGqosCczQxiB+Ng=" #coveralls - secure: "IfYURwZaDWuBDvyn47n0k1Zod/IQw1FF+CS5nnV08Q+NfC3vGGJMwV8m59XnbfwnWGxwvCaAbk4qP6s6+ijgZNKkvgfFMo3rfTok5zt43bIqgaFOANYV+OC/1c59gYD6ZUxhW5iNgMgU3qdsRtJuwSmfkVv/jKyLGfAbS4kN8BA=" #coverity -before_install: "curl -L --cookie 'oraclelicense=accept-securebackup-cookie;' http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip -o /tmp/policy.zip && sudo unzip -j -o /tmp/policy.zip *.jar -d `jdk_switcher home oraclejdk8`/jre/lib/security && rm /tmp/policy.zip" - script: mvn -fmain/pom.xml clean test after_success: mvn -fmain/pom.xml clean test jacoco:report coveralls:report From 3e87b9c0c6cfe01666c0ccbaf2931aa12f91547f Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Sun, 10 Apr 2016 00:28:11 +0200 Subject: [PATCH 4/6] oracle jdk8 + jce on trusty --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7684f6954..f5949ec6b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,13 +5,15 @@ dist: trusty language: java jdk: -- openjdk8 +- oraclejdk8 env: global: - secure: "Lgj042RD0X3rB8VZVZLWP1GetLhjd3PqI5JbJMlzgHJpDI6RkFIBLN9SWAGmkLPCehIp2zA5tu9+UVy0NNMxm9xz6SyjMCaxS28/fnYEXaNmwwDSF6O6gLUbdxyzoYIFPYOPmFxpzhebqnNIsxaM29oZpgRgUGqosCczQxiB+Ng=" #coveralls - secure: "IfYURwZaDWuBDvyn47n0k1Zod/IQw1FF+CS5nnV08Q+NfC3vGGJMwV8m59XnbfwnWGxwvCaAbk4qP6s6+ijgZNKkvgfFMo3rfTok5zt43bIqgaFOANYV+OC/1c59gYD6ZUxhW5iNgMgU3qdsRtJuwSmfkVv/jKyLGfAbS4kN8BA=" #coverity +before_install: "curl -L --cookie 'oraclelicense=accept-securebackup-cookie;' http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip -o /tmp/policy.zip && sudo unzip -j -o /tmp/policy.zip *.jar -d `jdk_switcher home oraclejdk8`/jre/lib/security && rm /tmp/policy.zip" + script: mvn -fmain/pom.xml clean test after_success: mvn -fmain/pom.xml clean test jacoco:report coveralls:report From 5c0857e98e46e5cf513995c14d674f230b19cde9 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Sun, 10 Apr 2016 01:53:44 +0200 Subject: [PATCH 5/6] build ant-kit on tag/release [ci skip] --- .travis.yml | 6 +- main/ant-kit/.gitignore | 1 + main/ant-kit/assembly.xml | 25 +++++++ main/ant-kit/pom.xml | 83 +++++++++++++++++++++++ main/ant-kit/src/main/resources/build.xml | 39 +++++++++++ main/pom.xml | 3 +- 6 files changed, 154 insertions(+), 3 deletions(-) create mode 100644 main/ant-kit/.gitignore create mode 100644 main/ant-kit/assembly.xml create mode 100644 main/ant-kit/pom.xml create mode 100644 main/ant-kit/src/main/resources/build.xml diff --git a/.travis.yml b/.travis.yml index f5949ec6b..cfc3900c7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,7 +31,7 @@ notifications: on_success: change on_failure: always -before_deploy: mvn -fmain/pom.xml -Puber-jar clean package -DskipTests +before_deploy: mvn -fmain/pom.xml -Prelease clean package -DskipTests addons: coverity_scan: @@ -46,7 +46,9 @@ deploy: prerelease: false api_key: secure: "ZjE1j93v3qbPIe2YbmhS319aCbMdLQw0HuymmluTurxXsZtn9D4t2+eTr99vBVxGRuB5lzzGezPR5zjk5W7iHF7xhwrawXrFzr2rPJWzWFt0aM+Ry2njU1ROTGGXGTbv4anWeBlgMxLEInTAy/9ytOGNJlec83yc0THpOY2wxnk=" - file: main/uber-jar/target/Cryptomator-$TRAVIS_TAG.jar + file: + - "main/uber-jar/target/Cryptomator-$TRAVIS_TAG.jar" + - "main/ant-kit/target/Cryptomator-$TRAVIS_TAG.tar.gz" skip_cleanup: true on: repo: cryptomator/cryptomator diff --git a/main/ant-kit/.gitignore b/main/ant-kit/.gitignore new file mode 100644 index 000000000..b83d22266 --- /dev/null +++ b/main/ant-kit/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/main/ant-kit/assembly.xml b/main/ant-kit/assembly.xml new file mode 100644 index 000000000..a7cc9f35f --- /dev/null +++ b/main/ant-kit/assembly.xml @@ -0,0 +1,25 @@ + + + + tar.gz + + true + cryptomator_${project.version} + + + target/libs + libs + + + target/bundlefiles + bundlefiles + + + + + target/build.xml + false + + + \ No newline at end of file diff --git a/main/ant-kit/pom.xml b/main/ant-kit/pom.xml new file mode 100644 index 000000000..1556f4b99 --- /dev/null +++ b/main/ant-kit/pom.xml @@ -0,0 +1,83 @@ + + + + 4.0.0 + + org.cryptomator + main + 1.1.0-SNAPSHOT + + ant-kit + pom + Cryptomator Ant Build Kit + Builds a package that can be built with Ant locally + + + + org.cryptomator + ui + + + + + clean assembly:assembly + + + + + maven-dependency-plugin + + + copy-libs + prepare-package + + copy-dependencies + + + ${project.build.directory}/libs + + + + + + + + maven-resources-plugin + 2.7 + + + copy-resources + prepare-package + + copy-resources + + + ${project.build.directory} + \ + UTF-8 + + + src/main/resources + true + + + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + assembly.xml + cryptomator_${project.version} + + + + + \ No newline at end of file diff --git a/main/ant-kit/src/main/resources/build.xml b/main/ant-kit/src/main/resources/build.xml new file mode 100644 index 000000000..9bcd01ebe --- /dev/null +++ b/main/ant-kit/src/main/resources/build.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/main/pom.xml b/main/pom.xml index 24a7ab945..abcdf6abc 100644 --- a/main/pom.xml +++ b/main/pom.xml @@ -274,9 +274,10 @@ - uber-jar + release uber-jar + ant-kit From 73fde5d020af44e06367b81c81947a19462b5aa4 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Sun, 10 Apr 2016 01:54:44 +0200 Subject: [PATCH 6/6] null-safe status indicators --- .../org/cryptomator/ui/controls/DirectoryListCell.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/main/ui/src/main/java/org/cryptomator/ui/controls/DirectoryListCell.java b/main/ui/src/main/java/org/cryptomator/ui/controls/DirectoryListCell.java index 43bdc4359..1df6e7dd4 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controls/DirectoryListCell.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controls/DirectoryListCell.java @@ -56,13 +56,8 @@ public class DirectoryListCell extends DraggableListCell { pathText.setTextOverrun(OverrunStyle.ELLIPSIS); pathText.getStyleClass().add("detail-label"); - statusIndicator.fillProperty().bind(EasyBind.monadic(itemProperty()).flatMap(Vault::unlockedProperty).map(unlocked -> { - return unlocked ? GREEN_FILL : RED_FILL; - })); - - statusIndicator.strokeProperty().bind(EasyBind.monadic(itemProperty()).flatMap(Vault::unlockedProperty).map(unlocked -> { - return unlocked ? GREEN_STROKE : RED_STROKE; - })); + statusIndicator.fillProperty().bind(EasyBind.monadic(itemProperty()).flatMap(Vault::unlockedProperty).filter(Boolean.TRUE::equals).map(unlocked -> GREEN_FILL).orElse(RED_FILL)); + statusIndicator.strokeProperty().bind(EasyBind.monadic(itemProperty()).flatMap(Vault::unlockedProperty).filter(Boolean.TRUE::equals).map(unlocked -> GREEN_STROKE).orElse(RED_STROKE)); tooltipProperty().bind(EasyBind.monadic(itemProperty()).flatMap(Vault::path).map(p -> new Tooltip(p.toString()))); contextMenuProperty().bind(EasyBind.monadic(itemProperty()).flatMap(Vault::unlockedProperty).map(unlocked -> {