diff --git a/.travis.yml b/.travis.yml index aa680a30a..cfc3900c7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,7 @@ +sudo: required + +dist: trusty + language: java jdk: @@ -8,7 +12,7 @@ env: - 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" +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 @@ -27,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: @@ -42,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/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..ad3196738 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# 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. 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/ 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 000000000..77b5b8b35 Binary files /dev/null and b/cryptomator.png differ 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 f0a8d816d..85d76de7e 100644 --- a/main/pom.xml +++ b/main/pom.xml @@ -282,9 +282,10 @@ - uber-jar + release uber-jar + ant-kit 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 -> {