1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-18 20:59:39 +02:00
Maybe est une application web entièrement open source pour vos finances personnelles. Vous aurez à votre disposition tous les outils et calculatrices interactifs dont vous avez besoin pour visualiser et naviguer dans votre parcours financier. https://maybefinance.com/
Find a file
Josh Pigford b803ddac96
Add comprehensive API v1 with OAuth and API key authentication (#2389)
* OAuth

* Add API test routes and update Doorkeeper token handling for test environment

- Introduced API namespace with test routes for controller testing in the test environment.
- Updated Doorkeeper configuration to allow fallback to plain tokens in the test environment for easier testing.
- Modified schema to change resource_owner_id type from bigint to string.

* Implement API key authentication and enhance access control

- Replaced Doorkeeper OAuth authentication with a custom method supporting both OAuth and API keys in the BaseController.
- Added methods for API key authentication, including validation and logging.
- Introduced scope-based authorization for API keys in the TestController.
- Updated routes to include API key management endpoints.
- Enhanced logging for API access to include authentication method details.
- Added tests for API key functionality, including validation, scope checks, and access control enforcement.

* Add API key rate limiting and usage tracking

- Implemented rate limiting for API key authentication in BaseController.
- Added methods to check rate limits, render appropriate responses, and include rate limit headers in responses.
- Updated routes to include a new usage resource for tracking API usage.
- Enhanced tests to verify rate limit functionality, including exceeding limits and per-key tracking.
- Cleaned up Redis data in tests to ensure isolation between test cases.

* Add Jbuilder for JSON rendering and refactor AccountsController

- Added Jbuilder gem for improved JSON response handling.
- Refactored index action in AccountsController to utilize Jbuilder for rendering JSON.
- Removed manual serialization of accounts and streamlined response structure.
- Implemented a before_action in BaseController to enforce JSON format for all API requests.

* Add transactions resource to API routes

- Added routes for transactions, allowing index, show, create, update, and destroy actions.
- This enhancement supports comprehensive transaction management within the API.

* Enhance API authentication and onboarding handling

- Updated BaseController to skip onboarding requirements for API endpoints and added manual token verification for OAuth authentication.
- Improved error handling and logging for invalid access tokens.
- Introduced a method to set up the current context for API requests, ensuring compatibility with session-like behavior.
- Excluded API paths from onboarding redirects in the Onboardable concern.
- Updated database schema to change resource_owner_id type from bigint to string for OAuth access grants.

* Fix rubocop offenses

- Fix indentation and spacing issues
- Convert single quotes to double quotes
- Add spaces inside array brackets
- Fix comment alignment
- Add missing trailing newlines
- Correct else/end alignment

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix API test failures and improve test reliability

- Fix ApiRateLimiterTest by removing mock users method and using fixtures
- Fix UsageControllerTest by removing mock users method and using fixtures
- Fix BaseControllerTest by using different users for multiple API keys
- Use unique display_key values with SecureRandom to avoid conflicts
- Fix double render issue in UsageController by returning after authorize_scope\!
- Specify controller name in routes for usage resource
- Remove trailing whitespace and empty lines per Rubocop

All tests now pass and linting is clean.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add API transactions controller warning to brakeman ignore

The account_id parameter in the API transactions controller is properly
validated on line 79: family.accounts.find(transaction_params[:account_id])
This ensures users can only create transactions in accounts belonging to
their family, making this a false positive.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Signed-off-by: Josh Pigford <josh@joshpigford.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-06-17 15:57:05 -05:00
.cursor/rules Taskmaster Stubbing (#2313) 2025-05-26 18:39:39 -05:00
.devcontainer Fix Docker builds after package updates 2025-05-20 14:00:31 -04:00
.github Redis check for self hosted apps (#2353) 2025-06-09 18:30:52 -04:00
app Add comprehensive API v1 with OAuth and API key authentication (#2389) 2025-06-17 15:57:05 -05:00
bin Update render-build.sh 2025-05-07 10:00:24 -05:00
config Add comprehensive API v1 with OAuth and API key authentication (#2389) 2025-06-17 15:57:05 -05:00
db Add comprehensive API v1 with OAuth and API key authentication (#2389) 2025-06-17 15:57:05 -05:00
docs/hosting Fix typo in docker hosting documentation (#2318) 2025-06-03 05:14:25 -05:00
lib perf(income statement): cache income statement queries (#2371) 2025-06-15 10:09:46 -04:00
log Initial commit 2024-02-02 09:05:04 -06:00
public Feature: Implement Mobile Responsiveness (#2092) 2025-04-18 08:23:10 -05:00
storage Initial commit 2024-02-02 09:05:04 -06:00
test Add comprehensive API v1 with OAuth and API key authentication (#2389) 2025-06-17 15:57:05 -05:00
tmp Initial commit 2024-02-02 09:05:04 -06:00
vendor Sankey Diagram (#2269) 2025-05-20 13:31:05 -05:00
.dockerignore Initial commit 2024-02-02 09:05:04 -06:00
.editorconfig Rubocop updates (#1118) 2024-08-23 10:06:24 -04:00
.env.example Use Redis for ActiveJob and ActionCable (#2004) 2025-03-19 12:36:16 -04:00
.env.local.example Initial pass at Synth-based ticker selection (#1392) 2024-10-30 09:23:44 -04:00
.env.test.example Data provider simplification, tests, and documentation (#1997) 2025-03-17 11:54:53 -04:00
.erb_lint.yml Handle nil name for entries (#1550) 2024-12-16 12:52:11 -05:00
.gitattributes Initial commit 2024-02-02 09:05:04 -06:00
.gitignore Add comprehensive API v1 with OAuth and API key authentication (#2389) 2025-06-17 15:57:05 -05:00
.rubocop.yml Rubocop updates (#1118) 2024-08-23 10:06:24 -04:00
.ruby-version Bump ruby to 3.4.4 2025-05-20 09:09:10 -04:00
biome.json Add BiomeJS for Linting and Formatting JavaScript relates to #1295 (#1299) 2024-10-14 17:09:27 -04:00
CLAUDE.md Add comprehensive API v1 with OAuth and API key authentication (#2389) 2025-06-17 15:57:05 -05:00
compose.example.yml Config: put Redis service in Docker local network (#2223) 2025-05-09 09:52:56 -04:00
config.ru Initial commit 2024-02-02 09:05:04 -06:00
CONTRIBUTING.md Fix: Filter categories by transaction type in forms (#2082) 2025-04-25 10:18:10 -04:00
Dockerfile Fix Docker builds after package updates 2025-05-20 14:00:31 -04:00
Gemfile Add comprehensive API v1 with OAuth and API key authentication (#2389) 2025-06-17 15:57:05 -05:00
Gemfile.lock Add comprehensive API v1 with OAuth and API key authentication (#2389) 2025-06-17 15:57:05 -05:00
LICENSE Initial commit 2024-02-02 09:05:04 -06:00
package-lock.json Personal finance AI (v1) (#2022) 2025-03-28 13:08:22 -04:00
package.json Personal finance AI (v1) (#2022) 2025-03-28 13:08:22 -04:00
perf.rake perf(income statement): cache income statement queries (#2371) 2025-06-15 10:09:46 -04:00
Procfile.dev New onboarding, trials, Stripe integration (#2185) 2025-05-01 16:47:14 -04:00
Rakefile Initial commit 2024-02-02 09:05:04 -06:00
README.md Benchmarking setup (#2366) 2025-06-14 11:53:53 -04:00

maybe_hero

Maybe: The personal finance app for everyone

Get involved: DiscordWebsiteIssues

Backstory

We spent the better part of 2021/2022 building a personal finance + wealth management app called, Maybe. Very full-featured, including an "Ask an Advisor" feature which connected users with an actual CFP/CFA to help them with their finances (all included in your subscription).

The business end of things didn't work out, and so we shut things down mid-2023.

We spent the better part of $1,000,000 building the app (employees + contractors, data providers/services, infrastructure, etc.).

We're now reviving the product as a fully open-source project. The goal is to let you run the app yourself, for free, and use it to manage your own finances and eventually offer a hosted version of the app for a small monthly fee.

Maybe Hosting

There are 2 primary ways to use the Maybe app:

  1. Managed (easiest) - we're in alpha and release invites in our Discord
  2. Self-host with Docker

Contributing

Before contributing, you'll likely find it helpful to understand context and general vision/direction.

Once you've done that, please visit our contributing guide to get started!

Performance Issues

With data-heavy apps, inevitably, there are performance issues. We've set up a public dashboard showing the problematic requests, along with the stacktraces to help debug them.

Any contributions that help improve performance are very much welcome.

https://oss.skylight.io/app/applications/XDpPIXEX52oi/recent/6h/endpoints

Local Development Setup

If you are trying to self-host the Maybe app, stop here. You should read this guide to get started.

The instructions below are for developers to get started with contributing to the app.

Requirements

  • See .ruby-version file for required Ruby version
  • PostgreSQL >9.3 (ideally, latest stable version)

After cloning the repo, the basic setup commands are:

cd maybe
cp .env.local.example .env.local
bin/setup
bin/dev

# Optionally, load demo data
rake demo_data:default

And visit http://localhost:3000 to see the app. You can use the following credentials to log in (generated by DB seed):

  • Email: user@maybe.local
  • Password: password

For further instructions, see guides below.

Multi-currency support

If you'd like multi-currency support, there are a few extra steps to follow.

  1. Sign up for an API key at Synth. It's a Maybe product and the free plan is sufficient for basic multi-currency support.
  2. Add your API key to your .env file.

Setup Guides

Repo Activity

Repo Activity

Maybe is distributed under an AGPLv3 license. " Maybe" is a trademark of Maybe Finance, Inc.