django-restit 4.2.72__tar.gz → 4.2.74__tar.gz
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_restit-4.2.72 → django_restit-4.2.74}/PKG-INFO +1 -1
- {django_restit-4.2.72 → django_restit-4.2.74}/account/models/device.py +13 -2
- {django_restit-4.2.72 → django_restit-4.2.74}/account/models/member.py +32 -6
- {django_restit-4.2.72 → django_restit-4.2.74}/account/models/membership.py +3 -2
- {django_restit-4.2.72 → django_restit-4.2.74}/account/models/notify.py +81 -3
- {django_restit-4.2.72 → django_restit-4.2.74}/account/models/session.py +1 -1
- {django_restit-4.2.72 → django_restit-4.2.74}/account/rpc/auth.py +9 -2
- {django_restit-4.2.72 → django_restit-4.2.74}/account/rpc/device.py +7 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/rpc/member.py +13 -1
- {django_restit-4.2.72 → django_restit-4.2.74}/account/templates/email/base.html +1 -1
- {django_restit-4.2.72 → django_restit-4.2.74}/account/templates/email/invite.html +0 -5
- {django_restit-4.2.72 → django_restit-4.2.74}/account/templates/email/plain/invite.html +0 -7
- {django_restit-4.2.72 → django_restit-4.2.74}/account/templates/email/plain/reset_code.html +0 -7
- {django_restit-4.2.72 → django_restit-4.2.74}/account/templates/email/reset_code.html +0 -5
- {django_restit-4.2.72 → django_restit-4.2.74}/account/templates/email/simple/invite.html +0 -7
- {django_restit-4.2.72 → django_restit-4.2.74}/account/templates/email/simple/reset_code.html +0 -7
- django_restit-4.2.74/account/templates/unsubscribed.html +68 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/utils/render.py +1 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/models/incident.py +1 -1
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/models/rules.py +17 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/templates/email/incident_change.html +1 -1
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/templates/email/incident_msg.html +1 -1
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/templates/email/incident_new.html +1 -1
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/templates/email/incident_plain.html +1 -1
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/rpc.py +8 -2
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/tq.py +1 -1
- {django_restit-4.2.72 → django_restit-4.2.74}/pyproject.toml +1 -1
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/helpers.py +3 -1
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/models/base.py +64 -17
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/serializers/response.py +8 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/LICENSE.md +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/README.md +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/admin.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/fcm/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/fcm/google.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/fcm/v1.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0001_initial.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0003_member_phone_number.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0004_group_modified_alter_group_created.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0005_member_auth_code_expires.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0006_member_security_token.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0007_authtoken_signature_authsession.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0008_memberdevice_memberdevicemetadata.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0009_alter_member_phone_number.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0010_delete_authtoken.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0011_authtoken.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0012_settings_settingsmetadata.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0013_memberdevice_ip.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0014_alter_notificationmemberrecord_member.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0015_memberdevice_buid.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0016_authsession_buid.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0017_rename_requires_topt_member_requires_totp.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0018_userpasskey.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0019_group_location.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/0020_cloudcredentials_cloudcredentialsmetadata.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/migrations/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/models/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/models/feeds.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/models/group.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/models/legacy.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/models/passkeys.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/models/settings.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/oauth/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/oauth/google.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/passkeys/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/passkeys/core.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/periodic.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/rpc/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/rpc/group.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/rpc/notify.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/rpc/oauth.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/rpc/passkeys.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/rpc/settings.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/settings.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/account/templates/email/plain/base.html +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/auditlog/README +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/auditlog/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/auditlog/admin.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/auditlog/cloudwatch.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/auditlog/decorators.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/auditlog/middleware.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/auditlog/migrations/0001_initial.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/auditlog/migrations/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/auditlog/models.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/auditlog/periodic.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/auditlog/rpc.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/auditlog/tq.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/auditlog/urls.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/README.md +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/admin.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/handlers.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/migrations/0001_initial.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/migrations/0002_alter_message_cc.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/migrations/0003_attachment_content_type.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/migrations/0004_mailtemplate.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/migrations/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/models/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/models/bounce.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/models/complaint.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/models/message.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/models/template.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/rpc.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/utils/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/utils/parsing.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/inbox/utils/sending.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/README.md +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/0001_initial.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/0002_event_component_event_component_id.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/0003_rule_action.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/0004_serverossecalert_ssh_sig_alter_rulecheck_parent.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/0005_incident_component_alter_incident_state.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/0006_delete_eventmetadata.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/0007_event_metadata.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/0008_incident_action_sent_incident_hostname_and_more.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/0009_incident_reporter_ip.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/0010_incident_category_incident_component_id.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/0011_ticket.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/0012_rule_match_by.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/0013_rulecheck_is_required.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/0014_event_group_alter_rulecheck_index.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/migrations/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/models/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/models/event.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/models/ossec.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/models/ticket.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/parsers/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/parsers/ossec.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/periodic.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/rpc.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/incident/tq.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/admin.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/geolocate.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/migrations/0001_initial.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/migrations/0002_geoip_subnet_alter_geoip_ip.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/migrations/0003_address_postalcode_suffix.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/migrations/0004_remove_address_modified_by_address_group_and_more.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/migrations/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/models/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/models/address.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/models/ip.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/models/legacy.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/models/location.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/models/track.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/providers/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/providers/iplookup/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/providers/iplookup/abstractapi.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/providers/iplookup/extremeip.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/providers/iplookup/geoplugin.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/providers/iplookup/ipapi.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/providers/iplookup/ipinfo.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/providers/iplookup/restit.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/providers/location/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/providers/location/google.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/providers/timezones/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/providers/timezones/google.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/providers/zillow.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/rpc/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/rpc/address.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/rpc/ip.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/rpc/location.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/location/rpc/track.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/admin.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/cvutil/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/cvutil/contours.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/cvutil/images.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/cvutil/misc.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/cvutil/text.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/fixtures/initial_data.json +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/fixtures/medialib.json +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/fixtures/medialib_test_fixture.json +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/forms.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/migrations/0001_initial.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/migrations/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/models.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/ocr.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/pdf.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/qrcode.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/engines/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/engines/anigif.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/engines/ffmpeg.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/engines/gifsicle.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/engines/hls.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/engines/mp4box.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/engines/rtmp/Makefile +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/engines/rtmp/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/engines/rtmp/rtmp.i +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/engines/rtmpdump.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/engines/rtmpsink.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/engines/video_getinfo.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/engines/websnap.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/exceptions.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/presets/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/presets/akamai.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/presets/animated_thumbnail.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/presets/ffmpeg.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/presets/flv.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/presets/hls.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/presets/image_transcode.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/presets/image_validate.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/presets/mp4.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/presets/video_still.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/presets/video_validate.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/presets/websnap.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/presets/youtube.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/render_utils.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/render/schedule.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/rpc/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/rpc/legacy.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/rpc/media.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/rpc/tools.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/scripts/init_config +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/css/base_medialibui.css +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/css/base_widgets.css +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/css/jquery.jcrop.css +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/img/arrow-down-white.png +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/img/bg-body.gif +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/img/cancel.gif +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/img/icon-generic.gif +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/img/icon-image.gif +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/img/icon-media.gif +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/img/icon-zip.gif +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/img/loading.gif +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/img/noimage.gif +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/img/render_err.gif +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/img/rendering.gif +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/img/star_off.png +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/img/star_on.png +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/img/unknown.gif +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/lib/caman.full.js +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/lib/hammer.min.js +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/lib/jquery.Jcrop.js +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/lib/jquery.hammer.js +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/lib/load-image.min.js +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/lib/swiper.js +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/lib/tinymce/plugins/medialib/editor_plugin.js +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/lib/tinymce/plugins/medialib/editor_plugin_src.js +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/lib/tinymce/plugins/medialib/js/dialog.js +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/static/lib/tinymce/plugins/medialib/medialib.html +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/apiclient/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/apiclient/channel.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/apiclient/discovery.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/apiclient/errors.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/apiclient/http.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/apiclient/mimeparse.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/apiclient/model.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/apiclient/sample_tools.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/apiclient/schema.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/filestore.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/httplib2/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/httplib2/cacerts.txt +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/httplib2/iri2uri.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/httplib2/socks.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/httpstore.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/nullstore.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/anyjson.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/appengine.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/client.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/clientsecrets.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/crypt.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/django_orm.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/file.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/gce.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/keyring_storage.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/locked_file.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/multistore_file.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/old_run.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/tools.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/util.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/oauth2client/xsrfutil.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/rtmpstore.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/s3store.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/uritemplate/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/stores/youtubestore.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/base.html +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/instances.html +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/items.html +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/library.html +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/notify_error.subject +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/notify_error.to +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/notify_error.txt +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/notify_ready.subject +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/notify_ready.to +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/notify_ready.txt +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/notify_render_error.subject +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/notify_render_error.to +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/notify_render_error.txt +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/notify_validate_error.subject +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/notify_validate_error.to +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/notify_validate_error.txt +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/smil +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/test.html +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/templates/medialib/testpicker.html +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/tests.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/tq.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/urls.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/utils.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/views.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/apiclient/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/apiclient/channel.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/apiclient/discovery.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/apiclient/errors.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/apiclient/http.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/apiclient/mimeparse.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/apiclient/model.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/apiclient/sample_tools.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/apiclient/schema.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/httplib2/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/httplib2/cacerts.txt +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/httplib2/iri2uri.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/httplib2/socks.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/anyjson.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/appengine.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/client.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/clientsecrets.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/crypt.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/django_orm.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/file.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/gce.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/keyring_storage.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/locked_file.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/multistore_file.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/old_run.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/tools.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/util.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/oauth2client/xsrfutil.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/upload.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/medialib/youtube/uritemplate/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/README.md +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/client.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/eod.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/examples/eod_example.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/management/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/management/commands/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/management/commands/delete_gauge.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/management/commands/delete_metric.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/management/commands/fix_redis_metrics_keys.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/management/commands/generate_test_metrics.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/management/commands/redis_metrics_send_mail.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/management/commands/reset_weekly_metrics.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/management/commands/system_metric.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/migrations/0001_initial.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/migrations/0002_metrics_k11_metrics_k12_metrics_k13_metrics_k14_and_more.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/migrations/0003_metrics_expires.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/migrations/0004_eodmetrics.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/migrations/0005_alter_metrics_v1_alter_metrics_v10_alter_metrics_v11_and_more.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/migrations/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/models.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/periodic.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/providers/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/providers/aws.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/settings.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/metrics/utils.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/pushit/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/pushit/admin.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/pushit/migrations/0001_initial.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/pushit/migrations/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/pushit/models.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/pushit/rpc/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/pushit/rpc/githooks.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/pushit/rpc/legacy.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/pushit/rpc/products.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/pushit/static/js/models_pushit.js +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/pushit/tq.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/pushit/utils.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/.gitignore +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/README.md +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/RemoteEvents.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/arc4.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/cache.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/crypto/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/crypto/aes.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/crypto/privpub.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/crypto/util.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/datem.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/decorators.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/encryption.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/errors.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/extra/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/extra/json_metadata.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/fields.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/forms.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/joke.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/jwtoken.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/log.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/mail.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/mailman.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/management/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/management/commands/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/management/commands/rpc.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/middleware/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/middleware/cors.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/middleware/db_router.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/middleware/jwt.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/middleware/request.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/middleware/session.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/middleware/session_store.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/models/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/models/cacher.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/models/metadata.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/net.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/regexes.yaml +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/requestex.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/rpc.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/search.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/serializers/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/serializers/collection.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/serializers/csv.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/serializers/excel.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/serializers/json.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/serializers/legacy.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/serializers/localizers.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/serializers/model.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/serializers/profiler.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/serializers/util.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/settings_helper.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/ssl_check.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/static/lib/jquery.js +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/static/rest/app.css +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/static/rest/app.js +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/static/rest/rest.js +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/static/rest/rest.scss +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/templates/email/error.html +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/templates/email/error.subject +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/templates/rest_docs.html +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/templates/rest_html.html +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/ua.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/uberdict.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/url_docs.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/urls.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/rest/views.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/sessionlog/.gitignore +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/sessionlog/README.md +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/sessionlog/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/sessionlog/admin.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/sessionlog/migrations/0001_initial.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/sessionlog/migrations/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/sessionlog/models.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/sessionlog/tests.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/sessionlog/views.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/README.md +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/admin.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/migrations/0001_initial.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/migrations/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/models.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/periodic.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/rpc.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/tq.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/transports/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/transports/email.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/transports/http.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/transports/s3.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/transports/sftp.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/transports/sms.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/taskqueue/worker.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/telephony/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/telephony/admin.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/telephony/decorators.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/telephony/migrations/0001_initial.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/telephony/migrations/0002_alter_sms_sid.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/telephony/migrations/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/telephony/models.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/telephony/phone_util.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/telephony/rpc.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/migrations/0001_initial.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/migrations/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/models/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/models/faq.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/models/page.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/models/revision.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/periodic.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/renderers/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/renderers/mistune/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/renderers/mistune/highlight.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/renderers/mistune/math.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/renderers/mistune/media.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/renderers/mistune/meta.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/renderers/mistune/task_list.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/renderers/mistune/toc.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/rpc/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/rpc/wiki.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/wiki/tq.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/ws4redis/README.md +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/ws4redis/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/ws4redis/client.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/ws4redis/connection.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/ws4redis/exceptions.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/ws4redis/redis.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/ws4redis/servers/__init__.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/ws4redis/servers/base.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/ws4redis/servers/django.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/ws4redis/servers/uwsgi.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/ws4redis/settings.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/ws4redis/utf8validator.py +0 -0
- {django_restit-4.2.72 → django_restit-4.2.74}/ws4redis/websocket.py +0 -0
@@ -113,9 +113,20 @@ class MemberDeviceMetaData(rm.MetaDataBase):
|
|
113
113
|
|
114
114
|
class CloudCredentials(models.Model, rm.RestModel, rm.MetaDataModel):
|
115
115
|
"""
|
116
|
-
|
117
|
-
This can include mobile and desktop devices.
|
116
|
+
CloudCredentials is a global setting for a group to store this groups cloud credentials.
|
118
117
|
"""
|
118
|
+
class RestMeta:
|
119
|
+
VIEW_PERMS = ["view_cm", "manage_cm"]
|
120
|
+
EDIT_PERMS = ["manage_cm"]
|
121
|
+
GRAPHS = {
|
122
|
+
"default": {
|
123
|
+
"extra": ["metadata"],
|
124
|
+
"graphs": {
|
125
|
+
"group": "basic"
|
126
|
+
}
|
127
|
+
}
|
128
|
+
}
|
129
|
+
|
119
130
|
created = models.DateTimeField(auto_now_add=True)
|
120
131
|
modified = models.DateTimeField(auto_now=True)
|
121
132
|
group = models.ForeignKey("account.Group", related_name="cloud_credentials", on_delete=models.CASCADE)
|
@@ -88,7 +88,8 @@ class Member(User, RestModel, MetaDataModel):
|
|
88
88
|
("perms", "properties|permissions.")]
|
89
89
|
QUERY_FIELDS_SPECIAL = {
|
90
90
|
"ip": "auth_sessions__ip",
|
91
|
-
"login_country": "auth_sessions__location__country"
|
91
|
+
"login_country": "auth_sessions__location__country",
|
92
|
+
"not_login_country": "auth_sessions__location__country__ne"
|
92
93
|
}
|
93
94
|
UNIQUE_LOOKUP = ["username", "email"]
|
94
95
|
METADATA_FIELD_PROPERTIES = settings.USER_METADATA_PROPERTIES
|
@@ -221,6 +222,14 @@ class Member(User, RestModel, MetaDataModel):
|
|
221
222
|
return token.secure_token
|
222
223
|
return None
|
223
224
|
|
225
|
+
@property
|
226
|
+
def force_single_session(self):
|
227
|
+
return self.hasPermission("force_single_session")
|
228
|
+
|
229
|
+
@property
|
230
|
+
def email_disabled(self):
|
231
|
+
return self.hasPermission("email_disabled")
|
232
|
+
|
224
233
|
@property
|
225
234
|
def has_totp(self):
|
226
235
|
token = self.getProperty("totp_token", category="secrets", default=None)
|
@@ -617,7 +626,11 @@ class Member(User, RestModel, MetaDataModel):
|
|
617
626
|
email = self.email
|
618
627
|
valid_email = email is not None and "@" in email and "invalid" not in email
|
619
628
|
allow_sms = not email_only and phone and (force or via in ["all", "sms"])
|
620
|
-
|
629
|
+
if not force:
|
630
|
+
allow_email = not self.email_disabled and valid_email and (force or via in ["all", "email"])
|
631
|
+
else:
|
632
|
+
allow_email = valid_email
|
633
|
+
|
621
634
|
if not allow_email and not allow_sms:
|
622
635
|
return False
|
623
636
|
|
@@ -847,6 +860,8 @@ class Member(User, RestModel, MetaDataModel):
|
|
847
860
|
if token is None:
|
848
861
|
token = AuthToken(member=self, role="default")
|
849
862
|
token.generateToken()
|
863
|
+
elif action == "refresh_keys":
|
864
|
+
self.refreshSecurityToken()
|
850
865
|
|
851
866
|
def set_full_name(self, value):
|
852
867
|
self.set_name(value)
|
@@ -1042,7 +1057,7 @@ class Member(User, RestModel, MetaDataModel):
|
|
1042
1057
|
return Member.objects.filter(phone_number=phone_number.lower()).last()
|
1043
1058
|
|
1044
1059
|
@staticmethod
|
1045
|
-
def GetWithPermission(perm, email_list=False):
|
1060
|
+
def GetWithPermission(perm, email_list=False, ignore_disabled_email=True):
|
1046
1061
|
if type(perm) is list:
|
1047
1062
|
queries = [Q(properties__category="permissions", properties__key=p, properties__value="1") for p in perm]
|
1048
1063
|
query = queries.pop()
|
@@ -1052,12 +1067,17 @@ class Member(User, RestModel, MetaDataModel):
|
|
1052
1067
|
else:
|
1053
1068
|
qset = Member.objects.filter(is_active=True).filter(properties__category="permissions", properties__key=perm, properties__value="1")
|
1054
1069
|
|
1070
|
+
if not ignore_disabled_email:
|
1071
|
+
qset = qset.exclude(
|
1072
|
+
properties__category="permissions",
|
1073
|
+
properties__key="email_disabled",
|
1074
|
+
properties__int_value=1)
|
1055
1075
|
if email_list:
|
1056
1076
|
return list(qset.exclude(email__icontains="invalid").values_list('email', flat=True))
|
1057
1077
|
return qset
|
1058
1078
|
|
1059
1079
|
@staticmethod
|
1060
|
-
def GetWithNotification(perm, email_list=False, exclude_member=None):
|
1080
|
+
def GetWithNotification(perm, email_list=False, exclude_member=None, ignore_disabled_email=True):
|
1061
1081
|
qset = Member.objects.filter(is_active=True)
|
1062
1082
|
if exclude_member:
|
1063
1083
|
qset = qset.exclude(pk=exclude_member.pk)
|
@@ -1080,6 +1100,11 @@ class Member(User, RestModel, MetaDataModel):
|
|
1080
1100
|
properties__key=perm,
|
1081
1101
|
properties__int_value=1)
|
1082
1102
|
|
1103
|
+
if not ignore_disabled_email:
|
1104
|
+
qset = qset.exclude(
|
1105
|
+
properties__category="permissions",
|
1106
|
+
properties__key="email_disabled",
|
1107
|
+
properties__int_value=1)
|
1083
1108
|
if email_list:
|
1084
1109
|
return list(qset.exclude(email__icontains="invalid").values_list('email', flat=True))
|
1085
1110
|
return qset
|
@@ -1126,7 +1151,7 @@ class Member(User, RestModel, MetaDataModel):
|
|
1126
1151
|
email_only=False, sms_msg=None, force=False, from_email=None):
|
1127
1152
|
NotificationRecord = RestModel.getModel("account", "NotificationRecord")
|
1128
1153
|
NotificationRecord.notify(
|
1129
|
-
Member.GetWithPermission(perm), subject, message,
|
1154
|
+
Member.GetWithPermission(perm, ignore_disabled_email=True), subject, message,
|
1130
1155
|
template, context, email_only, sms_msg, force,
|
1131
1156
|
from_email=from_email)
|
1132
1157
|
|
@@ -1136,7 +1161,8 @@ class Member(User, RestModel, MetaDataModel):
|
|
1136
1161
|
exclude_member=None):
|
1137
1162
|
NotificationRecord = RestModel.getModel("account", "NotificationRecord")
|
1138
1163
|
NotificationRecord.notify(
|
1139
|
-
Member.GetWithNotification(setting, exclude_member=exclude_member
|
1164
|
+
Member.GetWithNotification(setting, exclude_member=exclude_member, ignore_disabled_email=True),
|
1165
|
+
subject, message,
|
1140
1166
|
template, context, email_only, sms_msg, force,
|
1141
1167
|
from_email=from_email)
|
1142
1168
|
|
@@ -82,13 +82,14 @@ class Membership(models.Model, RestModel, MetaDataModel):
|
|
82
82
|
if value == "resend_invite":
|
83
83
|
self.sendInvite(self.getActiveRequest())
|
84
84
|
|
85
|
-
def sendInvite(self, request=None, url=None, subject=None, site_logo=None, company_name=None):
|
85
|
+
def sendInvite(self, request=None, url=None, subject=None, site_logo=None, company_name=None, msg=None):
|
86
86
|
if request:
|
87
87
|
powered_by = request.DATA.get("powered_by", True)
|
88
88
|
subject = request.DATA.get("invite_subject")
|
89
89
|
url = request.DATA.get("invite_url")
|
90
90
|
site_logo = request.DATA.get("site_logo", settings.SITE_LOGO)
|
91
91
|
company_name = request.DATA.get("company_name", settings.COMPANY_NAME)
|
92
|
+
msg = request.DATA.get("invite_msg", None)
|
92
93
|
else:
|
93
94
|
powered_by = True
|
94
95
|
site_logo = settings.SITE_LOGO
|
@@ -109,7 +110,7 @@ class Membership(models.Model, RestModel, MetaDataModel):
|
|
109
110
|
url = "{}&auth_code={}".format(url, auth_token.toBase64())
|
110
111
|
self.member.sendInvite(
|
111
112
|
subject, self.group, url=url,
|
112
|
-
msg=
|
113
|
+
msg=msg,
|
113
114
|
POWERED_BY=powered_by,
|
114
115
|
SITE_LOGO=site_logo,
|
115
116
|
COMPANY_NAME=company_name,
|
@@ -151,12 +151,90 @@ class NotificationRecord(models.Model, RestModel):
|
|
151
151
|
members = Member.objects.filter(email__in=emails)
|
152
152
|
cls.notify(members, subject, message, template, context, email_only, sms_msg, force, from_email, attachments)
|
153
153
|
|
154
|
+
|
154
155
|
@classmethod
|
155
156
|
def notify(cls, notify_users, subject, message=None,
|
156
157
|
template=None, context=None, email_only=False,
|
157
158
|
sms_msg=None, force=False,
|
158
159
|
from_email=settings.DEFAULT_FROM_EMAIL,
|
159
160
|
attachments=[]):
|
161
|
+
dup_list = []
|
162
|
+
email_to = []
|
163
|
+
sms_to = []
|
164
|
+
for member in notify_users:
|
165
|
+
via = member.getProperty("notify_via", "all")
|
166
|
+
phone = member.getProperty("phone")
|
167
|
+
email = member.email
|
168
|
+
valid_email = email is not None and "@" in email and "invalid" not in email
|
169
|
+
allow_sms = not email_only and phone and (force or via in ["all", "sms"])
|
170
|
+
allow_email = not member.email_disabled and valid_email and (force or via in ["all", "email"])
|
171
|
+
if not allow_email and not allow_sms:
|
172
|
+
continue
|
173
|
+
if allow_email and email not in dup_list:
|
174
|
+
dup_list.append(email)
|
175
|
+
email_to.append(member)
|
176
|
+
if not email_only and allow_sms and phone not in dup_list:
|
177
|
+
dup_list.append(phone)
|
178
|
+
sms_to.append(phone)
|
179
|
+
|
180
|
+
if len(dup_list) == 0:
|
181
|
+
return
|
182
|
+
|
183
|
+
if not message and not template and subject:
|
184
|
+
message = subject
|
185
|
+
if not sms_msg and subject:
|
186
|
+
sms_msg = subject
|
187
|
+
if not sms_msg and message:
|
188
|
+
sms_msg = message
|
189
|
+
|
190
|
+
if subject and len(subject) > 80:
|
191
|
+
epos = subject.find('. ') + 1
|
192
|
+
if epos > 10:
|
193
|
+
subject = subject[:epos]
|
194
|
+
if len(subject) > 80:
|
195
|
+
subject = subject[:80]
|
196
|
+
subject = subject[:subject.rfind(' ')] + "..."
|
197
|
+
|
198
|
+
if sms_to:
|
199
|
+
for phone in sms_to:
|
200
|
+
SMS.send(phone, sms_msg)
|
201
|
+
|
202
|
+
if not email_to:
|
203
|
+
return
|
204
|
+
for member in email_to:
|
205
|
+
cls._notifyViaEmail(member, subject, message, template, context, attachments, from_email)
|
206
|
+
|
207
|
+
@classmethod
|
208
|
+
def _notifyViaEmail(cls, member, subject, message, template, context,
|
209
|
+
attachments, from_email=None):
|
210
|
+
# lets verify the db is working
|
211
|
+
if template:
|
212
|
+
if context is None:
|
213
|
+
context = {}
|
214
|
+
if message is not None:
|
215
|
+
context["body"] = message
|
216
|
+
context["unsubscribe_token"] = member.getUUID()
|
217
|
+
message = inbox.utils.renderTemplate(template, context)
|
218
|
+
|
219
|
+
nr = NotificationMemberRecord(member=member, to_addr=member.email)
|
220
|
+
email_record = NotificationRecord(
|
221
|
+
method="email",
|
222
|
+
subject=subject,
|
223
|
+
from_addr=from_email,
|
224
|
+
body=message)
|
225
|
+
try:
|
226
|
+
email_record.save()
|
227
|
+
email_record.addAttachments(attachments)
|
228
|
+
email_record.send([nr])
|
229
|
+
except Exception as err:
|
230
|
+
rh.log_exception("email send failed", email_to)
|
231
|
+
|
232
|
+
@classmethod
|
233
|
+
def notifyLegacy(cls, notify_users, subject, message=None,
|
234
|
+
template=None, context=None, email_only=False,
|
235
|
+
sms_msg=None, force=False,
|
236
|
+
from_email=settings.DEFAULT_FROM_EMAIL,
|
237
|
+
attachments=[]):
|
160
238
|
# this will create a record for each email address message is sent to
|
161
239
|
from telephony.models import SMS
|
162
240
|
email_to = []
|
@@ -165,7 +243,6 @@ class NotificationRecord(models.Model, RestModel):
|
|
165
243
|
|
166
244
|
if not message and not template and subject:
|
167
245
|
message = subject
|
168
|
-
|
169
246
|
if not sms_msg and subject:
|
170
247
|
sms_msg = subject
|
171
248
|
if not sms_msg and message:
|
@@ -197,7 +274,7 @@ class NotificationRecord(models.Model, RestModel):
|
|
197
274
|
email = member.email
|
198
275
|
valid_email = email is not None and "@" in email and "invalid" not in email
|
199
276
|
allow_sms = not email_only and phone and (force or via in ["all", "sms"])
|
200
|
-
allow_email = valid_email and (force or via in ["all", "email"])
|
277
|
+
allow_email = not member.email_disabled and valid_email and (force or via in ["all", "email"])
|
201
278
|
if not allow_email and not allow_sms:
|
202
279
|
continue
|
203
280
|
if allow_email and email not in email_list:
|
@@ -226,7 +303,7 @@ class NotificationRecord(models.Model, RestModel):
|
|
226
303
|
email_record.addAttachments(attachments)
|
227
304
|
email_record.send(email_to)
|
228
305
|
except Exception as err:
|
229
|
-
|
306
|
+
rh.log_exception("email send failed", email_to)
|
230
307
|
# we need to send emails the old way
|
231
308
|
addrs = []
|
232
309
|
for to in email_to:
|
@@ -302,6 +379,7 @@ class BounceHistory(models.Model, RestModel):
|
|
302
379
|
if bounce_count > 2:
|
303
380
|
# TODO notify support an account has been disabled because of bounce
|
304
381
|
user.setProperty("notify_via", "off")
|
382
|
+
user.addPermission("email_disabled")
|
305
383
|
user.log("disabled", "notifications disabled because email bounced", method="notify")
|
306
384
|
else:
|
307
385
|
# TODO notify support of unknown bounce
|
@@ -8,7 +8,7 @@ from rest import ua
|
|
8
8
|
# replacing legacy cookie session system with more robust session info
|
9
9
|
class AuthSession(models.Model, RestModel):
|
10
10
|
class RestMeta:
|
11
|
-
SEARCH_FIELDS = ["ip", "member__username", "browser", "location__city"]
|
11
|
+
SEARCH_FIELDS = ["ip", "member__username", "browser", "location__city", "buid"]
|
12
12
|
VIEW_PERMS = ["view_members", "manage_members", "manage_users", "owner"]
|
13
13
|
CAN_SAVE = False
|
14
14
|
CAN_DELETE = False
|
@@ -12,6 +12,7 @@ from django.http import HttpResponse
|
|
12
12
|
from datetime import datetime, timedelta
|
13
13
|
|
14
14
|
ALLOW_BASIC_LOGIN = settings.get("ALLOW_BASIC_LOGIN", False)
|
15
|
+
FORGET_ALWAYS_TRUE = settings.get("FORGET_ALWAYS_TRUE", True)
|
15
16
|
|
16
17
|
|
17
18
|
@rd.urlPOST(r'^login$')
|
@@ -57,7 +58,7 @@ def jwt_login(request):
|
|
57
58
|
|
58
59
|
|
59
60
|
def on_complete_jwt(request, member):
|
60
|
-
if member.security_token is None or member.security_token == JWT_KEY:
|
61
|
+
if member.security_token is None or member.security_token == JWT_KEY or member.force_single_session:
|
61
62
|
member.refreshSecurityToken()
|
62
63
|
|
63
64
|
member.log(
|
@@ -301,14 +302,20 @@ def member_forgot_password(request):
|
|
301
302
|
"""
|
302
303
|
member, resp = get_member_from_request(request)
|
303
304
|
if member is None:
|
305
|
+
if FORGET_ALWAYS_TRUE:
|
306
|
+
return rv.restStatus(request, True, msg="Password reset instructions have been sent to your email. (If valid account)")
|
304
307
|
return resp
|
305
308
|
if resp is not None and not member.is_active:
|
309
|
+
if FORGET_ALWAYS_TRUE:
|
310
|
+
return rv.restStatus(request, True, msg="Password reset instructions have been sent to your email. (If valid account)")
|
306
311
|
return resp
|
307
312
|
|
308
313
|
if request.DATA.get("use_code", False):
|
309
314
|
return member_forgot_password_code(request, member)
|
310
315
|
|
311
316
|
if member.auth_code is not None and member.auth_code_expires > datetime.now():
|
317
|
+
if FORGET_ALWAYS_TRUE:
|
318
|
+
return rv.restStatus(request, True, msg="Password reset instructions have been sent to your email. (If valid account)")
|
312
319
|
return rv.restPermissionDenied(request, "already sent valid auth code")
|
313
320
|
|
314
321
|
member.auth_code = crypto.randomString(16)
|
@@ -325,7 +332,7 @@ def member_forgot_password(request):
|
|
325
332
|
'to': [member.email],
|
326
333
|
})
|
327
334
|
|
328
|
-
return rv.restStatus(request, True, msg="Password reset instructions have been sent to your email.")
|
335
|
+
return rv.restStatus(request, True, msg="Password reset instructions have been sent to your email. (If valid account)")
|
329
336
|
|
330
337
|
|
331
338
|
def member_forgot_password_code(request, member):
|
@@ -5,6 +5,13 @@ from account import models as am
|
|
5
5
|
from objict import objict
|
6
6
|
|
7
7
|
|
8
|
+
@rd.url(r'^group/cloud/credentials$')
|
9
|
+
@rd.url(r'^group/cloud/credentials/(?P<pk>\d+)$')
|
10
|
+
@rd.login_required
|
11
|
+
def rest_on_group_cloud_creds(request, pk=None):
|
12
|
+
return am.CloudCredentials.on_rest_request(request, pk)
|
13
|
+
|
14
|
+
|
8
15
|
@rd.url(r'^member/device$')
|
9
16
|
@rd.url(r'^member/device/(?P<pk>\d+)$')
|
10
17
|
@rd.login_required
|
@@ -1,5 +1,6 @@
|
|
1
1
|
from rest import decorators as rd
|
2
|
-
from rest.views import restPermissionDenied, restStatus
|
2
|
+
from rest.views import restPermissionDenied, restStatus, restHTML
|
3
|
+
from rest import helpers as rh
|
3
4
|
from account import models as am
|
4
5
|
|
5
6
|
|
@@ -39,3 +40,14 @@ def rest_on_authtoken(request, pk=None):
|
|
39
40
|
def rest_on_session(request, pk=None):
|
40
41
|
return am.AuthSession.on_rest_request(request, pk)
|
41
42
|
|
43
|
+
|
44
|
+
@rd.urlGET('unsubscribe')
|
45
|
+
@rd.requires_params(["t"])
|
46
|
+
def rest_on_member(request):
|
47
|
+
t = request.DATA.get("t")
|
48
|
+
m = am.Member.objects.filter(uuid=t).last()
|
49
|
+
if m is not None:
|
50
|
+
m.addPermission("email_disabled")
|
51
|
+
m.reportIncident("email", f"{m.email} has unsubscribed to all email")
|
52
|
+
context = rh.getContext(request, member=m)
|
53
|
+
return restHTML(request, template="unsubscribed.html", context=context)
|
@@ -281,7 +281,7 @@
|
|
281
281
|
<a href="{{settings.BASE_URL}}">{{settings.SITE_LABEL}}</a>
|
282
282
|
</div>
|
283
283
|
{% endblock %}
|
284
|
-
<p style="text-align: center; font-size: 10px;">Don't want to get notifications? <a href="{{
|
284
|
+
<p style="text-align: center; font-size: 10px;">Don't want to get notifications? <a href="{{UNSUBSCRIBE_URL}}?t={{unsubscribe_token}}">Unsubscribe</a>
|
285
285
|
</p>
|
286
286
|
<div>
|
287
287
|
|
@@ -387,11 +387,6 @@
|
|
387
387
|
<!-- START FOOTER -->
|
388
388
|
<div class="footer">
|
389
389
|
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
390
|
-
<tr>
|
391
|
-
<td class="content-block">
|
392
|
-
<br> Don't like these emails? <a href="{{BASE_URL}}member/unsubscribe/">Unsubscribe</a>.
|
393
|
-
</td>
|
394
|
-
</tr>
|
395
390
|
<tr>
|
396
391
|
<td class="content-block powered-by">
|
397
392
|
<div>Powered by {{SITE_LABEL}}</div>
|
@@ -295,13 +295,6 @@
|
|
295
295
|
{% endif %}
|
296
296
|
<tr>
|
297
297
|
<td align="center" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
298
|
-
<div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:14px;font-weight:300;line-height:20px;text-align:center;color:#000000;">
|
299
|
-
Don't like these emails? <a style="color: #c0c1ff;font-weight: bold;text-decoration: none;" href="{{BASE_URL}}member/unsubscribe/">Unsubscribe</a>.
|
300
|
-
</div>
|
301
|
-
</td>
|
302
|
-
</tr>
|
303
|
-
<tr>
|
304
|
-
<td align="center" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
305
298
|
|
306
299
|
<table
|
307
300
|
align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
|
@@ -284,13 +284,6 @@
|
|
284
284
|
</tr>
|
285
285
|
<tr>
|
286
286
|
<td align="center" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
287
|
-
<div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:14px;font-weight:300;line-height:20px;text-align:center;color:#000000;">
|
288
|
-
Don't like these emails? <a style="color: #c0c1ff;font-weight: bold;text-decoration: none;" href="{{BASE_URL}}member/unsubscribe/">Unsubscribe</a>.
|
289
|
-
</div>
|
290
|
-
</td>
|
291
|
-
</tr>
|
292
|
-
<tr>
|
293
|
-
<td align="center" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
294
287
|
|
295
288
|
<table
|
296
289
|
align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
|
@@ -377,11 +377,6 @@
|
|
377
377
|
<!-- START FOOTER -->
|
378
378
|
<div class="footer">
|
379
379
|
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
380
|
-
<tr>
|
381
|
-
<td class="content-block">
|
382
|
-
<br> Don't like these emails? <a href="{{BASE_URL}}member/unsubscribe/">Unsubscribe</a>.
|
383
|
-
</td>
|
384
|
-
</tr>
|
385
380
|
<tr>
|
386
381
|
<td class="content-block powered-by">
|
387
382
|
<div>Powered by {{SITE_LABEL}}</div>
|
@@ -293,13 +293,6 @@
|
|
293
293
|
</tr>
|
294
294
|
<tr>
|
295
295
|
<td align="center" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
296
|
-
<div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:14px;font-weight:300;line-height:20px;text-align:center;color:#fafafa;">
|
297
|
-
Don't like these emails? <a style="color: #c0c1ff;font-weight: bold;text-decoration: none;" href="{{BASE_URL}}member/unsubscribe/">Unsubscribe</a>.
|
298
|
-
</div>
|
299
|
-
</td>
|
300
|
-
</tr>
|
301
|
-
<tr>
|
302
|
-
<td align="center" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
303
296
|
|
304
297
|
<table
|
305
298
|
align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
|
{django_restit-4.2.72 → django_restit-4.2.74}/account/templates/email/simple/reset_code.html
RENAMED
@@ -284,13 +284,6 @@
|
|
284
284
|
</tr>
|
285
285
|
<tr>
|
286
286
|
<td align="center" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
287
|
-
<div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:14px;font-weight:300;line-height:20px;text-align:center;color:#fafafa;">
|
288
|
-
Don't like these emails? <a style="color: #c0c1ff;font-weight: bold;text-decoration: none;" href="{{BASE_URL}}member/unsubscribe/">Unsubscribe</a>.
|
289
|
-
</div>
|
290
|
-
</td>
|
291
|
-
</tr>
|
292
|
-
<tr>
|
293
|
-
<td align="center" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
294
287
|
|
295
288
|
<table
|
296
289
|
align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
|