diff --git a/pom.xml b/pom.xml index 324ed29fd331b76639d29f5bf5275dd1b464a7eb..c5f359c4464b11cfa4881eb0c3a34f6824016120 100644 --- a/pom.xml +++ b/pom.xml @@ -293,6 +293,23 @@ <version>${scala.release.version}</version> <scope>compile</scope> </dependency> + <dependency> + <groupId>io.jsonwebtoken</groupId> + <artifactId>jjwt-api</artifactId> + <version>0.10.5</version> + </dependency> + <dependency> + <groupId>io.jsonwebtoken</groupId> + <artifactId>jjwt-impl</artifactId> + <version>0.10.5</version> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>io.jsonwebtoken</groupId> + <artifactId>jjwt-jackson</artifactId> + <version>0.10.5</version> + <scope>runtime</scope> + </dependency> </dependencies> <build> diff --git a/src/main/java/eu/hbp/mip/controllers/JWTApi.java b/src/main/java/eu/hbp/mip/controllers/JWTApi.java new file mode 100644 index 0000000000000000000000000000000000000000..fa27e5b381c670d08cc8326a31854fa9cb235a36 --- /dev/null +++ b/src/main/java/eu/hbp/mip/controllers/JWTApi.java @@ -0,0 +1,56 @@ +package eu.hbp.mip.controllers; + +import static org.springframework.http.MediaType.TEXT_PLAIN_VALUE; +import java.security.Key; +import java.util.Date; +import javax.crypto.spec.SecretKeySpec; +import javax.xml.bind.DatatypeConverter; +import eu.hbp.mip.model.UserInfo; +import org.slf4j.Logger; +import eu.hbp.mip.model.User; +import org.slf4j.LoggerFactory; +import org.springframework.http.ResponseEntity; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import io.jsonwebtoken.*; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +@RestController +@RequestMapping(value = "/jwt", produces = { TEXT_PLAIN_VALUE }) +@Api(value = "/jwt", description = "the jwt API") +public class JWTApi { + + private static final Logger LOGGER = LoggerFactory.getLogger(JWTApi.class); + + @Autowired + private UserInfo userInfo; + + @ApiOperation(value = "Create a JSON Web Token", response = String.class) + @RequestMapping(method = RequestMethod.POST) + public ResponseEntity<String> createJWT() { + + LOGGER.info("Create a JSON Web Token"); + + SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; + String apiKey = "6v2oxpJMzU14U-dqVireln5AUKTtx5fBPSEgaBZiI983d98cfa6"; + byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(apiKey); + Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName()); + + long nowMillis = System.currentTimeMillis(); + Date now = new Date(nowMillis); + + User user = userInfo.getUser(); + + // Set the JWT Claims + JwtBuilder builder = Jwts.builder().setIssuedAt(now) + .setIssuer("mip.humanbrainproject.eu").setSubject(user.getEmail()).signWith(signatureAlgorithm, signingKey); + + long expMillis = nowMillis + 86400 * 24; + Date exp = new Date(expMillis); + builder.setExpiration(exp); + + return ResponseEntity.status(HttpStatus.CREATED).body(builder.compact()); + } +} \ No newline at end of file diff --git a/src/main/java/eu/hbp/mip/model/UserInfo.java b/src/main/java/eu/hbp/mip/model/UserInfo.java index f4671b634d152244ed79976ffe2a170b9130492e..293ce9534cf78c0f27b5f742ca924540072e2fea 100644 --- a/src/main/java/eu/hbp/mip/model/UserInfo.java +++ b/src/main/java/eu/hbp/mip/model/UserInfo.java @@ -52,6 +52,7 @@ public class UserInfo { user = new User(); user.setUsername("anonymous"); user.setFullname("anonymous"); + user.setEmail("anonymous@anonymous.com"); user.setPicture("images/users/default_user.png"); } else { user = new User(getUserInfos());