diff --git a/snd/api-src/org/labkey/api/snd/SNDService.java b/snd/api-src/org/labkey/api/snd/SNDService.java index d0d122119..3e580b552 100644 --- a/snd/api-src/org/labkey/api/snd/SNDService.java +++ b/snd/api-src/org/labkey/api/snd/SNDService.java @@ -43,7 +43,7 @@ public interface SNDService @Nullable static SNDService get() { - return ServiceRegistry.get(SNDService.class); + return ServiceRegistry.get().getService(SNDService.class); } void savePackage(Container c, User u, Package pkg); diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java b/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java index 98e269c01..9e541dbfd 100644 --- a/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java +++ b/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java @@ -38,9 +38,12 @@ import org.labkey.api.query.DetailsURL; import org.labkey.api.query.QuerySchema; import org.labkey.api.resource.Resource; +import org.labkey.api.security.SecurityManager; +import org.labkey.api.security.User; import org.labkey.api.security.permissions.AdminPermission; import org.labkey.api.security.permissions.UpdatePermission; import org.labkey.api.security.roles.RoleManager; +import org.labkey.api.settings.OptionalFeatureService; import org.labkey.api.snd.SNDService; import org.labkey.api.view.ActionURL; import org.labkey.api.view.BaseWebPartFactory; @@ -147,6 +150,11 @@ protected void init() @Override protected void doStartupAfterSpringConfig(ModuleContext moduleContext) { + // SSRS reports authenticate via the apikey URL parameter. TODO: Remove this once SNPRC has upgraded to 26.11 or later. + OptionalFeatureService ofs = OptionalFeatureService.get(); + if (!ofs.isFeatureEnabled(SecurityManager.FEATURE_FLAG_ALLOW_APIKEY_PARAMETER)) + ofs.setFeatureEnabled(SecurityManager.FEATURE_FLAG_ALLOW_APIKEY_PARAMETER, true, User.getAdminServiceUser()); + EHRService.get().registerModule(this); // Register the Biocontainment Observations audit log, populated by BiocontainmentObservationsAuditLogTask diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/notification/AbstractSSRSNotification.java b/snprc_ehr/src/org/labkey/snprc_ehr/notification/AbstractSSRSNotification.java index 2d786a499..3d0e65eb7 100644 --- a/snprc_ehr/src/org/labkey/snprc_ehr/notification/AbstractSSRSNotification.java +++ b/snprc_ehr/src/org/labkey/snprc_ehr/notification/AbstractSSRSNotification.java @@ -44,6 +44,7 @@ import org.labkey.api.util.DateUtil; import org.labkey.api.util.FileUtil; import org.labkey.api.util.MailHelper; +import org.labkey.api.util.PageFlowUtil; import org.labkey.api.util.UnexpectedException; import org.labkey.snprc_ehr.SNPRC_EHRModule; @@ -51,12 +52,8 @@ import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; -/** - * Created by: jeckels - * Date: 6/29/16 - */ public abstract class AbstractSSRSNotification implements Notification { private final String _subject; @@ -148,16 +145,16 @@ public MimeMessage createMessage(Container c, User u) // However, if SSRS is handling the request asynchronously we might need to block, sleep, etc. so it's not // terminated too early TransformSession session = SecurityManager.createTransformSession(u); - String ssrsSessionURL = ssrsReportURL + "&" + SecurityManager.TRANSFORM_SESSION_ID + "=" + session.getApiKey(); + String ssrsSessionURL = ssrsReportURL + "&" + SecurityManager.API_KEY + "=" + PageFlowUtil.encodeURIComponent(session.getApiKey()); try { URI uri = new URI(ssrsSessionURL); - HttpGet request = new HttpGet (uri); + HttpGet request = new HttpGet(uri); String auth = user + ":" + password; - byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("ISO-8859-1"))); - String authHeader = "Basic " + new String(encodedAuth, "ISO-8859-1"); + byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.ISO_8859_1)); + String authHeader = "Basic " + new String(encodedAuth, StandardCharsets.ISO_8859_1); request.setHeader(HttpHeaders.AUTHORIZATION, authHeader); try (CloseableHttpClient client = HttpClientBuilder.create().build(); CloseableHttpResponse resp = client.execute(request)) diff --git a/snprc_scheduler/api-src/org/labkey/api/snprc_scheduler/SNPRC_schedulerService.java b/snprc_scheduler/api-src/org/labkey/api/snprc_scheduler/SNPRC_schedulerService.java index ec3eb7f42..6c0e061ee 100644 --- a/snprc_scheduler/api-src/org/labkey/api/snprc_scheduler/SNPRC_schedulerService.java +++ b/snprc_scheduler/api-src/org/labkey/api/snprc_scheduler/SNPRC_schedulerService.java @@ -23,7 +23,7 @@ public interface SNPRC_schedulerService @Nullable static SNPRC_schedulerService get() { - return ServiceRegistry.get(SNPRC_schedulerService.class); + return ServiceRegistry.get().getService(SNPRC_schedulerService.class); } List getActiveTimelines(Container c, User u, String ProjectObjectId, BatchValidationException errors);