Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/timgabets/electron-atm
A simple free open-source NDC ATM emulator, written on JavaScript, jQuery and Electron framework.
https://github.com/timgabets/electron-atm
atm atm-simulator ndc simulator
Last synced: about 21 hours ago
JSON representation
A simple free open-source NDC ATM emulator, written on JavaScript, jQuery and Electron framework.
- Host: GitHub
- URL: https://github.com/timgabets/electron-atm
- Owner: timgabets
- License: lgpl-2.1
- Created: 2017-07-10T13:52:03.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2020-10-06T14:34:06.000Z (about 4 years ago)
- Last Synced: 2024-09-02T19:46:39.509Z (2 months ago)
- Topics: atm, atm-simulator, ndc, simulator
- Language: JavaScript
- Homepage:
- Size: 4.54 MB
- Stars: 95
- Watchers: 15
- Forks: 59
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG
- License: LICENSE.md
Awesome Lists containing this project
README
# electron-atm
![Travis CI build badge](https://travis-ci.org/timgabets/electron-atm.svg?branch=master)
[![Maintainability](https://api.codeclimate.com/v1/badges/bd413733bed6663896cc/maintainability)](https://codeclimate.com/github/timgabets/electron-atm/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/bd413733bed6663896cc/test_coverage)](https://codeclimate.com/github/timgabets/electron-atm/test_coverage)_The project is not maintained anymore_. If anybody would like to pick up the project and become its maintainer, just drop me an [email](mailto:[email protected]) to discuss the ownership transfer.
A simple free open-source [APTRA™ Advance NDC](https://www.ncr.com/financial-services/banking-atm-software/aptra-advance-ndc) ATM emulator, written from scratch using ES6 JavaScript, [visjs](http://visjs.org/), jQuery and [Electron](https://electron.atom.io/) framework.
Profile selection on application start:
![profile selection](img/profile-selection.png)ATM tab:
![screenshot](img/screenshot.png)States tab:
![states navigator](img/states.png)Financial Institutions tab:
![FITs page](img/fits.png)Cards management tab:
![cards page](img/cards.png)## To Use
Windows and MacOS build installers may be downloaded from [Releases page](https://github.com/timgabets/electron-atm/releases).
You may also build the app from sources. To do this, you'll need [Git](https://git-scm.com) and [Node.js version 8.x](https://nodejs.org/en/download/) (which comes with [npm](http://npmjs.com)) installed on your computer. From the command line:
```bash
# Clone this repository
git clone https://github.com/timgabets/electron-atm
# Go into the repository
cd electron-atm
# Install dependencies
npm install
# Check the test cases
npm test
# Run the app
npm start
```## Reasons of why this application was developed
Some reasons for the appearance of this application are described [here](http://gabets.ru/electron-atm.html).
## Features
This is a side project of my full-time job and only the features that I currently need in my everyday work are implemented.
Currently only the basic stuff is working, such as:
* Connecting to ATM host
* Showing ATM connection status icon (Offline, Connected, Out-Of-service, In-Service)
* Moving through almost all the basic states (ICC states are passed through as well)
* Showing basic image screens linked to the state
* Checking the Card's financial institution based on FIT tables
* Keyboard shortcuts: FDK (A-I), numeric(0-9), Esc, Enter and Backspace
* Receiving and processing states, screens and FITs (financial insitution tables) from host
* Showing traces in a log area
* Saving ATM configuration data (such as states, screens, FITs, ConfigID, counters etc) and restoring it on application start
* Showing dynamic on-screen data received from host
* Crypto support: PIN block encryption, dynamic key exchange etc. (Triple DES double length key only)
* State Navigator: showing graph of states
* State Navigator: updating screen image when jumping through the states
* State Navigator: displaying state details when state selected
* FITs: showing a table of Financial Institutions
* Saving the image path in user settingsThings to be implemented (very) soon:
* Touch area support (pressing touch areas, not only FDK buttons)
* Auto reconnection
* ICC support## FAQ
### What is this about?
This is an implementation of ATM (Automatic Teller machine) simulator, working under [APTRA™ Advance NDC](https://www.ncr.com/financial-services/banking-atm-software/aptra-advance-ndc) protocol.
### And why may I need it?
If you are working with ATM processing systems (a.k.a ATM Host - the systems to which ATMs are connected, and which process various messages from ATMs, including financial inquiries) - either developing applications or supporting them, you may need to emulate the ATM messages coming to the host. You're lucky if you have a real ATM nearby, but the chances are that your test ATM may be located on the other floor, or, the company that you're currently working in may not have a real ATM at all. Being fed up with closed-source self-written ATM-simulators, I decided to develop my own stable featureful open-source ATM simulator, which may be available to everyone in the Banking/Card processing community.
### The application is ugly.
Yes, I know and I'm really sorry. I'm not a frontend developer (I'm not even a web-developer as my daytime job is related to soft-realtime payment processing, and my native language is C). Obviously, I'm not good at CSS at all, so, if you are strong enough in UI/UX, please, feel free to do something with [this](https://github.com/timgabets/electron-atm/blob/master/css/styles.css). And [that](https://github.com/timgabets/electron-atm/blob/master/index.html). And [that](https://github.com/timgabets/electron-atm/tree/master/templates) as well.
### jQuery? Why not [React](https://facebook.github.io/react/)?
To me, [React](https://facebook.github.io/react/) is good for building user-interface-specific applications, while this application is considered as backend-centric (i.e. having tons of the protocol-specific code in the backend). As always, it started as a simple Electron app with "just a little jQuery", but now it's a [whole mess](https://github.com/timgabets/electron-atm/blob/master/src/listeners/window.js) of event-handlers and SetInterval functions, that already need to be rewritten. So, if you're brave enough to redesign it all using React, please send me a pull request! ;)
### I would like to use the application, but it seems that the feature X that I really need is not yet implemented.
As I said, only the features that I needed were implemented. For example, all the ATM configurations that I've been working with don't have V-type states (Language select from a card), therefore, these states are not supported by the application. So, if there is a feature that you would like to have implemented, you may create an [issue](https://github.com/timgabets/electron-atm/issues), or just drop me an [email](mailto:[email protected]).
### Something went wrong with the ATM configuration, and I would like to start from scratch
The application uses [electron-settings](https://www.npmjs.com/package/electron-settings) package to store the ATM configuration (all the data is stored is a single json file). Please refer to the [package' FAQ](https://github.com/nathanbuchar/electron-settings/wiki/FAQs#where-is-the-settings-file-saved) to know where the settings file is stored.
## Issues
Please feel free to submit [issues](https://github.com/timgabets/electron-atm/issues) and enhancement requests, or simply drop me an [email](mailto:[email protected]) if you want to participate in the project or just give some feedback.
## Contribute
Contributions are welcome, I would appreciate any help in application testing and development ;)
## Modules
Here is the list of npm modules that originally were the part of the application, but later were moved to the separate packages:
* [ndc-parser](https://github.com/timgabets/ndc-parser) - the parser of the messages sent from host to the ATM
* [atm-cursor](https://github.com/timgabets/atm-cursor) - a library that handles current cursor position on the ATM screen
* [atm-fits](https://github.com/timgabets/atm-fits) - a service for manipulating Financial Institutions Table records (FITs)
* [atm-hardware](https://github.com/timgabets/atm-hardware) - provides the emulation for the different ATM hardware (cassettes, readers, printers etc) + generates hardware fitness, statuses etc.
* [atm-logging](https://github.com/timgabets/atm-logging) - a library for displaying trace records in the Log area
* [atm-opcode-buffer](https://github.com/timgabets/atm-opcode-buffer) - Operation Code Buffer access library
* [atm-screens](https://github.com/timgabets/atm-screens) - ATM Screens service (parsing, binding images etc.)
* [atm-screentext](https://github.com/timgabets/atm-screentext) - library for updating on-screen text
* [atm-state-levels](https://github.com/timgabets/atm-state-levels) - a helper service to work with ATM state logical levels used by the States Graph, rendered by visjs on a States page
* [atm-states](https://github.com/timgabets/atm-states) - ATM states service - provides the message parsing, runtime states data storage etc.
* [atm-timestamp](https://github.com/timgabets/atm-timestamp) - a simple helper service for retrieving current timestamp. Used by the Log service
* [atm-trace](https://github.com/timgabets/atm-trace) - a library for parsing binary data coming from host / to host + displaying objects like states/screens/FITs etc
* [ndc-parser](https://github.com/timgabets/ndc-parser) - a library for parsing messages coming from host in NDC format
* [pinblock](https://github.com/timgabets/pinblock) - a library for creating PIN Blocks and converting them to the ATM format## License
[LGPLv2](LICENSE.md)