Skip to content

Commit

Permalink
IM-457 feat: Add k.engine.frontend and k.explorer to klab
Browse files Browse the repository at this point in the history
Added k.engine.frontend and k.explorer to the klab setup.
Removed old remnants of Authorization and replaced them with Klab_Authorization for session management.
  • Loading branch information
kristinaBc3 committed Nov 29, 2024
1 parent a105232 commit 5b9f87b
Show file tree
Hide file tree
Showing 40 changed files with 461 additions and 733 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,8 @@ public class EnginePublicController implements API.PUBLIC {
@RequestMapping(value = CREATE_CONTEXT, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public TicketResponse.Ticket contextRequest(@RequestBody ContextRequest request,
@RequestHeader(name = "Klab_Authorization") String klabAuth, @RequestHeader(name = "Authorization") String auth) {
@RequestHeader(name = "Klab_Authorization") String session) {

String session = klabAuth != null ? klabAuth : auth;

Session s = Authentication.INSTANCE.getIdentity(session, Session.class);
if (s == null) {
throw new KlabIllegalStateException("create context: invalid session ID");
Expand Down Expand Up @@ -112,9 +110,8 @@ public TicketResponse.Ticket contextRequest(@RequestBody ContextRequest request,
@RequestMapping(value = OBSERVE_IN_CONTEXT, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public TicketResponse.Ticket observationRequest(@RequestBody ObservationRequest request,
@RequestHeader(name = "Klab_Authorization") String klabAuth, @RequestHeader(name = "Authorization") String auth, @PathVariable String context) {
@RequestHeader(name = "Klab_Authorization") String session, @PathVariable String context) {

String session = klabAuth != null ? klabAuth : auth;
Session s = Authentication.INSTANCE.getIdentity(session, Session.class);

if (s == null) {
Expand Down Expand Up @@ -147,10 +144,9 @@ public TicketResponse.Ticket observationRequest(@RequestBody ObservationRequest

@RequestMapping(value = SUBMIT_ESTIMATE, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public TicketResponse.Ticket submitEstimate(@RequestHeader(name = "Klab_Authorization") String klabAuth, @RequestHeader(name = "Authorization") String auth,
public TicketResponse.Ticket submitEstimate(@RequestHeader(name = "Klab_Authorization") String session,
@PathVariable String estimate) {

String session = klabAuth != null ? klabAuth : auth;
Session s = Authentication.INSTANCE.getIdentity(session, Session.class);
if (s == null) {
// FIXME not illegitimate in case of server failure or restart with persistent
Expand All @@ -169,22 +165,21 @@ public TicketResponse.Ticket submitEstimate(@RequestHeader(name = "Klab_Authoriz

if (est.contextRequest != null) {
//TODO only 1 sessioin parameter
return contextRequest(est.contextRequest, session, session);
return contextRequest(est.contextRequest, session);
}

return observationRequest(est.observationRequest, session, session, est.observationRequest.getContextId());
return observationRequest(est.observationRequest, session, est.observationRequest.getContextId());
}

@RequestMapping(value = EXPORT_DATA, method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE,
MediaType.TEXT_PLAIN_VALUE, MediaType.APPLICATION_PDF_VALUE, MediaType.IMAGE_PNG_VALUE, "text/csv", "image/tiff",
"application/vnd.ms-excel", "application/octet-stream",
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"})
public void exportData(@PathVariable String export, @RequestHeader(name = "Klab_Authorization") String klabAuth, @RequestHeader(name = "Authorization") String auth,
public void exportData(@PathVariable String export, @RequestHeader(name = "Klab_Authorization") String session,
@PathVariable String observation, @RequestHeader(name = "Accept") String format,
@RequestParam(required = false) String view, @RequestParam(required = false) String viewport,
@RequestParam(required = false) String locator, HttpServletResponse response) throws IOException {

String session = klabAuth != null ? klabAuth : auth;

Session s = Authentication.INSTANCE.getIdentity(session, Session.class);
if (s == null) {
throw new KlabIllegalStateException("observe in context: invalid session ID");
Expand Down Expand Up @@ -392,10 +387,9 @@ private void outputImage(IObservation obs, HttpServletResponse response, Export

@RequestMapping(value = TICKET_INFO, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public TicketResponse.Ticket getTicketInfo(@RequestHeader(name = "Klab_Authorization") String klabAuth, @RequestHeader(name = "Authorization") String auth,
public TicketResponse.Ticket getTicketInfo(@RequestHeader(name = "Klab_Authorization") String session,
@PathVariable String ticket) {

String session = klabAuth != null ? klabAuth : auth;
Session s = Authentication.INSTANCE.getIdentity(session, Session.class);
if (s == null) {
// FIXME not illegitimate in case of server failure or restart with persistent
Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,20 @@
package org.integratedmodelling.klab.engine.rest.security;

import java.util.Collections;
import java.util.Map;
import java.util.stream.Collectors;

import javax.servlet.http.HttpServletRequest;

import org.integratedmodelling.klab.Authentication;
import org.integratedmodelling.klab.api.auth.IIdentity;
import org.integratedmodelling.klab.api.auth.KlabHttpHeaders;
import org.integratedmodelling.klab.utils.IPUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter;

public class PreauthenticationFilter extends AbstractPreAuthenticatedProcessingFilter {

@Override
protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {

String auth = request.getHeader(HttpHeaders.AUTHORIZATION);
String klabAuth = request.getHeader(KlabHttpHeaders.KLAB_AUTHORIZATION);

if (auth != null ) {
// send anything already known downstream
if (Authentication.INSTANCE.getIdentity(auth, IIdentity.class) != null) {
return auth;
}
}

if (klabAuth != null ) {
// send anything already known downstream
if (Authentication.INSTANCE.getIdentity(klabAuth, IIdentity.class) != null) {
Expand All @@ -44,17 +31,12 @@ protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
@Override
protected Object getPreAuthenticatedCredentials(HttpServletRequest request) {

String auth = request.getHeader(HttpHeaders.AUTHORIZATION);
String klabAuth = request.getHeader(KlabHttpHeaders.KLAB_AUTHORIZATION);
// returning null will refuse authentication
if (auth == null && klabAuth == null) {
if (klabAuth == null) {
return "dummycredentials";
} else if (auth != null && klabAuth != null) {
return klabAuth;
} else if (auth == null && klabAuth != null) {
return klabAuth;
} else {
return auth;
return klabAuth;
}

}
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

This file was deleted.

4 changes: 2 additions & 2 deletions klab.engine/src/main/resources/static/ui/index.html
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta name=description content="Web based explorer for k.LAB engine"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width"><title>k.Explorer</title><link rel=icon href=statics/klab-logo.png type=image/x-icon><link rel=icon type=image/png sizes=32x32 href=statics/icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=statics/icons/favicon-16x16.png><link rel=stylesheet type=text/css href=/modeler/shared/report.css><link rel=stylesheet type=text/css href=/modeler/shared/documentation.css><script type=text/javascript src=statics/js/xlsx.full.min.js></script><link as=style href=css/app.83b553c0.css rel=preload><link as=script href=js/app.0f9d6e58.js rel=preload><link as=script href=js/runtime.22c2c7a9.js rel=preload><link as=script href=js/vendor.520607ba.js rel=preload><link href=css/2feab1c0.b0f9de2f.css rel=prefetch><link href=js/2feab1c0.5757d8c5.js rel=prefetch><link href=js/4b4818b8.cd768103.js rel=prefetch><link href=css/app.83b553c0.css rel=stylesheet></head><body><noscript><style>[data-simplebar] {
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta name=description content="Web based explorer for k.LAB engine"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width"><title>k.Explorer</title><link rel=icon href=statics/klab-logo.png type=image/x-icon><link rel=icon type=image/png sizes=32x32 href=statics/icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=statics/icons/favicon-16x16.png><link rel=stylesheet type=text/css href=/modeler/shared/report.css><link rel=stylesheet type=text/css href=/modeler/shared/documentation.css><script type=text/javascript src=statics/js/xlsx.full.min.js></script><link as=style href=css/app.27820942.css rel=preload><link as=script href=js/app.8e207f77.js rel=preload><link as=script href=js/runtime.aa4e4e23.js rel=preload><link as=script href=js/vendor.bfa7f89f.js rel=preload><link href=css/6619c582.b0f9de2f.css rel=prefetch><link href=js/4b4818b8.cd768103.js rel=prefetch><link href=js/6619c582.7e57653d.js rel=prefetch><link href=css/app.27820942.css rel=stylesheet></head><body><noscript><style>[data-simplebar] {
overflow: auto;
}</style></noscript><div id=q-app></div><script type=text/javascript src=js/app.0f9d6e58.js></script><script type=text/javascript src=js/runtime.22c2c7a9.js></script><script type=text/javascript src=js/vendor.520607ba.js></script></body></html>
}</style></noscript><div id=q-app></div><script type=text/javascript src=js/app.8e207f77.js></script><script type=text/javascript src=js/runtime.aa4e4e23.js></script><script type=text/javascript src=js/vendor.bfa7f89f.js></script></body></html>
Loading

0 comments on commit 5b9f87b

Please sign in to comment.