Commit Graph
18 Commits
Author SHA1 Message Date
Josh Waldrep 5c300989a7 Remove unused loan_payment key from transaction locale 2026-01-12 16:17:36 -05:00
Josh Waldrep 308a4ab048 Refactor Plaid transaction type mapping and improve label handling
- Updated `PLAID_TYPE_TO_LABEL` in `TransactionsProcessor` to consolidate labels ("Cancel" and "Cash" now mapped to "Other").
- Adjusted `label_from_plaid_type` to return "Other" as the default fallback.
- Enhanced tests to include additional valid activity labels and ensure label consistency.
- Minor fixes to locale keys for transaction views.
2026-01-12 16:04:53 -05:00
Josh WaldrepandClaude Opus 4.5 2f20d715a4 Remove exclude_from_cashflow column from schema
This column was never meant to be added - the migration is a no-op.
The schema.rb was incorrectly committed with this column during rebase.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 15:48:42 -05:00
Josh Waldrep 582eda999b Remove exclude_from_cashflow flag and consolidate logic into excluded toggle
- Removed `exclude_from_cashflow` attribute across models, controllers, and views.
- Updated queries to rely solely on the `excluded` flag for filtering transactions and entries.
- Simplified migration by consolidating `exclude_from_cashflow` functionality into the existing `excluded` toggle.
- Refactored related tests to remove outdated logic and ensured compatibility with the updated implementation.
2026-01-12 15:35:38 -05:00
Josh Waldrep cfda5a6d3d Remove InvestmentActivityDetector and related functionality
- Deleted the `InvestmentActivityDetector` and associated tests.
- Removed rake tasks for backfilling and clearing investment activity labels.
- Simplified transaction processing in `SimplefinEntry::Processor` by removing inferred activity label logic.
- Added new rule `SetInvestmentActivityLabel` for setting labels using rules.
- Updated `Rule::Registry::TransactionResource` to include the new rule executor.
2026-01-12 15:35:14 -05:00
Josh Waldrep 307a8bb760 Localize investment activity labels and improve transaction processing
- Replaced hardcoded activity labels with `I18n` translations for better localization.
- Updated `transactions` views to display localized labels dynamically.
- Fixed `InvestmentActivityDetector` to enhance dividend detection.
- Refined `Account::ProviderImportAdapter` to prevent unnecessary updates and ensure transactional consistency.
- Improved error handling and feedback in rake tasks for invalid arguments.
2026-01-12 15:35:14 -05:00
Josh Waldrep 96022cbe9a Update PlaidAccount::Processor to use resolved security from response
- Refactored to extract `security` from `security_resolver.resolve` response for better clarity and consistency.
2026-01-12 15:35:14 -05:00
Josh Waldrep 52588784d0 Add investment activity detection, labels, and exclusions
- Introduced `InvestmentActivityDetector` to mark internal investment activity as excluded from cashflow and assign appropriate labels.
- Added `exclude_from_cashflow` flag to `entries` and `investment_activity_label` to `transactions` with migrations.
- Implemented rake tasks to backfill and clear investment activity labels.
- Updated `PlaidAccount::Investments::TransactionsProcessor` to map Plaid transaction types to labels.
- Included comprehensive test coverage for new functionality.
2026-01-12 15:35:14 -05:00
Josh Waldrep 238fa8e0ca Merge remote-tracking branch 'upstream/main' into sso-upgrades
# Conflicts:
#	app/views/simplefin_items/_simplefin_item.html.erb
#	db/schema.rb
2026-01-10 11:57:23 -05:00
Josh Waldrep e607667b26 Added fallback to use the first identity when session login provider is unavailable. 2026-01-03 23:24:56 -05:00
Josh Waldrep 7dada373e0 refactor: integrate unified provider loader in logout URL generation and update locale keys 2026-01-03 22:06:25 -05:00
Josh Waldrep 6970481ec0 - Ensure SSO logout targets the correct provider by storing and clearing sso_login_provider session data.
- Update failure message handling to use sanitized reason consistently.
2026-01-03 21:27:31 -05:00
Josh Waldrep b2ecc6bc67 refactor: improve SSO provider management and logging
- Simplified `name_id_format` selection logic in SSO provider form.
- Switched raw database query to sanitized SQL in client secret tests.
- Added condition to log JIT account creation only when identity persists.
- Sanitized failure reasons in SSO login failure handling.
- Added SSO provider connection test policy tests for super admin and regular users.
2026-01-03 21:13:24 -05:00
Josh Waldrep d3055b2e0b refactor: remove SSO settings page; consolidate SSO identity management under Security settings
- Removed the `Settings::SsoIdentitiesController` and views for a simplified user experience.
- Moved SSO identity management to the Security settings page (`Settings::SecuritiesController`).
- Updated locale keys and layout for the new structure.
- Fixed unlink protection warnings and adjusted redirection path.
- Cleaned up routes, helper methods, and redundant code.
2026-01-03 20:49:31 -05:00
Josh Waldrep 14993d871c feat: comprehensive SSO/OIDC upgrade with enterprise features
Multi-provider SSO support:
   - Database-backed SSO provider management with admin UI
   - Support for OpenID Connect, Google OAuth2, GitHub, and SAML 2.0
   - Flipper feature flag (db_sso_providers) for dynamic provider loading
   - ProviderLoader service for YAML or database configuration

   Admin functionality:
   - Admin::SsoProvidersController for CRUD operations
   - Admin::UsersController for super_admin role management
   - Pundit policies for authorization
   - Test connection endpoint for validating provider config

   User provisioning improvements:
   - JIT (just-in-time) account creation with configurable default role
   - Changed default JIT role from admin to member (security)
   - User attribute sync on each SSO login
   - Group/role mapping from IdP claims

   SSO identity management:
   - Settings::SsoIdentitiesController for users to manage connected accounts
   - Issuer validation for OIDC identities
   - Unlink protection when no password set

   Audit logging:
   - SsoAuditLog model tracking login, logout, link, unlink, JIT creation
   - Captures IP address, user agent, and metadata

   Advanced OIDC features:
   - Custom scopes per provider
   - Configurable prompt parameter (login, consent, select_account, none)
   - RP-initiated logout (federated logout to IdP)
   - id_token storage for logout

   SAML 2.0 support:
   - omniauth-saml gem integration
   - IdP metadata URL or manual configuration
   - Certificate and fingerprint validation
   - NameID format configuration
