Giter VIP home page Giter VIP logo

baruchiro / israeli-bank-scrapers-desktop Goto Github PK

View Code? Open in Web Editor NEW
40.0 7.0 7.0 7.53 MB

Secure desktop app for retriving your transactions from all israeli banks and credit cards

Home Page: https://baruchiro.github.io/israeli-bank-scrapers-desktop/

License: MIT License

JavaScript 52.02% HTML 0.61% Vue 46.70% CSS 0.66%
israeli-bank-scrapers credit-cards electron vue transactions finance scraper banking-applications

israeli-bank-scrapers-desktop's Introduction




israeli-bank-scrapers-desktop

Secure desktop app for retriving your bank transactions. Works for all israeli banks and credit cards.

Based on israeli-bank-scrapers project.

Build/Release Language grade: JavaScript Dependabot Status

Security Principles

This app has two main principles:

  1. Local running: This app accesses the bank's website exactly the same way you do.
    Therefore, you don't have to rely on a third party to keep your passwords.

  2. Open Source: Don't believe me the information wasn't sent out? The source code is right here. Read it! (or ask a friend to). See for yourself that there is no malicious code here.

Welcome to the beta

The project is currently in beta, which means we focus on two main goals:

  1. Minimal Valuable Flow:
    Bringing the app to a level where the user can perform the minimum flow - importing and exporting data in a convenient and clear way, without any critical bugs.

  2. Open Source Project:
    Bringing the project to a stage where it is easy for new contributors to understand and contribute to. This includes good documentation, testing, etc.

When you look at the project, please try to think about both of these goals.

Beta milestone

Contributing

The project is an Electron app, with Vue in the front-end, and mainly uses israeli-bank-scrapers project.

I need your help

This is the first time I'm writing code in NodeJS, and of course it's the first time I'm using Electron and Vue.

I wrote this version "quick and dirty", because the goal was to get to the solution up and running as quickly as possible. If there is interest, I can continue to develop the app as I work on other projects as well, and of course I would love to get help.

You can help with the following:

Please note that we are currently in beta, and issues under Beta Milestone are prioritized.

Prerequisites

Linux

Currently, this project depends on libsecret, so you may need to install it before running yarn.

Depending on your distribution, you will need to run the following command:

  • Debian/Ubuntu: sudo apt-get install libsecret-1-dev
  • Red Hat-based: sudo yum install libsecret-devel
  • Arch Linux: sudo pacman -S libsecret

Then you can run the commands below:

Build Setup

# install dependencies
yarn

# serve with hot reload at localhost:9080
yarn serve

# build electron application for production
yarn build

# run unit & end-to-end tests
yarn test

# lint all JS/Vue component files in `src/`
yarn lint

Project Structure

+---.github/workflows       // Github Actions files
+---build/icons             // Icons for Electron-Builder (used in vue.config.js)
+---dist/electron           // Webpack temporary output
|
+---dist_electron           // Installer and info files
|   +---bundled             // Bundle
|   +---win-unpacked        // Unpacked- what you will get after you run the installer
|
+---docs                    // Resources for documentation porpuse
+---public
+---scripts                 // Scripts for Git hooks and other needs
|
+---src
|   +---assets
|   +---components
|   +---modules
|   +---plugins             // Vue plugins
|   +---router              // Vue-Router (for future use)
|   \---store               // Vuex
|       +---migrations
|       +---modules
|
\---test
|   +---e2e
|   +---unit
|
|   vue.config.js           // vue-cli-plugin-electron-builder (includes electron-builder config)

israeli-bank-scrapers-desktop's People

Contributors

arielgordon123 avatar baruchiro avatar dependabot-preview[bot] avatar dependabot[bot] avatar snyk-bot avatar zvirosenfeld 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

israeli-bank-scrapers-desktop's Issues

UI/UX in Add Importer flow

When we adding an Importer (Scraper), we need to meet the following requirements:

  • When the user clicks on Add, the Importer should appear on the screen. Currently, the Importer added under the "Add Scraper" sub-menu, so when the user clicks "Add", they see no effect (except that the fields are being empty).
  • Consider whether to collapse the current "Add Scraper", or the whole sub-menu, after adding an Importer.
  • Paging in the main table.

Cannot add new scrapper

[Vue warn]: Property or method "decryptedImporter" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.

found in

---> <Importer> at src/renderer/components/MainPage/Importers/Importer.vue
       <ElCollapse> at packages/collapse/src/collapse.vue
         <Importers> at src/renderer/components/MainPage/Importers.vue
           <ElAside> at packages/aside/src/main.vue
             <ElContainer> at packages/container/src/main.vue
               <MainPage> at src/renderer/components/MainPage.vue
                 <IsraeliBankScrapersDesktop> at src/renderer/App.vue
                   <Root>
warn @ webpack-internal:///./node_modules/vue/dist/vue.esm.js:629

Electron-builder failed with Github-token

electron-builder throws this error:

Error: GitHub Personal Access Token ("***") contains invalid characters, please check env "GH_TOKEN"

There are workarounds here, something with Regex replaces.

The real solution is to upgrade electron-builder to ^22, but it requires to upgrade the vue-cli-plugin-electron-builder, as described here.

If we upgrading to the v2.0.0-beta.0, it can solve also the #68 , because it allows us to upgrade the electron version and inject the spectron.

Is keytar safe enough?

It seems that every node process can retrieve passwords stored by keytar by our process.

