Skip to content

tech-warriors-corporation/mechanize-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mechanize logo

mechanize-app (documentation)

Mechanize (app) to help people fix car and reach destination.

Necessary setup the environment variables

You need to set the variables below in local.properties.

API_URL_ACCOUNTS=http://10.0.2.2:8000/api/accounts/ # Production is https://mechanize-accounts-api.onrender.com/api/accounts/
API_URL_HELPS=http://10.0.2.2:8001/api/helps/ # Production is https://mechanize-helps-api.onrender.com/api/helps/
CLIENT_ID=<set the clientId here 🔑> # The id to access the endpoints
SHARED_PREF_KEY=<set the sharedPrefKey here 🔑> # The key to access the local data
GITHUB_ORG_LINK=https://github.com/tech-warriors-corporation # Group organization link
DEVELOPER_LINK=https://hotequil.tech # Link of developer that updated the privacy policy
MANUAL_PDF=https://raw.githubusercontent.com/tech-warriors-corporation/mechanize-api/main/docs/manual.pdf # Application manual
MAPS_API_KEY=<set the mapsApiKey here 🔑> # The key to access the Google Maps API
USES_CLEARTEXT_TRAFFIC=true # Production is false

Start

To run the project, use the Android Studio (JetBrains IDE) and click in "run app". To run the .apk file, read about deploy.

We use

The technologies are used for better usability and security.

JWT logo Material Design logo Google Maps logo Kotlin logo MobSF logo Render logo Neon logo OWASP logo

Security

The security is one of the pillars of our application, below we talk a little about the features we have implemented.

Sanitize

On our back-end (Accounts microservice and Helps microservice), we are processing user input with sanitize, it removing dangerous code. See the next example.

Sanitize script

Protected endpoints

All requests in back-end are validated with clientId and Authorization (user token), the mechanics can access only mechanic routes and the drivers can access only driver routes. When the user enter in app, the token is revalidate and we check the token in every request. Our token is provided of JWT. See the files.

Technological padlock

Encrypted passwords

Passwords are encrypted and saved with Bcrypt (Python library), which uses an adaptive salt.

Bcrypt explanation

EncryptedSharedPreferences

In the app, the local data are saved with EncryptedSharedPreferences and secret key.

EncryptedSharedPreferences cover

Wait to try login again

When you make an email or password mistake on login, you have to wait 10 seconds to try again. This delay prevent attacks to our APIs.

Case types

  • The classes should be in PascalCase, example: SnackbarExtensions.kt;
  • The layouts should be in snake_case, example: search_mechanic.xml.

See more

Deploy

You must build the app before of generate a .aab or .apk file. The extension .aab is more modern. You can find these files in app/release directory.

License

Read our LICENSE. This is a open-source project. Fell free for share.

