Skip to content
Snippets Groups Projects
Verified Commit 0ddd3755 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

WIP: create fdo

parent 339811a5
No related branches found
No related tags found
No related merge requests found
Pipeline #48213 passed
......@@ -10,7 +10,30 @@ servers:
tags:
- name: Repositories
description: Repositories for storing FDO data and metadata.
- name: Profiles
description: FDO Profiles specify the attributes of FDOs.
paths:
/profiles:
get:
tags:
- Profiles
summary: "List known profiles."
operationId: listProfiles
responses:
200:
description: "Success."
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Profile'
links:
$ref: '#/components/schemas/Links'
/hello:
get:
summary: Say hello to the server.
......@@ -311,6 +334,16 @@ components:
- "gwdg-cordra-1"
- "fdo.indiscale.com"
- "b2share@gwdg"
ProfileID:
type: string
nullable: true
Profile:
type: object
properties:
id:
$ref: '#/components/schemas/ProfileID'
links:
$ref: '#/components/schemas/Links'
Repository:
type: object
properties:
......
package com.indiscale.fdo.manager.service;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.indiscale.fdo.manager.service.authentication.AuthToken;
import com.indiscale.fdo.manager.service.authentication.AuthTokenInterceptor;
@Configuration
public class HeaderInterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(final InterceptorRegistry registry) {
registry.addInterceptor(authTokenInterceptor());
}
@Bean
AuthTokenInterceptor authTokenInterceptor() {
return new AuthTokenInterceptor(authToken());
}
@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
AuthToken authToken() {
return new AuthToken();
}
}
\ No newline at end of file
package com.indiscale.fdo.manager.service;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/")
public class RedirectBase {
@Value("${springdoc.swagger-ui.path}")
private String swaggerUiPath;
@GetMapping("/")
public ModelAndView redirectToSwaggerUi(ModelMap model) {
System.out.println("here:" + swaggerUiPath);
return new ModelAndView("forward:"+swaggerUiPath, model);
}
}
\ No newline at end of file
package com.indiscale.fdo.manager.service.authentication;
public class AuthToken {
private String token;
public void setToken(String token) {
this.token = token;
}
public String getToken() {
return token;
}
@Override
public String toString() {
return "AuthToken[" + token + "]";
}
}
package com.indiscale.fdo.manager.service.authentication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.HandlerInterceptor;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class AuthTokenInterceptor implements HandlerInterceptor {
final private AuthToken authToken;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String header = request.getHeader("authentication");
if(header != null && header.startsWith("Bearer ")) {
authToken.setToken(header.substring(7));
}
return true;
}
public AuthTokenInterceptor(AuthToken authToken) {
this.authToken = authToken;
}
@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
AuthToken authToken() {
return new AuthToken();
}
}
\ No newline at end of file
......@@ -25,6 +25,7 @@ import com.indiscale.fdo.manager.service.BaseController;
import com.indiscale.fdo.manager.service.ManagerPool;
import com.indiscale.fdo.manager.service.api.model.TargetRepositories;
import com.indiscale.fdo.manager.service.api.operation.FdoApi;
import com.indiscale.fdo.manager.service.authentication.AuthToken;
import jakarta.validation.Valid;
......@@ -63,11 +64,15 @@ public class FDOApiImpl extends BaseController implements FdoApi {
@Autowired
ManagerPool managerPool;
@Autowired
AuthToken authToken;
@Override
public ResponseEntity<Void> createFDO(@Valid TargetRepositories repositories, MultipartFile data,
MultipartFile metadata) {
System.out.print("authToken: " + authToken.getToken());
try (Manager manager = managerPool.getManager()) {
RepositoryConnection repository = manager.getRepositoryRegistry().createRepositoryConnection(repositories.getFdo());
FDO fdo = manager.createFDO(repository, new DataWrapper(data), new MetadataWrapper(metadata));
......
package com.indiscale.fdo.manager.service.hello;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
......@@ -9,11 +10,15 @@ import com.indiscale.fdo.manager.service.BaseController;
import com.indiscale.fdo.manager.service.api.model.GetInfo200Response;
import com.indiscale.fdo.manager.service.api.model.Info;
import com.indiscale.fdo.manager.service.api.operation.InfoApi;
import com.indiscale.fdo.manager.service.authentication.AuthToken;
@RestController
@CrossOrigin(origins = {"${react-dev-server}"})
public class InfoImpl extends BaseController implements InfoApi {
@Autowired
AuthToken authToken;
@Value("${fdo.service.version}")
private String fdoServiceVersion;
@Value("${fdo.sdk.version}")
......@@ -21,6 +26,7 @@ public class InfoImpl extends BaseController implements InfoApi {
@Override
public ResponseEntity<GetInfo200Response> getInfo() {
System.out.println("authToken: " + authToken);
Info data = new Info().fdoServiceVersion(fdoServiceVersion).fdoSdkVersion(fdoSdkVersion);
return ResponseEntity.ok(new GetInfo200Response(data));
}
......
# accept cross origin for the react dev server
react-dev-server=http://localhost:3000
server.port=8080
server.servlet.context-path=/api
server.port=8081
server.servlet.context-path=/api/v1
fdo.service.version=@project.version@
fdo.sdk.version=@fdo.sdk.version@
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
springdoc.swagger-ui.path=/swagger-ui
springdoc.api-docs.path=/api-docs
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment