Giter VIP home page Giter VIP logo

buttercup / buttercup-mobile Goto Github PK

View Code? Open in Web Editor NEW
389.0 389.0 67.0 57.18 MB

:iphone: React-Native mobile application for Buttercup

Home Page: https://buttercup.pw

License: GNU General Public License v3.0

JavaScript 0.69% Java 20.03% Objective-C 8.92% Ruby 0.67% TypeScript 69.44% Objective-C++ 0.25%
buttercup hacktoberfest mobile mobile-app password-manager password-store password-vault react-native

buttercup-mobile's Introduction

Buttercup Desktop

Buttercup for Desktop - Mac, Linux and Windows

Buttercup Latest version Chat securely on Keybase

Buttercup Desktop screenshot ²

About

Buttercup is a free, open-source and cross-platform password manager, built on NodeJS with Typescript. It uses strong industry-standard encryption to protect your passwords and credentials (among other data you store in Buttercup vaults) at rest, within vault files (.bcup). Vaults can be loaded from and saved to a number of sources, such as the local filesystem, Dropbox, Google Drive or any WebDAV-enabled service (like ownCloud or Nextcloud ¹).

Why you need a password manager

Password management is a crucial tool when you have any online presence. It's vital that all of your accounts online use strong and unique passwords so that they're much more difficult to break in to. Even if one of your accounts are breached, having unique passwords means that the likelihood of the attacker gaining further access to your accounts portfolio is greatly reduced.

Without a password manager, such as Buttercup, it would be very tedious to manage different passwords for each service. If you remember your passwords it's a good sign that they're not strong enough. Ideally you should memorise a primary password for your vault, and not know any of the account-specific passwords off the top of your head.

Precautions

Buttercup securely encrypts your data in protected files, but this security is only as strong as the weakest component - and this is very often the primary password used to lock and unlock your vault. Follow these basic guidelines to ensure that your vault is safe even if exposed:

  • Choose a unique password that is not used elsewhere
  • Use a highly-varied set of different characters - such as alpha-numeric, symbols and spaces
  • Use a long password - the longer the better
  • Don't include words or names in the password
  • Never share your password with anyone

It is very important to note that no one associated with Buttercup will ever request your personal vault or its primary password. Do not share it or any of its related details with anyone. Developers or contributors working with Buttercup may request example vaults created via your system to try and reproduce issues, but please ensure to never use your real password or store actual credentails within such vaults.

Versions

The current stable version is 2. We recommend upgrading if you're still on v1, as it is no longer being actively maintained. You can still browse the v1 source and documentation here.

Buttercup is built on Node 20 LTS - no other platform is officially supported.

Operating Systems

Buttercup Desktop is officially supported on:

  • Most linux distributions (x64), such as Ubuntu
  • MacOS (x64, Apple Silicon¹)
  • Windows 10 / 11 (x64)

¹ No builds yet

Arch Linux

Buttercup is also available for Arch via the AUR. This release channel is maintained by our community.

Some Arch users have reported the occasional segfault - if you experience this please try this solution before creating an issue.

32bit builds (x86)

Buttercup no longer provides 32bit builds, due to the complexity of supporting them in the build pipeline.

Portability

Buttercup provides a portable Windows version. Look for the release with the name Buttercup-win-x64-2.0.0-portable.exe where 2.0.0 is the version and x64 is the architecture.

Although not explicitly portable, both the Mac zip and Linux AppImage formats are more or less standalone. They still write to the standard config/log destinations, however.

To make the most of the portable version, some enviroment variables are required:

Enviroment Variables Description
BUTTERCUP_HOME_DIR If provided buttercup will use this path for saving configrations , user settings or even temprorary files
BUTTERCUP_CONFIG_DIR Stores user settings, not allways needed but can be used to change config location or will default to BUTTERCUP_HOME_DIR Optional: Only activates if BUTTERCUP_HOME_DIR is provided
BUTTERCUP_TEMP_DIR Same as BUTTERCUP_CONFIG_DIR but stores temprory files Optional: Only activates if BUTTERCUP_HOME_DIR is provided

Sample ButtercupLauncher.bat for Windows portable executable

