django-restit 4.2.58__py3-none-any.whl → 4.2.60__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-restit
3
- Version: 4.2.58
3
+ Version: 4.2.60
4
4
  Summary: A Rest Framework for DJANGO
5
5
  License: MIT
6
6
  Author: Ian Starnes
@@ -104,15 +104,16 @@ incident/migrations/0014_event_group_alter_rulecheck_index.py,sha256=v3gm5k0LVoa
104
104
  incident/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
105
  incident/models/__init__.py,sha256=NMphuhb0RTMf7Ov4QkNv7iv6_I8Wtr3xQ54yjX_a31M,209
106
106
  incident/models/event.py,sha256=qa6BIlellU7uUQcA2c4Botd2x7JLL8b7IjSfxyi5iHk,7306
107
- incident/models/incident.py,sha256=0M7QN32BwlHYRvnUWPqI4IIThSpActGDdbmbPjNcJ9A,18415
107
+ incident/models/incident.py,sha256=IRgu_G_3kuNyKWvwIpJJUCq8PJ1D-2lp4VOtFl54L1o,19472
108
108
  incident/models/ossec.py,sha256=p1ptr-8lnaj1EP_VmPR58b2LmaYBGaYYKAMqhWK5yZM,2227
109
109
  incident/models/rules.py,sha256=uT5GhW6Flso287lJGphAlWwL20NRnHDAZoGrWBBQfeE,6260
110
110
  incident/models/ticket.py,sha256=S3kqGQpYLE6Y4M9IKu_60sgW-f592xNr8uufqHnvDoU,2302
111
111
  incident/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
112
  incident/parsers/ossec.py,sha256=Bc82n0AeXMBxMxzfAR-1puHyxldcikqeu5MeGRk1zMc,7142
113
113
  incident/periodic.py,sha256=eX1rQK6v65A9ugofTvJPSmAWei6C-3EYgzCMuGZ03jM,381
114
- incident/rpc.py,sha256=D7cAPkW94F6ISlCTQ74GxnbLId-I3bMK4Xss0GoHM9w,7934
115
- incident/templates/email/incident_change.html,sha256=O_5ocWTsnqmmOuQhAtXEiE4rWecnZnJjoKU4MwV6ILo,14178
114
+ incident/rpc.py,sha256=jGh1XaxDrTBIUK8Mw0ixqgPo-lqeP-MmUG1ApboAd1I,7933
115
+ incident/templates/email/incident_change.html,sha256=UjFpZF1v310dWo1Kqu7SSvnEBwLSUgl0XWaCRSW8kkc,13883
116
+ incident/templates/email/incident_msg.html,sha256=I2W3tXTcAQfFDoK024P77NIhFM-NnWhsJwwXTc7iGNk,13768
116
117
  incident/templates/email/incident_new.html,sha256=IPX3CqIrvdrZSn13_jlR6sEb0If8ftvUrUpkzC5G2Gc,15173
117
118
  incident/templates/email/incident_plain.html,sha256=fx4zsoldG1AQEBA6IYx5BJp_MAMizgjjx9EmuR5m4SQ,14727
118
119
  incident/tq.py,sha256=6KjeTFlWAlG_l8LWMlxUGdr8ULU0uE-DB5ex0ERW440,5226
@@ -125,7 +126,7 @@ location/migrations/0003_address_postalcode_suffix.py,sha256=DT8voJeMiSQyUhH-69N
125
126
  location/migrations/0004_remove_address_modified_by_address_group_and_more.py,sha256=Xq0q8oVoElVYbPC779empO4GIQKuRWOyBCUmWg9Wzo4,1270
126
127
  location/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
128
  location/models/__init__.py,sha256=rZhldkoKmoJQXjBAK1IIQn7K_OOJvFtIGOGVl_szqbE,230
