Giter VIP home page Giter VIP logo

buttercup / buttercup-mobile Goto Github PK

View Code? Open in Web Editor NEW
392.0 12.0 69.0 57.19 MB

:iphone: React-Native mobile application for Buttercup

Home Page: https://buttercup.pw

License: GNU General Public License v3.0

JavaScript 0.66% Java 20.05% Objective-C 8.93% Ruby 0.66% TypeScript 69.44% Objective-C++ 0.25%
buttercup react-native password-manager password-store password-vault mobile-app mobile hacktoberfest

buttercup-mobile's Introduction

Buttercup Mobile

Mobile vault application for Buttercup Password Manager

Buttercup Tests status Backers on Open Collective Sponsors on Open Collective Chat securely on Keybase

Get it from iTunes Get it on Google Play

Vault screen Entry screen

About

This repository holds the source for the Buttercup mobile application, which is available for the following platforms:

  • iOS 13+
  • Android 13+

Currently only phones are supported, not tablets.

The mobile application allows for full integration with Buttercup archives stored on a variety of platforms. Like the other applications, this mobile application makes use of AES 256bit encryption with over 200k PBKDF2 password derivation iterations.

The Buttercup for Mobile application boasts the following features:

  • On-device encryption and decryption
  • Auto-hide screen when app is sent to background (like banking apps)
  • Auto-lock vaults after a certain period of inactivity
  • Add/Edit/Delete entries
  • Unlock vaults even when offline (read-only)
  • Autofilling of login forms in Safari (iOS only)
  • Password generator
  • Biometric access

You can read about the changes and releases of the application in the changelog.

Introduction

This project uses React Native to build native iOS and Android applications from a React/JavaScript codebase. The majority of the codebase is JavaScript which utilises the following platforms:

  • ReactJS
  • Redux
  • React Native Router Flux

As Buttercup makes use of strong cryptography, certain encryption/decryption tasks are performed using pure native code (Objective-C/Java). Only the bare minimum required for increased performance is handled on the native side, with the rest being solely JavaScript.

Installation

Ensure that you're using NodeJS 14 or newer on OSX. Android projects can be built and tested on Linux and Windows, but these platforms are not officially supported.

Before getting started, ensure you follow the official React Native Getting Started guide for your desired platform (iOS/Android). It is also recommended to have the react-native-cli installed:

npm install -g react-native-cli

Run the following to initialise the project:

npm install

Once all dependencies are installed and your target development environments are setup (Xcode for iOS and Android Studio for Android), it should be possible to begin development with virtual devices.

Important note about Node.js support: Development for this project should be performed on Node version 8. Although it may work on versions 6 and newer, we will not be supporting issues raised for these versions. Similarly, we do not currently support NodeJS version 9.

iOS development

Providing Xcode is setup correctly, running the following will launch the application in an iPhone emulator:

npm run ios

Android development

Ensure that Android Studio is setup correctly and that an AVD has been created. The virtual device must be on API level 23 or greater running Android 6.0 or newer. You must have the AVD started before continuing with no other devices connected. To ensure you only have one device running, execute the following on the command-line:

adb devices

To run the application in the virtual device, run the following:

npm run android

Running on an Android device

To run on an actual device, first terminate any AVDs that are running. Connect the phone over USB and run adb devices to ensure that it shows up. You can then run npm run start:android to launch the application on the device.

The same software version restrictions apply to real devices.

Building an APK

To build a signed APK:

  1. Close all other development resources for the project.
  2. Run npm run build:android to first build the project.
  3. In Android Studio, choose Build > Generate Signed APK.
  4. Build a release APK by following the instructions in the GUI.

Publishing error: duplicate resources

If you encounter a publishing error when generating a signed APK, follow these instructions.

Contributing

We love contributions - anything from new features and bug fixes to suggestions and questions. Please follow our contribution guide.

Development

Please keep in-line with the code style of each file, regardless of what tests are run (linting etc.). When creating new files their format is expected to closely resemble that of other existing source files.

Contributors

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

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]

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

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.

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.

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.

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

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.

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.

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).

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.

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

Login error breaks app

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

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).

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.

Add group

Add the feature for creating groups.

Move entry

Add support for moving entries between groups.

Rename group

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

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.

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:// ...

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.

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.

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.

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.

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

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

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.