django-cfg 1.2.31__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 (256) 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 -10
  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 +526 -222
  9. django_cfg/apps/payments/admin/filters.py +306 -199
  10. django_cfg/apps/payments/admin/payments_admin.py +465 -70
  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 +303 -151
  39. django_cfg/apps/payments/management/commands/manage_providers.py +333 -160
  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 +342 -152
  43. django_cfg/apps/payments/middleware/usage_tracking.py +249 -240
  44. django_cfg/apps/payments/migrations/0001_initial.py +708 -536
  45. django_cfg/apps/payments/models/__init__.py +13 -18
  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 +172 -148
  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 -285
  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 +346 -467
  67. django_cfg/apps/payments/services/core/subscription_service.py +425 -481
  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 +234 -174
  74. django_cfg/apps/payments/services/providers/nowpayments.py +478 -0
  75. django_cfg/apps/payments/services/providers/registry.py +367 -301
  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 +210 -129
  83. django_cfg/apps/payments/signals/balance_signals.py +174 -0
  84. django_cfg/apps/payments/signals/payment_signals.py +128 -103
  85. django_cfg/apps/payments/signals/subscription_signals.py +194 -142
  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 +45 -48
  93. django_cfg/apps/payments/urls_admin.py +33 -42
  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/config.py +1 -1
  110. django_cfg/core/config.py +40 -4
  111. django_cfg/core/generation.py +25 -4
  112. django_cfg/core/integration/README.md +363 -0
  113. django_cfg/core/integration/__init__.py +47 -0
  114. django_cfg/core/integration/commands_collector.py +239 -0
  115. django_cfg/core/integration/display/__init__.py +15 -0
  116. django_cfg/core/integration/display/base.py +157 -0
  117. django_cfg/core/integration/display/ngrok.py +164 -0
  118. django_cfg/core/integration/display/startup.py +815 -0
  119. django_cfg/core/integration/url_integration.py +123 -0
  120. django_cfg/core/integration/version_checker.py +160 -0
  121. django_cfg/management/commands/auto_generate.py +4 -0
  122. django_cfg/management/commands/check_settings.py +6 -0
  123. django_cfg/management/commands/clear_constance.py +5 -2
  124. django_cfg/management/commands/create_token.py +6 -0
  125. django_cfg/management/commands/list_urls.py +6 -0
  126. django_cfg/management/commands/migrate_all.py +6 -0
  127. django_cfg/management/commands/migrator.py +3 -0
  128. django_cfg/management/commands/rundramatiq.py +6 -0
  129. django_cfg/management/commands/runserver_ngrok.py +51 -29
  130. django_cfg/management/commands/script.py +6 -0
  131. django_cfg/management/commands/show_config.py +12 -2
  132. django_cfg/management/commands/show_urls.py +4 -0
  133. django_cfg/management/commands/superuser.py +6 -0
  134. django_cfg/management/commands/task_clear.py +4 -1
  135. django_cfg/management/commands/task_status.py +3 -1
  136. django_cfg/management/commands/test_email.py +3 -0
  137. django_cfg/management/commands/test_telegram.py +6 -0
  138. django_cfg/management/commands/test_twilio.py +6 -0
  139. django_cfg/management/commands/tree.py +6 -0
  140. django_cfg/management/commands/validate_config.py +155 -149
  141. django_cfg/models/constance.py +31 -11
  142. django_cfg/models/payments.py +175 -492
  143. django_cfg/modules/django_logger.py +160 -146
  144. django_cfg/modules/django_unfold/dashboard.py +64 -16
  145. django_cfg/registry/core.py +1 -0
  146. django_cfg/template_archive/django_sample.zip +0 -0
  147. django_cfg/utils/smart_defaults.py +222 -571
  148. django_cfg/utils/toolkit.py +51 -11
  149. {django_cfg-1.2.31.dist-info → django_cfg-1.3.1.dist-info}/METADATA +4 -1
  150. {django_cfg-1.2.31.dist-info → django_cfg-1.3.1.dist-info}/RECORD +153 -185
  151. django_cfg/apps/payments/__init__.py +0 -8
  152. django_cfg/apps/payments/admin/tariffs_admin.py +0 -199
  153. django_cfg/apps/payments/config/module.py +0 -70
  154. django_cfg/apps/payments/config/providers.py +0 -105
  155. django_cfg/apps/payments/config/settings.py +0 -96
  156. django_cfg/apps/payments/config/utils.py +0 -52
  157. django_cfg/apps/payments/decorators.py +0 -291
  158. django_cfg/apps/payments/management/commands/README.md +0 -146
  159. django_cfg/apps/payments/management/commands/currency_stats.py +0 -304
  160. django_cfg/apps/payments/managers/__init__.py +0 -23
  161. django_cfg/apps/payments/managers/api_key_manager.py +0 -35
  162. django_cfg/apps/payments/managers/balance_manager.py +0 -361
  163. django_cfg/apps/payments/managers/currency_manager.py +0 -306
  164. django_cfg/apps/payments/managers/payment_manager.py +0 -192
  165. django_cfg/apps/payments/managers/subscription_manager.py +0 -37
  166. django_cfg/apps/payments/managers/tariff_manager.py +0 -29
  167. django_cfg/apps/payments/migrations/0002_network_providercurrency_and_more.py +0 -241
  168. django_cfg/apps/payments/migrations/0003_add_usd_rate_cache.py +0 -30
  169. django_cfg/apps/payments/models/events.py +0 -73
  170. django_cfg/apps/payments/serializers/__init__.py +0 -57
  171. django_cfg/apps/payments/serializers/api_keys.py +0 -51
  172. django_cfg/apps/payments/serializers/balance.py +0 -59
  173. django_cfg/apps/payments/serializers/currencies.py +0 -63
  174. django_cfg/apps/payments/serializers/payments.py +0 -62
  175. django_cfg/apps/payments/serializers/subscriptions.py +0 -71
  176. django_cfg/apps/payments/serializers/tariffs.py +0 -56
  177. django_cfg/apps/payments/services/billing/__init__.py +0 -8
  178. django_cfg/apps/payments/services/cache/base.py +0 -30
  179. django_cfg/apps/payments/services/core/fallback_service.py +0 -432
  180. django_cfg/apps/payments/services/internal_types.py +0 -461
  181. django_cfg/apps/payments/services/middleware/__init__.py +0 -8
  182. django_cfg/apps/payments/services/monitoring/__init__.py +0 -22
  183. django_cfg/apps/payments/services/monitoring/api_schemas.py +0 -76
  184. django_cfg/apps/payments/services/monitoring/provider_health.py +0 -372
  185. django_cfg/apps/payments/services/providers/cryptapi/__init__.py +0 -4
  186. django_cfg/apps/payments/services/providers/cryptapi/config.py +0 -8
  187. django_cfg/apps/payments/services/providers/cryptapi/models.py +0 -192
  188. django_cfg/apps/payments/services/providers/cryptapi/provider.py +0 -439
  189. django_cfg/apps/payments/services/providers/cryptomus/__init__.py +0 -4
  190. django_cfg/apps/payments/services/providers/cryptomus/models.py +0 -176
  191. django_cfg/apps/payments/services/providers/cryptomus/provider.py +0 -429
  192. django_cfg/apps/payments/services/providers/cryptomus/provider_v2.py +0 -564
  193. django_cfg/apps/payments/services/providers/models/__init__.py +0 -34
  194. django_cfg/apps/payments/services/providers/models/currencies.py +0 -190
  195. django_cfg/apps/payments/services/providers/nowpayments/__init__.py +0 -4
  196. django_cfg/apps/payments/services/providers/nowpayments/models.py +0 -196
  197. django_cfg/apps/payments/services/providers/nowpayments/provider.py +0 -380
  198. django_cfg/apps/payments/services/providers/stripe/__init__.py +0 -4
  199. django_cfg/apps/payments/services/providers/stripe/models.py +0 -184
  200. django_cfg/apps/payments/services/providers/stripe/provider.py +0 -109
  201. django_cfg/apps/payments/services/security/__init__.py +0 -34
  202. django_cfg/apps/payments/services/security/error_handler.py +0 -635
  203. django_cfg/apps/payments/services/security/payment_notifications.py +0 -342
  204. django_cfg/apps/payments/services/security/webhook_validator.py +0 -474
  205. django_cfg/apps/payments/static/payments/css/payments.css +0 -340
  206. django_cfg/apps/payments/static/payments/js/notifications.js +0 -202
  207. django_cfg/apps/payments/static/payments/js/payment-utils.js +0 -318
  208. django_cfg/apps/payments/static/payments/js/theme.js +0 -86
  209. django_cfg/apps/payments/tasks/__init__.py +0 -12
  210. django_cfg/apps/payments/tasks/webhook_processing.py +0 -177
  211. django_cfg/apps/payments/templates/admin/payments/currency/change_list.html +0 -50
  212. django_cfg/apps/payments/templates/payments/base.html +0 -182
  213. django_cfg/apps/payments/templates/payments/components/payment_card.html +0 -201
  214. django_cfg/apps/payments/templates/payments/components/payment_qr_code.html +0 -109
  215. django_cfg/apps/payments/templates/payments/components/progress_bar.html +0 -43
  216. django_cfg/apps/payments/templates/payments/components/provider_stats.html +0 -40
  217. django_cfg/apps/payments/templates/payments/components/status_badge.html +0 -34
  218. django_cfg/apps/payments/templates/payments/components/status_overview.html +0 -148
  219. django_cfg/apps/payments/templates/payments/dashboard.html +0 -258
  220. django_cfg/apps/payments/templates/payments/dashboard_simple_test.html +0 -35
  221. django_cfg/apps/payments/templates/payments/payment_create.html +0 -579
  222. django_cfg/apps/payments/templates/payments/payment_detail.html +0 -373
  223. django_cfg/apps/payments/templates/payments/payment_list.html +0 -354
  224. django_cfg/apps/payments/templates/payments/stats.html +0 -261
  225. django_cfg/apps/payments/templates/payments/test.html +0 -213
  226. django_cfg/apps/payments/templatetags/payments_tags.py +0 -315
  227. django_cfg/apps/payments/utils/__init__.py +0 -43
  228. django_cfg/apps/payments/utils/billing_utils.py +0 -342
  229. django_cfg/apps/payments/utils/config_utils.py +0 -239
  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 -63
  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 -122
  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 -451
  241. django_cfg/apps/payments/views/templates/base.py +0 -212
  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 -158
  245. django_cfg/apps/payments/views/templates/qr_code.py +0 -174
  246. django_cfg/apps/payments/views/templates/stats.py +0 -244
  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 -66
  250. django_cfg/core/integration.py +0 -160
  251. django_cfg/template_archive/.gitignore +0 -1
  252. django_cfg/template_archive/__init__.py +0 -0
  253. django_cfg/urls.py +0 -33
  254. {django_cfg-1.2.31.dist-info → django_cfg-1.3.1.dist-info}/WHEEL +0 -0
  255. {django_cfg-1.2.31.dist-info → django_cfg-1.3.1.dist-info}/entry_points.txt +0 -0
  256. {django_cfg-1.2.31.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.31"
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,24 +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, NetworkAdmin, ProviderCurrencyAdmin
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
- 'NetworkAdmin',
21
- 'ProviderCurrencyAdmin',
22
29
  'TariffAdmin',
23
30
  'TariffEndpointGroupAdmin',
31
+
32
+ # API Key admins
33
+ 'APIKeyAdmin',
24
34
  ]