This example stores user settings and cache on the portable folder, but stores temprory files on the host PC.

@ECHO OFF
if not exist "%~dp0Buttercup" mkdir "%~dp0Buttercup"
set "BUTTERCUP_HOME_DIR=%~dp0Buttercup"
set "BUTTERCUP_TEMP_DIR=%temp%"
start %~dp0Buttercup.exe %*

Configuration

Configuration files are stored in OS-specific locations.

Command-Line arguments

The following arguments can be provided to Buttercup, but are all optional.

Argument Description
--autostart Flag passed to Buttercup when launched automatically by the OS.
--hidden Disables the automatic opening of the main window upon launch.
--no-update Disables automatic update checking. Not recommended: Use at your own risk.

App config

Application configuration.

  • Linux: $XDG_CONFIG_HOME/Buttercup/desktop.config.json
  • Mac: ~/Library/Preferences/Buttercup/desktop.config.json
  • Windows: $APPDATA/Buttercup/Config/desktop.config.json

Vault storage

Storage of connected vaults (not actual vault contents).

  • Linux: $XDG_DATA_HOME/Buttercup/vaults.json
  • Mac: ~/Library/Application\ Support/Buttercup/vaults.json
  • Windows: $LOCALAPPDATA/Buttercup/Data/vaults.json

Offline vault cache

Stored copies of vaults for offline use.

  • Linux: $(node -e "console.log(os.tmpdir())")/$(whoami)/Buttercup/vaults-offline.cache.json
  • Mac: $(node -e "console.log(os.tmpdir())")/Buttercup/vaults-offline.cache.json
  • Windows: $(node -e "console.log(os.tmpdir())")/Buttercup/vaults-offline.cache.json

Logs

Logs are written for all app sessions.

  • Linux: ~/.local/state/Buttercup-nodejs or $XDG_STATE_HOME/Buttercup-nodejs
  • Mac: ~/Library/Logs/Buttercup-nodejs
  • Windows: %LOCALAPPDATA%\Buttercup-nodejs\Log

Note that logs for portable Windows applications will be written to the same directory that the executable resides in.

Published Applications

You can view the current releases on the Buttercup Desktop releases page. Under each release are some assets - the various binaries and installers for each platform Buttercup supports. When installing or downloading, make sure to pick the right operating system and architecture for your machine.

Note that at this time, Buttercup only supports x64 (64 bit) machines.

Linux

We provide an AppImage build for Linux, because it is the most desirable format for us to release. AppImages support auto-updating, a crucial feature (we feel) for a security application. The other build types do not.

Important: Buttercup uses Electron to build its desktop application, which relies on AppImageLauncher for correct integration of AppImages into the host OS. Features like Google Drive authentication and correct .desktop icon use is only performed when integrating via AppImageLauncher. We highly recommend that you install it.

We won't be supporting formats like Snapcraft, deb or rpm images as they do not align with our requirements. Issues requesting these formats will be closed immediately. Discussion on topics like this should be started on other social channels.

Development

To begin developing features or bug-fixes for Buttercup Desktop, make sure that you first have Node v16 or greater installed with NPM v7 or greater.

Once cloned, make sure to install all dependencies: npm install. After that, open 2 terminals and run npm run start:build on one, and then npm run start:main in the other.

Contributing

There are a number of ways you can contribute to Buttercup!

Features & Bug fixes

We welcome pull-requests and issues that serve to better Buttercup as a platform. Please remain respecful (this is free & open source after all) with your ideas and observations, and always consider opening an issue before starting on a substantial pull request.

Translations

Buttercup relies on the community for translating its interfaces into languages besides English. We use British English (en_GB) as the base language, and translate into all others that our contributors are kind enough to provide.

To add support for a language, make sure to add the translations for our vault UI first. After that, you can follow these instructions to add another language to the desktop application:

  • Copy the source/shared/i18n/translations/en.json file to the language code you're providing (eg. fi.json for Finnish).
  • Edit the source/shared/i18n/translations/index.ts file and:
    • Import the new JSON file: import fi from "./fi.json";.
    • Export the imported constant inside the default export already in that file.

Contributions

This project exists thanks to all the people who contribute. [Contribute].