128
- location/models/address.py,sha256=5059tQZI4XDZJPywQPN0zXIJ8FTUQnONwBkc7DFgwng,3045
129
+ location/models/address.py,sha256=moUbICzerO1FSJ_tc__2S7Wtc15Ccyp3qI1Xl0QdY-4,3149
129
130
  location/models/ip.py,sha256=ZaBFdW1tL1Q3bnS5gIY9SseiQ5xeeP_oyP1hp3czFeA,5984
130
131
  location/models/legacy.py,sha256=8ROsUSZrjGQkUyXeJvoxPdKAWaKfUH-AL9TIeJb7krg,1994
131
132
  location/models/location.py,sha256=01dJPJecbp5orExsIGWOsBC_KkwFRIW0rGDIwyx1r0w,2316
@@ -363,7 +364,7 @@ pushit/utils.py,sha256=IeTCGa-164nmB1jIsK1lu1O1QzUhS3BKfuXHGjCW-ck,2121
363
364
  rest/.gitignore,sha256=TbEvWRMnAiajCTOdhiNrd9eeCAaIjRp9PRjE_VkMM5g,118
364
365
  rest/README.md,sha256=V3ETc-cJu8PZIbKr9xSe_pA4JEUpC8Dhw4bQeVCDJPw,5460
365
366
  rest/RemoteEvents.py,sha256=nL46U7AuxIrlw2JunphR1tsXyqi-ep_gD9CYGpYbNgE,72
366
- rest/__init__.py,sha256=O14ymwZEWjblcRJnLARsV88zeNTmzZa9qsZtA0M2zUE,121
367
+ rest/__init__.py,sha256=xVTT7_J9EmlL-rLoFGbIiVtP0BuY_r0I8O41VkCbu9g,121
367
368
  rest/arc4.py,sha256=y644IbF1ec--e4cUJ3KEYsewTCITK0gmlwa5mJruFC0,1967
368
369
  rest/cache.py,sha256=1Qg0rkaCJCaVP0-l5hZg2CIblTdeBSlj_0fP6vlKUpU,83
369
370
  rest/crypto/__init__.py,sha256=Tl0U11rgj1eBYqd6OXJ2_XSdNLumW_JkBZnaJqI6Ldw,72
@@ -496,7 +497,7 @@ ws4redis/servers/uwsgi.py,sha256=VyhoCI1DnVFqBiJYHoxqn5Idlf6uJPHvfBKgkjs34mo,172
496
497
  ws4redis/settings.py,sha256=K0yBiLUuY81iDM4Yr-k8hbvjn5VVHu5zQhmMK8Dtz0s,1536
497
498
  ws4redis/utf8validator.py,sha256=S0OlfjeGRP75aO6CzZsF4oTjRQAgR17OWE9rgZdMBZA,5122
498
499
  ws4redis/websocket.py,sha256=R0TUyPsoVRD7Y_oU7w2I6NL4fPwiz5Vl94-fUkZgLHA,14848
499
- django_restit-4.2.58.dist-info/LICENSE.md,sha256=VHN4hhEeVOoFjtG-5fVv4jesA4SWi0Z-KgOzzN6a1ps,1068
500
- django_restit-4.2.58.dist-info/METADATA,sha256=5ZIwN9MeaZtEBzMZDEEsXnpqTpLD3WwjE0KgmY5iqLE,7594
501
- django_restit-4.2.58.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
502
- django_restit-4.2.58.dist-info/RECORD,,
500
+ django_restit-4.2.60.dist-info/LICENSE.md,sha256=VHN4hhEeVOoFjtG-5fVv4jesA4SWi0Z-KgOzzN6a1ps,1068
501
+ django_restit-4.2.60.dist-info/METADATA,sha256=fQdJgYROlYOW-VuJLMmyHhQd9mdEy5tOI4IjkQSPY2Y,7594
502
+ django_restit-4.2.60.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
503
+ django_restit-4.2.60.dist-info/RECORD,,
@@ -101,6 +101,11 @@ class Incident(models.Model, rm.RestModel, rm.MetaDataModel):
101
101
  return self.created < (datetime.now() - timedelta(minutes=self.rule.bundle))
102
102
  return True
103
103
 
104
+ def get_action_perm(self):
105
+ if self.rule and ":" in self.rule.action:
106
+ return self.rule.action.split(":")
107
+ return None, None
108
+
104
109
  def set_action(self, value):
105
110
  if value == "merge":
106
111
  request = self.getActiveRequest()
@@ -368,6 +373,25 @@ class Incident(models.Model, rm.RestModel, rm.MetaDataModel):
368
373
  subject=F"Updated Incident #{self.id}",
369
374
  history=h)
370
375
 
376
+ def notifyMessage(self, message, by):
377
+ action, perm = self.get_action_perm()
378
+ if perm is None:
379
+ perm = "notify.incident_alerts"
380
+ subject = F"New Message for Incident #{self.pk}"
381
+ context = dict(
382
+ incident=self,
383
+ portal_url=settings.INCIDENT_PORTAL_URL,
384
+ message=message,
385
+ by=by)
386
+ template = "email/incident_msg.html"
387
+ Member.notifyWith(
388
+ perm,
389
+ subject,
390
+ template=template,
391
+ context=context,
392
+ email_only=True,
393
+ from_email=INCIDENT_EMAIL_FROM)
394
+
371
395
  def notifyWatchers(self, subject, history=None):
372
396
  action = None
373
397
  perm = "notify.incident_alerts"
@@ -476,3 +500,7 @@ class IncidentHistory(models.Model, rm.RestModel):
476
500
  note = models.TextField(blank=True, null=True, default=None)
477
501
  media = models.ForeignKey("medialib.MediaItem", related_name="+", null=True, default=None, on_delete=models.CASCADE)
478
502
 
503
+ def on_rest_created(self, request):
504
+ # self.group.sendEvent("chat_message", None, custom=dict(pk=self.pk, by=request.member.id, kind=self.kind))
505
+ if self.kind in ["note", "message"]:
506
+ self.parent.notifyMessage(self.note, self.by)
incident/rpc.py CHANGED
@@ -221,7 +221,7 @@ def rest_firewall_block(request):
221
221
  metadata = request.DATA.asDict()
222
222
  metadata.username = request.member.username
223
223
  record_block(ip, action, "all", metadata)
224
- Task.Publish("incident", f"firewall_{action}", dict(ip=ip), channel="tq_broadcast")
224
+ Task.Publish("incident", f"firewall_{action}", dict(ip=ip), channel="tq_firewall")
225
225
  return rv.restStatus(request, True)
226
226
 
227
227
 
@@ -193,12 +193,6 @@
193
193
  </div>
194
194
  </td>
195
195
  </tr>
196
- <tr>
197
- <td>
198
- <pre style="font-size: 16px; overflow-x: scroll; word-wrap: normal; max-width: 980px; padding: 8px;">{{incident.first_event.details_by_category}}
199
- </pre>
200
- </td>
201
- </tr>
202
196
  {% if history %}
203
197
  <tr>
204
198
  <td>
