Skip to content
Snippets Groups Projects
Commit d250be7f authored by Mirco Nasuti's avatar Mirco Nasuti
Browse files

Services swaggified

parent 7f27296a
No related branches found
No related tags found
No related merge requests found
......@@ -22,6 +22,7 @@ package org.hbp.mip;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.*;
import org.hbp.mip.model.*;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -33,6 +34,7 @@ import org.springframework.boot.context.embedded.FilterRegistrationBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.Authentication;
......@@ -71,6 +73,8 @@ import java.util.List;
@SpringBootApplication
@RestController
@EnableOAuth2Client
@Api(value = "/", description = "MIP API")
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
public class MIPApplication extends WebSecurityConfigurerAdapter {
@Autowired
......@@ -94,133 +98,294 @@ public class MIPApplication extends WebSecurityConfigurerAdapter {
return principal;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http.antMatcher("/**")
.authorizeRequests()
.antMatchers("/", "/frontend/**", "/webjars/**").permitAll()
.anyRequest().authenticated()
.and().exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/"))
.and().logout().logoutSuccessUrl("/").permitAll()
.and().csrf().csrfTokenRepository(csrfTokenRepository())
.and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
.addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);
// @formatter:on
}
public static void main(String[] args) {
SpringApplication.run(MIPApplication.class, args);
}
@Bean
public FilterRegistrationBean oauth2ClientFilterRegistration(
OAuth2ClientContextFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(filter);
registration.setOrder(-100);
return registration;
}
private Filter ssoFilter() {
OAuth2ClientAuthenticationProcessingFilter hbpFilter = new OAuth2ClientAuthenticationProcessingFilter("/login/hbp");
OAuth2RestTemplate hbpTemplate = new OAuth2RestTemplate(hbp(), oauth2ClientContext);
hbpFilter.setRestTemplate(hbpTemplate);
hbpFilter.setTokenServices(new UserInfoTokenServices(hbpResource().getUserInfoUri(), hbp().getClientId()));
return hbpFilter;
}
@Bean
@ConfigurationProperties("hbp.client")
OAuth2ProtectedResourceDetails hbp() {
return new AuthorizationCodeResourceDetails();
}
@Bean
@ConfigurationProperties("hbp.resource")
ResourceServerProperties hbpResource() {
return new ResourceServerProperties();
}
private Filter csrfHeaderFilter() {
return new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
if (csrf != null) {
Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN");
String token = csrf.getToken();
if (cookie == null || token != null && !token.equals(cookie.getValue())) {
cookie = new Cookie("XSRF-TOKEN", token);
cookie.setPath("/");
response.addCookie(cookie);
}
}
filterChain.doFilter(request, response);
}
};
}
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
private String getUserInfos() {
OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) SecurityContextHolder.getContext().getAuthentication();
Authentication userAuthentication = oAuth2Authentication.getUserAuthentication();
System.out.println(userAuthentication.getDetails().toString());
return userAuthentication.getDetails().toString();
}
private User getUser(Principal principal) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
org.hibernate.Query query = session.createQuery("from User where username= :username");
query.setString("username", principal.getName());
User user = (User) query.uniqueResult();
session.getTransaction().commit();
if(user == null)
{
session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
user = new User(getUserInfos());
session.save(user);
session.getTransaction().commit();
}
return user;
}
@RequestMapping(value = "/articles", method = RequestMethod.GET)
@ResponseBody
public List<Article> getArticles(@RequestParam(name = "own", required = false) boolean own, @RequestParam(name = "team", required = false) int team, @RequestParam(name = "valid", required = false) boolean valid, @RequestParam(name = "status", required = false) String status) {
@ApiOperation(value = "Get articles", notes = "", response = Article.class, responseContainer = "List")
@ApiResponses(value = {@ApiResponse(code = 200, message = "Success") })
public ResponseEntity<List<Article>> getArticles(@ApiParam(value = "Only ask own articles") @RequestParam(value = "own", required = false) Boolean own,
@ApiParam(value = "Only ask results matching status") @RequestParam(value = "status", required = false) String status,
@ApiParam(value = "Only ask articles from own team") @RequestParam(value = "team", required = false) Boolean team,
@ApiParam(value = "Only ask valid articles") @RequestParam(value = "valid", required = false) Boolean valid
) throws NotFoundException {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<Article> articles = session.createQuery("from Article").list();
session.getTransaction().commit();
return articles;
return new ResponseEntity<List<Article>>(HttpStatus.OK).ok(articles);
}
@RequestMapping(value = "/articles", method = RequestMethod.POST)
@ApiOperation(value = "Create an article", notes = "", response = Void.class)
@ApiResponses(value = { @ApiResponse(code = 200, message = "Article created") })
public ResponseEntity<Void> addAnArticle(
@RequestBody @ApiParam(value = "Article to create" ,required=true ) Article article, Principal principal
)
throws NotFoundException {
User user = getUser(principal);
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
article.setCreatedAt(new Date());
if(article.getStatus().equals("published")) {
article.setPublishedAt(new Date());
}
article.setSlug(article.getTitle().toLowerCase());
article.setCreatedBy(user);
session.save(article);
session.getTransaction().commit();
return new ResponseEntity<Void>(HttpStatus.OK);
}
@RequestMapping(value = "/articles/{slug}", method = RequestMethod.GET)
@ResponseBody
public Article getArticle(@PathVariable("slug") String slug) {
@ApiOperation(value = "Get an article", notes = "", response = Article.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Found"),
@ApiResponse(code = 404, message = "Not found") })
public ResponseEntity<Article> getAnArticle(
@ApiParam(value = "slug",required=true ) @PathVariable("slug") String slug
)
throws NotFoundException {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
org.hibernate.Query query = session.createQuery("from Article where slug= :slug");
query.setString("slug", slug);
Article article = (Article) query.uniqueResult();
session.getTransaction().commit();
return article;
return new ResponseEntity<Article>(HttpStatus.OK).ok(article);
}
@RequestMapping(value = "/articles/{slug}", method = RequestMethod.PUT)
@ApiOperation(value = "Update an article", notes = "", response = Void.class)
@ApiResponses(value = { @ApiResponse(code = 200, message = "Article updated") })
public ResponseEntity<Void> updateAnArticle(
@ApiParam(value = "slug",required=true ) @PathVariable("slug") String slug,
@ApiParam(value = "Article to update" ,required=true ) Article article
)
throws NotFoundException {
//TODO
// do some magic!
return new ResponseEntity<Void>(HttpStatus.OK);
}
@RequestMapping(value = "/articles/{slug}", method = RequestMethod.DELETE)
@ApiOperation(value = "Delete an article", notes = "", response = Void.class)
@ApiResponses(value = { @ApiResponse(code = 200, message = "Article deleted") })
public ResponseEntity<Void> deleteAnArticle(
@ApiParam(value = "slug",required=true ) @PathVariable("slug") String slug
)
throws NotFoundException {
//TODO
// do some magic!
return new ResponseEntity<Void>(HttpStatus.OK);
}
@RequestMapping(value = "/datasets/{code}", method = RequestMethod.GET)
@ResponseBody
public Dataset getDatasets(@PathVariable("code") String code) {
@ApiOperation(value = "Get a dataset", notes = "", response = Dataset.class)
@ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
public ResponseEntity<Dataset> getADataset(
@ApiParam(value = "code",required=true ) @PathVariable("code") String code
)
throws NotFoundException {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
org.hibernate.Query query = session.createQuery("from Dataset where code= :code");
query.setString("code", code);
Dataset ds = (Dataset) query.uniqueResult();
session.getTransaction().commit();
return ds;
return new ResponseEntity<Dataset>(HttpStatus.OK).ok(ds);
}
@RequestMapping(value = "/models", method = RequestMethod.GET)
@ResponseBody
public List<Model> getModels() {
@ApiOperation(value = "Get models", notes = "", response = Model.class, responseContainer = "List")
@ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
public ResponseEntity<List<Model>> getModels(@ApiParam(value = "Max number of results") @RequestParam(value = "limit", required = false) Integer limit,
@ApiParam(value = "Only ask own models") @RequestParam(value = "own", required = false) Boolean own,
@ApiParam(value = "Only ask models from own team") @RequestParam(value = "team", required = false) Boolean team,
@ApiParam(value = "Only ask valid models") @RequestParam(value = "valid", required = false) Boolean valid
)
throws NotFoundException {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<Model> models = session.createQuery("from Model").list();
session.getTransaction().commit();
return models;
}
@RequestMapping(value = "/models/{slug}", method = RequestMethod.GET)
@ResponseBody
public Model getModel(@PathVariable("slug") String slug) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
org.hibernate.Query query = session.createQuery("from Model where slug= :slug");
query.setString("slug", slug);
Model model = (Model) query.uniqueResult();
session.getTransaction().commit();
return model;
}
@RequestMapping(value = "/articles", method = RequestMethod.POST)
@ResponseBody
public Article postArticle(@RequestBody Article article, Principal principal) {
User user = getUser(principal);
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
article.setCreatedAt(new Date());
if(article.getStatus().equals("published")) {
article.setPublishedAt(new Date());
}
article.setSlug(article.getTitle().toLowerCase());
article.setCreatedBy(user);
session.save(article);
session.getTransaction().commit();
return article;
return new ResponseEntity<List<Model>>(HttpStatus.OK).ok(models);
}
@RequestMapping(value = "/models", method = RequestMethod.POST)
@ResponseBody
public Model postModel(@RequestBody Model model) {
@ApiOperation(value = "Create a model", notes = "", response = Void.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Model created") })
public ResponseEntity<Void> addAModel(
@RequestBody @ApiParam(value = "Model to create" ,required=true ) Model model
)
throws NotFoundException {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
model.setCreatedAt(new Date());
model.setSlug(model.getTitle().toLowerCase());
session.save(model);
session.getTransaction().commit();
return model;
return new ResponseEntity<Void>(HttpStatus.OK);
}
@RequestMapping(value = "/models/{slug}/copies", method = RequestMethod.POST)
@RequestMapping(value = "/models/{slug}", method = RequestMethod.GET)
@ResponseBody
public Model postModelCopies(@PathVariable("slug") String slug) {
@ApiOperation(value = "Get a model", notes = "", response = Model.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Found"),
@ApiResponse(code = 404, message = "Not found") })
public ResponseEntity<Model> getAModel(
@ApiParam(value = "slug",required=true ) @PathVariable("slug") String slug
)
throws NotFoundException {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
org.hibernate.Query query = session.createQuery("from Model where slug= :slug");
query.setString("slug", slug);
Model model = (Model) query.uniqueResult();
session.getTransaction().commit();
return model;
}
@RequestMapping(value = "/queries/requests", method = RequestMethod.POST)
@ResponseBody
public Query postRequest(@RequestBody Query query) {
return null;
}
@RequestMapping(value = "/articles/{slug}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void putArticle(@PathVariable("slug") String slug) {
return new ResponseEntity<Model>(HttpStatus.OK).ok(model);
}
@RequestMapping(value = "/models/{slug}", method = RequestMethod.PUT)
@ResponseBody
public Model putModel(@PathVariable("slug") String slug) {
return null;
}
@RequestMapping(value = "/articles/{slug}", method = RequestMethod.DELETE)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteArticle(@PathVariable("slug") String slug) {
@ApiOperation(value = "Update a model", notes = "", response = Void.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Model updated") })
public ResponseEntity<Void> updateAModel(
@ApiParam(value = "slug",required=true ) @PathVariable("slug") String slug,
@ApiParam(value = "Model to update" ,required=true ) Model model
)
throws NotFoundException {
// TODO
// do some magic!
return new ResponseEntity<Void>(HttpStatus.OK);
}
@RequestMapping(value = "/models/{slug}", method = RequestMethod.DELETE)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteModel(@PathVariable("slug") String slug, @RequestBody Model model) {
@ApiOperation(value = "Delete a model", notes = "", response = Void.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Model deleted") })
public ResponseEntity<Void> deleteAModel(
@ApiParam(value = "slug",required=true ) @PathVariable("slug") String slug
)
throws NotFoundException {
// TODO
// do some magic!
return new ResponseEntity<Void>(HttpStatus.OK);
}
@RequestMapping(value = "/groups")
@ResponseBody
public Group getGroups(){
@ApiOperation(value = "Get the root group (containing all subgroups)", notes = "", response = Group.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Success") })
public ResponseEntity<Group> getTheRootGroup()
throws NotFoundException {
String rootCode = "root";
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
......@@ -228,138 +393,82 @@ public class MIPApplication extends WebSecurityConfigurerAdapter {
query.setString("code", rootCode);
Group group = (Group) query.uniqueResult();
session.getTransaction().commit();
return group;
return new ResponseEntity<Group>(HttpStatus.OK).ok(group);
}
@RequestMapping(value = "/variables")
@ResponseBody
public List<Variable> getVariables(){
@ApiOperation(value = "Get variables", notes = "", response = Variable.class, responseContainer = "List")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Success") })
public ResponseEntity<List<Variable>> getVariables(@ApiParam(value = "List of groups formatted like : (\"val1\", \"val2\", ...)") @RequestParam(value = "group", required = false) String group,
@ApiParam(value = "List of subgroups formatted like : (\"val1\", \"val2\", ...)") @RequestParam(value = "subgroup", required = false) String subgroup,
@ApiParam(value = "Boolean value formatted like : (\"0\") or (\"1\") or (\"false\") or (\"true\")") @RequestParam(value = "isVariable", required = false) String isVariable,
@ApiParam(value = "Boolean value formatted like : (\"0\") or (\"1\") or (\"false\") or (\"true\")") @RequestParam(value = "isGrouping", required = false) String isGrouping,
@ApiParam(value = "Boolean value formatted like : (\"0\") or (\"1\") or (\"false\") or (\"true\")") @RequestParam(value = "isCovariable", required = false) String isCovariable,
@ApiParam(value = "Boolean value formatted like : (\"0\") or (\"1\") or (\"false\") or (\"true\")") @RequestParam(value = "isFilter", required = false) String isFilter
)
throws NotFoundException {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<Variable> variables = session.createQuery("from Variable").list();
session.getTransaction().commit();
return variables;
return new ResponseEntity<List<Variable>>(HttpStatus.OK).ok(variables);
}
@RequestMapping(value = "/variables/{code}")
@ResponseBody
public Variable getVariable(@PathVariable("code") String code){
@ApiOperation(value = "Get a variable", notes = "", response = Variable.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Found"),
@ApiResponse(code = 404, message = "Not found") })
public ResponseEntity<Variable> getAVariable(
@ApiParam(value = "code ( multiple codes are allowed, separeted by \",\" )",required=true ) @PathVariable("code") String code
)
throws NotFoundException {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
org.hibernate.Query query = session.createQuery("from Variable where code= :code");
query.setString("code", code);
Variable variable = (Variable) query.uniqueResult();
session.getTransaction().commit();
return variable;
return new ResponseEntity<Variable>(HttpStatus.OK).ok(variable);
}
@RequestMapping(value = "/variables/{code}/values")
@ResponseBody
public List<Value> getValues(@PathVariable("code") String code){
@ApiOperation(value = "Get values from a variable", notes = "", response = Value.class, responseContainer = "List")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Found"),
@ApiResponse(code = 404, message = "Not found") })
public ResponseEntity<List<Value>> getValuesFromAVariable(
@ApiParam(value = "code",required=true ) @PathVariable("code") String code,
@ApiParam(value = "Pattern to match") @RequestParam(value = "q", required = false) String q
)
throws NotFoundException {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<Value> values = session.createQuery("select values from Variable where code= :code").setString("code", code).list();
session.getTransaction().commit();
return values;
return new ResponseEntity<List<Value>>(HttpStatus.OK).ok(values);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http.antMatcher("/**")
.authorizeRequests()
.antMatchers("/", "/frontend/**", "/webjars/**").permitAll()
.anyRequest().authenticated()
.and().exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/"))
.and().logout().logoutSuccessUrl("/").permitAll()
.and().csrf().csrfTokenRepository(csrfTokenRepository())
.and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
.addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);
// @formatter:on
}
public static void main(String[] args) {
SpringApplication.run(MIPApplication.class, args);
}
@Bean
public FilterRegistrationBean oauth2ClientFilterRegistration(
OAuth2ClientContextFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(filter);
registration.setOrder(-100);
return registration;
}
private Filter ssoFilter() {
OAuth2ClientAuthenticationProcessingFilter hbpFilter = new OAuth2ClientAuthenticationProcessingFilter("/login/hbp");
OAuth2RestTemplate hbpTemplate = new OAuth2RestTemplate(hbp(), oauth2ClientContext);
hbpFilter.setRestTemplate(hbpTemplate);
hbpFilter.setTokenServices(new UserInfoTokenServices(hbpResource().getUserInfoUri(), hbp().getClientId()));
return hbpFilter;
}
@Bean
@ConfigurationProperties("hbp.client")
OAuth2ProtectedResourceDetails hbp() {
return new AuthorizationCodeResourceDetails();
}
@Bean
@ConfigurationProperties("hbp.resource")
ResourceServerProperties hbpResource() {
return new ResourceServerProperties();
}
private Filter csrfHeaderFilter() {
return new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
if (csrf != null) {
Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN");
String token = csrf.getToken();
if (cookie == null || token != null && !token.equals(cookie.getValue())) {
cookie = new Cookie("XSRF-TOKEN", token);
cookie.setPath("/");
response.addCookie(cookie);
}
}
filterChain.doFilter(request, response);
}
};
}
}
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
class NotFoundException extends ApiException {
private int code;
public NotFoundException (int code, String msg) {
super(code, msg);
this.code = code;
}
}
private String getUserInfos() {
OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) SecurityContextHolder.getContext().getAuthentication();
Authentication userAuthentication = oAuth2Authentication.getUserAuthentication();
System.out.println(userAuthentication.getDetails().toString());
return userAuthentication.getDetails().toString();
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
class ApiException extends Exception{
private int code;
public ApiException (int code, String msg) {
super(msg);
this.code = code;
}
private User getUser(Principal principal) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
org.hibernate.Query query = session.createQuery("from User where username= :username");
query.setString("username", principal.getName());
User user = (User) query.uniqueResult();
session.getTransaction().commit();
if(user == null)
{
session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
user = new User(getUserInfos());
session.save(user);
session.getTransaction().commit();
}
return user;
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment