Skip to content

Commit d3a9c0f

Browse files
committed
Merge branch 'develop' into fb_calendar_based_grouping_1209
2 parents f083eea + 2c85948 commit d3a9c0f

219 files changed

Lines changed: 5604 additions & 1770 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/pull_request_template.md

Lines changed: 0 additions & 16 deletions
This file was deleted.

announcements/src/org/labkey/announcements/AnnouncementsController.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.jetbrains.annotations.Nullable;
2727
import org.json.JSONObject;
2828
import org.labkey.announcements.model.AnnouncementDigestProvider;
29+
import org.labkey.announcements.model.AnnouncementFullModel;
2930
import org.labkey.announcements.model.AnnouncementManager;
3031
import org.labkey.announcements.model.AnnouncementModel;
3132
import org.labkey.announcements.model.DailyDigestEmailPrefsSelector;
@@ -214,7 +215,6 @@ public static ActionURL getBeginURL(Container c)
214215

215216
public static AnnouncementModel copyEditableProps(AnnouncementModel target, AnnouncementModel source, boolean isInsert)
216217
{
217-
if (source.getApproved() != null) target.setApproved(source.getApproved());
218218
if (source.getAssignedTo() != null) target.setAssignedTo(source.getAssignedTo());
219219
if (source.getBody() != null) target.setBody(source.getBody());
220220
if (source.getExpires() != null) target.setExpires(source.getExpires());
@@ -915,7 +915,7 @@ public BindException bindParameters(PropertyValues m) throws Exception
915915
public ModelAndView getInsertUpdateView(AnnouncementForm form, boolean reshow, BindException errors)
916916
{
917917
Permissions perm = getPermissions();
918-
AnnouncementModel parent = null;
918+
AnnouncementFullModel parent = null;
919919
Container c = getContainer();
920920

921921
if (null != form.getParentId())
@@ -2238,7 +2238,7 @@ protected DataRegion getDataRegion(Permissions perm, Settings settings)
22382238

22392239
public static class ThreadViewBean
22402240
{
2241-
public AnnouncementModel announcementModel;
2241+
public AnnouncementFullModel announcementModel;
22422242
public String message = "";
22432243
public Permissions perm = null;
22442244
public boolean isResponse = false;
@@ -2259,7 +2259,7 @@ private ThreadView()
22592259
super("/org/labkey/announcements/announcementThread.jsp", new ThreadViewBean());
22602260
}
22612261

2262-
public ThreadView(Container c, ActionURL url, AnnouncementModel ann, Permissions perm)
2262+
public ThreadView(Container c, ActionURL url, AnnouncementFullModel ann, Permissions perm)
22632263
{
22642264
this();
22652265
init(c, ann, url, perm, true, false);
@@ -2268,11 +2268,11 @@ public ThreadView(Container c, ActionURL url, AnnouncementModel ann, Permissions
22682268
public ThreadView(AnnouncementForm form, Container c, ActionURL url, Permissions perm, boolean print)
22692269
{
22702270
this();
2271-
AnnouncementModel ann = findThread(c, form.getAsString("rowId"), form.getAsString("entityId"));
2271+
AnnouncementFullModel ann = findThread(c, form.getAsString("rowId"), form.getAsString("entityId"));
22722272
init(c, ann, url, perm, false, print);
22732273
}
22742274

2275-
protected void init(Container c, AnnouncementModel ann, URLHelper currentURL, Permissions perm, boolean isResponse, boolean print)
2275+
protected void init(Container c, AnnouncementFullModel ann, URLHelper currentURL, Permissions perm, boolean isResponse, boolean print)
22762276
{
22772277
if (null == c || !perm.allowRead(ann))
22782278
{
@@ -2376,7 +2376,7 @@ public AnnouncementModel getAnnouncement()
23762376
}
23772377

23782378

2379-
private static @Nullable AnnouncementModel findThread(Container c, String rowIdVal, String entityId)
2379+
private static @Nullable AnnouncementFullModel findThread(Container c, String rowIdVal, String entityId)
23802380
{
23812381
int rowId = 0;
23822382
if (rowIdVal != null)

announcements/src/org/labkey/announcements/announcementThread.jsp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<%@ page import="org.labkey.announcements.AnnouncementsController.RespondAction" %>
2121
<%@ page import="org.labkey.announcements.AnnouncementsController.ThreadView" %>
2222
<%@ page import="org.labkey.announcements.AnnouncementsController.ThreadViewBean" %>
23+
<%@ page import="org.labkey.announcements.model.AnnouncementFullModel" %>
2324
<%@ page import="org.labkey.announcements.model.AnnouncementManager" %>
2425
<%@ page import="org.labkey.announcements.model.AnnouncementModel" %>
2526
<%@ page import="org.labkey.announcements.model.Settings" %>
@@ -38,7 +39,7 @@
3839
Container c = getContainer();
3940
User user = getUser();
4041
ThreadViewBean bean = me.getModelBean();
41-
AnnouncementModel announcementModel = bean.announcementModel;
42+
AnnouncementFullModel announcementModel = bean.announcementModel;
4243
Settings settings = bean.settings;
4344
4445
if (null == announcementModel)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.labkey.announcements.model;
2+
3+
import java.util.Date;
4+
5+
public class AnnouncementFullModel extends AnnouncementModel
6+
{
7+
private Date _approved = null;
8+
9+
public Date getApproved()
10+
{
11+
return _approved;
12+
}
13+
14+
public void setApproved(Date approved)
15+
{
16+
_approved = approved;
17+
}
18+
19+
public boolean isSpam()
20+
{
21+
return AnnouncementManager.SPAM_MAGIC_DATE.equals(getApproved());
22+
}
23+
}

announcements/src/org/labkey/announcements/model/AnnouncementManager.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -121,20 +121,20 @@ private AnnouncementManager()
121121
{
122122
}
123123

124-
private static @Nullable AnnouncementModel getAnnouncement(@Nullable Container c, @NotNull SimpleFilter filter)
124+
private static @Nullable AnnouncementFullModel getAnnouncement(@Nullable Container c, @NotNull SimpleFilter filter)
125125
{
126126
if (c != null)
127127
filter.addCondition(FieldKey.fromParts("Container"), c);
128128

129-
return new TableSelector(_comm.getTableInfoAnnouncements(), filter, null).getObject(AnnouncementModel.class);
129+
return new TableSelector(_comm.getTableInfoAnnouncements(), filter, null).getObject(AnnouncementFullModel.class);
130130
}
131131

132-
public static @Nullable AnnouncementModel getAnnouncement(@Nullable Container c, long rowId)
132+
public static @Nullable AnnouncementFullModel getAnnouncement(@Nullable Container c, long rowId)
133133
{
134134
return getAnnouncement(c, new SimpleFilter(FieldKey.fromParts("RowId"), rowId));
135135
}
136136

137-
public static @Nullable AnnouncementModel getAnnouncement(@Nullable Container c, String entityId)
137+
public static @Nullable AnnouncementFullModel getAnnouncement(@Nullable Container c, String entityId)
138138
{
139139
try
140140
{
@@ -522,7 +522,7 @@ private static AnnouncementModel validateModelWithSideEffects(AnnouncementModel
522522
}
523523

524524
// Magic date value used to mark an announcement that a moderator has reviewed and marked as spam
525-
private static final Date SPAM_MAGIC_DATE = new Date(0);
525+
static final Date SPAM_MAGIC_DATE = new Date(0);
526526

527527
// Standard filters for retrieving specific classes of messages (approved, spam, needs review)
528528
public static final SimpleFilter IS_APPROVED_FILTER = new SimpleFilter(FieldKey.fromParts("Approved"), AnnouncementManager.SPAM_MAGIC_DATE, CompareType.GT);
@@ -534,11 +534,6 @@ public static void markAsSpam(Container c, AnnouncementModel ann)
534534
updateApproved(c, ann, SPAM_MAGIC_DATE);
535535
}
536536

537-
public static boolean isSpam(AnnouncementModel ann)
538-
{
539-
return SPAM_MAGIC_DATE.equals(ann.getApproved());
540-
}
541-
542537
// Execute direct SQL (not Table.update())... I don't think we want to change Modified or ModifiedBy. Could consider adding column for Moderator, though.
543538
// Returns true if an update was made, false if not (e.g., message was already reviewed).
544539
private static boolean updateApproved(Container c, AnnouncementModel ann, Date date)

announcements/src/org/labkey/announcements/model/AnnouncementModel.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ public class AnnouncementModel extends Entity implements Serializable
8080

8181
private Collection<AnnouncementModel> _responses = null;
8282
private Set<User> _authors;
83-
private Date _approved = null;
8483

8584
/**
8685
* Standard constructor.
@@ -418,21 +417,5 @@ public AttachmentParent getAttachmentParent()
418417
{
419418
return new AnnouncementAttachmentParent(this);
420419
}
421-
422-
public Date getApproved()
423-
{
424-
return _approved;
425-
}
426-
427-
public void setApproved(Date approved)
428-
{
429-
_approved = approved;
430-
}
431-
432-
@JsonIgnore
433-
public boolean isSpam()
434-
{
435-
return AnnouncementManager.isSpam(this);
436-
}
437420
}
438421

api/src/org/labkey/api/ApiModule.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@
189189
import org.labkey.api.view.ViewServlet;
190190
import org.labkey.api.view.WebPartFactory;
191191
import org.labkey.api.webdav.WebdavResolverImpl;
192+
import org.labkey.api.wiki.WikiRendererType;
192193
import org.labkey.api.writer.ContainerUser;
193194
import org.labkey.filters.ContentSecurityPolicyFilter;
194195

@@ -219,6 +220,7 @@ public class ApiModule extends CodeOnlyModule
219220

220221
public static final String EXTJS_3_REQUIRED = "ExtJs3Required";
221222
public static final String EXTJS_3_API_REQUIRED = "ExtJs3ApiRequired";
223+
public static final String ALLOW_MUTATING_SQL_VIA_GET = "AllowMutatingSqlViaGet";
222224

223225
@Override
224226
protected void init()
@@ -264,6 +266,14 @@ protected void init()
264266
false,
265267
FeatureType.Deprecated
266268
));
269+
OptionalFeatureService.get().addFeatureFlag(new OptionalFeatureFlag(
270+
ALLOW_MUTATING_SQL_VIA_GET,
271+
"Allow GET requests to execute mutating SQL",
272+
"We strongly recommend leaving this off since it bypasses a critical security check (CSRF). This option will be removed in LabKey Server 26.11",
273+
false,
274+
false,
275+
FeatureType.Deprecated
276+
));
267277
}
268278

269279
@NotNull
@@ -389,6 +399,7 @@ public void registerServlets(ServletContext servletCtx)
389399
ApiXmlWriter.TestCase.class,
390400
ArrayListMap.TestCase.class,
391401
AssayResultsFileWriter.TestCase.class,
402+
AuthenticationManager.ReauthTokenTest.class,
392403
BaseServerProperties.TestCase.class,
393404
BooleanFormat.TestCase.class,
394405
BuilderObjectFactory.TestCase.class,
@@ -552,6 +563,7 @@ public void registerServlets(ServletContext servletCtx)
552563
UserManager.TestCase.class,
553564
ViewCategoryManager.TestCase.class,
554565
WebdavResolverImpl.TestCase.class,
566+
WikiRendererType.TestCase.class,
555567
WorkbookContainerType.TestCase.class,
556568
WriteableLookAndFeelProperties.TestCase.class
557569
);

api/src/org/labkey/api/action/ApiJsonWriter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,9 @@ public void testExceptionNotCommitted() throws IOException
485485
var responseText = ((MockHttpServletResponse)writer.getResponse()).getContentAsString();
486486
var json = new JSONObject(responseText);
487487
assertEquals("throwing up", json.getString("exception"));
488-
assertTrue(json.has("stackTrace"));
488+
assertFalse(json.getBoolean("success"));
489+
assertEquals("java.lang.IllegalStateException", json.get("exceptionClass"));
490+
assertFalse(json.has("stackTrace"));
489491
assertFalse(json.has("schemaName"));
490492
}
491493

api/src/org/labkey/api/action/ApiResponseWriter.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,6 @@ public JSONObject toJSON(Throwable e)
453453
JSONObject json = new JSONObject();
454454
json.put("exception", e.getMessage() != null ? e.getMessage() : e.getClass().getName());
455455
json.put("exceptionClass", e.getClass().getName());
456-
json.put("stackTrace", e.getStackTrace());
457456
return json;
458457
}
459458

api/src/org/labkey/api/action/SimpleErrorView.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323

2424
/**
2525
* View that renders an error collection.
26-
* User: adam
27-
* Date: Sep 26, 2007
2826
*/
2927
public class SimpleErrorView extends JspView<Boolean>
3028
{

0 commit comments

Comments
 (0)