This is a limitation that is described in the keytar bug, and it seems to be a security weakness that software generally does not want to take responsibility for (Chrome, for example).

I think we should keep all passwords secure with a user password.
For example, use the user password as an encryption key.

Use israeli-bank-scrapers-core in renderer process

After PR #66 will merge, we will have a strange flow to use the SCRAPERS from the israeli-bank-scrapers-core in the renderer process.

From the comment:

I don't understand why the SCRAPERS from israeli-bank-scrapers-core needs to imported in scrapers.service, then imported by background.js, who is expose them through the ipc, and then this Importers.vue call them to add them to the store, then uses them by state and getters.

@Arielgordon123 says that there is a conflict with ws.

We need to solve this or open a bug in israeli-bank-scrapers

One button to import all

Add one button to import with all registered importers.

We need to think about how to implement this. Don't start to work without discussing it.

Auto update

Implement an Auto Update mechanism to notify the user of a new version and allow it to update directly.

Do not update the app without user permission!

Replace the vuex-electron plugin

The vuex-electron package is not under maintaining anymore.

In this app, we need more attention about persisting the vuex state, because we have to keep the sensitive data (passwords, keys) out of the persistent file (unless we keeping the whole persistent safe).

So this issue requires looking for maintained, customizable and secured Vuex plugin, or developing our own plugin.

Add option to clear data

We need a button to clear the store data.

When the user will click on this button:

  • Popup- are you sure?
  • Show how many transactions will delete
  • Which more data will should delete?
  • Delete the data.

Coding to interfaces

I don't know enough how to design a node-electron-Vue app to work with interfaces. The next subjects should be redesigned to be replaceable:

  • Importers- How can I enable the option to easily add more importers to the App?
  • App DB- now I use nedb in the jsonFileDB.js file. This is an implementation of a future interface for saving the App state.

Validate importer before adding

I think the way to implement this is to add a button called "Validate", for example, to execute the Importer action before we adding the Importer, and do nothing with the results, to validate we inserting the right values.

Wrong year

When I click "import" with "show browser" on I see it scrapes data from 10/01/19 - 10/01/2020.
Once the import is done I see all the data from the sheet are in the range 31/12/20 - 02/01/2020.
of course the dates are wrong since today is 10/01/2020.
I looked at the content of the cells and reached the conclusion it shows all the 2019 dates as 2020.

Testing

  • Should I move to another test framework?
  • Create first real test that validate a component with faked Vuex and faked child components.

Cannot read property '0' of null

When I try to Export to Google Spreadsheet I get this error (it's shown when I hover over the small red X to the right of "Export to Google Spreadsheet" ):
Cannot read property '0' of null

and the log shows:

┏ Electron -------------------

14:34:03.076 › TypeError {}

┗ ----------------------------

Emphasize the difference between us and the scrapers library

At the beginning of the README, we should clearly state the division of responsibilities between us and the Scrapers library.

As long as we don't do this, we will have to answer a lot of questions related to the Scrapers library (and even after we will do it ;-))

Use yarn instead on npm in README

As @esakal said, We use yarn as the package manager, but in the README I wrote npm commands.

To solve this issue, need to clone a fresh clone, and see which yarn commands we need to run until we run the dev, test and build:repease, and write these commands in the README.

The commands can also be taken from the CI (yml) files.

FAQ

Need to create a Hebrew document with FAQ and Troubleshooting,

Export to GSheet: Get user access

Currently, we ask the user to share his spreadsheet with the App Google Service account,

Maybe getting permissions to the user GDrive is more simple (for the user).

Please add links to how to implement this.

Don't store the encryption key and passwords in the same place

Today, we save the SALT with keytar, then using this SALT to encrypt the passwords, and saving the passwords alongside the SALT.

This means that there is almost no meaning for encryption, because if they can access the encrypted passwords, they can also access the encryption key.

Prerequisites and developer workspace

In README, we need to add an explanation how to init a developer workspace:

  • Install node (version?)
  • Install Yarn
  • Project structure
  • Trubleshooting

CD

When we publish a new release?

Every push to master?
Manually?

Anyway, I need to implement a basic pipeline for beta work.

Add "Send Feedback"

  • Add my email: [email protected] to the UI, with "Send Feedback" or something (link to repo...) (#113)
  • Add options to send the logs to somewhere (but let the user see them before he sends them).

Trigger Release only for src files

Today the Build/Release pipeline triggered by any push to master.

Use path to filter and trigger for only relevant files.

The relevant files are:

  • src
  • .electron-vue

And maybe babel and webpack files?

Upgrade packages

The Electron-Vue boilerplate starts with lower versions of Vue and Electron.

  • Electron is now 2.0.4, should be ^5.0.0.
  • Vue is now 2.5.16, should be ^2.6.0.
  • nedb should be removed.

Consider adding more tests before you upgrade the dependencies (#4).

Spreadsheet uploader- Bulk upload

Now we uploading the transactions to the Google Spreadsheet by

transactionsArray.map((transaction) => mapKeys(transaction, (_value, key) => key.toLowerCase()))
  .forEach(async (transaction) => {
    await addRow(worksheet, transaction);
  });

This can throw this error:

Uncaught (in promise) Error: HTTP error 429 (Too Many Requests)

So we need to replace the GoogleSpreadsheet.addRow with GoogleSpreadsheet.bulkUpdateCells.

Logging

I need to add a logger for getting more details when something don't work as expected, but without loading the console.

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.