Roadmap

  • Review all topics;
  • Add maps;
  • Make each screen by Figma;
  • Set the Mechanize project as a case;
  • Remove all delays in source code;
  • Show mechanic name to driver when accepted the service;
  • Add a message to comment about service on rating;
  • Get pending rating or attendance unfinished on entering in application;
  • Show modal in the system informing that we are not responsible for payments, this is something directly between driver and mechanic (show this message on create account too);
  • Add Tech Warriors logo in a page;
  • Use location;
  • Review all project files;
  • Review application with team;
  • Improve product always;
  • See password with button on type;
  • Put a button with return to focus me in map;
  • Delete unused files;
  • Customize theme;
  • Hide environment variables in app/build.gradle;
  • Send access token in headers request;
  • Study about elevation (shadow);
  • Use Android notifications;
  • Think about product marketing;
  • Mock the APIs;
  • If user tries to enter the password 5 times and fails, then it must wait 15 seconds to try again;
  • Use singular and plural in seconds of retry login, and not disabled in first time;
  • Upload application in Google Play;
  • Customize application in Google Play when uploaded;
  • Test in others devices;
  • Maybe create an url for each microservice (environment variable);
  • Remove TODO comments;
  • Change MAPS_API_KEY value to a new valid key;
  • Close modal on click in backdrop;
  • Get current ticket after close app and open again;
  • On close modal and open again, shows a ghost of last data;
  • Show in map who mechanic is helping when attending;
  • Add back button in choose ticket to get previous ticket;
  • Set details of ticket in rating modal too (more precision for user with description, vehicle, mechanic name and more);
  • Update location in runtime for driver and mechanic;
  • Set URL of app in GitHub repository;
  • Remove dark theme mode;
  • Add padding in images at mipmap directory to smaller app icon;
  • Remove -3 hours when show a full date in app or change time in Neon database;
  • Analyze crashes and bugs;
  • Set login fields on home;
  • On start app, request our microservices to init them (15 inactive minutes), use interval in microservices or pay for better server;
  • Toggle button to show or hide password on create account;
  • Create a confirm modal before logout;
  • Focus me and logout button should have a shadow or something to show better (bring up the map). The icon button should be like a button and not only icon shape;
  • Set a sanitize to remove emoji and dangerous strings in some fields for not save in database;
  • Add text that go to Tech Warriors GitHub organization link in home;
  • Add text that go to creator website in info;
  • Use select to vehicle;
  • Forget password screen;
  • Remember session checkbox on login and create account;
  • Show remaining chars text;
  • Online mechanics alert as at Figma;
  • Change password at configurations;
  • Set text in info of app about keep the app open to work normally;
  • Test app with location changed in other country (emulate);
  • When mechanic recuse (cancel button name should be recuse) the ticket, should be unsolved and without mechanic_id, and not with cancelled;
  • Delete account option (verify if use soft or hard delete, see places where is used user to not break the application too);
  • Delete account with soft delete;
  • Change snippet of location in map for an engine, person or car;
  • More options to configure, historic and others;
  • Show the path traced of mechanic between driver;
  • Rating modal to optional and can close to users;
  • Rating modal for the mechanic too (add field in database);
  • Text that showing vision of other user;
  • Toast time should be bigger and the toast should be at top of app. The toast should have a bigger height for large messages;
  • Double confirmation in actions (principally in cancel, conclude, logout and others);
  • Show the services to mechanic that is closer than mechanic and not let services appear that are more than 300km from him;
  • Add list of done services to users with status and other information;
  • Allow mechanic be driver and and vice versa;
  • Remove rating modal on cancel;
  • App should work in background when closed and logged in (second plan, it's in first plan now);
  • Improve texts and labels to better descriptions;
  • Show current position of mechanic to driver and others relevant things;
  • Update location of users when them leave the place, and show two points in map (driver and mechanic) in different colors;
  • Improve message errors in app;
  • Use trim in strings to validate fields in ifs;
  • Remove spaces in start and end of textarea fields;
  • Verify if is logged in a device, logout at new device if yes;
  • Remove rotate, set as portrait;
  • Use pronouns male, female and others to better user experience;
  • Set notification when mechanic arrive in driver;
  • Update Google Play prints of app;
  • Put the user name who cancel or conclude the service in the toast;
  • Create an "other" checkbox on create ticket;
  • Use MasterKeys instead SHARED_PREF_KEY;
  • The modal close doesn't is showing on small screens of devices;
  • The login screen cut the texts on small devices;
  • Some texts are cut in small devices;
  • Show mechanic quantities that is closer than user;
  • Maybe update the Android minimum version (it's 7.0 now) to a good version (example: 10.0) for improve security;
  • Send password confirmation in all requests (example: create account);
  • Use the rating value to choose better mechanics for drivers;
  • Learn as reset input of passwords;
  • Can't set new password as the current password;
  • Put SonarQube in all projects;
  • When update password leave to configurations screen;
  • Set manual link in home;
  • Set same spaces in borders of alerts, modals and others;
  • Set link of Google Maps in a button on right when mechanic is attending a driver (something better to understand and beautiful);
  • Stop map pinch on opened modal;
  • Close keyboard on change fragment;
  • Use a select instead a autocomplete;
  • On app start, request to verify token and update id, name and role in EncryptedSharedPreferences;
  • Disable buttons on request.

Team

The Mechanize is made with care and affection by Tech Warriors.

Tech Warriors logo