Coder Social home page Coder Social logo

cloaklet / cloak Goto Github PK

View Code? Open in Web Editor NEW
7.0 3.0 0.0 1.36 MB

Yet another GUI app for gocryptfs.

License: GNU General Public License v3.0

Go 69.62% JavaScript 0.14% HTML 0.14% Objective-C 0.16% Vue 24.02% C 0.04% CSS 1.01% TypeScript 4.89%
go golang gocryptfs vue vuejs gui

cloak's Introduction

Project logo

Cloak - File encryption made easy

A simple GUI for gocryptfs.

Build Status Go Report Card Project License GitHub release

Cloak is a simple GUI for gocryptfs built with Golang and web tech. It works on macOS and Linux.

Features:

  • A simple UI for managing your gocryptfs vaults, just like Cryptomator.
  • Password changing / password resetting (with master key).
  • Warn you about password strength.
  • Fast to launch or quit.
  • Internationalization. Current supported languages:
    • English
    • Simplified Chinese

UI / interaction mimicked from Cryptomator.

Usage

  • Download prebuilt binaries from releases page.
  • For Linux users, set executable permission for the AppImage file (alternatively you can use chmod +x Cloak*.AppImage), then just run it.
  • For macOS users, after decompressing the ZIP archive, you might need to run xattr -d -r com.apple.quarantine Cloak.app in Terminal, otherwise GateKeeper would refuse to run the app.
  • You can open the UI or quit the app via Open menu item of the tray icon (or menubar icon).

Where is my data stored?

  • Vault list is stored at:
  • Configuration file is stored at:
  • Log files are stored at:
    • $XDG_DATA_HOME/Cloak/logs on Linux.
    • ~/Library/Logs/Cloak on macOS.

Before 0.8.0, Cloak store all its data and log files in ~/.cloaklet.cloak directory on Linux. By running a new version of Cloak, they get moved to the new directories.

Cloak automatically clears log file content each time it starts up. Sensitive information like vault passwords or master keys are never logged.

Why

I wrote a similar GUI called Cloaklet using QML + Golang. However, I don't enjoy developing in QML at all, and quickly ran into some issues which I can't resolve. After that I went back to use Cryptomator, but its UI feels slow and somehow inconsistent. This time I got an idea from one of my early projects to use web browser as UI renderer, thus this new project.

To build

For macOS

Notice: you have to use a running instance of macOS, either a VM or a real Apple computer.

  • Install Xcode related stuff with xcode-select --install.
  • Install frontend dependencies: cd frontend && npm install.
  • Run go run build.go build in project root, and it should create the Cloak.app bundle.
  • Double click to start the app.

For Linux

  • Install required libraries: sudo apt install libappindicator3-dev gcc libgtk-3-dev libxapp-dev.
  • Install frontend dependencies: cd frontend && npm install.
  • Run go run build.go build and it should produce an AppImage binary.

The AppImage binary includes all required libraries and tools, so you can run it right away.

To develop

Frontend

The frontend (UI) project resides in frontend directory. It's a standard Vue project managed by vue-cli.

  • Install dependencies: npm install inside frontend directory.
  • Simply run npm run serve inside frontend directory.
  • You can also run the serve task from vue-cli UI, run vue ui to get started.

Backend

You should build the frontend project first so the backend can find assets for the UI.

  • Inside the frontend directory, run npm run build.
  • Run go generate ./... to generate necessary source codes.
  • To run the app, simply invoke go run . in the project root.

Notice

  • gocryptfs requires FUSE to function. For macOS please install OSXFUSE (now macFUSE).
  • Windows is not supported, because gocryptfs does not work on Windows.
  • Avoid committing statik module because it contains large blob of files produced by the frontend project.
  • If you are building the app yourself, missing libxapp-dev would not result in error; But when running the built AppImage on Linux Mint, menu item will lose highlighting.
  • You should install xdg-open on Linux, otherwise drive revealing will not work.

Credits

License

GPL v3, see LICENSE file.

cloak's People

Contributors

dependabot[bot] avatar jokerqyou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

cloak's Issues

AppImage doesn't quite run in Arch Linux

I was searching for a gocryptfs's UI and I found this one. I decided to give it a try, but looks like the AppImage doesn't quite run in Arch Linux:

Oct 25 23:36:04 uplink systemd[541]: tmp-.mount_Cloak\x2dsZdf7s.mount: Succeeded.
Oct 25 23:36:04 uplink systemd[1]: tmp-.mount_Cloak\x2dsZdf7s.mount: Succeeded.
Oct 25 23:36:18 uplink gnome-shell[1080]: libinput error: event20 - Logitech M525: client bug: event processing lagging behind by 23ms, your system is too slow
Oct 25 23:36:18 uplink com.bitwarden.desktop.desktop[2648]: Xlib:  extension "MIT-SCREEN-SAVER" missing on display ":99.0".
Oct 25 23:36:38 uplink systemd[541]: tmp-.mount_Cloak\x2dek6Zxv.mount: Succeeded.
Oct 25 23:36:38 uplink systemd[1]: tmp-.mount_Cloak\x2dek6Zxv.mount: Succeeded.
Oct 25 23:36:40 uplink systemd[541]: app-gnome-gnome\x2dsystem\x2dmonitor-845434.scope: Succeeded.

As you can see, I'm able to start it, but that's about it. I don't see anything (UI) running.

I have gocryptfs installed as a package on its own.

Some new ideas

Just a quick note to myself on some interesting ideas for this app:

  • Maybe we could switch to DBus for the "reveal mountpoint" feature, thus eliminating the requirement of xdg-open tool (as seen in #1, not all Linux Desktop distros have it pre-installed).
  • Maybe we could switch to Elm for a more reactive and simpler UI. Or maybe we could just use websocket to keep the UI state and app state in sync.
  • If I remembered it correctly, gocryptfs now supports hardware FIDO tokens. Can we wrap it into a user-friendly UI?
  • On macOS we could probably link to the OS' webview library and have our UI rendered in a standalone window. It that feasible on Linux?
  • We could also just ditch this B-S architecture. The last time I tried, wails failed me from the beginning. Is there any new progress on other libraries / frameworks that make this possible?

Follow the Freedesktop XDG base directory standard

On Linux, Cloak currently creates a .cloaklet.cloak/ folder in the user's home directory. Most applications/programs don't create a folder in the user's home directory any more, but instead use the Freedesktop XDG standard โ€“ found here: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html.

Using this standard:

  • $XDG_CACHE_HOME says "temporal/non-essential" files go to $HOME/.cache/
  • $XDG_CONFIG_HOME says "configuration files" go to $HOME/.config/
  • $XDG_DATA_HOME says "data files" go to $HOME/.local/share/

This is just a request to consider using this standard. It makes a lot of sense; it is easy for the user to understand, makes it easier to backup / locate / restore / manage / clear user's data, and creates less clutter in the user's home directory.

Thanks in advance...and thanks so much for your hard work on this โ€“ it's amazing!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.