We'd also like to thank:

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

Notes and Caveats

  • ¹ External services like Nextcloud and ownCloud must be configured correctly to support access via the web (using WebDAV). CORS must permit access from any source.
  • ² Buttercup (including MadDev Oy) is not affiliated with any of the companies represented in screenshots or preview images.

buttercup-mobile's People

Contributors

casasfernando avatar chkichkiparmparm avatar davquar avatar fredrikmeyer avatar imkwx avatar jiprastyo avatar jschimmoeller avatar max-zu avatar pedrolucasp avatar perry-mitchell avatar ph1p avatar sallar avatar se1exin avatar stephengroat avatar svenvdvoort avatar timgates42 avatar vladyslavcudev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

buttercup-mobile's Issues

Offline (local) archive support

Allow for archives to run offline if no network connection is available.

When saving and offline, write to disk. When a connection is detected, try saving to it (merge then save).

When saving offline, alert the user to the situation.

Allow for unlocking when offline. Always store a copy offline.

This may need to be done in core.

Local archives on mobile.

Rename group

Add the ability to rename groups. Disable this for Trash.

Cannot access archive from Dropbox

Everytime I try to open my archive from Dropbox I get the message „Failed adding archive. Authentication failed - possible tampering“. The message appears only for a second or so after that it shows „Adding archive“ but that takes forever. I tried reinstalling the app, but I still got the same error.
Yesterday it worked on my linux computer and in the app.
I‘m running Version 1.1.1 on an iPhone 8 Plus with iOS 11.3.

Add group

Add the feature for creating groups.

Unable to install dependencies

Hi. I cloned the repo and I am trying to build the project but the npm goes into "loadIdealTree" step and is unable to install the dependencies. If I keep it open I get the following error:

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

I am on Windows and would like to know if there is a specific npm version I should use to install the dependencies? I've also tried yarn but still unable to install the dependencies.

Would really love to look into the code and contribute but I need to get the project working first.

Android 8.1: 411 connection failed, Owncloud

When I try to connect buttercup with my owncloud I get the message: "Error: Connection failed, Invalid response: 411 undefined".

But the connection works using the desktop clients.

React Native: security and privacy issues?

Hi,

I'm starting to explore your mobile app, I discovered it is based on React Native. I understand why, as you are web developers, investing in this technology helps a lot to accelerate the process.
But on another hand, introducing a Facebook library in your security app is a main concern for me: do you trust the react native library? Is there any log sent to Facebook you are not aware of? Is there a way to modify the app local js file to run something the app is not aimed to do?
I'm not confident with a security app running a 3rd party lib to interpret a js file.

I would prefer a signed native binary app (even if jailbreak can happen etc.). In this case you master all unencrypted buffers life time, position etc. and you are more confident it is not interpreting something wrong and behaving as you coded it.

Any thoughts ?
Thanks !
Romain

Add welcome screen

Users may not know what to do when first opening the app. Some kind of welcome message + hints should be presented to new users.

Move entry

Add support for moving entries between groups.

Unlock via fingerprint

It would be very useful if users can unlock with their fingerprint (touch ID). Other Apps like keepass on Android can do this, too.

Pin to unlock

I'm sure related to some of the ground work for #22
The way other password managers have handled it, whenever you reboot your phone you'll type in your full master password to unlock the archive initially. Then you'll just unlock it with a pin for subsequent launches until the next fresh boot of the device.
This should help cover devices without fingerprint readers, and also a good feature to have since the added security of a pin over fingerprints has been a hot topic lately (privacy).

Login error breaks app

When logging in fails, the unlocking modal never closes and sometimes hides the error message.

Search function

On the desktop client, I mostly use the search function to find credentials. I think a search function would improve the mobile app as well.

Form prefill

Hi,
I've installed the latest app from the appStore (1.1.1), but I can't get my password filled from anywhere. My device (6s, iOS 11.2).
If I open Safari on iOS, I don't see any entry for my credentials.
When I go to the app, I see my archive (from DropBox), it's opened. When I go to a credential, if I tap on the "world" icon, I've got a pop up asking if I want to open this website, I tap YES. But nothing happens.