2026-01-03 17:56:42 -05:00
Josh Waldrep 28350a6c90 Add tests and logic for adopting unowned holdings during provider imports
- Introduced `Account::ProviderImportAdapterUnownedAdoptionTest` to verify adoption of unowned holdings on collision.
- Updated `ProviderImportAdapter` to claim unowned holdings by updating attributes, attaching external_id, and setting account_provider_id.
- Ensured idempotency in subsequent imports for the same unowned holding.
2025-11-22 15:41:09 -05:00
Josh Waldrep 5de091b14c Add tests for cross-provider holding isolation and enhance fallback logic
- Introduced `Account::ProviderImportAdapterCrossProviderTest` to validate no cross-provider claiming of holdings.
- Updated `ProviderImportAdapter` to scope fallback matching by `account_provider_id`.
- Added early conflict guard and rescue for unique index violations during imports.
- Simplified rake task usage feedback.
2025-11-22 15:24:12 -05:00
Josh Waldrep 195dd18a52 Add tests and refactor for Simplefin holdings import and processing
- Introduced tests for importer post-import logic and `SimplefinHoldingsApplyJob`.
- Refactored `ProviderImportAdapter` to improve holding resolution strategy.
- Added handling of investment and crypto holdings in importer with debounce logic for job enqueuing.
- Updated rake task to use `SimplefinHoldingsApplyJob` for holding materialization.
2025-11-22 14:41:21 -05:00