@@ -0,0 +1,347 @@
1
+ <!doctype html>
2
+ <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
3
+
4
+ <head>
5
+ <title>INCIDENT EMAIL</title>
6
+ <!--[if !mso]><!-- -->
7
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
8
+ <!--<![endif]-->
9
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
10
+ <meta name="viewport" content="width=device-width, initial-scale=1">
11
+ <style type="text/css">
12
+ #outlook a {
13
+ padding: 0;
14
+ }
15
+
16
+ body {
17
+ margin: 0;
18
+ padding: 0;
19
+ -webkit-text-size-adjust: 100%;
20
+ -ms-text-size-adjust: 100%;
21
+ }
22
+
23
+ table,
24
+ td {
25
+ border-collapse: collapse;
26
+ mso-table-lspace: 0pt;
27
+ mso-table-rspace: 0pt;
28
+ }
29
+
30
+ img {
31
+ border: 0;
32
+ height: auto;
33
+ line-height: 100%;
34
+ outline: none;
35
+ text-decoration: none;
36
+ -ms-interpolation-mode: bicubic;
37
+ }
38
+
39
+ p {
40
+ display: block;
41
+ margin: 13px 0;
42
+ }
43
+ </style>
44
+ <!--[if mso]>
45
+ <xml>
46
+ <o:OfficeDocumentSettings>
47
+ <o:AllowPNG/>
48
+ <o:PixelsPerInch>96</o:PixelsPerInch>
49
+ </o:OfficeDocumentSettings>
50
+ </xml>
51
+ <![endif]-->
52
+ <!--[if lte mso 11]>
53
+ <style type="text/css">
54
+ .mj-outlook-group-fix { width:100% !important; }
55
+ </style>
56
+ <![endif]-->
57
+ <!--[if !mso]><!-->
58
+ <link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,700" rel="stylesheet" type="text/css">
59
+ <style type="text/css">
60
+ @import url(https://fonts.googleapis.com/css?family=Roboto:100,300,400,700);
61
+ </style>
62
+ <!--<![endif]-->
63
+ <style type="text/css">
64
+ @media only screen and (min-width:480px) {
65
+ .mj-column-per-100 {
66
+ width: 100% !important;
67
+ max-width: 100%;
68
+ }
69
+ }
70
+ </style>
71
+ <style type="text/css">
72
+ @media only screen and (max-width:480px) {
73
+ table.mj-full-width-mobile {
74
+ width: 100% !important;
75
+ }
76
+
77
+ td.mj-full-width-mobile {
78
+ width: auto !important;
79
+ }
80
+ }
81
+ </style>
82
+ <style type="text/css">
83
+ a,
84
+ span,
85
+ td,
86
+ th {
87
+ -webkit-font-smoothing: antialiased !important;
88
+ -moz-osx-font-smoothing: grayscale !important;
89
+ }
90
+ </style>
91
+ </head>
92
+
93
+ <body style="background-color:white;">
94
+
95
+ <div style="display:none;font-size:1px;color:#ffffff;line-height:1px;max-height:0px;max-width:0px;opacity:0;overflow:hidden;"> {{incident.description}} </div>
96
+ <div style="background-color:white;">
97
+ <!--[if mso | IE]>
98
+ <table
99
+ align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
100
+ >
101
+ <tr>
102
+ <td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
103
+ <![endif]-->
104
+ <div style="margin:0px auto;max-width:800px;">
105
+ <table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%;">
106
+ <tbody>
107
+ <tr>
108
+ <td style="direction:ltr;font-size:0px;padding:20px 0;text-align:center;">
109
+ <!--[if mso | IE]>
110
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
111
+
112
+ <tr>
113
+
114
+ <td
115
+ class="" style="vertical-align:top;width:600px;"
116
+ >
117
+ <![endif]-->
118
+ <div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
119
+ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
120
+ <tr>
121
+ <td style="font-size:0px;word-break:break-word;">
122
+ <!--[if mso | IE]>
123
+
124
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td height="20" style="vertical-align:top;height:20px;">
125
+
126
+ <![endif]-->
127
+ <div style="height:20px;"> &nbsp; </div>
128
+ <!--[if mso | IE]>
129
+
130
+ </td></tr></table>
131
+
132
+ <![endif]-->
133
+ </td>
134
+ </tr>
135
+ </table>
136
+ </div>
137
+ <!--[if mso | IE]>
138
+ </td>
139
+
140
+ </tr>
141
+
142
+ </table>
143
+ <![endif]-->
144
+ </td>
145
+ </tr>
146
+ </tbody>
147
+ </table>
148
+ </div>
149
+ <!--[if mso | IE]>
150
+ </td>
151
+ </tr>
152
+ </table>
153
+
154
+ <table
155
+ align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
156
+ >
157
+ <tr>
158
+ <td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
159
+ <![endif]-->
160
+ <div style="background:#4f82f6;background-color:#4f82f6;margin:0px auto;border-radius:4px;max-width:800px;">
161
+ <table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="background:#4f82f6;background-color:#4f82f6;width:100%;border-radius:4px;border-bottom:1px solid black;">
162
+ <tbody>
163
+ <tr>
164
+ <td style="direction:ltr;font-size:0px;padding:0;text-align:center;">
165
+ <!--[if mso | IE]>
166
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
167
+
168
+ <tr>
169
+
170
+ <td
171
+ class="" style="vertical-align:top;width:600px;"
172
+ >
173
+ <![endif]-->
174
+ <div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
175
+ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
176
+ <tr>
177
+ <td style="padding:10px;width:64px;">
178
+ <img src="https://i.imgur.com/bQM8aTE.png" alt="">
179
+ </td>
180
+ <td align="left" style="font-size:0px;padding:0;word-break:break-word;">
181
+ <div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:30px;font-weight:300;line-height:30px;text-align:left;color:#FFFFFF;">
182
+
183
+ Incident #{{incident.pk}} on {{incident.hostname}}</div>
184
+
185
+ </td>
186
+ </tr>
187
+ </table>
188
+ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;background: #FFFFFF;background-color: #FFFFFF;margin: 0;" width="100%">
189
+ <tr>
190
+ <td align="center" style="font-size:0px;padding:10px 25px;word-break:break-word;text-align: center;background: #e4e4e4; background-color: #e4e4e4;">
191
+ <div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:20px;font-weight:300;font-style:italic;line-height:30px;text-align:center;color:#000000;">
192
+ {{incident.description}}
193
+ </div>
194
+ </td>
195
+ </tr>
196
+ <tr>
197
+ <td>
198
+ <pre style="font-size: 16px; overflow-x: scroll; word-wrap: normal; max-width: 980px; padding: 8px;">
199
+ New Message:
200
+
201
+ {{message}}
202
+ -{{by.display_name}}
203
+ </pre>
204
+ </td>
205
+ </tr>
206
+ <tr>
207
+ <td>
208
+ <div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:16;font-weight:300;font-style:italic;line-height:30px;text-align:left;">
209
+ You can respond to this email with notes or actions. Make sure to leave to blank lines at the end of your email. For actions just include one of these words on its own line: "open", "close", "pause", "ignore".
210
+ </div>
211
+ </td>
212
+ </tr>
213
+
214
+ <tr>
215
+ <td align="center" vertical-align="middle" style="font-size:0px;padding:10px 25px;word-break:break-word;">
216
+ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse:separate;line-height:100%;">
217
+ <tr>
218
+ <td align="center" bgcolor="#4f82f6" role="presentation" style="border:none;border-radius:3px;cursor:auto;mso-padding-alt:8px 16px;background:#4f82f6;" valign="middle">
219
+ <a href="{{portal_url}}" style="display: inline-block; background: #4f82f6; color: white; font-family: Roboto, Helvetica, Arial, sans-serif; font-size: 16px; font-weight: bold; line-height: 16px; margin: 0; text-decoration: none; text-transform: none; padding: 12px 20px; mso-padding-alt: 0px; border-radius: 3px;" target="_blank"> VIEW ON PORTAL </a>
220
+ </td>
221
+ </tr>
222
+ </table>
223
+ </td>
224
+ </tr>
225
+
226
+
227
+ </table>
228
+ </div>
229
+ <!--[if mso | IE]>
230
+ </td>
231
+
232
+ </tr>
233
+
234
+ </table>
235
+ <![endif]-->
236
+ </td>
237
+ </tr>
238
+ </tbody>
239
+ </table>
240
+ </div>
241
+ <!--[if mso | IE]>
242
+ </td>
243
+ </tr>
244
+ </table>
245
+
246
+ <table
247
+ align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
248
+ >
249
+ <tr>
250
+ <td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
251
+ <![endif]-->
252
+ <div style="margin:20px auto;max-width:800px;">
253
+ <table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%;">
254
+ <tbody>
255
+ <tr>
256
+ <td style="direction:ltr;font-size:0px;padding:0;text-align:center;">
257
+ <!--[if mso | IE]>
258
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
259
+
260
+ <tr>
261
+
262
+ <td
263
+ class="" style="vertical-align:top;width:600px;"
264
+ >
265
+ <![endif]-->
266
+ <div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
267
+ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
268
+ <tr>
269
+ <td align="center" style="font-size:0px;padding:10px 25px;word-break:break-word;">
270
+ <div style="text-align: center;">
271
+ <img src="{{SITE_LOGO}}" height=40>
272
+ </div>
273
+ <div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:14px;font-weight:300;line-height:20px;text-align:center;color:#000000;">
274
+ <!-- <a href="#" style="color:#fafafa">Privacy Policy</a> | <a href="#" style="color:#fafafa">Contact Support</a> | <a href="#" style="color:#fafafa">Unsubscribe</a><br /> --> Powered by {{SITE_LABEL}}<br> © 2023 {{settings.COMPANY_LABEL}}
275
+ </div>
276
+ </td>
277
+ </tr>
278
+ <tr>
279
+ <td align="center" style="font-size:0px;padding:10px 25px;word-break:break-word;">
280
+ <div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:14px;font-weight:300;line-height:20px;text-align:center;color:#000000;">
281
+ Don't like these emails? <a style="color: #c0c1ff;font-weight: bold;text-decoration: none;" href="{{BASE_URL}}member/unsubscribe/">Unsubscribe</a>.
282
+ </div>
283
+ </td>
284
+ </tr>
285
+ <tr>
286
+ <td align="center" style="font-size:0px;padding:10px 25px;word-break:break-word;">
287
+
288
+ <table
289
+ align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
290
+ >
291
+ <tr>
292
+ <td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
293
+ <![endif]-->
294
+ <div style="margin:0px auto;max-width:800px;">
295
+ <table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%;">
296
+ <tbody>
297
+ <tr>
298
+ <td style="direction:ltr;font-size:0px;padding:20px 0;text-align:center;">
299
+ <!--[if mso | IE]>
300
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
301
+
302
+ <tr>
303
+
304
+ <td
305
+ class="" style="vertical-align:top;width:600px;"
306
+ >
307
+ <![endif]-->
308
+ <div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
309
+ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
310
+ <tr>
311
+ <td style="font-size:0px;word-break:break-word;">
312
+ <!--[if mso | IE]>
313
+
314
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td height="1" style="vertical-align:top;height:1px;">
315
+
316
+ <![endif]-->
317
+ <div style="height:1px;"> &nbsp; </div>
318
+ <!--[if mso | IE]>
319
+
320
+ </td></tr></table>
321
+
322
+ <![endif]-->
323
+ </td>
324
+ </tr>
325
+ </table>
326
+ </div>
327
+ <!--[if mso | IE]>
328
+ </td>
329
+
330
+ </tr>
331
+
332
+ </table>
333
+ <![endif]-->
334
+ </td>
335
+ </tr>
336
+ </tbody>
337
+ </table>
338
+ </div>
339
+ <!--[if mso | IE]>
340
+ </td>
341
+ </tr>
342
+ </table>
343
+ <![endif]-->
344
+ </div>
345
+ </body>
346
+
347
+ </html>
@@ -11,6 +11,8 @@ class Address(models.Model, rm.RestModel):
11
11
  "manage_groups",
12
12
  "manage_group",
13
13
  "manage_settings"]
14
+ CREATE_PERMS = None # allow anyone to create
15
+ EDIT_PERMS = None # allow anyone to edit
14
16
  GRAPHS = {
15
17
  "abstract": {
16
18
  "fields":[
rest/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  from .uberdict import UberDict # noqa: F401
2
2
  from .settings_helper import settings # noqa: F401
3
3
 
4
- __version__ = "4.2.58"
4
+ __version__ = "4.2.60"