django-cfg 1.2.29__py3-none-any.whl → 1.3.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/api/health/views.py +4 -2
  3. django_cfg/apps/knowbase/config/settings.py +16 -15
  4. django_cfg/apps/payments/README.md +326 -0
  5. django_cfg/apps/payments/admin/__init__.py +20 -9
  6. django_cfg/apps/payments/admin/api_keys_admin.py +521 -237
  7. django_cfg/apps/payments/admin/balance_admin.py +592 -297
  8. django_cfg/apps/payments/admin/currencies_admin.py +600 -108
  9. django_cfg/apps/payments/admin/filters.py +306 -199
  10. django_cfg/apps/payments/admin/payments_admin.py +470 -64
  11. django_cfg/apps/payments/admin/subscriptions_admin.py +578 -128
  12. django_cfg/apps/payments/admin_interface/__init__.py +18 -0
  13. django_cfg/apps/payments/admin_interface/templates/payments/base.html +162 -0
  14. django_cfg/apps/payments/admin_interface/templates/payments/components/dev_tool_card.html +38 -0
  15. django_cfg/apps/payments/admin_interface/templates/payments/components/loading_spinner.html +16 -0
  16. django_cfg/apps/payments/admin_interface/templates/payments/components/notification.html +27 -0
  17. django_cfg/apps/payments/admin_interface/templates/payments/components/provider_card.html +86 -0
  18. django_cfg/apps/payments/admin_interface/templates/payments/components/status_card.html +39 -0
  19. django_cfg/apps/payments/admin_interface/templates/payments/currency_converter.html +382 -0
  20. django_cfg/apps/payments/admin_interface/templates/payments/payment_dashboard.html +300 -0
  21. django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +303 -0
  22. django_cfg/apps/payments/admin_interface/templates/payments/payment_list.html +382 -0
  23. django_cfg/apps/payments/admin_interface/templates/payments/payment_status.html +500 -0
  24. django_cfg/apps/payments/admin_interface/templates/payments/webhook_dashboard.html +594 -0
  25. django_cfg/apps/payments/admin_interface/views/__init__.py +23 -0
  26. django_cfg/apps/payments/admin_interface/views/payment_views.py +259 -0
  27. django_cfg/apps/payments/admin_interface/views/webhook_dashboard.py +37 -0
  28. django_cfg/apps/payments/apps.py +34 -9
  29. django_cfg/apps/payments/config/__init__.py +28 -51
  30. django_cfg/apps/payments/config/constance/__init__.py +22 -0
  31. django_cfg/apps/payments/config/constance/config_service.py +123 -0
  32. django_cfg/apps/payments/config/constance/fields.py +69 -0
  33. django_cfg/apps/payments/config/constance/settings.py +160 -0
  34. django_cfg/apps/payments/config/django_cfg_integration.py +202 -0
  35. django_cfg/apps/payments/config/helpers.py +130 -0
  36. django_cfg/apps/payments/management/__init__.py +1 -3
  37. django_cfg/apps/payments/management/commands/__init__.py +1 -3
  38. django_cfg/apps/payments/management/commands/manage_currencies.py +381 -0
  39. django_cfg/apps/payments/management/commands/manage_providers.py +408 -0
  40. django_cfg/apps/payments/middleware/__init__.py +3 -1
  41. django_cfg/apps/payments/middleware/api_access.py +329 -222
  42. django_cfg/apps/payments/middleware/rate_limiting.py +343 -163
  43. django_cfg/apps/payments/middleware/usage_tracking.py +250 -238
  44. django_cfg/apps/payments/migrations/0001_initial.py +708 -536
  45. django_cfg/apps/payments/models/__init__.py +16 -20
  46. django_cfg/apps/payments/models/api_keys.py +121 -43
  47. django_cfg/apps/payments/models/balance.py +150 -115
  48. django_cfg/apps/payments/models/base.py +68 -15
  49. django_cfg/apps/payments/models/currencies.py +207 -67
  50. django_cfg/apps/payments/models/managers/__init__.py +44 -0
  51. django_cfg/apps/payments/models/managers/api_key_managers.py +329 -0
  52. django_cfg/apps/payments/models/managers/balance_managers.py +599 -0
  53. django_cfg/apps/payments/models/managers/currency_managers.py +385 -0
  54. django_cfg/apps/payments/models/managers/payment_managers.py +511 -0
  55. django_cfg/apps/payments/models/managers/subscription_managers.py +641 -0
  56. django_cfg/apps/payments/models/payments.py +235 -284
  57. django_cfg/apps/payments/models/subscriptions.py +257 -177
  58. django_cfg/apps/payments/models/tariffs.py +147 -40
  59. django_cfg/apps/payments/services/__init__.py +209 -56
  60. django_cfg/apps/payments/services/cache/__init__.py +6 -6
  61. django_cfg/apps/payments/services/cache/{simple_cache.py → cache_service.py} +112 -12
  62. django_cfg/apps/payments/services/core/__init__.py +10 -6
  63. django_cfg/apps/payments/services/core/balance_service.py +435 -360
  64. django_cfg/apps/payments/services/core/base.py +166 -0
  65. django_cfg/apps/payments/services/core/currency_service.py +478 -0
  66. django_cfg/apps/payments/services/core/payment_service.py +344 -468
  67. django_cfg/apps/payments/services/core/subscription_service.py +425 -484
  68. django_cfg/apps/payments/services/core/webhook_service.py +410 -0
  69. django_cfg/apps/payments/services/integrations/__init__.py +29 -0
  70. django_cfg/apps/payments/services/integrations/ngrok_service.py +47 -0
  71. django_cfg/apps/payments/services/integrations/providers_config.py +107 -0
  72. django_cfg/apps/payments/services/providers/__init__.py +9 -14
  73. django_cfg/apps/payments/services/providers/base.py +232 -71
  74. django_cfg/apps/payments/services/providers/nowpayments.py +404 -219
  75. django_cfg/apps/payments/services/providers/registry.py +429 -80
  76. django_cfg/apps/payments/services/types/__init__.py +78 -0
  77. django_cfg/apps/payments/services/types/data.py +177 -0
  78. django_cfg/apps/payments/services/types/requests.py +150 -0
  79. django_cfg/apps/payments/services/types/responses.py +156 -0
  80. django_cfg/apps/payments/services/types/webhooks.py +232 -0
  81. django_cfg/apps/payments/signals/__init__.py +33 -8
  82. django_cfg/apps/payments/signals/api_key_signals.py +211 -130
  83. django_cfg/apps/payments/signals/balance_signals.py +174 -0
  84. django_cfg/apps/payments/signals/payment_signals.py +129 -98
  85. django_cfg/apps/payments/signals/subscription_signals.py +195 -143
  86. django_cfg/apps/payments/static/payments/css/components.css +380 -0
  87. django_cfg/apps/payments/static/payments/css/dashboard.css +188 -0
  88. django_cfg/apps/payments/static/payments/js/components.js +545 -0
  89. django_cfg/apps/payments/static/payments/js/utils.js +412 -0
  90. django_cfg/apps/payments/templatetags/__init__.py +1 -1
  91. django_cfg/apps/payments/templatetags/payment_tags.py +466 -0
  92. django_cfg/apps/payments/urls.py +46 -47
  93. django_cfg/apps/payments/urls_admin.py +49 -0
  94. django_cfg/apps/payments/views/api/__init__.py +101 -0
  95. django_cfg/apps/payments/views/api/api_keys.py +387 -0
  96. django_cfg/apps/payments/views/api/balances.py +381 -0
  97. django_cfg/apps/payments/views/api/base.py +298 -0
  98. django_cfg/apps/payments/views/api/currencies.py +402 -0
  99. django_cfg/apps/payments/views/api/payments.py +415 -0
  100. django_cfg/apps/payments/views/api/subscriptions.py +475 -0
  101. django_cfg/apps/payments/views/api/webhooks.py +476 -0
  102. django_cfg/apps/payments/views/serializers/__init__.py +99 -0
  103. django_cfg/apps/payments/views/serializers/api_keys.py +424 -0
  104. django_cfg/apps/payments/views/serializers/balances.py +300 -0
  105. django_cfg/apps/payments/views/serializers/currencies.py +335 -0
  106. django_cfg/apps/payments/views/serializers/payments.py +387 -0
  107. django_cfg/apps/payments/views/serializers/subscriptions.py +429 -0
  108. django_cfg/apps/payments/views/serializers/webhooks.py +137 -0
  109. django_cfg/apps/tasks/urls.py +0 -2
  110. django_cfg/apps/tasks/urls_admin.py +14 -0
  111. django_cfg/apps/urls.py +4 -4
  112. django_cfg/config.py +1 -1
  113. django_cfg/core/config.py +75 -4
  114. django_cfg/core/generation.py +25 -4
  115. django_cfg/core/integration/README.md +363 -0
  116. django_cfg/core/integration/__init__.py +47 -0
  117. django_cfg/core/integration/commands_collector.py +239 -0
  118. django_cfg/core/integration/display/__init__.py +15 -0
  119. django_cfg/core/integration/display/base.py +157 -0
  120. django_cfg/core/integration/display/ngrok.py +164 -0
  121. django_cfg/core/integration/display/startup.py +815 -0
  122. django_cfg/core/integration/url_integration.py +123 -0
  123. django_cfg/core/integration/version_checker.py +160 -0
  124. django_cfg/management/commands/auto_generate.py +4 -0
  125. django_cfg/management/commands/check_settings.py +6 -0
  126. django_cfg/management/commands/clear_constance.py +5 -2
  127. django_cfg/management/commands/create_token.py +6 -0
  128. django_cfg/management/commands/list_urls.py +6 -0
  129. django_cfg/management/commands/migrate_all.py +6 -0
  130. django_cfg/management/commands/migrator.py +3 -0
  131. django_cfg/management/commands/rundramatiq.py +6 -0
  132. django_cfg/management/commands/runserver_ngrok.py +51 -29
  133. django_cfg/management/commands/script.py +6 -0
  134. django_cfg/management/commands/show_config.py +12 -2
  135. django_cfg/management/commands/show_urls.py +4 -0
  136. django_cfg/management/commands/superuser.py +6 -0
  137. django_cfg/management/commands/task_clear.py +4 -1
  138. django_cfg/management/commands/task_status.py +3 -1
  139. django_cfg/management/commands/test_email.py +3 -0
  140. django_cfg/management/commands/test_telegram.py +6 -0
  141. django_cfg/management/commands/test_twilio.py +6 -0
  142. django_cfg/management/commands/tree.py +6 -0
  143. django_cfg/management/commands/validate_config.py +155 -149
  144. django_cfg/models/constance.py +31 -11
  145. django_cfg/models/payments.py +175 -498
  146. django_cfg/modules/django_currency/__init__.py +16 -11
  147. django_cfg/modules/django_currency/clients/__init__.py +4 -4
  148. django_cfg/modules/django_currency/clients/coinpaprika_client.py +289 -0
  149. django_cfg/modules/django_currency/clients/yahoo_client.py +157 -0
  150. django_cfg/modules/django_currency/core/__init__.py +1 -7
  151. django_cfg/modules/django_currency/core/converter.py +18 -23
  152. django_cfg/modules/django_currency/core/models.py +122 -11
  153. django_cfg/modules/django_currency/database/__init__.py +4 -4
  154. django_cfg/modules/django_currency/database/database_loader.py +190 -309
  155. django_cfg/modules/django_logger.py +160 -146
  156. django_cfg/modules/django_unfold/dashboard.py +65 -12
  157. django_cfg/registry/core.py +1 -0
  158. django_cfg/template_archive/django_sample.zip +0 -0
  159. django_cfg/templates/admin/components/action_grid.html +9 -9
  160. django_cfg/templates/admin/components/metric_card.html +5 -5
  161. django_cfg/templates/admin/components/status_badge.html +2 -2
  162. django_cfg/templates/admin/layouts/dashboard_with_tabs.html +152 -24
  163. django_cfg/templates/admin/snippets/components/quick_actions.html +3 -3
  164. django_cfg/templates/admin/snippets/components/system_health.html +1 -1
  165. django_cfg/templates/admin/snippets/tabs/overview_tab.html +49 -52
  166. django_cfg/utils/smart_defaults.py +222 -571
  167. django_cfg/utils/toolkit.py +51 -11
  168. {django_cfg-1.2.29.dist-info → django_cfg-1.3.1.dist-info}/METADATA +5 -4
  169. {django_cfg-1.2.29.dist-info → django_cfg-1.3.1.dist-info}/RECORD +172 -182
  170. django_cfg/apps/payments/__init__.py +0 -8
  171. django_cfg/apps/payments/admin/tariffs_admin.py +0 -199
  172. django_cfg/apps/payments/config/module.py +0 -70
  173. django_cfg/apps/payments/config/providers.py +0 -105
  174. django_cfg/apps/payments/config/settings.py +0 -96
  175. django_cfg/apps/payments/config/utils.py +0 -52
  176. django_cfg/apps/payments/decorators.py +0 -291
  177. django_cfg/apps/payments/management/commands/README.md +0 -178
  178. django_cfg/apps/payments/management/commands/currency_stats.py +0 -323
  179. django_cfg/apps/payments/management/commands/populate_currencies.py +0 -246
  180. django_cfg/apps/payments/management/commands/update_currencies.py +0 -336
  181. django_cfg/apps/payments/managers/__init__.py +0 -22
  182. django_cfg/apps/payments/managers/api_key_manager.py +0 -35
  183. django_cfg/apps/payments/managers/balance_manager.py +0 -361
  184. django_cfg/apps/payments/managers/currency_manager.py +0 -83
  185. django_cfg/apps/payments/managers/payment_manager.py +0 -44
  186. django_cfg/apps/payments/managers/subscription_manager.py +0 -37
  187. django_cfg/apps/payments/managers/tariff_manager.py +0 -29
  188. django_cfg/apps/payments/models/events.py +0 -73
  189. django_cfg/apps/payments/serializers/__init__.py +0 -56
  190. django_cfg/apps/payments/serializers/api_keys.py +0 -51
  191. django_cfg/apps/payments/serializers/balance.py +0 -59
  192. django_cfg/apps/payments/serializers/currencies.py +0 -55
  193. django_cfg/apps/payments/serializers/payments.py +0 -62
  194. django_cfg/apps/payments/serializers/subscriptions.py +0 -71
  195. django_cfg/apps/payments/serializers/tariffs.py +0 -56
  196. django_cfg/apps/payments/services/billing/__init__.py +0 -8
  197. django_cfg/apps/payments/services/cache/base.py +0 -30
  198. django_cfg/apps/payments/services/core/fallback_service.py +0 -432
  199. django_cfg/apps/payments/services/internal_types.py +0 -297
  200. django_cfg/apps/payments/services/middleware/__init__.py +0 -8
  201. django_cfg/apps/payments/services/monitoring/__init__.py +0 -22
  202. django_cfg/apps/payments/services/monitoring/api_schemas.py +0 -222
  203. django_cfg/apps/payments/services/monitoring/provider_health.py +0 -372
  204. django_cfg/apps/payments/services/providers/cryptapi.py +0 -273
  205. django_cfg/apps/payments/services/providers/cryptomus.py +0 -311
  206. django_cfg/apps/payments/services/security/__init__.py +0 -34
  207. django_cfg/apps/payments/services/security/error_handler.py +0 -637
  208. django_cfg/apps/payments/services/security/payment_notifications.py +0 -342
  209. django_cfg/apps/payments/services/security/webhook_validator.py +0 -475
  210. django_cfg/apps/payments/services/validators/__init__.py +0 -8
  211. django_cfg/apps/payments/static/payments/css/payments.css +0 -340
  212. django_cfg/apps/payments/static/payments/js/notifications.js +0 -202
  213. django_cfg/apps/payments/static/payments/js/payment-utils.js +0 -318
  214. django_cfg/apps/payments/static/payments/js/theme.js +0 -86
  215. django_cfg/apps/payments/tasks/__init__.py +0 -12
  216. django_cfg/apps/payments/tasks/webhook_processing.py +0 -177
  217. django_cfg/apps/payments/templates/payments/base.html +0 -182
  218. django_cfg/apps/payments/templates/payments/components/payment_card.html +0 -201
  219. django_cfg/apps/payments/templates/payments/components/payment_qr_code.html +0 -109
  220. django_cfg/apps/payments/templates/payments/components/progress_bar.html +0 -36
  221. django_cfg/apps/payments/templates/payments/components/provider_stats.html +0 -40
  222. django_cfg/apps/payments/templates/payments/components/status_badge.html +0 -27
  223. django_cfg/apps/payments/templates/payments/components/status_overview.html +0 -144
  224. django_cfg/apps/payments/templates/payments/dashboard.html +0 -346
  225. django_cfg/apps/payments/templatetags/payments_tags.py +0 -315
  226. django_cfg/apps/payments/urls_templates.py +0 -52
  227. django_cfg/apps/payments/utils/__init__.py +0 -45
  228. django_cfg/apps/payments/utils/billing_utils.py +0 -342
  229. django_cfg/apps/payments/utils/config_utils.py +0 -245
  230. django_cfg/apps/payments/utils/middleware_utils.py +0 -228
  231. django_cfg/apps/payments/utils/validation_utils.py +0 -94
  232. django_cfg/apps/payments/views/__init__.py +0 -62
  233. django_cfg/apps/payments/views/api_key_views.py +0 -164
  234. django_cfg/apps/payments/views/balance_views.py +0 -75
  235. django_cfg/apps/payments/views/currency_views.py +0 -111
  236. django_cfg/apps/payments/views/payment_views.py +0 -149
  237. django_cfg/apps/payments/views/subscription_views.py +0 -135
  238. django_cfg/apps/payments/views/tariff_views.py +0 -131
  239. django_cfg/apps/payments/views/templates/__init__.py +0 -25
  240. django_cfg/apps/payments/views/templates/ajax.py +0 -312
  241. django_cfg/apps/payments/views/templates/base.py +0 -204
  242. django_cfg/apps/payments/views/templates/dashboard.py +0 -60
  243. django_cfg/apps/payments/views/templates/payment_detail.py +0 -102
  244. django_cfg/apps/payments/views/templates/payment_management.py +0 -164
  245. django_cfg/apps/payments/views/templates/qr_code.py +0 -174
  246. django_cfg/apps/payments/views/templates/stats.py +0 -240
  247. django_cfg/apps/payments/views/templates/utils.py +0 -181
  248. django_cfg/apps/payments/views/webhook_views.py +0 -266
  249. django_cfg/apps/payments/viewsets.py +0 -65
  250. django_cfg/core/integration.py +0 -160
  251. django_cfg/modules/django_currency/clients/coingecko_client.py +0 -257
  252. django_cfg/modules/django_currency/clients/yfinance_client.py +0 -246
  253. django_cfg/template_archive/.gitignore +0 -1
  254. django_cfg/template_archive/__init__.py +0 -0
  255. django_cfg/urls.py +0 -33
  256. {django_cfg-1.2.29.dist-info → django_cfg-1.3.1.dist-info}/WHEEL +0 -0
  257. {django_cfg-1.2.29.dist-info → django_cfg-1.3.1.dist-info}/entry_points.txt +0 -0
  258. {django_cfg-1.2.29.dist-info → django_cfg-1.3.1.dist-info}/licenses/LICENSE +0 -0
