django-nativemojo 0.1.10__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.
- django_nativemojo-0.1.10.dist-info/LICENSE +19 -0
- django_nativemojo-0.1.10.dist-info/METADATA +96 -0
- django_nativemojo-0.1.10.dist-info/NOTICE +8 -0
- django_nativemojo-0.1.10.dist-info/RECORD +194 -0
- django_nativemojo-0.1.10.dist-info/WHEEL +4 -0
- mojo/__init__.py +3 -0
- mojo/apps/account/__init__.py +1 -0
- mojo/apps/account/admin.py +91 -0
- mojo/apps/account/apps.py +16 -0
- mojo/apps/account/migrations/0001_initial.py +77 -0
- mojo/apps/account/migrations/0002_user_is_email_verified_user_is_phone_verified.py +23 -0
- mojo/apps/account/migrations/0003_group_mojo_secrets_user_mojo_secrets.py +23 -0
- mojo/apps/account/migrations/__init__.py +0 -0
- mojo/apps/account/models/__init__.py +3 -0
- mojo/apps/account/models/group.py +98 -0
- mojo/apps/account/models/member.py +95 -0
- mojo/apps/account/models/pkey.py +18 -0
- mojo/apps/account/models/user.py +211 -0
- mojo/apps/account/rest/__init__.py +3 -0
- mojo/apps/account/rest/group.py +25 -0
- mojo/apps/account/rest/user.py +47 -0
- mojo/apps/account/utils/__init__.py +0 -0
- mojo/apps/account/utils/jwtoken.py +72 -0
- mojo/apps/account/utils/passkeys.py +54 -0
- mojo/apps/fileman/README.md +549 -0
- mojo/apps/fileman/__init__.py +0 -0
- mojo/apps/fileman/apps.py +15 -0
- mojo/apps/fileman/backends/__init__.py +117 -0
- mojo/apps/fileman/backends/base.py +319 -0
- mojo/apps/fileman/backends/filesystem.py +397 -0
- mojo/apps/fileman/backends/s3.py +398 -0
- mojo/apps/fileman/examples/configurations.py +378 -0
- mojo/apps/fileman/examples/usage_example.py +665 -0
- mojo/apps/fileman/management/__init__.py +1 -0
- mojo/apps/fileman/management/commands/__init__.py +1 -0
- mojo/apps/fileman/management/commands/cleanup_expired_uploads.py +222 -0
- mojo/apps/fileman/models/__init__.py +7 -0
- mojo/apps/fileman/models/file.py +292 -0
- mojo/apps/fileman/models/manager.py +227 -0
- mojo/apps/fileman/models/render.py +0 -0
- mojo/apps/fileman/rest/__init__ +0 -0
- mojo/apps/fileman/rest/__init__.py +23 -0
- mojo/apps/fileman/rest/fileman.py +13 -0
- mojo/apps/fileman/rest/upload.py +92 -0
- mojo/apps/fileman/utils/__init__.py +19 -0
- mojo/apps/fileman/utils/upload.py +616 -0
- mojo/apps/incident/__init__.py +1 -0
- mojo/apps/incident/handlers/__init__.py +3 -0
- mojo/apps/incident/handlers/event_handlers.py +142 -0
- mojo/apps/incident/migrations/0001_initial.py +83 -0
- mojo/apps/incident/migrations/0002_rename_bundle_ruleset_bundle_minutes_event_hostname_and_more.py +44 -0
- mojo/apps/incident/migrations/0003_alter_event_model_id.py +18 -0
- mojo/apps/incident/migrations/0004_alter_incident_model_id.py +18 -0
- mojo/apps/incident/migrations/__init__.py +0 -0
- mojo/apps/incident/models/__init__.py +3 -0
- mojo/apps/incident/models/event.py +135 -0
- mojo/apps/incident/models/incident.py +33 -0
- mojo/apps/incident/models/rule.py +247 -0
- mojo/apps/incident/parsers/__init__.py +0 -0
- mojo/apps/incident/parsers/ossec/__init__.py +1 -0
- mojo/apps/incident/parsers/ossec/core.py +82 -0
- mojo/apps/incident/parsers/ossec/parsed.py +23 -0
- mojo/apps/incident/parsers/ossec/rules.py +124 -0
- mojo/apps/incident/parsers/ossec/utils.py +169 -0
- mojo/apps/incident/reporter.py +42 -0
- mojo/apps/incident/rest/__init__.py +2 -0
- mojo/apps/incident/rest/event.py +23 -0
- mojo/apps/incident/rest/ossec.py +22 -0
- mojo/apps/logit/__init__.py +0 -0
- mojo/apps/logit/admin.py +37 -0
- mojo/apps/logit/migrations/0001_initial.py +32 -0
- mojo/apps/logit/migrations/0002_log_duid_log_payload_log_username.py +28 -0
- mojo/apps/logit/migrations/0003_log_level.py +18 -0
- mojo/apps/logit/migrations/__init__.py +0 -0
- mojo/apps/logit/models/__init__.py +1 -0
- mojo/apps/logit/models/log.py +57 -0
- mojo/apps/logit/rest.py +9 -0
- mojo/apps/metrics/README.md +79 -0
- mojo/apps/metrics/__init__.py +12 -0
- mojo/apps/metrics/redis_metrics.py +331 -0
- mojo/apps/metrics/rest/__init__.py +1 -0
- mojo/apps/metrics/rest/base.py +152 -0
- mojo/apps/metrics/rest/db.py +0 -0
- mojo/apps/metrics/utils.py +227 -0
- mojo/apps/notify/README.md +91 -0
- mojo/apps/notify/README_NOTIFICATIONS.md +566 -0
- mojo/apps/notify/__init__.py +0 -0
- mojo/apps/notify/admin.py +52 -0
- mojo/apps/notify/handlers/__init__.py +0 -0
- mojo/apps/notify/handlers/example_handlers.py +516 -0
- mojo/apps/notify/handlers/ses/__init__.py +25 -0
- mojo/apps/notify/handlers/ses/bounce.py +0 -0
- mojo/apps/notify/handlers/ses/complaint.py +25 -0
- mojo/apps/notify/handlers/ses/message.py +86 -0
- mojo/apps/notify/management/__init__.py +0 -0
- mojo/apps/notify/management/commands/__init__.py +1 -0
- mojo/apps/notify/management/commands/process_notifications.py +370 -0
- mojo/apps/notify/mod +0 -0
- mojo/apps/notify/models/__init__.py +12 -0
- mojo/apps/notify/models/account.py +128 -0
- mojo/apps/notify/models/attachment.py +24 -0
- mojo/apps/notify/models/bounce.py +68 -0
- mojo/apps/notify/models/complaint.py +40 -0
- mojo/apps/notify/models/inbox.py +113 -0
- mojo/apps/notify/models/inbox_message.py +173 -0
- mojo/apps/notify/models/outbox.py +129 -0
- mojo/apps/notify/models/outbox_message.py +288 -0
- mojo/apps/notify/models/template.py +30 -0
- mojo/apps/notify/providers/__init__.py +0 -0
- mojo/apps/notify/providers/aws.py +73 -0
- mojo/apps/notify/rest/__init__.py +0 -0
- mojo/apps/notify/rest/ses.py +0 -0
- mojo/apps/notify/utils/__init__.py +2 -0
- mojo/apps/notify/utils/notifications.py +404 -0
- mojo/apps/notify/utils/parsing.py +202 -0
- mojo/apps/notify/utils/render.py +144 -0
- mojo/apps/tasks/README.md +118 -0
- mojo/apps/tasks/__init__.py +11 -0
- mojo/apps/tasks/manager.py +489 -0
- mojo/apps/tasks/rest/__init__.py +2 -0
- mojo/apps/tasks/rest/hooks.py +0 -0
- mojo/apps/tasks/rest/tasks.py +62 -0
- mojo/apps/tasks/runner.py +174 -0
- mojo/apps/tasks/tq_handlers.py +14 -0
- mojo/decorators/__init__.py +3 -0
- mojo/decorators/auth.py +25 -0
- mojo/decorators/cron.py +31 -0
- mojo/decorators/http.py +132 -0
- mojo/decorators/validate.py +14 -0
- mojo/errors.py +88 -0
- mojo/helpers/__init__.py +0 -0
- mojo/helpers/aws/__init__.py +0 -0
- mojo/helpers/aws/client.py +8 -0
- mojo/helpers/aws/s3.py +268 -0
- mojo/helpers/aws/setup_email.py +0 -0
- mojo/helpers/cron.py +79 -0
- mojo/helpers/crypto/__init__.py +4 -0
- mojo/helpers/crypto/aes.py +60 -0
- mojo/helpers/crypto/hash.py +59 -0
- mojo/helpers/crypto/privpub/__init__.py +1 -0
- mojo/helpers/crypto/privpub/hybrid.py +97 -0
- mojo/helpers/crypto/privpub/rsa.py +104 -0
- mojo/helpers/crypto/sign.py +36 -0
- mojo/helpers/crypto/too.l.py +25 -0
- mojo/helpers/crypto/utils.py +26 -0
- mojo/helpers/daemon.py +94 -0
- mojo/helpers/dates.py +69 -0
- mojo/helpers/dns/__init__.py +0 -0
- mojo/helpers/dns/godaddy.py +62 -0
- mojo/helpers/filetypes.py +128 -0
- mojo/helpers/logit.py +310 -0
- mojo/helpers/modules.py +95 -0
- mojo/helpers/paths.py +63 -0
- mojo/helpers/redis.py +10 -0
- mojo/helpers/request.py +89 -0
- mojo/helpers/request_parser.py +269 -0
- mojo/helpers/response.py +14 -0
- mojo/helpers/settings.py +146 -0
- mojo/helpers/sysinfo.py +140 -0
- mojo/helpers/ua.py +0 -0
- mojo/middleware/__init__.py +0 -0
- mojo/middleware/auth.py +26 -0
- mojo/middleware/logging.py +55 -0
- mojo/middleware/mojo.py +21 -0
- mojo/migrations/0001_initial.py +32 -0
- mojo/migrations/__init__.py +0 -0
- mojo/models/__init__.py +2 -0
- mojo/models/meta.py +262 -0
- mojo/models/rest.py +538 -0
- mojo/models/secrets.py +59 -0
- mojo/rest/__init__.py +1 -0
- mojo/rest/info.py +26 -0
- mojo/serializers/__init__.py +0 -0
- mojo/serializers/models.py +165 -0
- mojo/serializers/openapi.py +188 -0
- mojo/urls.py +38 -0
- mojo/ws4redis/README.md +174 -0
- mojo/ws4redis/__init__.py +2 -0
- mojo/ws4redis/client.py +283 -0
- mojo/ws4redis/connection.py +327 -0
- mojo/ws4redis/exceptions.py +32 -0
- mojo/ws4redis/redis.py +183 -0
- mojo/ws4redis/servers/__init__.py +0 -0
- mojo/ws4redis/servers/base.py +86 -0
- mojo/ws4redis/servers/django.py +171 -0
- mojo/ws4redis/servers/uwsgi.py +63 -0
- mojo/ws4redis/settings.py +45 -0
- mojo/ws4redis/utf8validator.py +128 -0
- mojo/ws4redis/websocket.py +403 -0
- testit/__init__.py +0 -0
- testit/client.py +147 -0
- testit/faker.py +20 -0
- testit/helpers.py +198 -0
- testit/runner.py +262 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
Apache License
|
2
|
+
Version 2.0, January 2004
|
3
|
+
http://www.apache.org/licenses/
|
4
|
+
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
6
|
+
|
7
|
+
Copyright [2025] Native Mojo
|
8
|
+
|
9
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
10
|
+
you may not use this file except in compliance with the License.
|
11
|
+
You may obtain a copy of the License at
|
12
|
+
|
13
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
14
|
+
|
15
|
+
Unless required by applicable law or agreed to in writing, software
|
16
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
17
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
18
|
+
See the License for the specific language governing permissions and
|
19
|
+
limitations under the License.
|
@@ -0,0 +1,96 @@
|
|
1
|
+
Metadata-Version: 2.3
|
2
|
+
Name: django-nativemojo
|
3
|
+
Version: 0.1.10
|
4
|
+
Summary: A REST framework for DJANGO with some extra apps that make it easy to provide a secure robust graph like RESIT API.
|
5
|
+
License: MIT
|
6
|
+
Author: MOJO Dev Team
|
7
|
+
Author-email: gotmojo@nativemojo.com
|
8
|
+
Requires-Python: >=3.9,<4.0
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
11
|
+
Classifier: Programming Language :: Python :: 3.9
|
12
|
+
Classifier: Programming Language :: Python :: 3.10
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
16
|
+
Requires-Dist: django (>=4.2.18,<6.0.0)
|
17
|
+
Requires-Dist: django-cors-headers (>=4.7.0,<5.0.0)
|
18
|
+
Requires-Dist: faker (>=35.2.0,<36.0.0)
|
19
|
+
Requires-Dist: gevent (>=25.5.1,<26.0.0)
|
20
|
+
Requires-Dist: pycryptodome (>=3.21.0,<4.0.0)
|
21
|
+
Requires-Dist: pyjwt (>=2.10.1,<3.0.0)
|
22
|
+
Requires-Dist: pyobjict (>=2.0.2,<4.0.0)
|
23
|
+
Requires-Dist: pytz (>=2025.1,<2026.0)
|
24
|
+
Requires-Dist: redis (>=3.5.3,<6.0.0)
|
25
|
+
Requires-Dist: requests (>=2.32.3,<3.0.0)
|
26
|
+
Requires-Dist: ua-parser (>=1.0.1,<2.0.0)
|
27
|
+
Requires-Dist: ujson (>=5.10.0,<6.0.0)
|
28
|
+
Description-Content-Type: text/markdown
|
29
|
+
|
30
|
+
# Django-MOJO Documentation
|
31
|
+
|
32
|
+
Django-MOJO is a streamlined set of Django applications and a lightweight REST framework designed to simplify user authentication, authorization, and efficient API testing. This documentation provides descriptions and examples to help you get started quickly.
|
33
|
+
|
34
|
+
## Why Django-MOJO?
|
35
|
+
|
36
|
+
We built Django-MOJO to address the complexity and overhead of existing REST frameworks. Many frameworks are feature-heavy, making them cumbersome for projects that require simplicity, speed, and robust security.
|
37
|
+
|
38
|
+
## Key Differentiators
|
39
|
+
|
40
|
+
- **Lightweight Framework:** Django-MOJO is minimalistic, providing an easy way to add REST APIs to your Django models without unnecessary complexity.
|
41
|
+
- **Built-in Security:** Security is integral to Django-MOJO. We offer an alternative to Django's built-in permissions system, automatically protecting your REST APIs and data.
|
42
|
+
- **Robust Object-Level Permission System:** Unlike Django's native model-level permissions, Django-MOJO provides a simple yet robust permission system at the object level. This allows fine-grained control, enabling permissions to be applied to individual objects and extended to both user and group levels.
|
43
|
+
- **Effortless Integration:** Adding REST endpoints to your models is straightforward, enabling rapid development without compromising security or performance.
|
44
|
+
|
45
|
+
With Django-MOJO, you get a simple, efficient framework with powerful security features designed for developers who value speed and control.
|
46
|
+
|
47
|
+
## Table of Contents
|
48
|
+
|
49
|
+
1. [Overview](#overview)
|
50
|
+
2. [Installation](#installation)
|
51
|
+
3. [MOJO.Auth - Authentication and Authorization](#mojo-auth)
|
52
|
+
- [JWT Authentication Middleware](#jwt-authentication)
|
53
|
+
- [Models](#models)
|
54
|
+
- [REST API](#mojo-auth-rest-api)
|
55
|
+
4. [MOJO - REST Framework](#mojo)
|
56
|
+
- [URL Decorators](#url-decorators)
|
57
|
+
- [GraphSerializer](#graphserializer)
|
58
|
+
5. [Testit - Testing Suite](#testit)
|
59
|
+
- [Writing Tests](#writing-tests)
|
60
|
+
- [Running Tests](#running-tests)
|
61
|
+
6. [Taskit - Task Runner](#taskit)
|
62
|
+
7. [Utilities](#utilities)
|
63
|
+
8. [Contributing](#contributing)
|
64
|
+
9. [License](#license)
|
65
|
+
|
66
|
+
## Overview
|
67
|
+
|
68
|
+
Django-MOJO is a collection of Django-based applications focused on authentication, task management, and testing. These tools are built to enhance development efficiency by providing utilities for common requirements such as user management, token-based authentication, and automated testing.
|
69
|
+
|
70
|
+
## Installation
|
71
|
+
|
72
|
+
```bash
|
73
|
+
pip install django-nativemojo
|
74
|
+
```
|
75
|
+
|
76
|
+
## Detailed Documentation
|
77
|
+
|
78
|
+
For detailed information about each module and its usage, refer to the documentation within the `docs` folder:
|
79
|
+
|
80
|
+
- [MOJO Auth Documentation](docs/auth.md): Authentication and authorization management with JWT support.
|
81
|
+
- [MOJO REST Documentation](docs/rest.md): Provides RESTful API capabilities for Django models.
|
82
|
+
- [MOJO Testing Documentation](docs/testit.md): Offers tools and utilities for testing Django applications.
|
83
|
+
- [MOJO Tasks Documentation](docs/tasks.md): Handles task management and processing with Redis.
|
84
|
+
- [MOJO Decorators Documentation](docs/decorators.md): Describes decorators to enhance Django views with HTTP routing, validation, etc.
|
85
|
+
- [Helpers Documentation](docs/helpers.md): Lists various helper utilities for common tasks.
|
86
|
+
- [MOJO Metrics Documentation](docs/metrics.md): Details on recording and retrieving metrics using Redis.
|
87
|
+
- [Cron Scheduler Documentation](docs/cron.md): Explains task scheduling using a cron syntax.
|
88
|
+
|
89
|
+
## Contributing
|
90
|
+
|
91
|
+
We welcome contributions! Please create an issue or submit a pull request on the GitHub repository.
|
92
|
+
|
93
|
+
## License
|
94
|
+
|
95
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
96
|
+
|
@@ -0,0 +1,8 @@
|
|
1
|
+
Native Mojo Framework
|
2
|
+
Copyright 2025 Native Mojo
|
3
|
+
|
4
|
+
This product includes software developed by Native Mojo.
|
5
|
+
Licensed under the Apache License, Version 2.0 (the "License").
|
6
|
+
|
7
|
+
You may obtain a copy of the License at:
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
@@ -0,0 +1,194 @@
|
|
1
|
+
mojo/__init__.py,sha256=xxWQdMLF2SWv7E9FsazjGtL0d7VtUbkFD-pG8dvkqwk,71
|
2
|
+
mojo/apps/account/__init__.py,sha256=RwxmQqhA0Pub7VSpEHplzPYjfPBBzioocJeQ8pCNeZ4,46
|
3
|
+
mojo/apps/account/admin.py,sha256=sE4GxFX9-g-vvNWf22LOqlbQdKK47O9sKP-ohdBpmiE,3026
|
4
|
+
mojo/apps/account/apps.py,sha256=CCK2aJu19BpDq_uDI8DIqJFbRmfudzY9KZWahcbYLbE,539
|
5
|
+
mojo/apps/account/migrations/0001_initial.py,sha256=qOwAHtdgyTI-ZGGOnC2ZUn-NSqlyp1z5c6uXvCZBbNE,4220
|
6
|
+
mojo/apps/account/migrations/0002_user_is_email_verified_user_is_phone_verified.py,sha256=tBGQ9p7ADhFGGTOXDBslXK5Q4igfpbjI3j1IXqq5064,549
|
7
|
+
mojo/apps/account/migrations/0003_group_mojo_secrets_user_mojo_secrets.py,sha256=il2zEdYBGgnUa1ybes3AGPx1RykenlnXr-1nIlhVawU,616
|
8
|
+
mojo/apps/account/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
|
+
mojo/apps/account/models/__init__.py,sha256=zmePIaBIvzZ2LmiqAD8i-TR1lJ5SBwRzHXP3totxffc,80
|
10
|
+
mojo/apps/account/models/group.py,sha256=TRIkMS3QlJVoz20AdSbfr6NMuJBDYTwkI_AIyThbwlI,3093
|
11
|
+
mojo/apps/account/models/member.py,sha256=fYa0HAGoZIMJHZcpfe3JKPXEJET-NefyiAtnES88YNg,3315
|
12
|
+
mojo/apps/account/models/pkey.py,sha256=sSHixJTi7HwjJ-p3CB2UePGQLb0zV4UshS01xi8uykE,687
|
13
|
+
mojo/apps/account/models/user.py,sha256=HZNqX4Th6lySXIQH0xjDUOQw7gkIk2GPBY34b8Z3ge4,7830
|
14
|
+
mojo/apps/account/rest/__init__.py,sha256=IUkkLoR8YkarNZyq_KtDj1OcNgpMu_rIXnVhBsjkMVw,55
|
15
|
+
mojo/apps/account/rest/group.py,sha256=QF6mBrvvfmhXGDG6cP_t2oz3CsfP9wHY8MUmiVwEkWQ,835
|
16
|
+
mojo/apps/account/rest/user.py,sha256=yoJKX88peUDUmgGKV5rAFTEAjH6_KNTkdx_j5wUhbvI,1805
|
17
|
+
mojo/apps/account/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
18
|
+
mojo/apps/account/utils/jwtoken.py,sha256=7EMC08oDB9oeasv_7nishUNrE-QTls-Mv2n4yAa9euk,2714
|
19
|
+
mojo/apps/account/utils/passkeys.py,sha256=vUsXroe4SYcst4L7-eRWDR21l-yVYMOKa1-yWFNKfPo,2343
|
20
|
+
mojo/apps/fileman/README.md,sha256=SHHrn_1VNHoI2ZFHwa-WKKDmQimeNoo_Qiv1MA7fJfs,14131
|
21
|
+
mojo/apps/fileman/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
|
+
mojo/apps/fileman/apps.py,sha256=evFaBnGp90BZWgAe00fOYjdZ--5msi_vW8zjHgVct1Y,383
|
23
|
+
mojo/apps/fileman/backends/__init__.py,sha256=BQqbsGYQvfOPlXLio2XwNGsT5eLGIbrf01PZ8OceUx8,3292
|
24
|
+
mojo/apps/fileman/backends/base.py,sha256=sWw28XLqOdivxvziDrS5yXDxhWyoIciGvox158ry_zI,9731
|
25
|
+
mojo/apps/fileman/backends/filesystem.py,sha256=qoq-tmv4mDhlOazAQez5hhQWSRZ1g7p0SjKkh1QPOJE,15755
|
26
|
+
mojo/apps/fileman/backends/s3.py,sha256=CJ0x-GeBdZwGdYXqbv0VX6P1AsvM7LJtWpw8W-QNi4k,14743
|
27
|
+
mojo/apps/fileman/examples/configurations.py,sha256=vDIMijAvF-iVrc8ZT1OzjDPKCJYsvxuvAuirXhB9FYU,13775
|
28
|
+
mojo/apps/fileman/examples/usage_example.py,sha256=ATkGuUUoNYb4xhEaWFul7Sj-gyKIa9XF5EmVUibSbMQ,22795
|
29
|
+
mojo/apps/fileman/management/__init__.py,sha256=HqDUzH9gSF7kUKGypm6LZ5cHxzYEc3I2_9fB3eI283s,36
|
30
|
+
mojo/apps/fileman/management/commands/__init__.py,sha256=XtylA46UPDJ5ZY48r5yyk7ZKpvfmnb8kYJjIRVFAMiM,45
|
31
|
+
mojo/apps/fileman/management/commands/cleanup_expired_uploads.py,sha256=818-r5w8sKPSOMa1iA7VjUSpYCnlKdjWtsv8cdHkfY8,8354
|
32
|
+
mojo/apps/fileman/models/__init__.py,sha256=yCL7DVsaVaolSaKDHswzCR0SfQhHleLLqK4luZQqP7Y,101
|
33
|
+
mojo/apps/fileman/models/file.py,sha256=Jv4IZDZfdVL0s3qTmEpoXdu_bKzt8bjPUbcihg47jUU,8469
|
34
|
+
mojo/apps/fileman/models/manager.py,sha256=NorEmFWBpCkoVTwG6pl9uApUfFKEfGP47GNApFJFcXo,6928
|
35
|
+
mojo/apps/fileman/models/render.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
36
|
+
mojo/apps/fileman/rest/__init__,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
37
|
+
mojo/apps/fileman/rest/__init__.py,sha256=bTdI15HSGfduCS5YQUdqh2aOS9iwbchF1LL1Fok8lPc,418
|
38
|
+
mojo/apps/fileman/rest/fileman.py,sha256=cQYKVm9Nzu5-Hf2tWbq8Gg_zad3RtIy2bE88NLgKlrs,346
|
39
|
+
mojo/apps/fileman/rest/upload.py,sha256=He7d3wIwEGnh4XjoJ-Q43dd5UHeZ5cCXW8C_L2f5cpM,2736
|
40
|
+
mojo/apps/fileman/utils/__init__.py,sha256=K1QDycY3cDNbYf1FGaegJAzcgJAQMBK0SKQIJWXVECM,345
|
41
|
+
mojo/apps/fileman/utils/upload.py,sha256=hcH0pUf_dZ3tlkZQw1_YBBeAqxwMEDedsBG-n310uS8,18792
|
42
|
+
mojo/apps/incident/__init__.py,sha256=G75zqcH8fatIpQ0Jfp67xg48JtpQR_A6MkN2ykxrjRU,35
|
43
|
+
mojo/apps/incident/handlers/__init__.py,sha256=gl8imRiKYCnwB2SBoAavpUfJ9ifkS7WF_DOJKMHJg9Q,128
|
44
|
+
mojo/apps/incident/handlers/event_handlers.py,sha256=UkGDYIQq73OdTWFUJlLlsCOhOYZB0cbhKwuGippdnOE,4696
|
45
|
+
mojo/apps/incident/migrations/0001_initial.py,sha256=F1qZFxGRjD9qyk_zHkn3FmdyMh94Z0bcnHIvmIEZcJI,4506
|
46
|
+
mojo/apps/incident/migrations/0002_rename_bundle_ruleset_bundle_minutes_event_hostname_and_more.py,sha256=9_C_mLwbdr1RcyrtD-pm4EuwuFKInluk5IBuW4_1UJU,1441
|
47
|
+
mojo/apps/incident/migrations/0003_alter_event_model_id.py,sha256=pFN_W8Ok46rmQOqKDFrAXYEY0iXphFE4Rh7MSJu0VGY,459
|
48
|
+
mojo/apps/incident/migrations/0004_alter_incident_model_id.py,sha256=Cv2mqjYXeHgYBi7BUb_mYw-PuPQKRXj6_uy9bqECNRI,422
|
49
|
+
mojo/apps/incident/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
50
|
+
mojo/apps/incident/models/__init__.py,sha256=vpTRJerw0lAOa31nEsxiJRRhU4CYcNHRqqPijpAtM9A,88
|
51
|
+
mojo/apps/incident/models/event.py,sha256=jDEFVzQdv7NZsgfpm2sy0QTirazXWJg7McHElFW50TI,5177
|
52
|
+
mojo/apps/incident/models/incident.py,sha256=OJVEW54VFHT7PVcZFnGqDhrCE9wRS7nO-17fqnJAQek,1210
|
53
|
+
mojo/apps/incident/models/rule.py,sha256=74tP-h5KqNRRvbmjksCj4SrKJeWi5Fu3vy18t7k6Jys,10110
|
54
|
+
mojo/apps/incident/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
55
|
+
mojo/apps/incident/parsers/ossec/__init__.py,sha256=2e96VUlQj_WgmSKLaUVxKijdv-tY5juquEUebWRCrdQ,48
|
56
|
+
mojo/apps/incident/parsers/ossec/core.py,sha256=lC3DuJolsJtHOdgVCG2qYcVwi_ryM8WNpWk9tfx-Kwg,2429
|
57
|
+
mojo/apps/incident/parsers/ossec/parsed.py,sha256=1Fcw7F01lAK70aSf7ga5ka2izB_IUGeIfomEcqUY_Qk,786
|
58
|
+
mojo/apps/incident/parsers/ossec/rules.py,sha256=635TmK6uUOQZsgMKDbU5HJIGjYlXUo4I6AIBFCuY0V8,4252
|
59
|
+
mojo/apps/incident/parsers/ossec/utils.py,sha256=OkD5unXJAuqQo2_mGCO8bokY0tTOzwAAo28hz7Ux8vg,5061
|
60
|
+
mojo/apps/incident/reporter.py,sha256=38fU5T3jAZhgdZkTM1fStW8iXUUY4Lvq9f9_JbQVaIc,1535
|
61
|
+
mojo/apps/incident/rest/__init__.py,sha256=KxYajaFDgrKzBLI5fgMK4Qzj6-LFH_J7uCOhWpxNW5E,42
|
62
|
+
mojo/apps/incident/rest/event.py,sha256=zqCbMSsFJRIvXzyAP3pyUf1tfpMoEZL2A6holmY_0wY,668
|
63
|
+
mojo/apps/incident/rest/ossec.py,sha256=Rw7o1LRCZdeHL3wOry6zgT9r1MGVxUzJiwvmyT5GfbI,730
|
64
|
+
mojo/apps/logit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
65
|
+
mojo/apps/logit/admin.py,sha256=XLvz6CtwfW3rryp5xfvtylL_CWZ5-CbChK4DB2Hl3qM,1552
|
66
|
+
mojo/apps/logit/migrations/0001_initial.py,sha256=7vrTetfEFrUzc3cOoboyktfK_KlsfrGAoCDf4T2sJzk,1348
|
67
|
+
mojo/apps/logit/migrations/0002_log_duid_log_payload_log_username.py,sha256=s97JeIMjNmKah2b7YcGauaVg_1liTeUJfq-GCi0wP6U,696
|
68
|
+
mojo/apps/logit/migrations/0003_log_level.py,sha256=HzLwBYitzRsHxGkM9gKrgc4A8dzLt4ewl14nCnWLSnc,424
|
69
|
+
mojo/apps/logit/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
70
|
+
mojo/apps/logit/models/__init__.py,sha256=cOGwOYzMoshEbZiiasBGkj6wF0SBu3Jdpl-AuakDesw,19
|
71
|
+
mojo/apps/logit/models/log.py,sha256=4ZEnILbDZ-1kn-59-jPG2miTPxzRWdijS7qjDzFEy_Q,2359
|
72
|
+
mojo/apps/logit/rest.py,sha256=bPoq9Blqzr1YU43LTLf9DiSLe6DgjcH1ctDnfvidpbs,205
|
73
|
+
mojo/apps/metrics/README.md,sha256=i4dHNqTKgBLMSIxyLddD7wifxZRDTn2JqQGPmW3EWIw,2984
|
74
|
+
mojo/apps/metrics/__init__.py,sha256=1qdjIyJiY3nHkFEcW2UQ23JWkgSonhMOf6JiEY4BYRw,223
|
75
|
+
mojo/apps/metrics/redis_metrics.py,sha256=6zwXc4_QOGrFE0M4njISvoECbyuCcUXvFzYJyRynlo0,12694
|
76
|
+
mojo/apps/metrics/rest/__init__.py,sha256=ERmmOxz_9mUkIuccNbzUa5Y6gVLLVDdyc4cCxbCCUbY,20
|
77
|
+
mojo/apps/metrics/rest/base.py,sha256=1uEqxlvEQpXNOJqFpQe-HxETiYF_6bxmJ9X5eYclabg,5895
|
78
|
+
mojo/apps/metrics/rest/db.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
79
|
+
mojo/apps/metrics/utils.py,sha256=lVqMwReXxGE3AjjIIspHH5Cgbqe2so1vlMSbFurZ9Y4,7313
|
80
|
+
mojo/apps/notify/README.md,sha256=jsklDrzD5d94r7cwgaU6Gi1HCjBDfWq7jd92qB0JYPU,2169
|
81
|
+
mojo/apps/notify/README_NOTIFICATIONS.md,sha256=JhPpwDVHxJ9OPG7-R_aVWmlpSwFTpnv3wYDteowbPZM,14156
|
82
|
+
mojo/apps/notify/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
83
|
+
mojo/apps/notify/admin.py,sha256=SgBRpBXLaUS_7L1cvPqn6403UGnw2mGzLJ6GJS8hr8E,1930
|
84
|
+
mojo/apps/notify/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
85
|
+
mojo/apps/notify/handlers/example_handlers.py,sha256=gEPs9-JQ5oFqUhVqRjvgP2ge456K-wlMWcKqLVtZGnQ,17496
|
86
|
+
mojo/apps/notify/handlers/ses/__init__.py,sha256=Lev-YzMn5sUZaUH2C5mHmJEiAH5mIA64rZGEs5bRtvI,850
|
87
|
+
mojo/apps/notify/handlers/ses/bounce.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
88
|
+
mojo/apps/notify/handlers/ses/complaint.py,sha256=F5l7C7jemGBcolc8r0YEDe2H_xlbtSEbVHXCoVuVHEI,825
|
89
|
+
mojo/apps/notify/handlers/ses/message.py,sha256=lC2OiYxsA6aujaEHp7WnVvlvi_VILWZrb6YKr3bYsXc,2876
|
90
|
+
mojo/apps/notify/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
91
|
+
mojo/apps/notify/management/commands/__init__.py,sha256=R8BsVh1cMnNDaFJopGszkfOZju6JDSvlHw0hzEpTrm0,4
|
92
|
+
mojo/apps/notify/management/commands/process_notifications.py,sha256=wt_dNBJi7WtEFwyYIs_mcVcZCDhUmx-uFGvKgDs9SMA,12969
|
93
|
+
mojo/apps/notify/mod,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
94
|
+
mojo/apps/notify/models/__init__.py,sha256=m0yoT_3od01fkPXRmbC3tLaNYF8PTm-isiYdDKT4xIA,363
|
95
|
+
mojo/apps/notify/models/account.py,sha256=rOeZsCMw47wsjk1tWg1p_aDPbttfIbk5GIjFAhO9nds,3323
|
96
|
+
mojo/apps/notify/models/attachment.py,sha256=cUOWyCR2ai6GQ54KPjDfD2s89eklMJ-8U8XTi5V-YuM,914
|
97
|
+
mojo/apps/notify/models/bounce.py,sha256=v0j5B7KMJYgOSkzynAtyRiXhP4LJFoh9YWe33oI_M_A,2640
|
98
|
+
mojo/apps/notify/models/complaint.py,sha256=sbzS-gmhfKwTED5jTnNgUwuox3Wjh0ah1GiNujAm4dg,1524
|
99
|
+
mojo/apps/notify/models/inbox.py,sha256=oo2PwiOgTyf1TJ0ZkbqyPirUAL_dIfxxOWS9epoc1tw,3346
|
100
|
+
mojo/apps/notify/models/inbox_message.py,sha256=zgiRNY7o4yTRTJhPufwASl0pS3RMSAPjChAJ1DVxEj8,5256
|
101
|
+
mojo/apps/notify/models/outbox.py,sha256=hRjalXVES3p6lH4u622mX1ABxzFRTcdvGlV9VuDDHy8,3788
|
102
|
+
mojo/apps/notify/models/outbox_message.py,sha256=6Ebmcy0aqt7wvoGxIDGYpDvIzg6mQeJWZzlWl_BFtUk,8413
|
103
|
+
mojo/apps/notify/models/template.py,sha256=kAj1GfHII277Ez01MZkTlkrgyr_xsgTvDrRVAy-O6qQ,1025
|
104
|
+
mojo/apps/notify/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
105
|
+
mojo/apps/notify/providers/aws.py,sha256=w3L7jvEtLcIu9V8IN8BNKNoRtxxangGzGzFTQ8-5pE0,2701
|
106
|
+
mojo/apps/notify/rest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
107
|
+
mojo/apps/notify/rest/ses.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
108
|
+
mojo/apps/notify/utils/__init__.py,sha256=G4oWPVgLaz3QXXTF_lEa1GRmU8C15b6wn78A6YjSNSA,87
|
109
|
+
mojo/apps/notify/utils/notifications.py,sha256=XY3P-BHrnA2vFSKrRPjFDClfTR7uRFJfJf17oIWn3D8,13167
|
110
|
+
mojo/apps/notify/utils/parsing.py,sha256=GN-9h_nnutB7w1Ebg8emeF6j_gyX-BWRYOKwGWLVjrI,6557
|
111
|
+
mojo/apps/notify/utils/render.py,sha256=PN-KH9C3SUV8E78B91pIC06dd2Ak7hVqqxQbImrbp_4,5270
|
112
|
+
mojo/apps/tasks/README.md,sha256=PGBo7P-8FMbWcvhvNyJGx8ayd4MOl1l9D0QNZ4w2IW4,3700
|
113
|
+
mojo/apps/tasks/__init__.py,sha256=052U1fvSHzU_pGbbPB5KuOL_-KSHh_qxF6RIHuUGKhA,301
|
114
|
+
mojo/apps/tasks/manager.py,sha256=UvCvGxvcbvXTqBhcOP0lflAhuXfse4A3v_txqWKFx6w,16869
|
115
|
+
mojo/apps/tasks/rest/__init__.py,sha256=xDdCeGCNnN5vq3PObWsqslrSZ4CqdzzFVpdrDasmqqs,42
|
116
|
+
mojo/apps/tasks/rest/hooks.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
117
|
+
mojo/apps/tasks/rest/tasks.py,sha256=18fxIWNCqcl0kQfsoJVPSCGL4ZbJTtUTY56CB5-s_BE,1420
|
118
|
+
mojo/apps/tasks/runner.py,sha256=jd9MFOM1lvLuDmfmdo5_LrE3lu62gCYb7kKoS3o_0HY,6842
|
119
|
+
mojo/apps/tasks/tq_handlers.py,sha256=rT4Bg8mEUucNPShKw9w6srHhyeKJpgRID4DOV28J-No,369
|
120
|
+
mojo/decorators/__init__.py,sha256=XzKewkbEeLd0M1ciA6Qf1kbawOd2VV-FbAT1nMLBoQ0,64
|
121
|
+
mojo/decorators/auth.py,sha256=K3sJnVJRCgKlVgj2RB4plauA4NyfbMxfVWbwuT2uJ6E,832
|
122
|
+
mojo/decorators/cron.py,sha256=8Qc4XJU9wUSxfepRALZbeFmgOOVWikhGMnrcOk5wbIw,1199
|
123
|
+
mojo/decorators/http.py,sha256=SMDURloKk8HNY0DCerGMZnjvioO-DdXrZfdsGiJuDsg,5325
|
124
|
+
mojo/decorators/validate.py,sha256=MEaIR8yvsM2nloOVbqjvvnrrA0wZn6OLkov2tJ1qdIw,550
|
125
|
+
mojo/errors.py,sha256=MPJ5_B-RQNK69-fQ-Hs1oddjupjfwWNakieVPee9hU4,3281
|
126
|
+
mojo/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
127
|
+
mojo/helpers/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
128
|
+
mojo/helpers/aws/client.py,sha256=JoHStXSar6myZuObgteh06ZvFrKGp5Tv7lme0BFcAPw,203
|
129
|
+
mojo/helpers/aws/s3.py,sha256=Qdic9K0Teun86Mnf0fMq7ChzRwHe5GDxuGaP3cjSKUs,7595
|
130
|
+
mojo/helpers/aws/setup_email.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
131
|
+
mojo/helpers/cron.py,sha256=_hoKgYYc7m4oU_eU4uUOIXOhJA0A9Lw0f9GPm5TCcs4,2411
|
132
|
+
mojo/helpers/crypto/__init__.py,sha256=sEa199m84nvPZoLcHow3ZxWGZuDxJZDBQlfXu-uFUpM,177
|
133
|
+
mojo/helpers/crypto/aes.py,sha256=8VTAsykOxiSBbdKVK0DxJ_1Y2wGkY0CDRjhXSiMvF8o,1830
|
134
|
+
mojo/helpers/crypto/hash.py,sha256=HVgfzmpMO5K5stiiateB1y16SAHS7qOP0nGRGyVW0FU,2078
|
135
|
+
mojo/helpers/crypto/privpub/__init__.py,sha256=Om2Iw0r1tV4_W3OwWazLveQFTs4bwnYc35JxRBf9nm4,44
|
136
|
+
mojo/helpers/crypto/privpub/hybrid.py,sha256=APkqjHLPg4oGRBrji9e1YYKzr_v10yn5IV18ar04GIk,3422
|
137
|
+
mojo/helpers/crypto/privpub/rsa.py,sha256=ZrvHMsPv52t1ctuaAX2I7qwqnR1Yh5wLLCaveekMDsI,3420
|
138
|
+
mojo/helpers/crypto/sign.py,sha256=jC_QKm7WcxQix0DuxSk5SGD8L-6mBSl1ZHobPnpsR48,1204
|
139
|
+
mojo/helpers/crypto/too.l.py,sha256=6ypxFDOkHylcVfdGRlTtS-Jtig8JHkfVHi5N2w0i-_s,821
|
140
|
+
mojo/helpers/crypto/utils.py,sha256=eLnEL92TvBFzl07XtVGLprJQ2BTCsQqXDDuKaw9sIt4,771
|
141
|
+
mojo/helpers/daemon.py,sha256=6cC2XWIUZH59YdrV2dglPqNtJ8UUPbsKSatGsDp44m8,3276
|
142
|
+
mojo/helpers/dates.py,sha256=XbXbH9kvd8riIWUZA2PXl7hx2in7F8uSWX3DzNiO-kM,2064
|
143
|
+
mojo/helpers/dns/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
144
|
+
mojo/helpers/dns/godaddy.py,sha256=l8AboiEeGQ34p2t-i5Z6XDkf3siUgRsqIg1mVciPZnU,2334
|
145
|
+
mojo/helpers/filetypes.py,sha256=4BJpH8jQ_bZk-86yy2ZasVgVnxHNLIi96d2umQz_dXI,4163
|
146
|
+
mojo/helpers/logit.py,sha256=sOqWWRmcxHEInVE_wTsZIflSvZep2d8E92vcUws_zd0,9879
|
147
|
+
mojo/helpers/modules.py,sha256=Tq9agvdqLOMWsvyRYLwyyF-g28Y6zSCdJhfhT8iraj4,3180
|
148
|
+
mojo/helpers/paths.py,sha256=dIAGF0MOr9faE72fwne2-BEaarXCvJBsU8yJSjB15hA,2053
|
149
|
+
mojo/helpers/redis.py,sha256=ZQkw1vSVdDMAtybUOVM_XCyZ_38YhY1NTfofwihJqSg,288
|
150
|
+
mojo/helpers/request.py,sha256=9qPg6FyfwBzGDD1X390pdALzeKLRkYvSj0jBg0IssVA,2357
|
151
|
+
mojo/helpers/request_parser.py,sha256=OHsoBaZJ07OEWMDxVTnwElTEpd-zMtwpNdAKL_4KFzc,8862
|
152
|
+
mojo/helpers/response.py,sha256=YnCvfn3pvO4YW5Hym3nLe6D6GlTTjm4IMMkchCX53t8,521
|
153
|
+
mojo/helpers/settings.py,sha256=rIFxl8-z8XeW6RMI2IvR-WSxQ2u1j0MAqmXVEAVPSyE,5114
|
154
|
+
mojo/helpers/sysinfo.py,sha256=CHflsP26GZYTWU3LZpUtZ98l66x5QFXllfQJlv3MvRw,4517
|
155
|
+
mojo/helpers/ua.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
156
|
+
mojo/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
157
|
+
mojo/middleware/auth.py,sha256=RrApAXvlK5Llj75xPbVE_6RJJF_ubAFxUt3m9h1u-8I,941
|
158
|
+
mojo/middleware/logging.py,sha256=V2N0kx4AYoQbfKXk0vcgcMe9fL9zaPV7VfW2RwMvaSY,2283
|
159
|
+
mojo/middleware/mojo.py,sha256=EcTjSjwQgnyEmIpndxYQcwRY0C2SodgTubOr9dOEACI,679
|
160
|
+
mojo/migrations/0001_initial.py,sha256=ir1h2kZZ6WnAChhcCejCVd5C0kWhGsXKozNhZeWvUTs,1337
|
161
|
+
mojo/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
162
|
+
mojo/models/__init__.py,sha256=1A4nsKq1ZDt85pFrqLUTVqi-DTKojulrSa6rTJK65-Q,61
|
163
|
+
mojo/models/meta.py,sha256=XHSjwcWUwsGEuI2rbenQv4aXo0IPN8oJu5mk8I5vgWQ,10232
|
164
|
+
mojo/models/rest.py,sha256=TJQYDo96mdB1Ew-JuglQ_byurhxgrZazgZJK4-IO_ac,19645
|
165
|
+
mojo/models/secrets.py,sha256=GMxLDQ1XMor1AnMjxD4Dy_3aHEPcHwtI25bxPYOo64U,1906
|
166
|
+
mojo/rest/__init__.py,sha256=KjRXymi2g5qLVJ-KOOCFwqDocB2RxeGY6-T5HQU7np4,20
|
167
|
+
mojo/rest/info.py,sha256=ftL5NZjswWzIfRsxistZrPN8jbIAyHhygYzcb2M7UMQ,699
|
168
|
+
mojo/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
169
|
+
mojo/serializers/models.py,sha256=8Xk_TwTJfMiRjqlYNNauc3pBv3nUikJi3xElkflv8KE,7031
|
170
|
+
mojo/serializers/openapi.py,sha256=sRc9GQh6tbNIV-MnJN7Fn_4NeT0QF37tro8G88MMbck,6448
|
171
|
+
mojo/urls.py,sha256=lkB5Dxz7zaSQI2YC5nHvLgt32rcPeaj-YfknlUw_xzQ,1201
|
172
|
+
mojo/ws4redis/README.md,sha256=QvwdsauPKxx4qQqnJ991xeU8DgFQCj3CeQt-nCE4s-w,3624
|
173
|
+
mojo/ws4redis/__init__.py,sha256=ij80KRdl8a5pvMiYrZlseMtNPGApc9rwdvXxoUdDFBY,46
|
174
|
+
mojo/ws4redis/client.py,sha256=eT6e7Q6Rbqsv5R9BhTXkuJKkjKspewJGzDbi56ecL50,7070
|
175
|
+
mojo/ws4redis/connection.py,sha256=9ZrIyL78_T9n71s_gIlrZMgBAf6h51vr_c7a3HDM230,13532
|
176
|
+
mojo/ws4redis/exceptions.py,sha256=EGLoRTdqJVwz900pwhciqPuSjBBd08hhLgFu6umHrI4,636
|
177
|
+
mojo/ws4redis/redis.py,sha256=bcrIJ9laE9S55bMzmMlZLOYq-kQS9egrZ0aww64WWfQ,6713
|
178
|
+
mojo/ws4redis/servers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
179
|
+
mojo/ws4redis/servers/base.py,sha256=S8Dtiv-Af5spiI4Bdtz0iwFs26dOyXiIsHLOVG0Bk88,3765
|
180
|
+
mojo/ws4redis/servers/django.py,sha256=iuS16OxRcxIaOBaxfxxHxwwGC1TAmPykDhBYVeV4_ak,5902
|
181
|
+
mojo/ws4redis/servers/uwsgi.py,sha256=BftTWjKU_upZWRw1ONO5jPOL0VP6of7cuySyd866yHk,1733
|
182
|
+
mojo/ws4redis/settings.py,sha256=KKq00EwoGnz1yLwCZr5Dfoq2izivmAdsNEEM4EhZwN4,1610
|
183
|
+
mojo/ws4redis/utf8validator.py,sha256=S0OlfjeGRP75aO6CzZsF4oTjRQAgR17OWE9rgZdMBZA,5122
|
184
|
+
mojo/ws4redis/websocket.py,sha256=hfrZBM_fWukgEhwDZFLS4N4Q_jt-FsOu4m0mE1bWfeo,14207
|
185
|
+
testit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
186
|
+
testit/client.py,sha256=uG0_R1FJ36NaAPsCX4wJh07B4Tl54I4IqsUCCxpynto,5355
|
187
|
+
testit/faker.py,sha256=fdrgVkgdgypiGZGigBb9uyWHopflulaHrLOmzBdfCFA,393
|
188
|
+
testit/helpers.py,sha256=obLNW_wDhsJ_JQM0h6_-EhDT6END8jDShPtNDo-EeFs,5499
|
189
|
+
testit/runner.py,sha256=u_Tx1x144vOBXW737THyA6KqWJu1gSwWyBYn6JYNiBI,10302
|
190
|
+
django_nativemojo-0.1.10.dist-info/LICENSE,sha256=K2Ly2mJoqzHPrWcXQFXWbvDtphQ51huB2RbfGW7WmUM,774
|
191
|
+
django_nativemojo-0.1.10.dist-info/METADATA,sha256=bdBST6Z1gbaG4bmrUkoa4IiUHeqT4i4YfH9eNTFrqp4,4838
|
192
|
+
django_nativemojo-0.1.10.dist-info/NOTICE,sha256=FqvhpeIbbnXn4wqLHA6Ap2VhQfU2e7QVFFyRW8L_6ys,256
|
193
|
+
django_nativemojo-0.1.10.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
194
|
+
django_nativemojo-0.1.10.dist-info/RECORD,,
|
mojo/__init__.py
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
default_app_config = 'account.apps.AppConfig'
|
@@ -0,0 +1,91 @@
|
|
1
|
+
from django.contrib import admin
|
2
|
+
from django.utils.translation import gettext_lazy as _
|
3
|
+
from .models import User, Group, GroupMember
|
4
|
+
|
5
|
+
|
6
|
+
class UserAdmin(admin.ModelAdmin):
|
7
|
+
"""Custom Admin for the User model"""
|
8
|
+
|
9
|
+
# Fields displayed in the User list in Django Admin
|
10
|
+
list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff', 'is_active', 'last_login', 'id')
|
11
|
+
list_filter = ('is_staff', 'is_active')
|
12
|
+
|
13
|
+
# Fields displayed when viewing/editing a user
|
14
|
+
fieldsets = (
|
15
|
+
(None, {'fields': ('username', 'password')}),
|
16
|
+
(_('Personal Info'), {'fields': ('first_name', 'last_name', 'email', 'phone_number', 'display_name')}),
|
17
|
+
(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser')}),
|
18
|
+
(_('Important Dates'), {'fields': ('last_login', 'date_joined', 'last_activity')}),
|
19
|
+
(_('Metadata'), {'fields': ('permissions', 'metadata')}),
|
20
|
+
)
|
21
|
+
|
22
|
+
# Fields displayed when adding a new user
|
23
|
+
add_fieldsets = (
|
24
|
+
(None, {
|
25
|
+
'classes': ('wide',),
|
26
|
+
'fields': ('username', 'email', 'password'),
|
27
|
+
}),
|
28
|
+
)
|
29
|
+
|
30
|
+
# Searchable fields in the admin panel
|
31
|
+
search_fields = ('username', 'email', 'first_name', 'last_name')
|
32
|
+
ordering = ('username',)
|
33
|
+
|
34
|
+
# Read-only fields for security
|
35
|
+
readonly_fields = ('last_login', 'date_joined', 'last_activity')
|
36
|
+
|
37
|
+
admin.site.register(User, UserAdmin)
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
class GroupAdmin(admin.ModelAdmin):
|
42
|
+
"""Custom Admin for the Group model"""
|
43
|
+
|
44
|
+
# Fields displayed in the Group list in Django Admin
|
45
|
+
list_display = ('name', 'uuid', 'kind', 'is_active', 'created', 'modified', 'parent', 'id')
|
46
|
+
list_filter = ('is_active', 'kind')
|
47
|
+
|
48
|
+
# Searchable fields
|
49
|
+
search_fields = ('name', 'uuid', 'kind')
|
50
|
+
|
51
|
+
# Read-only fields for security
|
52
|
+
readonly_fields = ('created', 'modified')
|
53
|
+
|
54
|
+
# Fields displayed when viewing/editing a group
|
55
|
+
fieldsets = (
|
56
|
+
(None, {'fields': ('name', 'uuid', 'kind', 'is_active', 'parent')}),
|
57
|
+
('Metadata', {'fields': ('metadata',)}),
|
58
|
+
('Timestamps', {'fields': ('created', 'modified')}),
|
59
|
+
)
|
60
|
+
|
61
|
+
autocomplete_fields = ('parent',)
|
62
|
+
|
63
|
+
|
64
|
+
admin.site.register(Group, GroupAdmin)
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
class GroupMemberAdmin(admin.ModelAdmin):
|
69
|
+
"""Custom Admin for the GroupMember model"""
|
70
|
+
|
71
|
+
# Fields displayed in the GroupMember list in Django Admin
|
72
|
+
list_display = ('user', 'group', 'is_active', 'created', 'modified', 'id')
|
73
|
+
list_filter = ('is_active', 'group')
|
74
|
+
|
75
|
+
# Searchable fields
|
76
|
+
search_fields = ('user__username', 'user__email', 'group__name')
|
77
|
+
|
78
|
+
# Read-only fields for security
|
79
|
+
readonly_fields = ('created', 'modified')
|
80
|
+
|
81
|
+
# Fields displayed when viewing/editing a group member
|
82
|
+
fieldsets = (
|
83
|
+
(None, {'fields': ('user', 'group', 'is_active')}),
|
84
|
+
('Permissions', {'fields': ('permissions',)}),
|
85
|
+
('Metadata', {'fields': ('metadata',)}),
|
86
|
+
('Timestamps', {'fields': ('created', 'modified')}),
|
87
|
+
)
|
88
|
+
|
89
|
+
autocomplete_fields = ('group', 'user', )
|
90
|
+
|
91
|
+
admin.site.register(GroupMember, GroupMemberAdmin)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
from django.apps import AppConfig as BaseAppConfig
|
2
|
+
|
3
|
+
class AppConfig(BaseAppConfig):
|
4
|
+
default_auto_field = 'django.db.models.BigAutoField'
|
5
|
+
name = 'mojo.apps.account'
|
6
|
+
|
7
|
+
def ready(self):
|
8
|
+
from mojo.helpers.settings import settings
|
9
|
+
if settings.is_app_installed("django.contrib.admin"):
|
10
|
+
self.unregister_apps()
|
11
|
+
|
12
|
+
def unregister_apps(self):
|
13
|
+
from django.contrib import admin
|
14
|
+
from django.contrib.auth.models import Group
|
15
|
+
for model in [Group]:
|
16
|
+
admin.site.unregister(model)
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# Generated by Django 4.2.21 on 2025-05-29 21:29
|
2
|
+
|
3
|
+
from django.conf import settings
|
4
|
+
from django.db import migrations, models
|
5
|
+
import django.db.models.deletion
|
6
|
+
import mojo.models.rest
|
7
|
+
import uuid
|
8
|
+
|
9
|
+
|
10
|
+
class Migration(migrations.Migration):
|
11
|
+
|
12
|
+
initial = True
|
13
|
+
|
14
|
+
dependencies = [
|
15
|
+
]
|
16
|
+
|
17
|
+
operations = [
|
18
|
+
migrations.CreateModel(
|
19
|
+
name='User',
|
20
|
+
fields=[
|
21
|
+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
22
|
+
('password', models.CharField(max_length=128, verbose_name='password')),
|
23
|
+
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
|
24
|
+
('created', models.DateTimeField(auto_now_add=True)),
|
25
|
+
('modified', models.DateTimeField(auto_now_add=True)),
|
26
|
+
('last_activity', models.DateTimeField(db_index=True, default=None, null=True)),
|
27
|
+
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False)),
|
28
|
+
('username', models.TextField(unique=True)),
|
29
|
+
('email', models.EmailField(max_length=254, unique=True)),
|
30
|
+
('phone_number', models.CharField(blank=True, default=None, max_length=32, null=True)),
|
31
|
+
('display_name', models.CharField(blank=True, default=None, max_length=80, null=True)),
|
32
|
+
('auth_key', models.TextField(default=None, null=True)),
|
33
|
+
('onetime_code', models.TextField(default=None, null=True)),
|
34
|
+
('permissions', models.JSONField(blank=True, default=dict)),
|
35
|
+
('metadata', models.JSONField(blank=True, default=dict)),
|
36
|
+
('first_name', models.CharField(default='', max_length=80)),
|
37
|
+
('last_name', models.CharField(default='', max_length=80)),
|
38
|
+
('is_active', models.BooleanField(default=True)),
|
39
|
+
('is_staff', models.BooleanField(default=False)),
|
40
|
+
('is_superuser', models.BooleanField(default=False)),
|
41
|
+
('date_joined', models.DateTimeField(auto_now_add=True)),
|
42
|
+
],
|
43
|
+
options={
|
44
|
+
'abstract': False,
|
45
|
+
},
|
46
|
+
bases=(models.Model, mojo.models.rest.MojoModel),
|
47
|
+
),
|
48
|
+
migrations.CreateModel(
|
49
|
+
name='Group',
|
50
|
+
fields=[
|
51
|
+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
52
|
+
('created', models.DateTimeField(auto_now_add=True)),
|
53
|
+
('modified', models.DateTimeField(auto_now=True, db_index=True)),
|
54
|
+
('name', models.CharField(max_length=200)),
|
55
|
+
('uuid', models.CharField(db_index=True, default=None, max_length=200, null=True)),
|
56
|
+
('is_active', models.BooleanField(db_index=True, default=True)),
|
57
|
+
('kind', models.CharField(db_index=True, default='group', max_length=80)),
|
58
|
+
('metadata', models.JSONField(blank=True, default=dict)),
|
59
|
+
('parent', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='groups', to='account.group')),
|
60
|
+
],
|
61
|
+
bases=(models.Model, mojo.models.rest.MojoModel),
|
62
|
+
),
|
63
|
+
migrations.CreateModel(
|
64
|
+
name='GroupMember',
|
65
|
+
fields=[
|
66
|
+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
67
|
+
('created', models.DateTimeField(auto_now_add=True)),
|
68
|
+
('modified', models.DateTimeField(auto_now=True, db_index=True)),
|
69
|
+
('is_active', models.BooleanField(db_index=True, default=True)),
|
70
|
+
('permissions', models.JSONField(blank=True, default=dict)),
|
71
|
+
('metadata', models.JSONField(blank=True, default=dict)),
|
72
|
+
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='members', to='account.group')),
|
73
|
+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='members', to=settings.AUTH_USER_MODEL)),
|
74
|
+
],
|
75
|
+
bases=(models.Model, mojo.models.rest.MojoModel),
|
76
|
+
),
|
77
|
+
]
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Generated by Django 4.2.21 on 2025-06-04 02:13
|
2
|
+
|
3
|
+
from django.db import migrations, models
|
4
|
+
|
5
|
+
|
6
|
+
class Migration(migrations.Migration):
|
7
|
+
|
8
|
+
dependencies = [
|
9
|
+
('account', '0001_initial'),
|
10
|
+
]
|
11
|
+
|
12
|
+
operations = [
|
13
|
+
migrations.AddField(
|
14
|
+
model_name='user',
|
15
|
+
name='is_email_verified',
|
16
|
+
field=models.BooleanField(default=False),
|
17
|
+
),
|
18
|
+
migrations.AddField(
|
19
|
+
model_name='user',
|
20
|
+
name='is_phone_verified',
|
21
|
+
field=models.BooleanField(default=False),
|
22
|
+
),
|
23
|
+
]
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Generated by Django 4.2.21 on 2025-06-04 19:19
|
2
|
+
|
3
|
+
from django.db import migrations, models
|
4
|
+
|
5
|
+
|
6
|
+
class Migration(migrations.Migration):
|
7
|
+
|
8
|
+
dependencies = [
|
9
|
+
('account', '0002_user_is_email_verified_user_is_phone_verified'),
|
10
|
+
]
|
11
|
+
|
12
|
+
operations = [
|
13
|
+
migrations.AddField(
|
14
|
+
model_name='group',
|
15
|
+
name='mojo_secrets',
|
16
|
+
field=models.TextField(blank=True, default=None, null=True),
|
17
|
+
),
|
18
|
+
migrations.AddField(
|
19
|
+
model_name='user',
|
20
|
+
name='mojo_secrets',
|
21
|
+
field=models.TextField(blank=True, default=None, null=True),
|
22
|
+
),
|
23
|
+
]
|
File without changes
|