Is there a bug ? How am I supposed to use your app?
How can I help you? (I'm a freelance developer on iOS and Android).

Touch-delay on large archive

My personal archive is quite large and when initially unlocking, it's impossible to scroll the list of groups for several seconds. Taps activate the item underneath after the delay.

EDIT: Potentially consider FlatList as a replacement for performance reasons. This will require an RN upgrade.

Intermittent crashes when using back arrow

Sometimes app force closes upon backing out of a password. Usually when leaving app and coming back to it. So, view item, copy password, go to another app to use password, come back to buttercup app, tap back arrow to get back to list of password items, crash. Android 7.1.2. Nextcloud hosted archive. I wonder if this is just an issue with the password archive actually being locked whenever the app loses focus or something. ADB Logcat taken while issue happens is attached:
issue.txt

Password generator

A password generation utility when editing entries. It should be available for both new entries and editing existing ones. It should be a separate page.

Handle hardware back arrow

The hardware (or general Android) back arrow should be handled in-app. It should:

  • Dispatch a route-back action when touched on any page 1 level deep or more
  • Close the app (if possible?) if at the root page

Unable to open archive ("possible tampering" error)

On occasion, archives are saved in a format where they cannot be opened on mobile (but they can still be opened on desktop). This may be due to some kind of formatting issue in the archive (or with the HMAC calculation, which is what produces this error message usually).

If you've been able to reproduce this error with a test/fake archive, we'd greatly appreciate you sharing it here so we can debug with it.

The error is somewhat rare, and the message only stays on screen for a couple of seconds before it's hidden.

Current status

The issue is reproducible with an archive shared below. The cause is not yet known. The sample archive does work on other Buttercup applications.

Testing

To test, it is recommended to insert the following here:

return {
                // broken:
                text: () => Promise.resolve("b~>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$8729887ac55b8c4b84840facc135eb9a$2ad3e632790f$d5ead2b33a246074978e34fa500fbf59df2ddb8328e24e6c45c9bc3fccd93d1c$246605"),
                // working:
                // text: () => Promise.resolve("b~>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$5ce6957b6799720a534a30a64ccd0488$6a2530495257$19058515354623cd80560fbb0f6e44f28b17489b3f8ab790d64767bee40838db$205594")
            };

(Broken is the failing archive, and Working is obviously the working one. Both are essentially the same archive with the same master password: test).

Bounty

There is a bounty on this issue. For the issue to be classed as addressed, the following criteria must be met:

  • The "broken" archive in question must be openable on the mobile application
  • The fix must not create incompatibilities with other apps in any way

OR

  • A solution is provided that would allow all crypto in Buttercup to be updated so that it works together
  • The solution is using the current format for the most part (AES-CBC 256bit)

The solution must satisfy our implicit quality requirements. The solution could be based off this branch.

Bountysource

URLs not opening

From @RomainQuidet:

I added 3 entries in my archive using Firefox and sync with Dropbox. The firefox plugin is able to log me in for each one. None of the entries are opening Safari on my iOS device when I tap on the top right icon. When I tap on URL cell or LoginURL cell, it does copy the url and paste works (but it does not help to login).

Each URL recorded starts as : www.mysecrethost.com/login.php and each LoginURL starts as http://www.mysecrethost.com/login.php or https:// ...

TabBar on home screen

Use a tab bar on the hope screen instead of having the settings icon in the top-left.

First item is the archives list, second is the settings, third is about.

For now, hide the settings.

Unable to access Dropbox archive

Since upgrading to Dropbox I’ve been unable to open my archive that is stored in Dropbox. The first time I attempt to open it it kicks me back to the login screen immediately. When I enter my password again an error message pops up on the screen but disappears in a fraction of a second. Then the application just sits there saying Unlocking but it never unlocks. This is happening on both my iPhone and iPad.

Touch to unlock

Add a way, for iOS and Android, to use touch ID to lock and unlock archives. Archives can be unlocked and then added to a touch-unlocking group. The mechanism for initiating the unlock procedure has not been decided. The master passwords for each grouped archive should be encrypted and stored in react-native storage using some kind of ID generated securely by the touch ID authentication process.

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.