django_cfg/__init__.py CHANGED
@@ -32,7 +32,7 @@ Example:
32
32
  default_app_config = "django_cfg.apps.DjangoCfgConfig"
33
33
 
34
34
  # Version information
35
- __version__ = "1.2.29"
35
+ __version__ = "1.3.1"
36
36
  __license__ = "MIT"
37
37
 
38
38
  # Import registry for organized lazy loading
@@ -17,6 +17,8 @@ from django.core.cache import cache
17
17
  from django.conf import settings
18
18
  from django.utils import timezone
19
19
 
20
+ from django_cfg.core.integration import get_current_version
21
+
20
22
 
21
23
  class HealthCheckView(View):
22
24
  """
@@ -40,7 +42,7 @@ class HealthCheckView(View):
40
42
  "status": "healthy",
41
43
  "timestamp": timezone.now().isoformat(),
42
44
  "service": config.project_name if config else "Django CFG",
43
- "version": config.project_version if config else "unknown",
45
+ "version": get_current_version(),
44
46
  "checks": {}
45
47
  }
46
48
  except Exception:
@@ -48,7 +50,7 @@ class HealthCheckView(View):
48
50
  "status": "healthy",
49
51
  "timestamp": timezone.now().isoformat(),
50
52
  "service": "Django CFG",
51
- "version": "unknown",
53
+ "version": get_current_version(),
52
54
  "checks": {}
53
55
  }
54
56
 
@@ -71,22 +71,23 @@ class EmbeddingConfig(BaseModel):
71
71
  description="Maximum number of items in memory cache"
72
72
  )
73
73
 
74
- # API Keys from environment
75
- @property
76
- def openai_api_key(self) -> Optional[str]:
77
- """Get OpenAI API key from environment configuration."""
78
- try:
79
- return settings.api_keys.openai
80
- except AttributeError:
81
- return os.getenv("OPENAI_API_KEY")
74
+ # >> Old variant, should be imported from CfgConfig
75
+ # # API Keys from environment
76
+ # @property
77
+ # def openai_api_key(self) -> Optional[str]:
78
+ # """Get OpenAI API key from environment configuration."""
79
+ # try:
80
+ # return settings.api_keys.openai
81
+ # except AttributeError:
82
+ # return os.getenv("OPENAI_API_KEY")
82
83
 
83
- @property
84
- def openrouter_api_key(self) -> Optional[str]:
85
- """Get OpenRouter API key from environment configuration."""
86
- try:
87
- return settings.api_keys.openrouter
88
- except AttributeError:
89
- return os.getenv("OPENROUTER_API_KEY")
84
+ # @property
85
+ # def openrouter_api_key(self) -> Optional[str]:
86
+ # """Get OpenRouter API key from environment configuration."""
87
+ # try:
88
+ # return settings.api_keys.openrouter
89
+ # except AttributeError:
90
+ # return os.getenv("OPENROUTER_API_KEY")
90
91
 
91
92
 
92
93
  class ChunkingConfig(BaseModel):
@@ -0,0 +1,326 @@
1
+ # Universal Payment System v2.0
2
+
3
+ 🚀 **Complete payment system with webhook support, provider management, and modern dashboard.**
4
+
5
+ ## 🏗️ Architecture Overview
6
+
7
+ Built using **Skyscraper Architecture** - 8 levels from foundation to integration:
8
+
9
+ ```
10
+ Level 7: Integration Layer │ ✅ Webhooks, Templates, URLs
11
+ Level 6: Interface Layer │ ✅ Admin, Management, Dashboard
12
+ Level 5: API Layer │ ✅ REST API, ViewSets, Serializers
13
+ Level 4: Service Layer │ ✅ PaymentService, ProviderRegistry
14
+ Level 3: Business Logic │ ✅ Signals, Middleware, Managers
15
+ Level 2: Data Layer │ ✅ Models, Migrations, Relationships
16
+ Level 1: Infrastructure │ ✅ Cache, Config, Ready Modules
17
+ Level 0: Foundation │ ✅ Django, PostgreSQL, Redis, Python
18
+ ```
19
+
20
+ ## 🚀 Quick Start
21
+
22
+ ### 1. Installation
23
+
24
+ ```bash
25
+ # Add to INSTALLED_APPS
26
+ INSTALLED_APPS = [
27
+ # ...
28
+ 'django_cfg.apps.payments',
29
+ # ...
30
+ ]
31
+
32
+ # Include URLs
33
+ urlpatterns = [
34
+ # External API (requires API keys)
35
+ path('payments/api/', include('django_cfg.apps.payments.urls_api')),
36
+
37
+ # Internal admin (requires staff access)
38
+ path('payments/admin/', include('django_cfg.apps.payments.urls_admin')),
39
+ ]
40
+ ```
41
+
42
+ ### 2. Development with Ngrok
43
+
44
+ ```bash
45
+ # Start development server with ngrok tunnel
46
+ python manage.py runserver_ngrok
47
+
48
+ # Access webhook dashboard
49
+ http://localhost:8000/payments/admin/webhooks/
50
+ ```
51
+
52
+ ### 3. Provider Configuration
53
+
54
+ The system automatically detects providers from `ProviderRegistry`. No hardcoded providers!
55
+
56
+ ```python
57
+ # Providers are loaded dynamically from registry
58
+ from django_cfg.apps.payments.services.providers.registry import get_provider_registry
59
+
60
+ registry = get_provider_registry()
61
+ providers = registry.list_available_providers() # ['nowpayments', ...]
62
+ ```
63
+
64
+ ## 📡 Webhook System
65
+
66
+ ### Universal Webhook Handler
67
+
68
+ ```python
69
+ # Supports any provider dynamically
70
+ POST /payments/api/webhooks/{provider}/
71
+
72
+ # Examples:
73
+ POST /payments/api/webhooks/nowpayments/
74
+ POST /payments/api/webhooks/stripe/
75
+ POST /payments/api/webhooks/new_provider/ # Automatically supported!
76
+ ```
77
+
78
+ ### Provider Management
79
+
80
+ ```python
81
+ # Get webhook URLs for all providers
82
+ GET /payments/api/webhooks/providers/
83
+
84
+ # Response:
85
+ {
86
+ "success": true,
87
+ "providers": [
88
+ {
89
+ "name": "nowpayments",
90
+ "display_name": "NowPayments",
91
+ "webhook_url": "https://abc123.ngrok.io/payments/api/webhooks/nowpayments/",
92
+ "signature_header": "x-nowpayments-sig",
93
+ "signature_algorithm": "HMAC-SHA512",
94
+ "icon": "💎"
95
+ }
96
+ ]
97
+ }
98
+ ```
99
+
100
+ ### Security Features
101
+
102
+ - ✅ **Signature Validation** - Provider-specific HMAC verification
103
+ - ✅ **Replay Protection** - Request ID tracking and deduplication
104
+ - ✅ **Rate Limiting** - Configurable per-provider limits
105
+ - ✅ **IP Filtering** - Optional whitelist support
106
+ - ✅ **Audit Logging** - Complete request/response logging
107
+
108
+ ## 🎨 Dashboard Features
109
+
110
+ ### Modern UI Components
111
+
112
+ - 🌙 **Dark Mode Support** - Automatic theme switching
113
+ - 📱 **Responsive Design** - Works on all devices
114
+ - ⚡ **Real-time Updates** - Auto-refresh every 30 seconds
115
+ - 🔄 **Interactive Elements** - Copy URLs, test webhooks
116
+ - 📊 **Live Statistics** - Provider health, success rates
117
+
118
+ ### Template Components
119
+
120
+ Reusable, dynamic components:
121
+
122
+ ```django
123
+ <!-- Status Card -->
124
+ {% include 'payments/components/status_card.html' with title="Ngrok Status" icon="🌐" %}
125
+
126
+ <!-- Provider Card (dynamic) -->
127
+ {% include 'payments/components/provider_card.html' with provider=provider_data %}
128
+
129
+ <!-- Loading Spinner -->
130
+ {% include 'payments/components/loading_spinner.html' with size="large" %}
131
+ ```
132
+
133
+ ## 🔧 Configuration
134
+
135
+ ### Provider Registration
136
+
137
+ ```python
138
+ # Add new provider (no code changes needed!)
139
+ from django_cfg.apps.payments.services.integrations.providers_config import WEBHOOK_METADATA
140
+
141
+ # Just add to WEBHOOK_METADATA
142
+ WEBHOOK_METADATA['new_provider'] = WebhookProviderInfo(
143
+ name='new_provider',
144
+ display_name='New Provider',
145
+ signature_header='x-new-provider-sig',
146
+ signature_algorithm='HMAC-SHA256',
147
+ icon='🆕'
148
+ )
149
+ ```
150
+
151
+ ### Ngrok Integration
152
+
153
+ ```python
154
+ # Automatic ngrok support via django-cfg
155
+ # No configuration needed - just run:
156
+ python manage.py runserver_ngrok
157
+ ```
158
+
159
+ ### Environment Variables
160
+
161
+ ```bash
162
+ # Ngrok authentication
163
+ NGROK_AUTHTOKEN=your_token_here
164
+
165
+ # Provider secrets (via Constance)
166
+ NOWPAYMENTS_API_KEY=your_api_key
167
+ NOWPAYMENTS_IPN_SECRET=your_secret
168
+ ```
169
+
170
+ ## 📊 API Endpoints
171
+
172
+ ### External API (requires API keys)
173
+
174
+ ```
175
+ # Payment Management
176
+ GET /payments/api/payments/
177
+ POST /payments/api/payments/
178
+ GET /payments/api/payments/{id}/
179
+
180
+ # Webhook Endpoints
181
+ POST /payments/api/webhooks/{provider}/
182
+ GET /payments/api/webhooks/providers/
183
+ GET /payments/api/webhooks/health/
184
+ GET /payments/api/webhooks/stats/
185
+
186
+ # Currency & Rates
187
+ GET /payments/api/currencies/
188
+ GET /payments/api/currencies/rates/
189
+ POST /payments/api/currencies/convert/
190
+ ```
191
+
192
+ ### Internal Admin (requires staff access)
193
+
194
+ ```
195
+ # Dashboard
196
+ GET /payments/admin/
197
+ GET /payments/admin/webhooks/
198
+
199
+ # Management Tools
200
+ GET /payments/admin/ajax/webhooks/status/
201
+ GET /payments/admin/ajax/webhooks/stats/
202
+ ```
203
+
204
+ ## 🧪 Testing
205
+
206
+ ### Webhook Testing
207
+
208
+ ```bash
209
+ # Test webhook endpoint
210
+ curl -X POST https://abc123.ngrok.io/payments/api/webhooks/nowpayments/ \
211
+ -H "Content-Type: application/json" \
212
+ -H "x-nowpayments-sig: test_signature" \
213
+ -d '{"payment_id": "test", "payment_status": "finished"}'
214
+ ```
215
+
216
+ ### Health Checks
217
+
218
+ ```bash
219
+ # Check system health
220
+ curl /payments/api/webhooks/health/
221
+
222
+ # Get statistics
223
+ curl /payments/api/webhooks/stats/?days=7
224
+ ```
225
+
226
+ ## 🔄 Adding New Providers
227
+
228
+ ### 1. Register Provider Class
229
+
230
+ ```python
231
+ # In your provider module
232
+ class NewProvider(BaseProvider):
233
+ def validate_webhook(self, payload, signature):
234
+ # Provider-specific validation
235
+ pass
236
+
237
+ # Register with system
238
+ registry.register_provider_class('new_provider', NewProvider, NewProviderConfig)
239
+ ```
240
+
241
+ ### 2. Add Webhook Metadata
242
+
243
+ ```python
244
+ # In providers_config.py
245
+ WEBHOOK_METADATA['new_provider'] = WebhookProviderInfo(
246
+ name='new_provider',
247
+ display_name='New Provider',
248
+ signature_header='x-new-provider-sig',
249
+ signature_algorithm='HMAC-SHA256',
250
+ icon='🆕'
251
+ )
252
+ ```
253
+
254
+ ### 3. That's it!
255
+
256
+ The system automatically:
257
+ - ✅ Creates webhook endpoint: `/webhooks/new_provider/`
258
+ - ✅ Adds to dashboard UI with icon
259
+ - ✅ Includes in provider list API
260
+ - ✅ Handles signature validation
261
+ - ✅ Provides ngrok URLs
262
+
263
+ ## 📈 Performance & Scalability
264
+
265
+ - **Lazy Loading** - Providers loaded on-demand
266
+ - **Caching** - Redis-backed provider and rate limit caching
267
+ - **Async Support** - Ready for async webhook processing
268
+ - **Health Monitoring** - Automatic provider health checks
269
+ - **Fallback Mechanisms** - Graceful degradation when providers fail
270
+
271
+ ## 🛡️ Security Best Practices
272
+
273
+ 1. **Always validate signatures** - Never trust unsigned webhooks
274
+ 2. **Use HTTPS in production** - Ngrok is for development only
275
+ 3. **Implement rate limiting** - Prevent abuse and DoS attacks
276
+ 4. **Monitor webhook activity** - Set up alerts for failures
277
+ 5. **Rotate secrets regularly** - Update provider secrets periodically
278
+
279
+ ## 📚 Documentation
280
+
281
+ - [Webhook Integration Guide](/@docs_new/integration/webhooks-ngrok.md)
282
+ - [Provider Configuration](/@docs_new/models/config.md)
283
+ - [Service Layer Documentation](/@docs_new/services/index.md)
284
+ - [Architecture Overview](/@docs_new/architecture.md)
285
+
286
+ ## 🎯 Production Deployment
287
+
288
+ ### Requirements
289
+
290
+ - Python 3.11+
291
+ - Django 4.2+
292
+ - PostgreSQL 12+
293
+ - Redis 6+
294
+ - Nginx (for static files)
295
+
296
+ ### Environment Setup
297
+
298
+ ```bash
299
+ # Production settings
300
+ DEBUG=False
301
+ ALLOWED_HOSTS=your-domain.com
302
+ DATABASE_URL=postgresql://...
303
+ REDIS_URL=redis://...
304
+
305
+ # Provider configuration
306
+ NOWPAYMENTS_API_KEY=prod_key
307
+ NOWPAYMENTS_IPN_SECRET=prod_secret
308
+ ```
309
+
310
+ ### Nginx Configuration
311
+
312
+ ```nginx
313
+ location /payments/api/webhooks/ {
314
+ proxy_pass http://django;
315
+ proxy_set_header Host $host;
316
+ proxy_set_header X-Real-IP $remote_addr;
317
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
318
+ proxy_set_header X-Forwarded-Proto $scheme;
319
+ }
320
+ ```
321
+
322
+ ---
323
+
324
+ ## 🎉 **Universal Payment System v2.0 - Ready for Production!**
325
+
326
+ **Built with ❤️ using Django-CFG framework**
@@ -1,23 +1,34 @@
1
1
  """
2
- Admin interfaces for universal payments.
2
+ Admin interfaces for Universal Payment System v2.0.
3
+
4
+ Unfold-powered admin with modern UI/UX and advanced functionality.
3
5
  """
4
6
 
5
- from .balance_admin import UserBalanceAdmin, TransactionAdmin
7
+ from .currencies_admin import CurrencyAdmin, NetworkAdmin, ProviderCurrencyAdmin
6
8
  from .payments_admin import UniversalPaymentAdmin
7
- from .subscriptions_admin import SubscriptionAdmin, EndpointGroupAdmin
9
+ from .balance_admin import UserBalanceAdmin, TransactionAdmin
10
+ from .subscriptions_admin import SubscriptionAdmin, EndpointGroupAdmin, TariffAdmin, TariffEndpointGroupAdmin
8
11
  from .api_keys_admin import APIKeyAdmin
9
- from .currencies_admin import CurrencyAdmin, CurrencyNetworkAdmin
10
- from .tariffs_admin import TariffAdmin, TariffEndpointGroupAdmin
11
12
 
12
13
  __all__ = [
14
+ # Currency admins
15
+ 'CurrencyAdmin',
16
+ 'NetworkAdmin',
17
+ 'ProviderCurrencyAdmin',
18
+
19
+ # Payment admins
20
+ 'UniversalPaymentAdmin',
21
+
22
+ # Balance admins
13
23
  'UserBalanceAdmin',
14
24
  'TransactionAdmin',
15
- 'UniversalPaymentAdmin',
25
+
26
+ # Subscription admins
16
27
  'SubscriptionAdmin',
17
28
  'EndpointGroupAdmin',
18
- 'APIKeyAdmin',
19
- 'CurrencyAdmin',
20
- 'CurrencyNetworkAdmin',
21
29
  'TariffAdmin',
22
30
  'TariffEndpointGroupAdmin',
31
+
32
+ # API Key admins
33
+ 'APIKeyAdmin',
23
34
  ]